Here is something fun to do on a sunny day. The idea is the following: A group of people collectively designing an algorithm by playing a game.
General experimental setup
The participants in the experiment is a (more a less) fixed group of people. The group meets for a series of event of fixed duration. During each event, a game is played collectively by the group. Each event consists of two phases: A discussion phase and a game phase were the game is played. The experiment concludes after n sessions.
During the discussion phase, the group designs a protocol to use during the game phase. During the game phase, the game is played, and the group is assigned a score depending on how well they did.
Seen over time, the discussion phase is an opportunity for the group to talk about ways to improve the score achieved during the last game.
The output of the experiment is a time-series over two values, V1 and V2. V1 is a written record of the protocol that was agreed upon during the first phase, the discussion. V2 is the score that was achieved during the second phase, the game.
The game could be anything, but what I’d like to consider is a game where each participant either plays a node in a distributed database, or a client reading and writing to the database.
There are a finite set of objects in the database, named A, B, C, … and so forth. A client may execute a transaction against the database, consisting of reads and write to the objects. For example a client may issue the following transaction:
INCREMENT A BY 2 DECREMENT B BY 3 READ C + A + B
During the game, the people, whether they play clients or database nodes, may only communicate with each other by passing slips of paper. They may write whatever they want on the slips. Each participant is allowed to wear a watch. Before the game is played, the participants are allowed to “initialize” in plenum in whatever way they see fit, but the transactions may not be shared before the game is played.