Evolution of Aggression

Evolution of Aggression preview image

1 collaborator

Tags

biology 

Tagged by Francisco J. Romero-Campero about 11 years ago

evolution 

Tagged by Francisco J. Romero-Campero about 11 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.2 • Viewed 725 times • Downloaded 46 times • Run 0 times
Download the 'Evolution of Aggression' modelDownload this modelEmbed this model

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


Comments and Questions

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

Click to Run Model

;; Hawks, doves and retaliators are breeds of turtle.
breed [hawks hawk]  
breed [doves dove] 
breed [retaliators retaliator]
;; Hawks, doves and retaliators have a fitness, a reproduction time and an engaged flag 
turtles-own [fitness reproduction-time engaged ]       

;; Initialisation of the system

to setup

  ;; Remove all previous turtles
  ;; (for this model to work with NetLogo's new plotting features,
  ;; __clear-all-and-reset-ticks should be replaced with clear-all at
  ;; the beginning of your setup procedure and reset-ticks at the end
  ;; of the procedure.)
  __clear-all-and-reset-ticks

  ;; Create doves and initialise their variables
  set-default-shape doves "default"
  create-doves initial-number-doves    [
    ;; Doves are blue
    set color blue
    ;; Labels are white
    set label-color white
    ;; The fitness is set to the intial value
    set fitness initial-fitness
    ;; The reproduction time is generated according to a normal distribution
    set reproduction-time round (random-normal time-to-reproduce (time-to-reproduce / 5))
    ;; Initially each dove is not engaged in a fight
    set engaged 0
    ;; Located at random position
    setxy random-xcor random-ycor
  ]

  ;; Create hawks and initialise their variables
  set-default-shape hawks "default"
  create-hawks initial-number-hawks  
  [
    ;; Hawks are red
    set color red
    ;; Labels are white
    set label-color white
    ;; The fitness is set to the intial value
    set fitness initial-fitness
    ;; The reproduction time is generated according to a normal distribution
    set reproduction-time round (random-normal time-to-reproduce (time-to-reproduce / 5))
    ;; Initially each hawk is not engaged in a fight
    set engaged 0
    ;; Located at random position
    setxy random-xcor random-ycor
  ]
  
  ;; Create retaliators and initialise their variables
  set-default-shape retaliators "default"
  create-retaliators initial-number-retaliators 
  [
    ;; Retaliators are green
    set color green
    ;; Labels are white
    set label-color white
    ;; The fitness is set to the intial value
    set fitness initial-fitness
    ;; The reproduction time is generated according to a normal distribution
    set reproduction-time round (random-normal time-to-reproduce (time-to-reproduce / 5))
    ;; Initially each retaliator is not engaged in a fight
    set engaged 0
    ;; Located at random position
    setxy random-xcor random-ycor
  ]
  
  display-labels

  update-plot
end 

to go

  ;; simulation stops if there are no turtles  
  if not any? turtles [ stop ]

  ;; All breeds move, decrease their time to reproduction, fight,
  ;; set their engaged flag to 0, die and reproduce
  ask doves [
    move
    set reproduction-time reproduction-time - 1
    fight-as-dove
    set engaged 0
    death
    reproduce
  ]

  ask hawks [
    move
    set reproduction-time reproduction-time - 1
    fight-as-hawk
    set engaged 0
    death
    reproduce
  ]
  
  ask retaliators [
    move
    set reproduction-time reproduction-time - 1
    fight-as-retaliator
    set engaged 0
    death
    reproduce
  ]

  ;; advance the time and update the plots 
  tick
  update-plot

  display-labels
end 

;; Procedure for all breeds

to move  
  rt (30 - (random-float 60)) ;;(random-float 180)
  fd 1 ;;2
end 

to fight-as-dove 
  ;; Only not engaged dove can start a fight
  if engaged = 0
  [
    ;; Checking if there are available opponents in the patch to
    ;; start a fight 
    let opponent one-of other turtles-here with [ engaged = 0 ]  
    if opponent != nobody   
    [
      ;;If there is a free oponent both get engaged in a fight
      set engaged 1
      ask opponent [ set engaged 1 ]
      
      ifelse is-hawk? opponent
      [ 
        ;; If opponent is a hawk, doves flee and hawks get the reward 
        ask opponent [ set fitness ([fitness] of opponent + reward) ]
      ]  
      [ 
        ;; If opponent is a dove or retaliator, doves pose for some time
        ;; which produces a penalty for wasting time. The probability of 
        ;; eventually getting the reward is 0.5     
        ifelse (random 10) < 5
        [ 
          set fitness (fitness - cost-wasted-time)
          ask opponent [ set fitness ([fitness] of opponent + reward - cost-wasted-time) ]
        ]  
        [
          set fitness (fitness + reward - cost-wasted-time) 
          ask opponent [ set fitness ([fitness] of opponent - cost-wasted-time) ]        
        ]
      ]    
      
    ]
    
  ]
end 

to fight-as-hawk
  ;; Only not engaged hawks can start a fight
  if engaged = 0 
  [ 
    ;; Checking if there are available opponents in the patch to
    ;; start a fight 
    let opponent one-of other turtles-here with [ engaged = 0 ]
    if opponent != nobody   
    [
      ;;If there is a free oponent both get engaged in a fight
      set engaged 1
      ask opponent [ set engaged 1 ]
    
      ifelse is-dove? opponent
      ;; If opponent is a dove, hawks get the reward and doves flee
      [
        set fitness (fitness + reward) 
      ]    
      ;; If opponent is a hawk or a retaliator, they fight until one of them gets seriously injured 
      [ 
        ifelse (random 10) < 5
        [ 
          set fitness (fitness - cost-injure)
          ask opponent [ set fitness ([fitness] of opponent + reward) ]
        ]  
        [
          set fitness (fitness + reward)
          ask opponent [ set fitness ([fitness] of opponent - cost-injure) ]        
        ]
      ]  
      
    ]
  ]
end 

to fight-as-retaliator 
  ;; Only not engaged retaliators can start a fight
  if engaged = 0
  [
    ;; Checking if there are available opponents in the patch to
    ;; start a fight 
    let opponent one-of other turtles-here with [ engaged = 0 ]
     if opponent != nobody   
    [
      ;;If there is a free oponent both get engaged in a fight
      set engaged 1
      ask opponent [ set engaged 1 ]

      ifelse is-hawk? opponent
      ;; Retaliator behaves as a hawk against a hawk
      [          
        ifelse (random 10) < 5
        [ 
          set fitness (fitness - cost-injure)
          ask opponent [ set fitness ([fitness] of opponent + reward) ]
        ]  
        [
          set fitness (fitness + reward)
          ask opponent [ set fitness ([fitness] of opponent - cost-injure) ]        
        ]
      ]
      ;; Retaliator behaves as a dove agains another retaliator or a dove        
      [       
        ifelse (random 10) < 5
        [ 
          set fitness (fitness - cost-wasted-time)
          ask opponent [ set fitness ([fitness] of opponent + reward - cost-wasted-time) ]
        ]  
        [
          set fitness (fitness + reward - cost-wasted-time) 
          ask opponent [ set fitness ([fitness] of opponent - cost-wasted-time) ]        
        ]
      ]    
      
    ]
  ]
end 

to reproduce  ;; turtle procedure
  ;; when reproduction time equals zero breeds reproduce
  if reproduction-time = 0 [
      hatch 2 [  
        rt random-float 360 fd 2 
        set fitness initial-fitness
        set reproduction-time round (random-normal time-to-reproduce (time-to-reproduce / 5))
    ]
    die
  ]
end 

to death  ;; turtle procedure
   ;when fitness dips below zero, die
  if fitness < 0 [ die ]
end 

to update-plot
  set-current-plot "populations"
  set-current-plot-pen "doves"
  plot count doves
  set-current-plot-pen "hawks"
  plot count hawks
  set-current-plot-pen "retaliators"
  plot count retaliators
  set-current-plot "fitness"
  set-current-plot-pen "dove-fitness"
  if any? doves [
    plot mean [fitness] of doves ]
  set-current-plot-pen "hawk-fitness"
  if any? hawks [
    plot mean [fitness] of hawks ]
  set-current-plot-pen "retaliator-fitness"
  if any? retaliators [
    plot mean [fitness] of retaliators ]
  set-current-plot-pen "average-fitness"
  plot mean [fitness] of turtles 
  set-current-plot "ratio"
  set-current-plot-pen "doves"
  if any? turtles [
   plot count doves / count turtles 
  ]
  set-current-plot-pen "hawks"
  if any? turtles [
   plot count hawks / count turtles 
  ]
  set-current-plot-pen "retaliators"
  if any? turtles [
   plot count retaliators / count turtles 
  ]
end 

to display-labels
  ask turtles [ set label "" ]
  if show-fitness? [
    ask hawks [ set label fitness ]
    ask doves [ set label fitness ]
    ask retaliators [ set label fitness ]
  ]
end 


; Copyright 2011 Francisco J. Romero-Campero.
; http://www.cs.us.es/~fran/

There is only one version of this model, created about 11 years ago by Francisco J. Romero-Campero.

Attached files

File Type Description Last updated
Evolution of Aggression.png preview Preview for 'Evolution of Aggression' about 11 years ago, by Francisco J. Romero-Campero Download

This model does not have any ancestors.

This model does not have any descendants.