- Adam McMurchie
In Yuval Harai's pivotal book Sapiens the author explains how Story Telling and collective belief define the human race. In fact these uniquely human characteristics may have helped differentiate Sapiens from their historical competitors and allowed us to thrive into the technological society we have today.
As such, i've decided to build a game of sorts (a hybrid ML platform with game and commandLine interface), in this game/simulation there are residents who partake in the occasional gossip. They are just rules based bots who go about their day.
Now enter the Digital GossipMonger: AI entities optimised to keep gossip going, spread it as far and wide as possible or gain status by generating unique rumours.
In this project these bots simulate how a world will evolve overtime via a colection of rules which defines the risks and rewards of gossip creation. These rules will be set at three tiers, environmental level, social level and household level. But also users can load rules from a Dict template that emulates various sociological and psychological frameworks, so users can switch between these to compare and contrast.
Dumb rules based optimisers will play part of the relatively disengaged population who partake in occasional gossiping.
The Digital Fishwife: will be AI optimisers designed with two main optimisers in consideration:
- Propagate Gossips
- Gain Status by generating Rumors
This may seem like the same thing, but one ML Optimiser may be tasked with keeping a gossip going by spreading it to as many people as possible whereas another optimiser will be tasked with gaining as much points by abusing the system to their benefit (this might not necessarily mean spreading it far and wide).
To get the ball rolling I had to think high-level and develop a set of rules, from which I could build on.
- Environment has a time engine.
- Gossip can be created
- Gossip can be positive or negative (in terms of impact to target)
- Gossip can be about one or multiple targets. Even about no targets.
- Gossip has an associated risk.
- Gossip has a shelf life/popularity (value decreases to 0)
- Gossips will be associated to citizens who spread or create it.
- Citizens can only create or share rumours when near other people
- Citizens age and die
- Citizens (normally) want more status points
- Creating gossips gain you status points or removes some
and finally...
- Citizens get old and die ๐ข
This project endeavours to pit various ML optimisers into the simulation, the hope is to observe emergent behaviour as agents look to increase their status,
F = Zoom in/out O = MENU B = Back if in menu R = Rules if in menu
It gets a bit convoluted from here on, including scribble notes, please star the repo or follow me if you like the idea and I will have a blog or two out soon!
Thanks!
Head of Data and DevOps
Be the Automator not the Automated
| This Project |
| My Website |
| My Linkedin|
Please consider following me on Github.
- Objectives
- MVP
- Rules
- Citizen Archetypes
- OBJECTS
- Function
- Feature BackLog
- Additional Reading
- Second Brain Storming Round
- Simulate Gossip Utility in Society
- Create a world with bots and AIs who interact and talk
- Observe how gossips can be used to increase status points, life expectivity and other realtionships.
We want to observe emergence
, this means having as little interference in the rules as much as possible to see how the agents change and adapt to produce complex behaviours.
We also want to observe the opposite, by enforcing complex rules how agents develop solutions.
As such we want to be able to test rigously various parameters from both agent flexibility and creativity to explore the connections between gossip and other fundamentals as we change the parameters.
There is a data oriented Sim DFS, which is executed via terminal and a interactive game interface. Both have mostly the same functionality but are for presenting to different audiences. The game version lets you tweak the controls in real time to see how the audience reacts, such as thresholds for gossip.
Coding Paradigm:
Functions First Personality Later!
All state must be kept in main.py
- Environment has a time engine.
- Gossip can be created
- Gossip can be positive or negative (in terms of impact to target)
- Gossip can be about one or multiple targets. Even about no targets.
- Gossip has an associated risk.
- Gossip has a shelf life/popularity (value decreases to 0)
- Gossips will be associated to citizens who spread or create it.
- Citizens can only create or share gossips when near other people
- Citizens age and die
- Citizens (normally) want more status points
- Creating gossips gain you status points or removes some
Too much Gossip creation lowers the value of a gossip.
creating a gossip can gain you status-points creating a gossip can dock you status-points [function of risk]
In both versions, but primarily the game - the user can adjust parameters and rules in real time to see how the simulation adapts. These are values that are stored in a rules file.
You get four main different types of people.
- Creator of gossip
- Peristor of gossip
- Target of Gossip [take statuspoint damage/benefit for gossip value.]
- Non-participant
- Status-Points
- ID Names
- Age
time
time_interval
a sleep value
Each citizen has:
Object | Values |
---|---|
name (Pkey) | uniqueValue (use random name generator so can be in json and prevent duplicates) |
status_points | initialised as random(0,100) |
create_gossip_probability | initialised as random(0,100) |
spread_gossip_probability | initialised as random(0,100) |
age | random int 0-100 |
friends | initialised as int(0) |
position | initialised as random(0,1000) |
subjective_gossip_tracker | empty {} |
To be referenced by individuals, they wont have access to all values.
The values here are just definitions, will be different and rules driven
Object | Values |
---|---|
gossipID (key) | string( int(value) ) value increments |
creator | [citizen_list]name (Pkey) |
target | [citizen_list]name (Pkey) |
sentiment | random(-100,100) |
rumour | string |
risk | random(0,100) |
persistence | random(0,100) |
sensationalism | random(0,100) |
spread_count | int(value) value increments |
associated_citizens | initialised as random(0,1000) |
This tracker is a sub database in the citizen_list
, it can be used as a key to access the core gossip database for certain info.
gossipID (key): [id]
Action: [created, spreaded]
my_associated: [id]
Needs Updating because this project is constantly in flux with functions being created and destroyed, a full list to be provided at the end. For not this will cover the functions on the pseudo/abstract level.
If within range of other person (one for now) update cit['action'] = gossiping only move if 'action' = idle create gossip spread gossip
Check if Citizen nearby
apply chance factor + CGP probability
create gossip
add gossip to global database
add gossip to internal gossip tracker
Audience to update their gossip tracker
Audience updates 'shared' field in global tracker
in game mode a marker to stop players moving for 5 seconds
Audience awards status points
Similar as above, but using the SGP
Main.py
create_citizens.py
walk.py
A. printer.py
B. utils.py
- calls create citizens function
- increments time
- Check if near citizen (seperate function)
- If no citizens within 20: moveProb = create_gossip_probability + spread_gossip_probability
- if within 20 of citizen: chance
- move random value (-10,10)
- if pos > 1000: pos = pos - 1000
- if pos < 0: pos = 1000 - pos
- Can only create a gossip when in contact with one or more people.
- check if in vicinity of citizen(s)
- Initialise Citizens
- Intialise gossip db
- Tick Time increments
Step | Requirements |
---|---|
Initialise Citizens | create_citizen.py |
Initialise Gossip DB | create_gossip_db.py |
- Time Ticks an increment
- Each Person processes a move
- If user gossip creation Value * randint(0-50) > 100 create gossip
-
After given time increment end round
-
Tick down gossip popularity rating
-
Kill citizen if below a certain status point
-
Kill citizen if above a certain age
-
After certain time increment inject new citizens
All Things below are the full features to be considered
- Deeper Character Page with list of their rumours
- Rules will be sliders we set in the game
- Important: make sure all rules are in a dict: so i can display what rules are active at a given moment
- Allow target to be more than one
- Status Multiplier
- Include end-of-day review?
- Create Versions done
- MVP done
- Boredom factor
- Pygame done
- Friendly fire
- Guilt by association.
- Risk calculation must take into account the status of the spreader
- Combined status of your group
- Environment [office, home,library, school, shop]
- Rumour Mutates (and mutate subjective sentiment and global ) FEEDBACK EFFECT (IMPACTS SPREADERS)
- Citizen Relationships [family, friends, partner,enemy,admired]
- order of rumour
- Allow people to play multiplayer 5 to 10 people
statuspoints <-> maximum age
- subjects/ politcs, sport etc to be included.
-
Stimululus/happiness index (non-spreader)
-
Instigator function
negative gossip positive-status-points positive-risk
-
Speader function
-
Target
Is affected by a gossip
- creator boolean on/off
- Spreader boolean on/off
- Spread gossip as far and wide as possible and/or to get it to last forever [AI DAVE]
- Selfish create gossip to gain status points. [AI BOB]
- Generic optimizer - looks for trends and copies the most succesful
Environment has a time engine.
Gossip can be created
Gossip can be positive or negative (in terms of impact to targ)
Gossip has a shelf life (value decreases to 0)
Too much Gossip creation lowers the value of a gossip.
creating a gossip can gain you status-points creating a gossip can dock you status-points [function of risk]
Gossip can backfire if boring Gossip can backfire if Creating gossping about a high status point person increases risk (top 70-95%) Gossping about top 95-100% is fun, doesn't generate much status points or risk.
Retaliation
- Visualise it in a game format
- Visualise it in a datapipeline
to get it going, just create gossips with any other id != self
Stretch
Location move about can only create gossip or spread gossip or recieve gossip if x < 10 meters of another citizen
Environment locations affect gossip score
office X2 home x1 dock street -x1 Neutral Location scores:
Gossip Protocal has some shared concepts used in this simulation, such as the following:
- Reliable communication is not assumed.
- The information exchanged during these interactions is of bounded size.
But differs in many aspects, a few are:
- There is some form of randomness in the peer selection. Peers might be selected from the full set of nodes or from a smaller set of neighbors. (Not in this case, it will be determined by location and personality of the citien)
- Due to the replication there is an implicit redundancy of the delivered information. (Not in this case, humans/agents will mutate the information as it replicates)
- Reliable communication is not assumed.
- The information exchanged during these interactions is of bounded size.
- Gossip has an underlying driver (possibly status points)
- Risk calculation must take into account the status of the spreader
- Combined status of your group
- Environment [office, home,library, school, shop]
- Rumour Mutates (and mutate subjective sentiment and global ) FEEDBACK EFFECT (IMPACTS SPREADERS)
- Citizen Relationships [family, friends, partner,enemy,admired]
- order of rumour
- Allow people to play multiplayer 5 to 10 people
statuspoints <-> maximum age
- subject/ politcs
- How do we define Risk
- Chose random values
Risk <-> statuspoints
relationship - Chose parameters based upon reseach
- Use an AI genetic algorithm to train it to match a natural state. (Im gonna need some real data)
- We want to sample/try/test different optimised labels
maximumAgeg = random.noraml(0,100) * StatusPoints
Run number 1: Target Label = Age Run number 2: Target Label = StatusPoints
Run number 999: Target Label = StatusPoints
items for backlog review
Ideas provided by Others
Rules for recipients (friends, family, neighbours) Include a variable for scale of filtering received gossip ranging from one, for completely gullible, to ten, for completely sceptical. This affects whether and with what enthusiasm the gossip is passed on. Should age have an effect? Hearing the same gossip more than once, from different sources, reduces filtering. Corruption of the message occurs during the spread, say by 3% per communication, such that it reaches the first recipient at 100%, the next at 97% etc. When it falls below say, 50%, it is not passed on. Negative gossip is passed on more than positive. Recipients are graded or categorised so as to have particular interests and beliefs, though of a general nature (religious or not, etc.) such that gossip relating to their interest will have its corruption rating raised by 20%, for example, as it is more likely to be passed on and with enthusiasm.
Rules for gossip creators Negative gossip (or expressing it in a negative way) has a better rate of spread. Counter-gossip is only, say, 60% as effective as the original. Gossip about people spreads better than that about objects and events. The higher the status of a person, the better the rate of spread.
Variables required for above Corruption % +/- indicator for polarity Original/counter indicator for class Content indicator for type (person, object or event)
- Adam McMurchie
Please consider giving the repo a star :) or following me!