## 2 Materials and Methods
### System Design
#### 2.1.2 Swarm Aggregation  
Opinion aggregation in WoC systems is an open problem [18]. Previous work has shown promise in aggregating human opinions [19; 20], and the work presented here continues with the honey-bee-derived \"swarm intelligence\" aggregation mechanism published in [8]. Bees and other simple organisms are able to forage large areas, finding near optimal food sources and new nesting locations by sending a subset of bees, the scouts, to search the environment around the colony [21]. Returning scout bees will advertise the location of their find using a \"waggle dance\", with the movements indicating direction relative to the sun and the length of dance thought to be proportional to the quality of the discovery. Scouts which dance for longer periods of time generally recruit more bees to their discovery [22]. As long as a discovered food source remains high quality, the bees will continue to advertise it, allowing it to remain productive. Advertisement of the food source will naturally decline as it becomes depleted and fewer scouts advertise the location [23]. The computer-based version of the honey-bee foraging algorithm operates similarly. The swarm aggregation step is designed for all agents to support a single binary opinion, either 1 or 0. All of the agents which participated in the social interaction step must also participate in the swarming step. Initially, 20% of agents are randomly selected to be \"presenters\", similar to the \"scout\" bees in nature. The remaining agents are assigned as \"watchers\", which are assigned to the presenting agents. Initial assignment of \"watchers\" is accomplished using 'fitness proportionate selection' [24]. Each of the presenting agents has an assigned probability, \(a_{prop}\), between 0 and 1, where the sum of all probabilities of all presenting agents is 1 after normalization. The probability for each agent is calculated by Equation (9), an equally weighted combination of the presenting agent's prior_performance, \(a_{priorPerf}\), confidence, \(a_{confidence}\), and trust_score, \(a_{trust}\). \[a_{prob}=(a_{priorPerf}+a_{confidence}+a_{trust})/3 \tag{9}\]  
The 'fitness proportionate selection' algorithm uses the computed probabilities for each of the presenting agents to assign \"watchers\" to be supporters of each of the presenting agents using \(a_{prob}\), such that presenting agents with a higher \(a_{prob}\) will more frequently be assigned \"watchers\" than those with a lower \(a_{prob}\) value. \"Watchers\" can only be assigned to a single presenting agent at any given time and'support' that presenting agent simply by being assigned to it. However, each \"watcher\" can request re-assignment two times if its prediction is different from that of the presenting agent it was assigned and if its \(a_{priorPerf}\) value is higher than the presenting agent's, allowing a high performing agent the opportunity to move to an agent it thinks better represents its prediction. However, this process uses the same fitness proportionate selection algorithm, which offers no guarantee that a move will be seen as beneficial to the watching agent. The limit of two moves accomplishes three things, reducing compute time, preventing a potential infinite loop of constant movement, and introducing further diversity of opinion where agents may be assigned to support an agent they disagree with. Once assignment and agent movement is complete the presenting agent represents itself and the watchers it was assigned; e.g., if a presenting agent is assigned 10 watchers that presenting agent's opinion is now worth 11 'votes' during the final aggregation process. The \"presenters\" and \"watchers\" now represent a swarm of agents which goes through iterative steps to arrive at a collective binary prediction with an associated confidence value by repeating the process of assigning watchers to presenters and taking a vote of all presenting agents. While this process is running, the decision threshold is iteratively lowered if a higher threshold has not been met.