My department had a BBQ on Toronto Centre Island last Sunday. I am a frequent Ultimate Frisbee player, so I brought my disc to toss around. Some others did too, so we had an M tossers and N discs situation.
I had just started the last course of my Master’s the week before, Distributed Computing, and the Coordinated Attack problem was on my mind. Instead of trying to attack a target at the same time like in the CA problem, with the discs we were trying to not throw more than one at a given person.
Two or more discs were thrown to one person at the same time very often.
Checking to see who is about to throw a disc where takes about as long or longer as to actually throw it, so this information is always out of date.
If two people are ready to throw a disc, they might both hesitate and wait for the other to go first. However, some people just seem to ignore others and go ahead and throw it. This cleared the way up for more reluctant people to make a choice, as someone else had already.
This situation reminds me a lot of the counting game in improv. It also reminds me of a recent result found in traffic simulation that a mixed population of jerks and nice people will experience less traffic jams than just jerks or nice people alone. Everyone, thank a jerk! It seems that in complex situations, the people who would screw you over in a Prisoner’s Dilemma may actually be useful. Here, jerks are the people who rush decisions so that people who are more reluctant can take their time.
So, I made a python script to simulate disc tossing to see if a heterogeneous population of “jerks” and “reluctants” experienced less dropped discs than a homogeneous population of either.
The simulation takes place in turns. Each turn, people are either waiting with or without a disc in hand, in the middle of a catch or a throw. Discs that are thrown on one turn will be caught on the next. I also added a 1/10 random chance to drop a disc, to avoid the stable equilibrium of discs being thrown out of turn. If someone decides to throw a disc, they only throw it to people who have no disc and don’t have one coming to them. Collisions occur when two discs are thrown to the same person on the same turn. When a collision happens, I just start the simulation over, WLOG, as the discs would then need to be re-distributed anyway.
“Jerks” will throw the disc to anyone who is open as soon as they get it. This leads to collisions at a rate that is probably predictable (although I am way too lazy to calculate this). “Reluctants” will wait until no one else is holding a disc to throw. However, to ensure that we don’t get stuck in a situations where only reluctants have discs, they get impatient after 3 turns and will start deciding to throw or not with a 0.5 chance after that.
If I just count the number of collisions after a certain number of turns, this isn’t the best metric, as reluctants may wait several turns until throwing. So, we will also look at collisions per toss.
Results for 10,000 turns, with 2 discs and 6 people:
All jerks: 1098 Collisions, 9438 Tosses, 0.115 Collisions per Toss.
All reluctants: 149 Collisions, 3346 Tosses, 0.044 Collisions per Toss.
Half jerks, Half reluctants: 287 Collisions, 5109 Tosses, 0.056 Collisions per Toss.
3 discs, 6 people:
All jerks: 3747 Collisions, 14763 Tosses, 0.254 Collisions per Toss.
All reluctants: 537 Collisions, 4897 Tosses, 0.111 Collisions per Toss.
Half jerks, Half reluctants: 1030 Collisions, 7672 Tosses, 0.134 Collisions per Toss.
(Note: I chose 10000 as “high enough” so there was not much change in the results on multiple trials.)
Unsurprisingly, groups of jerks get a lot more tosses in than groups of reluctants, but at the cost of a pretty bad collisions per toss fraction. You can think of a collision as game stoppage or a chance for injury, and no one wants that. Mixed populations nearly double their number of total tosses, with very minor increases to the collisions per toss fraction. Sweet.
Conclusion: Thank the jerks for doing what they do.
NOTE: Set Verbose=True if you want to see the output from each turn