Alongside the main (anonymous_protesters) branch of the project, there is two other parallel branches of it. Their purpose is to test other ways of moving the protesters.
In the main branch of the project, protesters take their decision "at the same time" (they're synchronous) and individually. The collective_movement and asynchronous branches change the movement functions to remove individual decision and synchronicity.
On the collective_movement branch, every protester on a node makes the "same" choice. This is implemented by simply considering the protesters as a weight on the node and not as actual "entities" moving around on the graph. The simulations using collective_movement produce results that are very different on the main branch. This is because groups can NOT be broken and can only get larger and larger. Some rules and data analysis features are not yet implemented on this branch.
On the asynchronous branch, every protester can "see" the movement choices made by the protesters that moved before them during the current iteration of the simulation. This impact the efficiency of the "align" family of rules and makes them significantly better. At the start of every iteration of the simulation, the order in which the protester will move is randomized. Some rules and data analysis features are not yet implemented on this branch.