Leadership Emergence in Teams

No preview image

3 collaborators

Default-person Benjamin Jargow (Author)
Default-person Theresa Leidinger (Advisor)
Default-person Valeria Epelbaum (Team member)

Tags

group dynamics 

Tagged by Benjamin Jargow 4 months ago

leadership 

Tagged by Benjamin Jargow 4 months ago

teams 

Tagged by Benjamin Jargow 4 months ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.3.0 • Viewed 40 times • Downloaded 0 times • Run 0 times
Download the 'Leadership Emergence in Teams' modelDownload this modelEmbed this model

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

turtles-own [lead_expect; how fitting the individual appears to be a leader in general or for the specific task (might change with task)
             lead_schem; how much person thinks of themself as leader (partly due to lead_schem)
             fol_schem;  how much person thinks of themself as follower
             public_lead_hist
             private_lead_hist
             pen-color ; color variable: tutles own a color but don't display it;
             leader_duration;
             leader_stability

]


globals [
burn-in
succesfull_interactions
observer_action
]

links-own [LP_1 LP_2]

to setup
  clear-all
  create-turtles number_of_people
  set-default-shape turtles "person"
  layout-circle turtles 14
  set burn-in 0
  set observer_action 0
  set succesfull_interactions 0

  let color-list [45 12 62 67 18 82 90 97 105 114 124 127 138 139 19 29 blue 49 57 44 14 87 133] ; this is the list with 30 possible colors
  ask turtles [
    set lead_expect m - initial_range / 2 + random (initial_range)
    set lead_schem m - initial_range / 2 + random (initial_range)
    set fol_schem m
    set public_lead_hist 0
    set private_lead_hist 0


    ifelse not empty? color-list [
      let ind one-of range length color-list ; randomly chooses an index
      set pen-color item ind color-list ; Have the turtle choose from color-list using that index
      set color-list remove-item ind color-list   ; Remove indexed value from color-list, otherwise colors will repeat!!
    ] [
      set pen-color gray ; Assign gray if all colors used (technically, should not happen, unless number of turtles > 30)
    ]

    set size (lead_expect / (.7 * m))
    set color gray ; if this is commented out then turtles will appear in their assigned color
  ]

  reset-ticks
end 

to go
  dyadic_interaction
  update
  tick
end 

to dyadic_interaction
    ask one-of turtles [
      if print_reasoning = true [print who]

      let target one-of other turtles
      ask target [
            if print_reasoning = true [print who]
      ]

      ;establishing the link
      if not in-link-neighbor? target [ ; creates a link if there was none sofar
         create-link-with target [
            set LP_1 0
            set LP_2 0
         ]
      ]
      let dyad_lead_hist_a 0
      let dyad_lead_hist_b 0
      ifelse who < [who] of target [ ; the link stores succesfull leadership and successfull followership which are now taken out
        set dyad_lead_hist_a [LP_1] of link (who) ([who] of target)
        set dyad_lead_hist_b [LP_2] of link (who) ([who] of target)
      ] [
        set dyad_lead_hist_a [LP_2] of link (who) ([who] of target)
        set dyad_lead_hist_b [LP_1] of link (who) ([who] of target)
      ]

      ;claiming and granting
      let lead_perc_a (2 * rel_col_hist * public_lead_hist) + (2 * (1 - rel_col_hist) * dyad_lead_hist_a) + lead_expect ; what the individual thinks the other think about them
      let lead_perc_b (2 * rel_col_hist * [public_lead_hist] of target) + (2 * (1 - rel_col_hist) * dyad_lead_hist_b) + [lead_expect] of target ; what the individual thinks about the other

      let aclaim is_claiming (lead_schem + private_lead_hist) (fol_schem - private_lead_hist) lead_perc_a
      if print_reasoning = true [print word "A claimed" aclaim]
      let agrant is_granting lead_perc_b (fol_schem - private_lead_hist)

      let bclaim is_claiming ([lead_schem] of target + [private_lead_hist] of target) ([fol_schem] of target - [private_lead_hist] of target) lead_perc_b
      if print_reasoning = true [print word "B claimed" bclaim]
      let bgrant is_granting lead_perc_a ([fol_schem] of target - [private_lead_hist] of target)

      if lss = "hierarchical" [
         if (aclaim = True) [set agrant False]
         if bclaim = True [set bgrant False]
      ]

      if lss = "hierarchical + status comparison" [
         if (aclaim = True) and lead_perc_a > lead_perc_b [set agrant False]
         if bclaim = True and lead_perc_b > lead_perc_a [set bgrant False]
      ]

      if print_reasoning = true [print word "A granted" agrant]
      if print_reasoning = true [print word "B granted" bgrant]

      ;dyadic score changes
      ask link (who) ([who] of target) [
        (ifelse (aclaim = True) and (bgrant = True) [
          ifelse [who] of end2 = [who] of target [ ; a succesfull interaction stabilises their view on themselfes and the other
             set LP_1 LP_1 + .5 - .5 * abs (LP_1 / max_hist)
             ;set LP_2 LP_2 - .5 + .5 * abs (LP_2 / max_hist)
          ] [
             set LP_2 LP_2 + .5 - .5 * abs (LP_2 / max_hist)
             ;set LP_1 LP_1 - .5 + .5 * abs (LP_1 / max_hist)
         ]
          set color green
        ](agrant = True) and (bclaim = True) [
         ifelse [who] of end2 = [who] of target [
          set LP_2 LP_2 + .5 - .5 * abs (LP_2 / max_hist)
          ;set LP_1 LP_1 - .5 + .5 * abs (LP_1 / max_hist)
        ] [
          set LP_1 LP_1 + .5 - .5 * abs (LP_1 / max_hist)
          ;set LP_2 LP_2 - .5 + .5 * abs (LP_2 / max_hist)
        ]
          set color green
         ][
          set color red
         ])
    ]

    ; private and public score changes
    if (aclaim = True) and (bgrant = True) [
      set private_lead_hist private_lead_hist + .5 - .5 * abs(private_lead_hist / max_hist)
      set public_lead_hist public_lead_hist + .5 - .5 * abs(public_lead_hist / max_hist)
      ask target [
        set private_lead_hist private_lead_hist - .5 + .5 * abs(private_lead_hist / max_hist)
        set public_lead_hist public_lead_hist - .5 + .5 * abs(public_lead_hist / max_hist)
      ]
      set succesfull_interactions succesfull_interactions + 1
    ]
    if (bclaim = True) and (agrant = True) [
      set private_lead_hist private_lead_hist - .5 + .5 * abs(private_lead_hist / max_hist)
      set public_lead_hist public_lead_hist - .5 + .5 * abs (public_lead_hist / max_hist)
      ask target [
        set private_lead_hist private_lead_hist + .5 - .5 * abs(private_lead_hist / max_hist)
        set public_lead_hist public_lead_hist + .5 - .5 * abs (public_lead_hist / max_hist)
      set succesfull_interactions succesfull_interactions + 1
      ]
    ]
    if (aclaim = False) and (bgrant = False) [
      set private_lead_hist private_lead_hist - .25 + .25 * abs(private_lead_hist / max_hist)
      ;set public_lead_hist public_lead_hist - .25 + .25 * abs (public_lead_hist / max_hist)
    ]
    if (bclaim = False) and (agrant = False) [ask target [
      set private_lead_hist private_lead_hist - .25 + .25 * abs(private_lead_hist / max_hist)
      ;set public_lead_hist public_lead_hist - .25 + .25 * abs (public_lead_hist / max_hist)
    ]]
    ]
end 

to update
  let n 1
  foreach sort-on [(-(lead_expect + public_lead_hist))] turtles [
    the-turtle ->
    ask the-turtle[
      set label n
      set n n + 1
    ]
  ]
  ask turtles [
    ifelse label = 1 and burn-in > 0 [set shape "person business"] [set shape "person"]

   set public_lead_hist (1 - hist_decay) * public_lead_hist
   set private_lead_hist (1 - hist_decay) * private_lead_hist
   set size 1 + (lead_expect + public_lead_hist) / (m + max_hist)
  ]
  ask links [
    set thickness (abs LP_1) / (1.0 * max_hist)
    set LP_1 (1 - hist_decay) * LP_1
    set LP_2 (1 - hist_decay) * LP_2
  ]
  if burn-in > 0 [
      ask max-n-of 1 turtles [(lead_expect + public_lead_hist)] [
      set leader_duration leader_duration + 1
      set leader_stability leader_duration / (ticks - burn-in)
      ; percent
      ;
    ]
  ]
  if burn-in = 0 and (max [public_lead_hist] of turtles > .50 * max_hist) [
    set burn-in ticks
  ]
 set observer_action observer_action - .5
end 

to-report is_claiming [li fi lp]
  let alpha (li + lp) * .05
  let beta (fi) * .1
  let prob_claim random-beta alpha beta
  if print_reasoning = true [print word "Probability of claiming " prob_claim]
  report random-float 1 > (1 - prob_claim)
end 

to-report is_granting [lp_other fi]
  let alpha 0.05 * lp_other
  let beta  0.1 * (2 * m - fi)
  let prob_grant random-beta alpha beta
  if print_reasoning = true [print word "Probability of granting " prob_grant]
  report random-float 1 > (1 - prob_grant)
end 

to scandal
  let leader-turtle max-one-of turtles [((lead_expect + public_lead_hist) / m)]
  ask links with [end1 = leader-turtle or end2 = leader-turtle] [
    die
  ]
    ask max-n-of 1 turtles [((lead_expect + public_lead_hist) / m)]  [ ; right now targets the "leader" based on size; can change to leader_schem
    set public_lead_hist 0 - max_hist
  ]
  set observer_action 1
end 

to kill
 ask max-n-of 1 turtles [((lead_expect + public_lead_hist) / m)]  [
   die
  ]
  set observer_action 1
end 

to task-change
  ask turtles [
    let change random (m / 4) - m / 8
    print(change)
    set lead_expect lead_expect + change
    set lead_schem lead_schem + change
  ]
  set observer_action 1
end 

to-report random-beta [ #alpha #beta ]
  if #alpha <= 0 [set #alpha 0.1]
  if #beta <= 0 [set #beta 0.1]
  let XX random-gamma #alpha 1
  let YY random-gamma #beta 1
  report XX / (XX + YY + .0001)
end 

There is only one version of this model, created 4 months ago by Benjamin Jargow.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.