Assembling interdisciplinary teams
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:
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Comments and Questions
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.