Guys seriously, look at the endpoints of the function:
5 miles of coast with 1 node/mile average and five fishermen.
If all fish one pool each, each fisher travels one mile to get to a node, then fishes 5 fish from it. Each fisherman gets 5 fish per (1 walking miles plus 5 cast times), or
1 fish per (0.2 walking miles plus 1 cast time).
If all are in a single pool ninjaing zerg, each gets 1 fish in one cast time, then the group travels a full mile to the next node to repeat. Each fisherman gets
1 fish per (1 walking mile plus 1 cast time).
To put this another way, either way you're walking a mile between nodes, but in one case all members of the group walk for one fish each, while in the other each person walks a mile for five fish.
Now understand that these points -- full resource partitioning and full ninjaing -- are endpoints of a monotonic function. A partial resource partition with ninjas running around being dicks is a middle point between full ninjaing and full partitioning. It is therefore, by definition of a continuous monotonic function, intermediate in efficiency between full ninjaing and full partitioning. Therefore, however much ninjaing is going on,
a more globally efficient solution is to ninja less.
I get why this isn't obvious to ninjas, since you never see an all-ninja zerg running all up and down the coast. When one person decides to ninja from one other, you feel like you're walking less because you dismount and fish... and stop walking. But you actually are not saving walking (globally) because you're just hastening the time till your victim and you both walk again. Same amount of walk could have occurred if you had just rode on by, but you could have had 5 fish instead of 2.5. You didn't increase the amount of fish extracted, you just duplicated your victims walking and chanced a wasted cast. Good job bud.
Note also that spawns are faster in a cooperative system as well. Five people fishing five pools despawn 1 pool per five casts times five people, or one pool per unit cast time. Five people fishing one pool despawns the full pool in a single cast, for the same one pool per unit cast time. However, The partition sees five times as much coast area as the zerg, and therefore travels to an unoccupied pool a little more efficiently. This is to say nothing of wasted casts, which I will get to in a bit.
Ninjas seem to think ninjaing spawns the next pool faster. It doesn't. Best case scenario -- no travel time, no wasted casts -- you are still putting away one node per cast. If it's easier, think of the 5 partitioners as desynchronized by one cast time each. One fisher finishes a pool every unit cast time, spawning a new pool, where the ninjas leave 4 schools untouched while despawning pools at the same rate, 1/cast time. With no wasted casts and instant travel, it's at best the same efficiency as partitioning.
Now let's talk about wasted casts, which Yasueh mentioned and everyone seems to have ignored. When you ninja my pool, you have a 50% chance that there is an odd number of fish left in it. One of us is going to cast into the pool and not draw a fish out. No matter what way you cut it, that cast is 100% wasted time, which is wasted efficiency. Since you don't know the number of fish in a full pool and you certainly don't know the number of fish in a pool you're ninjaing from someone, you're inflicting a -0.25 fish penalty on your victim
and a -0.25 fish penalty on yourself. Not only is that dickish to do to a stranger, it's also stupid to do for selfish reasons.
In summary, try following the logic in a numbered list:
- The function is monotonic. This is true because an individual's fish extraction rate is (my share of global spawn rate)/(cast time+travel time), travel time is the only variable. Global spawn rate is not variable, since it is defined to be constant per number of people fishing (i.e., one spawns when one despawns). All functions in the form 1/x are monotonic for positive input domain. If you were to quantify disappearing pools wasting casts, this would also scale upwards with X, turning this into 1/x^(something higher than 1), which is still a monotonic function.
- Max partitioning is more efficient than max ninjaing, because travel times scale from 0.1 to 1 fish-walking-unit and pool disappearing scales from 0 to (#Fishers - Actual#FishInPool)/(#Fishers). Note that that wasted cast value can be quite high when several people show up and cast into a pool with one fish, courtesy of an honest partitioner.
- By the Intermediate Value Theorem (wiki), any point between these endpoints on the ninjaing axis is also between them in efficiency value.
- Therefore, any number of ninjas is less globally efficient than no ninjas.
- ???
- QED
In other words, if you can't disprove monotonicity or the direction of the slope, you are flat out completely wrong, no matter how many scrub blogs with unsubstantiated crap you can point to.