User:Rupert: Difference between revisions
(→News) |
|||
Line 2: | Line 2: | ||
__TOC__ | __TOC__ | ||
= News = | = News = | ||
The odds of finding a syringe are back up to 13%. Generators don't make any difference. I added Confidence Intervals to my data. Consider the binomial likelihood function: L = (n choose y) * p^(y) * (1-p)^(n-y), where n is the number of searches, y is the number of successes, p is the predicted search rate and L is the likelihood that the predicted search rate is correct. To compute the 50% confidence interval I throw away the first and last 25% of the area under the curve. This interval contains 50% of the likelihood. If p=10% and the 50% confidence interval is -1/+2 then there is a 50% chance the true search rate is in the interval 9% to 12%. --[[User:Rupert|Rupert]] 03:02, 12 April 2009 (BST) | The odds of finding a syringe are back up to 13%. Generators don't make any difference. I added Confidence Intervals to my data. Consider the binomial likelihood function: L = (n choose y) * p^(y) * (1-p)^(n-y), where n is the number of searches, y is the number of successes, p is the predicted search rate and L is the likelihood that the predicted search rate is correct. To compute the 50% confidence interval I throw away the first and last 25% of the area under the curve. This interval contains 50% of the likelihood. If p=10% and the 50% confidence interval is -1/+2 then there is a 50% chance the true search rate is in the interval 9% to 12%. --[[User:Rupert|Rupert]] 03:02, 12 April 2009 (BST) |
Revision as of 22:07, 12 April 2009
I am a stats junkie. I wrote my own Javascript/PHP page that scrapes search results from the HTML as I play Urban Dead.
News
The odds of finding a syringe are back up to 13%. Generators don't make any difference. I added Confidence Intervals to my data. Consider the binomial likelihood function: L = (n choose y) * p^(y) * (1-p)^(n-y), where n is the number of searches, y is the number of successes, p is the predicted search rate and L is the likelihood that the predicted search rate is correct. To compute the 50% confidence interval I throw away the first and last 25% of the area under the curve. This interval contains 50% of the likelihood. If p=10% and the 50% confidence interval is -1/+2 then there is a 50% chance the true search rate is in the interval 9% to 12%. --Rupert 03:02, 12 April 2009 (BST)
Zombie Attack Odds
The results of my zombie attack rates are this: percentages are as advertised. Debarricading averages 25% at most, most of the time it seems like 20%. It varies quite a bit per zombie. A good basher is around 30%, a poor basher is below 20%. I occasionally find myself getting the zerg flag for no reason, perhaps someone in the same suburb on the same subnet? Zerg flags are obvious: 30 bashes at less than 10% success. No other attack is susceptible to these erroneous zerg flags. If I use a proxy myself, the problem goes away. Equipment bashing is at least 50% and often 75%. Maul: 53% or so. Bite: 30%. These are fully trained zombies by the way. This is based on several thousand combined samples, but I kept each day separate and guessed at the combined average (too damn lazy). --Rupert 05:18, 15 November 2008 (UTC)
Okay, okay, fine. I combined all my samples. I was shocked at how many I had, I guess I've been playing zombies for a while!
maul=6213/12114 = 51 %
bite=312/1131 = 27 %
bash=802/3181 = 25 %
equip=86/194 = 44 %
Latest
These results were collected starting April '09 or so. --Rupert 02:48, 12 April 2009 (BST)
By Building
building_type | cond | lights | searches | item | count | percent | 50% confidence |
90% confidence |
AP |
---|---|---|---|---|---|---|---|---|---|
auto repair | okay | lit | 226 | nothing | 172 | 76.1% | -2.1/+1.7% | -5.0/+4.3% | 1.3 |
crowbar | 13 | 5.8% | -0.8/+1.3% | -2.0/+3.2% | 17.2 | ||||
spray can | 12 | 5.3% | -0.7/+1.4% | -1.9/+3.1% | 18.9 | ||||
fuel can | 11 | 4.9% | -0.7/+1.3% | -1.8/+3.0% | 20.4 | ||||
bottle of beer | 5 | 2.2% | -0.3/+1.1% | -1.0/+2.4% | 45.5 | ||||
newspaper | 5 | 2.2% | -0.3/+1.1% | -1.0/+2.4% | 45.5 | ||||
fire axe | 5 | 2.2% | -0.3/+1.1% | -1.0/+2.4% | 45.5 | ||||
toolbox | 3 | 1.3% | -0.2/+0.9% | -0.7/+2.1% | 76.9 | ||||
dark | 241 | nothing | 190 | 78.8% | -1.9/+1.6% | -4.7/+4.0% | 1.3 | ||
spray can | 14 | 5.8% | -0.7/+1.3% | -1.9/+3.1% | 17.2 | ||||
crowbar | 13 | 5.4% | -0.7/+1.3% | -1.9/+3.0% | 18.5 | ||||
fuel can | 13 | 5.4% | -0.7/+1.3% | -1.9/+3.0% | 18.5 | ||||
newspaper | 5 | 2.1% | -0.4/+1.0% | -1.0/+2.2% | 47.6 | ||||
toolbox | 3 | 1.2% | -0.2/+0.9% | -0.6/+2.0% | 83.3 | ||||
fire axe | 3 | 1.2% | -0.2/+0.9% | -0.6/+2.0% | 83.3 | ||||
factory | okay | lit | 454 | nothing | 337 | 74.2% | -1.4/+1.3% | -3.5/+3.2% | 1.3 |
length of pipe | 33 | 7.3% | -0.7/+1.0% | -1.8/+2.3% | 13.7 | ||||
fuel can | 22 | 4.8% | -0.5/+0.9% | -1.3/+2.0% | 20.8 | ||||
crowbar | 19 | 4.2% | -0.5/+0.8% | -1.3/+1.9% | 23.8 | ||||
portable generator | 16 | 3.5% | -0.4/+0.8% | -1.1/+1.8% | 28.6 | ||||
toolbox | 16 | 3.5% | -0.4/+0.8% | -1.1/+1.8% | 28.6 | ||||
fire axe | 11 | 2.4% | -0.3/+0.7% | -0.9/+1.6% | 41.7 | ||||
hospital | okay | lit | 1280 | nothing | 951 | 74.3% | -0.9/+0.8% | -2.1/+1.9% | 1.3 |
first-aid kit | 329 | 25.7% | -0.8/+0.9% | -1.9/+2.1% | 3.9 | ||||
dark | 1323 | nothing | 1059 | 80.0% | -0.7/+0.8% | -1.8/+1.8% | 1.2 | ||
first-aid kit | 264 | 20.0% | -0.8/+0.7% | -1.8/+1.8% | 5.0 | ||||
necrotech | okay | lit | 447 | nothing | 345 | 77.2% | -1.5/+1.2% | -3.5/+3.1% | 1.3 |
syringe | 62 | 13.9% | -1.0/+1.2% | -2.5/+2.9% | 7.2 | ||||
DNA extractor | 24 | 5.4% | -0.6/+0.9% | -1.5/+2.1% | 18.5 | ||||
GPS unit | 16 | 3.6% | -0.5/+0.8% | -1.2/+1.8% | 27.8 | ||||
dark | 458 | nothing | 365 | 79.7% | -1.4/+1.2% | -3.3/+2.9% | 1.3 | ||
syringe | 59 | 12.9% | -0.9/+1.2% | -2.3/+2.8% | 7.8 | ||||
GPS unit | 19 | 4.1% | -0.4/+0.8% | -1.2/+1.9% | 24.4 | ||||
DNA extractor | 15 | 3.3% | -0.4/+0.7% | -1.1/+1.7% | 30.3 |
Mall
building_type | cond | lights | bargain | searches | item | count | percent | 50% confidence |
90% confidence |
AP |
---|---|---|---|---|---|---|---|---|---|---|
mall_drug_store | okay | lit | bargain | 678 | nothing | 563 | 83.0% | -1.0/+0.9% | -2.5/+2.3% | 1.2 |
first-aid kit | 115 | 17.0% | -0.9/+1.0% | -2.3/+2.5% | 5.9 | |||||
no bargain | 724 | nothing | 660 | 91.2% | -0.8/+0.6% | -2.0/+1.5% | 1.1 | |||
first-aid kit | 64 | 8.8% | -0.6/+0.8% | -1.5/+2.0% | 11.4 |
Result Set 2
Result Set 1
Methods
I play every page of Urban Dead through a Javascript page on my home computer that I coded up using the Prototype Javascript library (awesome) that uses AJAX HttpRequests to a php proxy (super awesome). That's because Javascript can't contact urbandead.com directly due to the security sandbox, but it can contact php on the same machine and php can contact any website it wishes, so it's more of a two-level proxy, sometimes three. I can then over-analyze the HTML with Javascript till my heart's content, extracting all sorts of information, as well as auto-searching (a fire-and-forget time saver). Javascript is surprisingly good at this and fun to program.
Each search result scraped by Javascript is sent via another AJAX request to a similar php page that stores the data in a MySQL table with these columns:
+--------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+---------+-------+ | name | char(25) | NO | | | | | date | date | YES | | NULL | | | building_name | char(40) | NO | | | | | building_type | char(20) | NO | | | | | inside | tinyint(3) unsigned | NO | | | | | building_condition | char(10) | NO | | | | | building_light | tinyint(3) unsigned | NO | | | | | has_shopping | tinyint(3) unsigned | NO | | | | | has_bargain | tinyint(3) unsigned | NO | | | | | item_found | char(40) | NO | | | | | has_necro | tinyint(3) unsigned | NO | | 0 | | | has_necro_lab | tinyint(3) unsigned | NO | | 0 | | +--------------------+---------------------+------+-----+---------+-------+
When I'm done playing, I run a SQL script that copies that data into a temporary table, transforming all items named "pistol(*)" to just "pistol" because I don't care about the odds of pistol ammo right now, same for "shotgun(*)". Then I transform "NecroTech syringe" and "revivification syringe" into just "syringe", "rusty knife" and "pocket knife" and "hunting knife" into just "knife". Then I count identical rows. This condenses the table from thousands of rows (one per search) to only hundreds, at which point it looks like this:
+-------------+----+-----------+-------+----------+---------+-------+-----+----------------+-------+ | building | in | condition | light | shopping | bargain | necro | lab | item | count | +-------------+----+-----------+-------+----------+---------+-------+-----+----------------+-------+ | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | bottle of beer | 2 | | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | crowbar | 1 | | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | fire axe | 1 | | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | fuel can | 4 | | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | nothing | 34 | | auto repair | 1 | okay | 1 | 0 | 0 | 1 | 1 | spray can | 3 | | auto repair | 1 | okay | 1 | 1 | 0 | 0 | 0 | bottle of beer | 1 | | auto repair | 1 | okay | 1 | 1 | 0 | 0 | 0 | crowbar | 3 | | auto repair | 1 | okay | 1 | 1 | 0 | 0 | 0 | fire axe | 1 | | auto repair | 1 | okay | 1 | 1 | 0 | 0 | 0 | fuel can | 2 | +-------------+----+-----------+-------+----------+---------+-------+-----+----------------+-------+
Then the script builds up a second temporary table populated by three queries on the first temp table:
- all non-mall and non-necrotech rows grouped by building type, light, and item
- all malls and mall substores further grouped by has_shopping and has_bargain
- all necrotechs grouped by the same as (1) but also by has_necro and has_lab (because the odds appear to be different)
Then I order the table by building and condition to get the "By Building" table, and by item for the "By Item" table. Then I execute a php page to get the html tables to paste into this lovely wiki.