This version adds a Maslowian entropy to each agent decision based on Kendrick et. al. Rudimentary implementation assumes agents with lower scores are more likely to make decisions autonomously rather than sociotropically.
This version adds evolutionary dynamics for modeling of phenomena like Groupthink.
Each agent has a ‘phenome’ which is a string like “AAABF”.
A set of phenomes have a pre-defined utility for convenience e.g. AAABF -> 9.52, AAABS -> 8.62 etc. and a base utility for any combinations not defined e.g. ZXDXZ -> 0.0001
Each agent also has a ‘Maslowian’ value which is a list of numeric values e.g. [0.5, 0.6, 0.7]. This yields a hierarchical sum that describes how well agent needs are satisfied.
For each iteration, every agent acquires a mutation to their phenome ex. AAABF -> ABABF. Then they have 2 options:
They can keep the mutation by a probability correlating with the utility value of this new combination and reversely correlating with sum of neighboring agent utilities.
They can ‘attune’ by replacing the mutated portion from a neighboring agent by a probability inversely correlating to their Maslowian value. This is analogous to an actual cell undergoing apoptosis and getting replaced by a neighboring cell multiplying
Suppose at the end of an iteration for this agent with ‘AAA’ phenome the neighbor phenomes are like [1 -> ‘AAA’, 2 -> ‘BAA’, 3 -> ‘BBA’, 4 -> ‘BBB’]
The attunement weights get updated by the degree of difference between phenomes like 1 -> 0.25, 2 -> 0.125 etc.
How to Run
Define instance parameters in the application.conf file
Compile project into a jar and run.
Make sure to include dependency jars for Akka 2.5.23 and Scala 2.12.8
Output will be a log of phenome distribution statistics.
Requires Scala 2.12 and Akka 2.5 to run, as well as Java 1.8+
you'd like to know more information about what data we collect and why, please see