The Slow Spread of Environmentally Friendly Action
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
The model tries to show the diffusion of a enviomental friendly complex contagion (green) againt a countervailing complex contagion (grey) in a scale-free network. It is part of a master thesis written by Till Kolligs. at Stockholm Universitetet. It makes use of the differentiation between weak and strong ties. Both colours can be seen as containers for a complex contagion. Green can be seen as a complex contagion that involves enviromental action, let it be taking the train instead of the train, sperating trash, buying ecological products etc. Can the green complex contagion diffuse in the whole network to the grey nodes? The grey nodes do not act enviromental friendly in the regards of the green nodes, they might have other perceptions of what needs to be done or are convinced of the "grey way". The "grey way" is also a complex contagion that can spead to the green.
HOW IT WORKS
Two scale-free networks are being created. One scale-free network consisting of grey agents and one consisting of green agents. The parameter "group openness" then defines how much overlap between the groups exist. If set to 0.00 no links between the grey and the green clusters should exist.
Since a complex contagion needs multiple reinforcements, a colour change is triggered if the number of weak-tie network neighbours with opposing colour exceed the procentual threshold. A random factor makes the transition less deterministing, as the threshold can vary up to 5 agents. If the threshold is set to 0.5 then the weak ties of different colour must make up more than half of all existing ties to change the nodes color + 0 to 4 agents (random for every model tick).
Strong ties, however only need "threshold-strong" + random factor (up to 3) to convince a node to change its colour. Strong and weak ties are defined by communities. Communities can be colored to be more visible by pressing the button "color communities". The model has to be reset afterwards.
First, the number of agents can be set, seperately for greys and greens. Then the number of degrees can be set. This defines how many links nodes have. If set to one, most nodes only have one edge/link. Since human networks have a tendency for transitivity, it is recommended to set this setting atleast to two to be more realistic.
Weak ties are defined as ties that are links between louvain-communities, strong ties are defined as links within louvain-communities.
New links that are generated have a 33% chance to be a strong tie, and 66% to be a weak tie, as they likely reach across communities.
HOW TO USE IT
By pressing setup, the two networks according to the settings are generated. The number of communities is shown, as well as the minimum amount of links a node has and the highest amount of links a node has (min degree, max degree). The degree distribution is also shown, but it is capped to 100. If max degree is > 100 the x-axis needs to be adapted.
The clustering coefficiant is also displayed, as well as the number of weak and strong ties and mean path lenghts.
Finally, the total green agents shows how many green nodes there are. The plot shows the change over time. The model stops running if the number of green agents equals 0 or all the existing turtles.
THINGS TO NOTICE
The max degree is reduced while the model is running as links are deleted and regenerated randomly. Therefore change can be suddenly if the model is allowed to run long enough. Smaller networks tend to have more grey hubs, larger networks tend to exist only with green hubs
THINGS TO TRY
The user can try out the model by adjusting all the sliders. The activation thresholds (weak and strong) are the only sliders that can be adjusted while the model is running. It is encouraged to try them out! All others have to be adjusted before setting up the model. Prop-Hard stets a proportion of agents that are stubborn and never change their color. The proportion is true for both green and grey agents.
EXTENDING THE MODEL
The switches do the following: *Moving Turns on/off that links are randomly deleted and generated
*Strong-ties -Turns on/off that strong ties influence agents
*log-threshold Turns on/off logarithmic influence of weak ties. Change color with the chance of the log function Log Function = 1/(1+e^-(weak ties - (activation-threshold x total amount of neighboring ties)) x 1) (The smaller the activation threshold, the larger the chance for color change). This allows every agent to have a small chance of changing colour even if the threshold has not been reached
*Countervailing contagion This turns off the possibility for the grey contagion to infect green agents making them become grey
In case of a powerful computer, settings can be adjusted before the set range by using the command center. For instance: set n-greys 1000, sets the amount of grey agents to 1000
NETLOGO FEATURES
Model can be adjusted so thresholds adjust during the simulations, or the proportion of hardliners varies.
To run large scale simulations, the NetLogo Behavioral Space can be used.
CREDITS AND REFERENCES
http://modelingcommons.org/browse/one_model/5216 - a complex contagion model https://ccl.northwestern.edu/netlogo/models/PreferentialAttachment - scale free networks
Laver, Michael. 2020. Agent-Based Models of Social Life: Fundamentals. 1st ed. Cambridge University Press.
Laver, Michael. 2020. Agent-Based Models of Polarization and Ethnocentrism. 1st ed. Cambridge University Press.
Comments and Questions
; Using the network extention of Netlogo we will create two preferential-attachment networks and three different kinds of agents ;Green agents, grey agents, and hardliners that never change their opinion ;*************** ; SETUP ;*************** extensions [nw] ; start up the network extension breed [AgentAs AgentA] ; the A breed are grey breed [AgentBs AgentB] ; the B breed are green breed [hardliners hardliner] links-own [weight] turtles-own [community clique] to setup clear-all nw:generate-preferential-attachment AgentAs links n-greys k-degree [set color grey] ; set up a Agent group A (grey) in a preferential attachment network nw:generate-preferential-attachment AgentBs links n-greens k-degree [set color green] ; set up a Agent group B (green) in a preferential attachment network ask AgentBs [ if random-float 1 < group-openness [create-links-with AgentAs]] ; ask both networks to interconnect based on the chance of 1 < group-openness ask AgentAs [ if random-float 1 < group-openness [create-links-with AgentBs]] ; ask both networks to interconnect based on the chance of 1 < group-openness ask turtles [ set size 1 set shape "person" setxy random-xcor random-ycor ; move agents randomly around ] ask patches [set pcolor white] ; change to black for a black background ask n-of int(prop-hard * n-greys) AgentAs [set breed hardliners ] ; make "AgentAs" grey hardliners ask n-of int(prop-hard * n-greens) AgentBs [set breed hardliners ] ; make "AgentBs" green hardliners ask hardliners [set shape "person"] foreach nw:louvain-communities [ [comm] -> ;tell every turtle in what community they are ask comm [ set community comm ] foreach nw:maximal-cliques [ [cliq] -> ;tell every turtle in what community they are ask cliq [ set clique cliq ] ] ] nw:set-context turtles links weight-clusters nw:louvain-communities ;assign weights to links reset-ticks end ;to find-biggest-cliques ;nw:set-context turtles links ;highlight-clusters nw:maximal-cliques ;end to color-communities nw:set-context turtles links color-clusters nw:louvain-communities end ;*************** ; DYNAMICS ;*************** to go if (all? turtles [color = green]) [stop] if (all? turtles [color = grey]) [stop] if moving [ move ] ask turtles [interact] tick end to move ;asks a random link to die with a 1% change. And creates a random(!) link from a random agent to any other agent with a 33% chance of it becoming a strong tie ask one-of links [ if random-float 100 < 1 [die]] ask one-of turtles [ if random-float 100 < 1 [create-link-with one-of other turtles [set weight random 3]]] end to weight-clusters [ clusters ] ;gives links between clusters weight = 1 (weak tie) and links within clusters weight = 2 (strong tie). Clusters are defined by louvain-communities ask links [ set weight 1 ] let n length clusters let colors ifelse-value (n <= 12) [ n-of n remove gray remove white base-colors ] [ n-values n [ approximate-hsb (random 255) (255) (100 + random 100) ] ] (foreach clusters colors [ [cluster cluster-color] -> ask cluster [ ask my-links [ if member? other-end cluster [ set weight 2 ] ] ] ]) if hub-weak [ let max-neighbors (Max [count link-neighbors] of turtles) let hub turtles with [count link-neighbors > max-neighbors - 10] if any? hub [ ask hub [ ask my-links [ set weight 1 ] ] ] ] end to color-clusters [ clusters ] ;reset all colors ask turtles [ set color gray - 3 ] ask links [ set color gray - 3 ] let n length clusters let colors ifelse-value (n <= 12) [ n-of n remove gray remove white base-colors ] ;; choose base colors other than white and gray [ n-values n [ approximate-hsb (random 255) (255) (100 + random 100) ] ] ; too many colors - pick random ones ; loop through the clusters and colors zipped together (foreach clusters colors [ [cluster cluster-color] -> ask cluster [ ; for each node in the cluster ; give the node the color of its cluster set color cluster-color ; making links slightly darker ask my-links [ if member? other-end cluster [ set color cluster-color - 1 ] ] ] ]) end to interact ;aks two times, once to turn grey, once to turn green ask one-of turtles [ let count-total 0 let count-weak 0 let count-strong 0 set count-total count link-neighbors let strong (my-links) with [weight = 2] if any? strong [ set count-strong count link-neighbors with [color != [color] of myself]] let weak (my-links) with [weight < 2] if any? weak [ set count-weak count link-neighbors with [color != [color] of myself]] ifelse log-threshold [ let activation-probability 1 / (1 + exp(-(count-weak - (activation-threshold * count-total)) * 5)) if random-float 1 < activation-probability [ if breed != hardliners [set color green]] ] [ if count-weak >= (count-total * activation-threshold) + (random (6)) [ ;if the agent is connected to weak ties with a different color they have to exceed the number of total links*tippingp and a random factor if breed != hardliners [set color green]] ] if strong-ties [ if count-strong >= threshold-strong + random 4 [ ;if the agent is connected to strong ties with a different color, 1 + random 4 (0-3) will result in a color change. 2 strong ties can be enough if breed != hardliners [set color green]] ;if not a hardliner change color ] ] if countervailing-contagion [ ask one-of turtles [ let count-total 0 let count-weak 0 let count-strong 0 set count-total count link-neighbors let te (my-links) with [weight = 2] if any? te [ set count-strong count link-neighbors with [color != [color] of myself]] let weak (my-links) with [weight < 2] if any? weak [ set count-weak count link-neighbors with [color != [color] of myself]] ifelse log-threshold [ let activation-probability 1 / (1 + exp(-(count-weak - (activation-threshold * count-total)) * 5)) if random-float 1 < activation-probability [ if breed != hardliners [set color grey]] ] [ if count-weak >= (count-total * activation-threshold) + (random (6)) [ ;if the agent is connected to weak ties with a different color they have to exceed the number of total links*tippingp and a random factor if breed != hardliners [set color grey]] ] if strong-ties [ if count-strong >= threshold-strong + random 4 [ ;if the agent is connected to strong ties with a different color, 1 + random 4 (0-3) will result in a color change. 2 strong ties can be enough if breed != hardliners [set color grey]] ;if not a hardliner change color ] ] ] end to report2 ask one-of turtles [ let te (link-neighbors with [color != [color] of myself]) show sum te ] end
There are 2 versions of this model.
This model does not have any ancestors.
This model does not have any descendants.