Assembling interdisciplinary teams

Assembling interdisciplinary teams preview image

1 collaborator

Tags

collaborations 

Tagged by Evgeny Patarakin over 3 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.0.2 • Viewed 560 times • Downloaded 23 times • Run 0 times
Download the 'Assembling interdisciplinary 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.)


WHAT IS IT?

HOW IT WORKS

HOW TO USE IT

Visualization Controls

Parameters

Plots

THINGS TO NOTICE

CREDITS AND REFERENCES

This model is based on: R Guimera, B Uzzi, J Spiro, L Amaral; Team Assembly Mechanisms Determine Collaboration Network Structure and Team Performance. Science 2005, V308, N5722, p697-702 https://amaral.northwestern.edu/media/publication_pdfs/Guimera-2005-Science-308-697.pdf

And on Wilensky's implementation: Bakshy, E. and Wilensky, U. (2007). NetLogo Team Assembly model. http://ccl.northwestern.edu/netlogo/models/TeamAssembly. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

HOW TO CITE

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

Comments and Questions

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

Click to Run Model

extensions [vid nw]
globals
[
  newcomer_b  ;; an agent who has never collaborated
  newcomer_c
  component-size        ;; current running size of component being explored
  giant-component-size  ;; size of largest connected component
  components            ;; list of connected components
]
breed[basicos basico]
breed[clinicos clinico]

turtles-own
[
  incumbent?   ;; true if an agent has collaborated before
  in-team?     ;; true if an agent belongs to the new team being constructed
  downtime     ;; the number of time steps passed since the agent last collaborated
  explored?    ;; used to compute connected components in the graph
  homofilia    ;;
]

links-own
[
  new-collaboration?  ;; true if the link represents the first time two agents collaborated
]

;;;;;;;;;;;;;;;;;;;;;;;;
;;; Setup Procedures ;;;
;;;;;;;;;;;;;;;;;;;;;;;;

to make-newcomer
  make-newcomer_b
  make-newcomer_c
end 

to make-newcomer_b
  create-basicos 1
  [
    set color 19
    set size 1.8
    set incumbent? false
    set in-team? false
    set newcomer_b self
    set downtime 0
    set explored? false
    set homofilia hom + random 10
  ]
end 

to make-newcomer_c
  create-clinicos 1
    [
    set color cyan + 2
    set size 1.8
    set incumbent? false
    set in-team? false
    set newcomer_c self
    set downtime 0
    set explored? false
    set homofilia hom + random 10
  ]
end 

to setup
  clear-all
  set-default-shape turtles "circle"

  ;; assemble the first team
  repeat (random-poisson team-size  ) [ make-newcomer ]
  ask basicos
  [
    set in-team? true
    set incumbent? true
  ]
  tie-collaborators
  color-collaborations

  ask clinicos
  [
    set in-team? true
    set incumbent? true
  ]
  tie-collaborators
  color-collaborations

  ask turtles  ;; arrange turtles in a regular polygon
  [
    set heading (360 / team-size) * who
    fd 1.75
    set in-team? false
  ]
  find-all-components
  reset-ticks
  vid:start-recorder
  ;vid:save-recording "out.mp4"
end 


;;;;;;;;;;;;;;;;;;;;;;;
;;; Main Procedures ;;;
;;;;;;;;;;;;;;;;;;;;;;;

to go
  ;; all existing turtles are now considered incumbents
  ask basicos [set incumbent? true set color red set size 0.9]
  ask clinicos [set incumbent? true set color blue set size 0.9]
  ask links [set new-collaboration? false]

  ;; assemble a new team
  pick-team-members
  tie-collaborators
  color-collaborations

  ;; age turtles
  ask turtles
  [
    ;; agents drop out of the collaboration network when they become inactive for max-downtime steps
    if downtime > max-downtime
      [die]

    set in-team? false
    set downtime downtime + 1
  ]

  if layout? [ layout ]
  find-all-components
  video
  nw:set-context turtles links
  ;nw:save-graphml "equiposINGER.graphml"
  tick
end 


;; choose turtles to be in a new team

to pick-team-members
  let new-team-member_b nobody
  let new-team-member_c nobody
  repeat (random-poisson team-size)
    [ifelse random-float 50.0 > hom
      [ifelse random-float 100.0 >= p  ;;with a probability P, make a newcomer
    [make-newcomer set new-team-member_b newcomer_c]
    [
      ;; with a probability Q, choose a new team member who was a previous collaborator of an existing team member
      ;; if the current team has at least one previous collaborator.
      ;; otherwise collaborate with a previous incumbent
      ifelse random-float 100.0 < q and any? (clinicos with [in-team? and (any? link-neighbors with [not in-team?])])
        [set new-team-member_b one-of clinicos with [not in-team? and (any? link-neighbors with [in-team?])]]
        [set new-team-member_b one-of clinicos with [not in-team?]]
      ]
  ][ifelse random-float 100.0 >= p  ;;with a probability P, make a newcomer
    [make-newcomer set new-team-member_b newcomer_b]
    [;; with a probability Q, choose a new team member who was a previous collaborator of an existing team member
      ;; if the current team has at least one previous collaborator.
      ;; otherwise collaborate with a previous incumbent
      ifelse random-float 100.0 < q and any? (basicos with [in-team? and (any? link-neighbors with [not in-team?])])
        [set new-team-member_b one-of basicos with [not in-team? and (any? link-neighbors with [in-team?])]]
        [set new-team-member_b one-of basicos with [not in-team?]]
      ]
      ]

      if new-team-member_b != nobody
      [ask new-team-member_b [
      set in-team? true
      set downtime 0
      set size 1.8
      set color ifelse-value incumbent? [red + 1] [19 - 2]
      ]]

    ifelse random-float 50.0 > hom [ifelse random-float 100.0 >= r  ;;with a probability P, make a newcomer
    [
      make-newcomer
      set new-team-member_c newcomer_b
        ]
    [
      ;; with a probability Q, choose a new team member who was a previous collaborator of an existing team member
      ;; if the current team has at least one previous collaborator.
      ;; otherwise collaborate with a previous incumbent
      ifelse random-float 100.0 < s and any? (basicos with [in-team? and (any? link-neighbors with [not in-team?])])
        [set new-team-member_c one-of basicos with [not in-team? and (any? link-neighbors with [in-team?])]]
        [set new-team-member_c one-of basicos with [not in-team?]]
      ]][ifelse random-float 100.0 >= r
    [ make-newcomer
      set new-team-member_c newcomer_c]
    [
      ;; with a probability s, choose a new team member who was a previous collaborator of an existing team member
      ;; if the current team has at least one previous collaborator.
      ;; otherwise collaborate with a previous incumbent
     ifelse random-float 100.0 < s and any? (clinicos with [in-team? and (any? link-neighbors with [not in-team?])])
        [set new-team-member_c one-of clinicos with [not in-team? and (any? link-neighbors with [in-team?])]]
        [set new-team-member_c one-of clinicos with [not in-team?]]
]]
    if new-team-member_c != nobody
    [  ask new-team-member_c
    [
      set in-team? true
      set downtime 0
      set size 1.8
      set color ifelse-value incumbent? [blue + 1] [cyan ]
      ]]
]
end 


;; forms a link between all unconnected turtles with in-team? = true

to tie-collaborators
  ifelse random-float 50.0 > hom
  [ask basicos with [in-team?]
  [
    create-links-with other turtles with [in-team?]
    [
      set new-collaboration? true  ;; specifies newly-formed collaboration between two members
      set thickness 0.3
    ]
  ]][ask basicos with [in-team?]
  [
    create-links-with other basicos with [in-team?]
    [
      set new-collaboration? true  ;; specifies newly-formed collaboration between two members
      set thickness 0.3
    ]
  ]]
  ifelse random-float 50.0 > hom
  [ask clinicos with [in-team?]
  [
    create-links-with other turtles with [in-team?]
    [
      set new-collaboration? true  ;; specifies newly-formed collaboration between two members
      set thickness 0.3
    ]
  ]][ask clinicos with [in-team?]
  [
    create-links-with other clinicos with [in-team?]
    [
      set new-collaboration? true  ;; specifies newly-formed collaboration between two members
      set thickness 0.3
    ]
  ]]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Visualization Procedures ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; color links according to past experience

to color-collaborations
    ask links with [[in-team?] of end1 and [in-team?] of end2]
    [
       ifelse new-collaboration?
      [
        ifelse ([incumbent?] of end1) and ([incumbent?] of end2)
        [
          set color yellow       ;; both members are incumbents
        ]
        [
          ifelse ([incumbent?] of end1) or ([incumbent?] of end2)
            [ set color turquoise ]  ;; one member is an incumbent
            [ set color blue ]   ;; both members are newcomers
        ]
      ]
      [
        set color red            ;; members are previous collaborators
      ]

  ]
end 

;; perform spring layout on all turtles and links

to layout
  repeat 12 [
    layout-spring turtles links 0.18 0.01 1.2
    display
  ]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Network Exploration ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; to find all the connected components in the network, their sizes and starting turtles

to find-all-components
  set components []
  set giant-component-size 0

  ask turtles [ set explored? false ]
  ;; keep exploring till all turtles get explored
  loop
  [
    ;; pick a turtle that has not yet been explored
    let start one-of turtles with [ not explored? ]
    if start = nobody [ stop ]
    ;; reset the number of turtles found to 0
    ;; this variable is updated each time we explore an
    ;; unexplored turtle.
    set component-size 0
    ask start [ explore ]
    ;; 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
    ]
    set components lput component-size components
  ]
end 

;; finds all turtles reachable from this turtle

to explore ;; turtle procedure
  if explored? [ stop ]
  set explored? true
  set component-size component-size + 1
  ask link-neighbors [ explore ]
end 

to video
;vid:start-recorder
repeat 12[vid:record-view]
;vid:save-recording "out.mp4"
end 

There is only one version of this model, created over 6 years ago by Augusto Cabrera-Becerril.

Attached files

File Type Description Last updated
Assembling interdisciplinary teams.png preview Preview for 'Assembling interdisciplinary teams' over 6 years ago, by Augusto Cabrera-Becerril Download

This model does not have any ancestors.

This model does not have any descendants.