Axelrod_Cultural_Dissemination
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This is Axelrod’s model of cultural dissemination. See Reference at the end. It is an agent-model designed to investigate the dissemination of culture among interacting agents on a society.
Axelrod model consists in a population of agents, each one occupying a single node of a square network of size L. The culture of an agent is described by a vector of F integer variables called 'features'. Each feature can assume q different values between 0 and q-1. In the original Axelrod model the interaction topology is regular bounded (non-toroidal). Each agent can interact only with its four neighbors (von Neumann neighborhood).
Dynamics are based on two main mechanisms: (1) agents tend to chose culturally similar neighbors as interaction partners (homophily) and (2) during interaction agents influence each other in a way that they become more similar.
The interplay of these mechanisms either leads to cultural homogeneity (all agents are perfectly similar) or the development of culturally distinct regions (multicultural society). The model allows studying to which degree the likelihood of these two outcomes depends on the size of the population, the number of features the agents hold, the number of traits (values) each feature can adopt and the neighborhood size (interaction range).
HOW IT WORKS
Each agent is located at each patch of the grid with the default shape. Agents hold a number of features F. Each feature is a nominal variable that can adopt a certain number of values (called traits) from 0 to q - 1. Initially, agents adopt randomly chosen traits. At each time step (tick) agents update its cultural value in an asyncronous-random updating. That is that the computer makes a list where all agents are included in a random order and the list is followed until all agents are choosen. Each agent them become a focal agent and then, one of the focal agent’s neighbors is selected at random. Neighbor agents are those who are in distance less than the value of the parameter 'radius'. If radius = 1, then it is von Neumann neighborhood. The cultural overlap between these two agents is computed. The cultural overlap is equal to the percentage of similar features. With probability similar to the overlap, the two agents interact. Otherwise, the program continues with the next agent until the list is exhausted and it follows the next time step (next tick). An interaction consists of selecting at random one of the features on which the two agents differ and changing the focal agent’s feature to the interaction partner’s trait. Note that if the overlap is zero, interaction is not possible and the respective agents refuse to influence each other.
HOW TO USE IT
First, you should choose the population size selecting the size of the grid society on 'world-size'. Also you should choose value for F (number of features), q (how many traits each feature can adopt) and radius (size of the neighborhood). Here, 1 means that each agent has 4 neighbors, 2 corresponds to 12 neighbors, and so on if the agent is exactly at the center of the patch.
Each agent adopts a color which represents its culture. If two agents adopt the same color, they have the same culture.
Click on Go and the simulation starts. You can follow the changes of the agents culture according to his color. Furthermore, there is a graph reporting the number of different cultures on the society, the number of possible and real interactions, and the number of active agents. A possible interaction is that which agents share more than zero and left than all its features. A real interaction is when focal agent actually change the value of one of its features. An active agent is one which has at least one neighbor where the interaction is possible.
Simulation stops when the number of active agents reaches zero. That means that each agent shares all or none of its traits value with each of its neighbors.
At the end it is calculated and reported the number of cultural regions in the population and the number of agents in the biggest one (also normalized). A region is a set of agents that are similar on all features. You can choose to save these values with 'saving? on'.
We included an extensions of Axelrod’s model: agents can move. Then, you should also decide if the agents can move or not. In original Axelrod model the agents do not move. If moving, select the velocity of agent movement with 'veloc', select the length of the step with 'steplength' and the angle of rotating with 'angle'. At each tick agents decide to move taking 'veloc' as a probability. In case of actual movement, agents select at random a value between 0 an 'angle'. If this values is in the upper half, then it is added as an angle to the current direction of the agent. If it is in the lower half it is subtracted. Then, ones direction is selected, agent moves a distance 'steplength'.
THINGS TO NOTICE
Here we have setted toroidal boundaries, but the simulation can properly function as well in the original non-toroidal one. In our case, the four von Neumann neighbors are at distance 'radius' one. The model permits to change the value of 'radius' to explore the implications of other neighborhood sizes. It is also implemented the possiblity for agents to move.
At the end, in the absorving final state, when calculating for the number of regions, the model makes different visible networks which include all neighbors agents with the same culture. Then, when counting the number of cultural domains it is considered that two domains are different if they are not connected, even if agents in both domains share same culture.
Note also that two agents could have similar (but with zero overlap) cultural values and then, its corresponding colors could be so similar that it could induce to think that the cultural values are the same. Just check to see that it is not.
THINGS TO TRY
Vary the population size, the number of features, the number of traits, the range of interactions and also the movement of the agents. The program stops when the first absorving state is found (the number of active agents reaches zero), even if the agents are moving. Try toroidal and not toroidal borders activating ‘World wraps horizontally’ and ‘World wraps vertically’ in the Settings menu.
EXTENDING THE MODEL
Many extensions of this model have been proposed (see e.g. references below). One of the most interesting is certainly the inclusion of 'social influence' instead of dyadic interaction. It has been shown that this makes the persistence of different cultural region very strong.
RELATED MODELS
There are a lot of related models. You can follow the References here after or in the literature.
CREDITS AND REFERENCES
This model has been developed by Robert Axelrod. It was implemented by Arezky H. Rodríguez (arezky@gmail.com).
This is the paper where Axelrod presented the model:
Axelrod, R. 1997. “The dissemination of culture - A model with local convergence and global polarization.” Journal of Conflict Resolution 41:203-226.
Extensions can be found at:
Flache, A., and M. Macy. 2008. “Local Convergence and Global Diversity: From Interpersonal to Social Influence”, Journal of Conflict Resolution December 2011 vol. 55 no. 6 970-995
Flache, A., and M. Macy. 2006. “What sustains cultural diversity and what undermines it? Axelrod and beyond.” arXiv:physics/0604201v1 [physics.soc-ph].
Flache, A., and M. Macy. 2007. “Local Convergence and Global Diversity: The Robustness of Cultural Homophily.” arXiv:physics/0701333v1 [physics.soc-ph].
Klemm, K., V. M. Eguiluz, R. Toral, and M. S. Miguel. 2003. “Global culture: A noise-induced transition in finite systems.” Phys. Rev. E 67, 045101.
Klemm, K., V. M. Eguiluz, R. Toral, and M. San Miguel. 2003. “Nonequilibrium transitions in complex networks: A model of social interaction.” Phys. Rev. E 67, 026120.
2013 by Arezky H. Rodríguez (arezky@gmail.com).
Comments and Questions
;; Axelrod's Model for Cultural Evolution is an agent-based model described by ;; Robert Axelrod in his paper: ;; Axelrod, R. 1997. “The dissemination of culture - A model with local convergence and global polarization.” ;; Journal of Conflict Resolution 41:203-226. ;; ;; 'Axelrod_Cultural_Dissemination.nlogo' implements this model with one extension: agents can move. ;; ;; 2013 Arezky H. Rodríguez (arezky@gmail.com) ;; ;; -------------------------------------------------- ;; ;;;;;;;;;;;;;;;;; ;;; VARIABLES ;;; ;;;;;;;;;;;;;;;;; globals [ number_of_agents ;; number of all agents in the society Cult_max ;; number related with the maximun cultural value of an agent (q-1 q-1 q-1 ... q-1) number_of_cultures ;; number of cultures in the society number_of_possible_interactions ;; number of possible interactions at each tick that could be according to cultural overlap between agents number_of_real_interactions ;; number of real interactions at each tick that occurs according to cultural overlap between agents time ;; time component-size ;; number of turtles explored so far in the current component giant-component-size ;; number of turtles in the giant component number_of_cultural_regions ;; number of cultural regions simply connected number_of_active_agents ;; number of agents which have at leat one neighbor (other agent in-radius 'radius' with ;; overlap between 0 and 1 (not including the extremes of the intervale) ] turtles-own [ culture ;; culture of an agent explored? ;; if the agent is already explored (or not) when determining number of cultural regions ] patches-own [ ] ;; -------------------------------------------------- ;; ;;;;;;;;;;;;;;;;;;;;;;;; ;;; SETUP PROCEDURES ;;; ;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; General setup settings ;; to setup clear-all clear-all-plots resize-world 0 (world-size - 1) 0 (world-size - 1) ;; defining the size of the society (number of patches set number_of_agents (world-size * world-size) ;; one agent per patch set-patch-size 360 / world-size ;; setting patch size for good looking ask patches [set pcolor 34] ;; setting color of patches set giant-component-size 0 ;; initializing the number of agent in the bigger cultural domain set number_of_cultural_regions 0 ;; initializing the number of the cultural domains setup-turtles ;; creating the agents, locating them and setting their cultural values randomly reset-ticks set time 0 end ;; ;; Turtles settings ;; to setup-turtles set-default-shape turtles "default" create-turtles number_of_agents [ set size 0.8 while [any? other turtles-here] [ move-to one-of patches ] ;; setting agent location. Only one agent at each patch ] setup-culture-max ;; asigning a value to the culture with maximum traits value setup-agent-culture ;; setting agents culture count-cultures ;; counting the amount of different cultures at time = 0 do-plots ;; plotting for visualization end ;; ;; setting agents culture ;; to setup-agent-culture ask turtles [ set culture [] repeat f [ set culture lput random q culture ;; setting a random trait to each feature of the agent culture ] setup-agent-culture-color ;; setting a color for an agent according to its culture ] end ;; ;; asigning a value to the culture with maximum traits values ;; it is done mapping the traits value to a number in base q ;; to setup-culture-max let i 1 let suma 0 repeat F [ set suma suma + q ^ (F - i) set i i + 1 ] set Cult_max ((q - 1) * suma) end ;; -------------------------------------------------- ;; ;;;;;;;;;;;;;;;;;;;;;; ;;; MAIN PROCEDURE ;;; ;;;;;;;;;;;;;;;;;;;;;; to go clear-links let repeating? true while [repeating?] [ set number_of_possible_interactions 0 ;; setting initial values set number_of_real_interactions 0 set number_of_active_agents 0 ask turtles [ ;; asking agents to move and interact localy if random-float 1.0 < veloc [ random-move ] ;; moving (in case veloc > 0) cultural-interaction ;; all agents interact in asyncronous-random updating ] if number_of_active_agents = 0 [set repeating? false] ;; stopping when there are no active agents set time time + 1 ;; it happens when each agent has full or null overlap with ;; each of its neighbors. ;; neighbors are all agents in radius 'radius' count-cultures ;; counting the amount of different cultures do-plots ;; and plotting for visualization tick ] count-turtles-on-bigger-region ;; when running stops, count number of agents in the bigger domain ;; and the amount of domains if saving? [ ;; to save if saving? true let file_out_name (word "F" F "L" world-size "r" radius ".dat") ;; it is saved a file with values of file-open file_out_name ;; q, number of agents in the bigger cultural domain (normalized), number of cultural domains (normalized) file-print (word q " " (giant-component-size / number_of_agents) " " (number_of_cultural_regions / number_of_agents)) file-close ] stop end ;; ;; calculating number cultures on the whole society ;; to count-cultures let list_of_cultures [] ask turtles [ ; setting agent culture in base q let i 1 let suma 0 repeat F [ set suma suma + item (i - 1) culture * q ^ (F - i) ;10 ^ (F - i) set i i + 1 ] set list_of_cultures fput suma list_of_cultures ;; including each culture (its corresponding number) in a list ] set list_of_cultures remove-duplicates list_of_cultures ;; removing repeted cultures set number_of_cultures length list_of_cultures ;; the amount of different cultures is the length of the list end ;; ;; counting the number of agent in the biggest culture ;; to count-turtles-on-bigger-region ; first it is linked all agents of the same culture (each agent looks for a neighbour which is in its neighborhood (agent inside in radius) ask turtles [ creates-links-with-same-cultural-neighbours-in-neighborhood-of-radio-radius ] find-all-components ;; exploring each connected network finding and counting agents of the same culture end ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Network Exploration ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; to find all the connected components in the network, their sizes and starting turtles ;; to find-all-components ask turtles [ set explored? false] ;; keep exploring till all turtles get explored loop [ ;; pick a node taht has not yet been explored let starting_turtle one-of turtles with [ not explored? ] if starting_turtle = nobody [ stop ] ;; reset the number of turtles found to 0. This variable is updated each time we explore an unexplored node set component-size 0 ;; find all turtles reachable from this node ask starting_turtle [ explore ;; after each explore procedure finishes it is explored one cultural region, so increment the counter ( number_of_cultural_regions ) set number_of_cultural_regions number_of_cultural_regions + 1 ] ;; the explore procedure updates the component-size variable, so check, have we found a new giant component? if component-size > giant-component-size [ set giant-component-size component-size ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; TURTLES' PROCEDURES ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Finds all turtle reachable from this node (it is a recursive procedure) ;; to explore ;; turtle procedure if explored? [ stop ] set explored? true set component-size component-size + 1 ask link-neighbors [ explore ] end ;; ;; agents look for a neighbor to interact ;; to cultural-interaction ;counting any turtle for interacting at distance less than radius and with overlap between 0 and F (not includying) let number_of_possible_neighbors count other turtles in-radius radius with [(0 < overlap_between self myself ) and (overlap_between self myself < F)] ;if there are neighbors for interacting, setting agent neighbor. if number_of_possible_neighbors > 0 [ set number_of_active_agents number_of_active_agents + 1 let neighbor_turtle one-of other turtles in-radius radius ;interacting the cultures let target_turtle self culturally_interacting target_turtle neighbor_turtle ] end ;; ;; an agent creates a link with all it neighbors with the same culture ;; to creates-links-with-same-cultural-neighbours-in-neighborhood-of-radio-radius let neighborhood other turtles in-radius radius ask neighborhood [ if overlap_between self myself = F [ create-link-with myself ] ;; overlap_between is a reporter ] end ;; ;; setting interaction between target agent and neighbor selected ;; to culturally_interacting [target_turtle neighbor_turtle] let overlap overlap_between target_turtle neighbor_turtle if (0 < overlap and overlap < F ) [ set number_of_possible_interactions number_of_possible_interactions + 1 ;; if interaction is possible increment the counter let prob_interaction (overlap / F) ;; setting the probability of interaction if random-float 1.0 < prob_interaction [ set number_of_real_interactions number_of_real_interactions + 1 ;choosing a feature position randomly where the two cultures are different let trait random F ;; generates a number between 0 and (F - 1) let trait_selected? false while [not trait_selected?] [ ifelse (item trait [culture] of target_turtle = item trait [culture] of neighbor_turtle) [ set trait ((trait + 1) mod F) ;; looking for other feature ] [ set trait_selected? true ;; found a feature with different cultural traits ] ] let new_cultural_value (item trait [culture] of neighbor_turtle) set culture replace-item trait culture new_cultural_value ;; replacing/copying the neighbor trait setup-agent-culture-color ;; updating the agent color according to its new culture ] ] end ;; ;; random move according to 'steplength' and 'angle' for rotating ;; to random-move let var (random angle + 1) ;; selecting and angle to rotate set heading (heading + var - ((angle + 1) / 2)) ;; mapping for left and right ifelse can-move? steplength ;; in case of no periodic boundary conditions, if agent at the border [ ;; rotate with any angle for new direction forward steplength ] [ set heading random 360 forward steplength ] end ;; ;; setting the color according to the culture ;; to setup-agent-culture-color ;setting agent culture in base q let i 1 let suma 0 repeat F [ set suma suma + item (i - 1) culture * q ^ (F - i) set i i + 1 ] let Cult_base_q suma ;setting the corresponding color to the turtle according to the culture_base_q value. a range of blue is selected set color (9.9 * Cult_base_q / Cult_max) + 100 end ;;;;;;;;;;;;;; ;;; GRAPHS ;;; ;;;;;;;;;;;;;; to do-plots ;setting the plot of Cultures set-current-plot "Graph" set-current-plot-pen "Cultures" plotxy time (number_of_cultures / q ^ F) set-current-plot-pen "Possible interactions" plotxy time (number_of_possible_interactions / number_of_agents) set-current-plot-pen "Real interactions" plotxy time (number_of_real_interactions / number_of_agents) set-current-plot-pen "Active agents" plotxy time (number_of_active_agents / number_of_agents) end ;;;;;;;;;;;;;;;;;;;;;;;;; ;;; REPORT PROCEDURES ;;; ;;;;;;;;;;;;;;;;;;;;;;;;; ;; reporting overlap between two agents to-report overlap_between [target_turtle neighbor_turtle] let suma 0 (foreach [culture] of target_turtle [culture] of neighbor_turtle [ if ?1 = ?2 [ set suma suma + 1] ] ) report suma end ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; PATCHES' PROCEDURES ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; there are no patches procedures
There is only one version of this model, created over 12 years ago by Arezky Hernández-Rodríguez.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Axelrod_Cultural_Dissemination.png | preview | Preview for 'Axelrod_Cultural_Dissemination' | over 12 years ago, by Arezky Hernández-Rodríguez | Download |
This model does not have any ancestors.
This model does not have any descendants.