Simple Shibboleth

Simple Shibboleth preview image

1 collaborator

Tags

cultural evolution 

Tagged by Jonathan R Goodman about 5 years ago

language 

Tagged by Jonathan R Goodman about 5 years ago

social evolution 

Tagged by Jonathan R Goodman about 5 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.1.1 • Viewed 395 times • Downloaded 21 times • Run 0 times
Download the 'Simple Shibboleth' 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 a basic modelling interation of the Biblical story of Shibboleth. The Book of Judges states that:

"And the Gileadites took the passages of Jordan before the Ephraimites: and it was so, that when those Ephraimites which were escaped said, Let me go over; that the men of Gilead said unto him, Art thou an Ephraimite? If he said, Nay; Then said they unto him, Say now Shibboleth: and he said Sibboleth: for he could not frame to pronounce it right. Then they took him, and slew him at the passages of Jordan: and there fell at that time of the Ephraimites forty and two thousand." (12:5–6 KJV)

Here we model the evolutionary consequences, described in terms of fitness, for each of two populations, which are designed to represent the Gileadites and Ephraimites, respectively, described in the Biblical story. This is done by creating a digital landscape in which one population of agents, mimics, attempt to cross a river to a safe space populated by non-mimics. The mimics are questioned by another agent, which functions as a guardian at the river, who "asks" the mimics to prove that they are not mimics by use of a theoretical signal, which is akin to the word "Shibboleth" described in Judges. Mimics who pass the test are allowed in, while those who do not, and who are caught out as mimics by the guardian, must pay a cost.

Our goal is to show how evolutionary changes at the population level — quantified in this model in terms of a "fitness score" — occur depending on the variable settings designed in the model.

HOW IT WORKS

The model is designed to show how different changes, in terms of population fitness, can occur depending on how strict the relationship between the guardian agents and mimic agents is. In its most extreme form — akin to that of the Biblical story of Shibboleth — the guardian will strictly kill any agent that does not pass the mimicry test, which also has a variable level of difficulty. Or, at the other extreme, there may be no consequence to being caught (or there may be a very low chance of being caught at all.)

The key is, once it is understood what the sliders represent and their implications for agent behavior, to think about the consequences for both classes of agents (ie, the mimics and non-mimics), as well as the agent-population as a whole, of each of the variables of interest.

One important idea, however, is that where mimicry has little to no impact on fitness, there will be no competition to be good at it, and so it won't matter if everyone has a high score, and nearly everyone can pass the test. Yet where mimicry has significant fitness implications, there will be wider variation in the population in who is good at it. Think about this in reference to the Biblical story: if the guardian chooses a simple word, rather than Shibboleth, which everyone can pronounce easily, regardless of background, then pronunciation of the word will not have significant fitness implications. Yet asking someone to pronounce a difficult word (as Shibboleth, in the context of the story, is meant to be) will both produce wide variation in results on the part of mimics, and will have profound implications for the speaker's fitness: if they answer incorrectly, they are killed.

HOW TO USE IT

"Setup" creates 50 mimic turtles, colored green, 50 non-mimic turtles, colored blue, and 1 guardian turtle, colored red. The 50 mimics spawn in the yellow patch region randomly, and are programmed to try to get to the brown territory via the central patches flanked by river (blue) patches. When mimics come in range of the guardian on the brown patch, he runs a detection test on them, which if they pass they can proceed to the green “survivor” territory.

On spawning, non-mimic turtles are assigned a random fitness score of 1-100 (in integers), and the mean fitness of all turtles on green patches is displayed in the “average survivor fitness” graph at the bottom left of the interface screen.

Mimics, on the other hand, are assigned a random fitness score that ranges 1-100, but is affected by the “mimicry-modifier” (1-100) slider on the interface. Total fitness can’t go higher than 100, but the mimicry-modifier determines another attribute, mimicry. The slider affects how high mimicry scores can be, as well as the relative weight mimicry has on fitness. In effect, this means that the lower the mimicry-modifier setting, the higher the likelihood that all mimics will have a very high mimicry score, but mimicry will also have a commensurately lower impact on mimic fitness. For example, where mimicry-modifier = 1, all mimics will have a mimicry score of 100, but fitness will vary 1-100 in an entirely independent manner to mimicry. If, however, the mimicry-modifier is set to 100, mimics will have a random mimicry score of any integer between 1 and 100, and mimicry will equal fitness.

The remaining two sliders, cost and detection-risk, are relevant for the guardian interactions with the mimics. Detection-risk affects the likelihood the guardian will detect a mimic, and is calculated by the quality of the mimic vs the total possible mimicry score. This is again affected by the mimicry-modifier, and mimics are “detected” when:

    ((mimicry / mimicry-modifier) * 100) < detection-risk

The cost is simply the fitness cost a mimic pays if he is caught. This varies from 0-100, and if a mimic's fitness drops below 1, he dies. Where the two sides of the equation are equal, there is a 50-50 chance the mimic will be caught.

The "count turtles" monitor keeps track of how many turtles overall survive during the process, which ends automatically when no mimic agents are left in the yellow patch–area. The two graphical monitors, average mimic fitness, and average survivor fitness, track the average fitness of the total number of surviving mimics, and the total average fitness of all turtles excluding the guardian, respectively.

The show-fitness switch toggles between displaying mimic mimicry scores and displaying mimic fitness scores.

THINGS TO NOTICE

Try to make a note of, and to predict, how the sliders affect the resulting fitness scores, both in the mimic and the overall population. Can you think of realistic settings where similar tests are made?

THINGS TO TRY

Try to predict how the different sliders settings will affect fitness when the model finishes running. Are the results consistent? What settings have more or less variable fitness results, and can you explain those results?

CREDITS AND REFERENCES

Designed by Jonathan R Goodman and Robert A Foley, Leverhulme Centre for Human Evolutionary Studies, University of Cambridge

Comments and Questions

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

Click to Run Model

turtles-own [fitness mimicry]

breed [bluebeards bluebeard]
breed [greenbeards greenbeard]
breed [guardians guardian]

to setup
  clear-all
  setup-patches
  setup-turtles
  reset-ticks
end 

to setup-patches
  ask patches with [
    pycor >= -16 and
    pycor <= -1 and
    pxcor >= -16 and
    pxcor <= 16  ]
    [ set pcolor 44 ]
  ask patches with [
    pycor <= 16 and
    pycor >= 2 and
    pxcor >= -16 and
    pxcor <= 16 ]
    [ set pcolor 33 ]
  ask patches with [
    pycor >= 0 and
    pycor <= 1 ]
  [ set pcolor blue ]
  ask patches at-points [[0 0] [0 1] [-1 0] [-1 1] [1 0] [1 1]]
  [set pcolor brown ]
end 

to setup-turtles
  set-default-shape turtles "person"
  create-bluebeards 50 [
    move-to one-of patches with [ pcolor = 44 ]
  set color 104
  set mimicry random (mimicry-modifier) + 1
  set fitness (random (100 - mimicry-modifier)) + mimicry
  ]
  create-greenbeards 50 [
    move-to one-of patches with [ pcolor = 33 ]
  set color green
  set fitness random 100 + 1
  ]
  create-guardians 1 [
    move-to patch 0 0
    set color red
  ]
end 

to go
  if count bluebeards-on patches with [ pcolor = 44 ] = 0 and
  count bluebeards-on patches with [ pcolor = brown ] = 0 and
  count bluebeards-on patches with [ pcolor = blue ] = 0
  [ stop ]
 move-bluebeards
 move-greenbeards
 detect-mimics
tick
end 

to move-bluebeards
  ask bluebeards [
    seek-safety
    avoid-water
    check-death
    blend-in
    forward 1
    ifelse show-fitness?
    [ set label fitness ]
    [ set label round ((mimicry / mimicry-modifier) * 100) ]
  ]
end 

to move-greenbeards
  ask greenbeards [
  facexy random-xcor random-ycor
  forward 1
  facexy random-xcor 16
  forward 1.1
    ]
end 

to avoid-water
  if [pcolor] of patch-here = blue or [pcolor] of patch-here = 44 [
  let target-patch patch-right-and-ahead 0 1
  if target-patch != nobody and [pcolor] of target-patch = blue [
    move-to patch 0 -7
  ]
]
end 

to seek-safety
  if [pcolor] of patch-here = 44 [
    let safety-patch patch 10 10
    if safety-patch != nobody and [pcolor] of safety-patch = 33 [
      facexy random-pxcor 16
    ]
    ]
end 

to check-death
  if fitness <= 0 [ die ]
end 

to blend-in
  if [pcolor] of patch-here = 33 [
facexy random-xcor random-ycor
  forward 1
  facexy random-xcor 12
  forward 1.1
    ]
end 

to detect-mimics
  ask guardians [
     if count turtles-at 1 0 != nobody [
      ask bluebeards-at 1 0 [
      if ((mimicry / mimicry-modifier) * 100) < detection-risk [
        set fitness fitness - cost ]
      if ((mimicry / mimicry-modifier) * 100) = detection-risk [
       if random 2 = 0 [
            set fitness fitness - cost ]
        ]
  ]
    ]
     if count turtles-at 0 0 != nobody [
      ask bluebeards-at 0 0  [
      if ((mimicry / mimicry-modifier) * 100) < detection-risk [
        set fitness fitness - cost ]
      if ((mimicry / mimicry-modifier) * 100) = detection-risk [
       if random 2 = 0 [
            set fitness fitness - cost ]
        ]
  ]
    ]
     if count turtles-at -1 0 != nobody [
      ask bluebeards-at -1 0  [
      if ((mimicry / mimicry-modifier) * 100) < detection-risk [
        set fitness fitness - cost ]
      if ((mimicry / mimicry-modifier) * 100) = detection-risk [
       if random 2 = 0 [
            set fitness fitness - cost ]
        ]
  ]
    ]
  ]
end 

There is only one version of this model, created about 5 years ago by Jonathan R Goodman.

Attached files

File Type Description Last updated
Simple Shibboleth.png preview Preview for 'Simple Shibboleth' about 5 years ago, by Jonathan R Goodman Download

This model does not have any ancestors.

This model does not have any descendants.