# Word-of-mouth

Model was written in NetLogo 5.2.1
•
Viewed 688 times
•
Downloaded 53 times
•
Run 0 times

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)

Info tab cannot be displayed because of an encoding error

## Comments and Questions

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

Click to Run Model

globals[ A_no_list ;; number of type-A agents in each iteration B_no_list ;; number of type-B agents in each iteration nb ;; type of neighborhood latane_denominator ;; depends on type of nb (4, 12, 24) result ;; "pending" or "stable"; if "stable" model stops ] turtles-own[ class ;; agent's type i.e. A or B value ;; 1 or -1 depending on the class action ;; describes action of the agent ("stay", "change" or "move") movement-counter ;; counts how many times agent tried to move this turn patch-2 ;; the patch agent occupied 2 iterations earlier patch-1 ;; the patch agent occupied 1 iteration earlier class-2 ;; agent's type 2 iterations earlier class-1 ;; agent's type 1 iteration earlier ] to setup clear-all set-neighbourhood set A_no_list [] set B_no_list [] ask patches[ if random-float 1 < density [ let val 1 if random-float 1 > type_A [set val -1] sprout 1 [ set-class val set shape "square" set movement-counter 0 ] ] ] set result "pending" reset-ticks end to go if ticks = 1 [ ask turtles [ set patch-1 patch-here set class-1 class ] ] if ticks > 1 [ ask turtles [ set patch-2 patch-1 set patch-1 patch-here set class-2 class-1 set class-1 class ] ] if rule = "MR" [ ask turtles [ MR-rule ] ] if rule = "UR" [ ask turtles [ UR-rule ] ] if rule = "ULR" [ ask turtles [ ULR-rule ] ] ask turtles [ make-action ] count-population tick if ticks > 1 [ check-stop-conditions ] if ((result != "pending") or (ticks >= 1000)) [ stop ] end to set-class [ class-value ] ifelse class-value = 1 [ set class "A" set value 1 set color green ] [ set class "B" set value -1 set color red ] end to set-neighbourhood if range = 1 [ set nb [ [-1 0] [0 -1] [0 1] [1 0] ] ] if range = 2 [ set nb [ [-2 0] [-1 -1] [-1 0] [-1 1] [0 -2] [0 -1] [0 1] [0 2] [1 -1] [1 0] [1 1] [2 0] ] ] if range = 3 [ set nb [ [-3 0] [-2 -1] [-2 0] [-2 1] [-1 -2] [-1 -1] [-1 0] [-1 1] [-1 2] [0 -3] [0 -2] [0 -1] [0 1] [0 2] [0 3] [1 -2] [1 -1] [1 0] [1 1] [1 2] [2 -1] [2 0] [2 1] [3 0] ] ] end to set-direction set heading ((random 4) * 90) end to move fd 1 if any? other turtles-here [ move ] ;; if patch is occupied - repeat end to moving-procedure let p patch-here ifelse movement-counter = 0 [ set-direction ] [ set heading heading + 90 ] move ifelse ((p = patch-here) and (movement-counter < 4)) [ ;; if agent ends in the same patch - repeat whole procedure and increase counter set movement-counter movement-counter + 1 moving-procedure ] [ set movement-counter 0 ] end to MR-rule set action "stay" ;; default state let nn turtles at-points nb ;; take all turtles in neighbourhood let influence sum [value] of nn ;; sum their values ifelse influence = 0 ;; infl==0 means that no. of A and B are the same [ set action "move" ] [ if influence * value < 0 [ set action "change" ] ] ;; infl*value is < 0 when most neighbours are opposite type end to UR-rule set action "stay" ;; default state let nn turtles at-points nb ;; take all turtles in neighbourhood let influence sum [value] of nn ;; sum their values ifelse count nn = abs influence ;; no. of neighbors==abs(infl) means that all nn are the same [ ifelse influence = 0 ;; in that case influence = 0 means that there are no neighbours [ set action "move" ] ;; and agent just moves [ if influence * value < 0 [ set action "change" ] ;; if influence <> 0 then check if neighbours' type is different ] ;; infl*value is < 0 when neighbours are opposite type - change ] ;; if not, nothing changes (default state, i.e. "stay") [ set action "move" ] ;; move if not all neighbours are the same end to ULR-rule set action "stay" ;; default state let nn turtles at-points nb ;; take all turtles in neighbourhood let influence sum [value] of nn ;; sum their values ifelse count nn = abs influence ;; no. of neighbors==abs(infl) means that all nn are the same [ ifelse influence = 0 ;; in that case influence = 0 means that there are no neighbours [ set action "move" ] ;; and agent moves [ if influence * value < 0 ;; if influence <> 0 then check if neighbours' type is different [ set latane_denominator 4 ;; if range = 2 [ set latane_denominator 12 ] ;; denominator depends on type of neighbourhood if range = 3 [ set latane_denominator 24 ] ;; if random-float 1 < sqrt((count nn) / latane_denominator) [ set action "change" ] ;; change only when ] ;; random r < sqrt(k/lat_denom) ] ] [ set action "move" ] end to make-action if action = "move" [ if random-float 1 < movement_prob [ moving-procedure ] ] if action = "change" [ set-class (-1 * value) ] end to count-population set A_no_list lput (count turtles with [class = "A"]) A_no_list set B_no_list lput (count turtles with [class = "B"]) B_no_list end to check-stop-conditions ifelse (abs (count turtles with [class = "A"] - count turtles with [class = "B"]) = count turtles) [ set result "stable" ] ;; all turtles are the same [ ;; let change 0 ask turtles [ if ((patch-here != patch-2) or (class != class-2)) [ set change 1 ] ] if change = 0 [ set result "stable" ] ;; oscilating or not changing ] end ;; not used but now can be useful if greater ranges are considered in the future to set-latane let i 0 repeat range [ set i (i + 1) set latane_denominator latane_denominator + (i * 4) ] end

There is only one version of this model, created almost 3 years ago by Katarzyna Sznajd-Weron.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

Word-of-mouth.png | preview | Preview for 'Word-of-mouth' | almost 3 years ago, by Katarzyna Sznajd-Weron | Download |

This model does not have any ancestors.

This model does not have any descendants.