Axelrod_Cultural_Dissemination

Axelrod_Cultural_Dissemination preview image

1 collaborator

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 795 times • Downloaded 63 times • Run 0 times
Download the 'Axelrod_Cultural_Dissemination' modelDownload this modelEmbed this model

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

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;; 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.