;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; DECLARATIONS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;extensions [sound] ;;only included for fun. Turned off for now breed [ people ] globals [ time ;Counters and statistics for person-to-person conversations (internal influence) contacts ;; number of contacts made with other individuals old-contacts ;; previous total contacts-per-time ;; how many contacts made this time period conversation-starts ;; total number of conversations old-conversation-starts ;; previous total starts-per-time ;; how many conversations made this time period - number ended conversation-ends ;; total number ended old-conversation-ends ;; previous total ends-per-time ;; how many conversations made this time period - number ended active-conversations ;; total number of conversations currently active friend-total ;; keep track of conversations - strangers, acquaintences, buddies ;External influence counters and statistics externals ;; total number of external mass media contacts ] ;Attributes for patches (other than Netlogo-defined attributes patches-own [ intensity ;; used to create "fitness"-like component for external influence original-color ;; used in conjunction with external influence ] ;People have attributes people-own [ kind ;; 1 - 5 are "innovator","early-tech1","early-majority","late-majority","laggard" (Rogers). Added 0 & 6 extremes. acceptance ;; arbitrary units change-agent? ;; change agent can meet with multiple people - (NOT YET MODELED) initiator? ;; keep track of who initiates the conversation partner ;; The person that is our current partner in a conversation media? ;; Keep track of whether listening to mass media presentation start-time ;; when current conversation starts end-time ;; when current conversation will end num-conversations ;; cumulative number of conversations total-interact-time ;; cumulative time spent in conversation num-externals ;; cumulative number of interactions with external media total-external-time ;; cumulative time spent with external media memory ;; list of partners ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; SETUP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup ;; (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 setup-globals ;initialize to 0 setup-env ;patches setup-people ;individuals setup-plot ;output parameters end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup-globals random-seed seed set time 0 ;internal influence globals set contacts 0 set old-contacts 0 set contacts-per-time 0.0 set conversation-starts 0 set old-conversation-starts 0 set starts-per-time 0 set conversation-ends 0 set old-conversation-ends 0 set ends-per-time 0 set active-conversations 0 set friend-total 0 ;external influence globals set externals 0 end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup-env ;all patches set to default initially - intensity not used on black patches in current version of model ask patches [ set pcolor black set intensity (random 100) set original-color black ] ;Mass media center for first new technology if turned on by switch - Set up as a square of color violet if External-Tech1? [ let x int(x-adopt / 100 * max-pxcor) let y int(y-adopt / 100 * max-pycor) let s int(s-adopt / 100 * (max-pxcor + 1)) ask patches [ if (pxcor > x - s) and (pxcor < x + s) and (pycor > y - s) and (pycor < y + s) [ set pcolor violet set original-color violet ] ] ] ;Mass media center for second new technology (if switch turned on) to challenge first technological innovation - magenta square if External-Tech2? [ let x int(x-disrupt / 100 * max-pxcor) let y int(y-disrupt / 100 * max-pycor) let s int(s-disrupt / 100 * (max-pxcor + 1)) ask patches [ if (pxcor > x - s) and (pxcor < x + s) and (pycor > y - s) and (pycor < y + s) [ set pcolor magenta set original-color magenta ] ] ] ; Patch intensity is randomly assigned to each patch. To make more realistic, ; use the diffuse function to spread the value of each intensity to its nearest ; neighbors; the value 1 is the max. diffusion coefficient. Repeat this ; diffusion step "Smoothness" times (set by user) to create a smooth topology. ; This applies to all patches. ; ; Rescale is like converting between degrees Centigrade and Fahrenheit - scale ; range from min to max => 0 to 100. Then recolor the patches. Only do this for ; non-black patches. Thus, the intensity topology exists over the entire grid ; but it is only observed and used in the external patch areas. if Smoothness > 0 [ repeat Smoothness [ diffuse intensity 1 ] ;smoothness function rescale recolor ] end to rescale ;adapted from fitness model in Netlogo Community Models let highest max [ intensity ] of patches let lowest min [ intensity ] of patches ask patches [ set intensity (((intensity - lowest) * 100) / (highest - lowest)) ] let nhighest max [ intensity ] of patches let nlowest min [ intensity ] of patches print (word "intensity range from " lowest " to " highest " shifted to " nlowest " to " nhighest) end to recolor ask patches [ ifelse original-color = violet [ set pcolor scale-color violet intensity 0 100 ] [ ifelse original-color = magenta [ set pcolor scale-color magenta intensity 0 100 ] [ set pcolor original-color ] ;ignore for black patches ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to setup-people create-people total-population [ setxy random-pxcor random-pycor ; centers on patch set end-time 0 set total-interact-time 0 set num-conversations 0 set total-external-time 0 set num-externals 0 set partner nobody set shape "person" set change-agent? FALSE set initiator? FALSE set media? FALSE set memory [] ;determine kind of individual - from technology fanatic to hopeless. Change agents not used yet in Version 10 of model let kind-prob (random 100) ifelse (kind-prob < cumulative-prob-tech2) [ set-tech2 if random 100 < tech2-agent [ set-change-agent ] ] ;have to have latest technology [ ifelse (kind-prob < cumulative-prob-tech1) [ set-tech1 if random 100 < tech1-agent [ set-change-agent ] ] ;innovator [ ifelse (kind-prob < cumulative-prob-early-adopter) [ set-early-adopter ] ;accept easily [ ifelse (kind-prob < cumulative-prob-early-majority) [ set-early-majority ] ;accept fairly easily [ ifelse (kind-prob < cumulative-prob-late-majority) [ set-late-majority ] ;reluctant [ifelse (kind-prob < cumulative-prob-laggard) [ set-laggard ] ;very reluctant [ set-hopeless ] ; ignore setting for cumulative-prob-hopeless & just place remainder here ] ] ] ] ] ] end to set-tech2 set kind 0 set acceptance tech2 set color red end to set-tech1 set kind 1 set acceptance tech1 set color orange end to set-early-adopter set kind 2 set acceptance earlyadopter set color yellow end to set-early-majority set kind 3 set acceptance earlymajority set color lime end to set-late-majority set kind 4 set acceptance latemajority set color cyan end to set-laggard set kind 5 set acceptance laggard set color blue end to set-hopeless set kind 6 set acceptance hopeless set color violet end to set-change-agent set change-agent? TRUE set shape "face happy" end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; OUTPUT PROCEDURES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; PLOTTING PROCEDURES ;;; to setup-plot ;Histogram - don't set limits - let model autoset set-current-plot "Adoption Type" set-histogram-num-bars 7 update-plot-type end to update-plot-pop ;update time series let total count people let t2 count people with [kind = 0] let t1 count people with [kind = 1] let potentials ( total - t2 - t1 ) set-current-plot "Populations" set-current-plot-pen "Total" plot total set-current-plot-pen "Potentials" plot potentials set-current-plot-pen "Adopters" plot (t1 + t2) set-current-plot-pen "Tech2" plot count people with [kind = 0] set-current-plot-pen "Tech1" plot count people with [kind = 1] set-current-plot-pen "EarlyAdopter" plot count people with [kind = 2] set-current-plot-pen "EarlyMajority" plot count people with [kind = 3] set-current-plot-pen "LateMajority" plot count people with [kind = 4] set-current-plot-pen "Laggard" plot count people with [kind = 5] set-current-plot-pen "Hopeless" plot count people with [kind = 6] end to update-plot-stat ;contacts, conversations and meetings set-current-plot "Acquaintance Level" set-current-plot-pen "Acquaintance Level" ifelse (conversation-starts > 0) [ plot friend-total / conversation-starts ] [ plot 0 ] end to update-plot-meet ;update meetings histogram set-current-plot "Conversations per Person" set-current-plot-pen "Internal" histogram [num-conversations] of people ;Don't care about externals yet ;set-current-plot-pen "External" ;histogram [num-externals] of people end to update-plot-type ;update tech1 type histogram set-current-plot "Adoption Type" set-current-plot-pen "kind" histogram [kind] of people end ;;; ;;; MONITOR PROCEDURES ;;; to update-monitors ;reset counters for each year set contacts-per-time (contacts - old-contacts) set starts-per-time (conversation-starts - old-conversation-starts) set ends-per-time (conversation-ends - old-conversation-ends) set active-conversations (conversation-starts - conversation-ends) set old-contacts contacts set old-conversation-starts conversation-starts set old-conversation-ends conversation-ends end ;;; ;;; Movie ;;; to make-movie ;where to store movie user-message "Save movie file with a .mov extension" let path user-new-file if not is-string? path [ stop ] ;;terminate if user cancels ;run model setup movie-start path movie-grab-view repeat movie-frames [ go movie-grab-view ] ;export movie-close user-message (word "Movie exported to" path) ;for fun ;sound:play-drum "ACOUSTIC SNARE" 64 ;sound:play-note "TRUMPET" 60 64 1 ;note 60 is middle C with 0 - 127 as range, velocity is volume from 0 - 127, duration in seconds end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; RULES OF INTERACTION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to check-external-adoption ;adoption check (Tech1) ifelse ( media? = FALSE ) [ ;Keep track of total number of externals made set externals (externals + 1) set media? TRUE set partner self set start-time time set end-time round( random-exponential listening-time ) + time print (word time ": external influenced adoption initiated for " who " to last until " end-time) ][ ifelse time >= end-time [ set media? FALSE set partner nobody let prob-to-adopt (([intensity] of patch-here / 100) * prob-to-adopt-tech1-external) if random-float 100 < (1.0 / acceptance) * prob-to-adopt [ set-tech1 ] move-away set num-externals (num-externals + 1) set total-external-time (end-time - start-time + total-external-time) print (word time ": " who " of type " kind " has finished adoption mass media session with probability of adopting " prob-to-adopt ) ][ print (word time ": " who " is listening to mass media presentation for tech1-type innovation") ] ] end to check-external-disruption ;disruption check (Tech2) ifelse ( media? = FALSE ) [ ;Keep track of total number of externals made set externals (externals + 1) set media? TRUE set partner self set start-time time set end-time round( random-exponential listening-time ) + time print (word time ": external influenced disruption initiated for " who " to last until " end-time) ][ ifelse time >= end-time [ set media? FALSE set partner nobody let prob-to-adopt (([intensity] of patch-here / 100) * prob-to-adopt-tech1-external) if random-float 100 < (1.0 / acceptance) * prob-to-adopt [ set-tech2 ] move-away set num-externals (num-externals + 1) set total-external-time (end-time - start-time + total-external-time) print (word time ": " who " of type " kind " has finished disruption mass media session with probability of adopting " prob-to-adopt ) ][ print (word time ": " who " is listening to mass media presentation for tech2-type disruptive innovation") ] ] end to move rt random-float 360 fd movement setxy pxcor pycor ;centers on patch end to move-away rt random-float 180 jump int(s-adopt / 100 * max-pxcor) ;move away from media center setxy pxcor pycor ;centers on patch end to initiate ;partner with someone on own patch who it not already partnered ifelse (any? other people-here with [partner = nobody]) [ ;Keep track of total number of contacts made set contacts (contacts + 1) ;may not actually strike up a conversation with this partner. The contact rate is adjusted ;with the "movement" parameter and the "prob-conversation" parameter. Note also that the ;user controls the length of each conversation which will also impacts contact rate. ifelse (random-float 100) < prob-conversation [ converse ][ print (word time ": no conversation initiated by " who) ] ][ print (word time ": no possible parters for " who) ] end to converse let friend 0 let me self ;Choose one of the eligible people to partner with - may want to consider other partnering strategies ;here - such as all on one's patch for a facilitator / hub or one of patch + neighborhood. Change agents, etc. set partner one-of other turtles-here with [partner = nobody] ;Set partner's attribute to me. ask partner [ set partner me ] ;Put in memory and partner's memory if not already there ifelse (member? partner memory = true) [ set friend friend + 1 ] [ set memory lput partner memory ] ifelse (member? self [memory] of partner = true) [ set friend friend + 1 ] [ ask partner [ set memory ( lput self [memory] of partner ) ]] ;This person is the initiator, automating rendering the partner to a subordinate role set initiator? TRUE ask partner [ set initiator? FALSE ] ;keep track of time conversation started set start-time time ask partner [ set start-time time ] ;set time to end conversation. For future changes, might consider multiple person interactions ;with some partners leaving early and not adopting technology let conversation-end round((random-float conversation-length) + time ) set end-time conversation-end ask partner [ set end-time conversation-end ] ;Set patch of conversation - since xcor and ycor are real numbers, patches may not exactly ;coincide with position of partners ifelse (friend = 2) [ ask patch-here [ set pcolor sky ]] [ ifelse (friend = 1) [ ask patch-here [ set pcolor blue ]] [ ask patch-here [ set pcolor pink ]] ] ;keep track of conversations started in simulation and the level of acquaintance set conversation-starts (conversation-starts + 1) set friend-total (friend-total + friend) print (word time ": conversation between ID " who " of type " kind " with memory list " memory " and ID " [who] of partner " of type " [kind] of partner " with memory list " [memory] of partner " at level " friend " until " end-time " at [" xcor "," ycor "]") end to interact ifelse (time <= end-time) [ ifelse (time > start-time) [ print (word time ": ongoing conversation between " who " and " [who] of partner) ][ print (word time ": match already established between " who " and " [who] of partner) ] ][ ;Decide whether to adopt as conversation comes to a close ifelse kind > 1 and [kind] of partner = 1 [ if tech1-switch [ if random-float 100 < (1.0 / acceptance) * tech1-coefficient-acceptance [ set-tech1 ] ] ][ ifelse kind > 1 and [kind] of partner = 0 [ if tech2-switch [ if random-float 100 < (1.0 / acceptance) * tech2-coefficient-acceptance [ set-tech2 ] ] ] [ print (word time ": No changes for ID " who " of type " kind " as partner " [who] of partner " with type " [kind] of partner) ] ] ;stat collection set num-conversations (num-conversations + 1) set total-interact-time (end-time - start-time + total-interact-time) ifelse initiator? [ set conversation-ends (conversation-ends + 1) ask patch-here [ set pcolor original-color ] print (word time ": initiator " who " ends conversation with " [who] of partner) ][ print (word time ": recipient " who " ended conversation with initiator " [who] of partner) ] set partner nobody rt random-float 360 jump 5 * movement ] end to rethink-adoption ifelse random-float 100 < prob-tech1-to-potential [ set-early-adopter print (word time ": " who " reneged tech1 to early adopter") ][ if tech2-switch and random-float 100 < prob-tech1-to-tech2 [ set-tech2 print (word time ": " who " changed from tech1 to tech2 innovation") ] ] end to rethink-disruption ifelse random-float 100 < prob-tech2-to-potential [ set-early-adopter print (word time ": " who " reneged on tech2 back to early adopter ") ][ if tech1-switch and random-float 100 < prob-tech2-to-tech1 [ set-tech1 print (word time ": " who " changed back from tech2 to tech1 innovation") ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; RUNTIME ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to go set time time + 1 ;People who are not currently in a conversation will: ; (a) think about their current adoption status, possibly changing their mind about an adoption or disruption. They may ; return to a potential, whereby they are subject to the influences of internal or external factors. ; If they are already a "technologist," they may adopt the disruption if they are already an tech1 or adopt ; the adoption if already a tech2. Note that this latter case is based on "personal reflection" rather than ; due to external or internal influences. ; (b) move a little ; (c) check to see if they are on a "media center" patch, in which case they may adopt after hearing the message ; (d) they check to see if someone is around to talk to about technologies ;If already paired, they update their type. ask people [ without-interruption [ ;external influence is only for those whose kind is not the same as the media center. if External-Tech1? and [pcolor] of patch-here >= 110.0 and [pcolor] of patch-here < 120.0 and kind != 1 [ check-external-adoption ] if External-Tech2? and [pcolor] of patch-here >= 120.0 and [pcolor] of patch-here < 130.0 and kind != 0 [ check-external-disruption ] ;internal influence - if partner = self, mass media is in effect, so internal influence is ignored in ;areas of mass media. May need to reconsider this assumption. ifelse partner = nobody [ if kind = 1 [rethink-adoption] if kind = 0 [rethink-disruption] move if [pcolor] of patch-here = black [ initiate ] ][ if partner != self [ interact ] ] ] ] update-plot-pop update-plot-stat update-plot-meet update-plot-type update-monitors end @#$#@#$#@ GRAPHICS-WINDOW 389 64 903 599 17 17 14.4 1 10 1 1 1 0 1 1 1 -17 17 -17 17 0 0 1 ticks 30.0 MONITOR 964 10 1238 55 Time time 0 1 11 BUTTON 502 12 557 56 NIL Setup NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 728 12 790 55 On/Off go T 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 558 12 613 56 Step go NIL 1 T OBSERVER NIL NIL NIL NIL 1 SLIDER 416 607 632 640 total-population total-population 0 1000 200 1 1 people HORIZONTAL SLIDER 17 33 326 66 prob-conversation prob-conversation 0 100 100 0.1 1 percent HORIZONTAL SLIDER 16 69 325 102 conversation-length conversation-length 0 100 1 1 1 time units HORIZONTAL PLOT 964 55 1238 249 Populations Simulated Time Number of People 0.0 10.0 0.0 10.0 true true "" "" PENS "Tech2" 1.0 2 -2674135 true "" "" "Tech1" 1.0 2 -955883 true "" "" "EarlyAdopter" 1.0 2 -6459832 true "" "" "EarlyMajority" 1.0 2 -13840069 true "" "" "LateMajority" 1.0 2 -11221820 true "" "" "Laggard" 1.0 2 -13345367 true "" "" "Hopeless" 1.0 2 -8630108 true "" "" "Potentials" 1.0 0 -7500403 true "" "" "Adopters" 1.0 0 -2064490 true "" "" "Total" 1.0 0 -16777216 true "" "" PLOT 962 372 1236 492 Conversations per Person Number of Interactions Frequency 0.0 100.0 0.0 10.0 true false "" "" PENS "Internal" 1.0 1 -13791810 true "" "" "External" 1.0 1 -5825686 true "" "" SLIDER 345 684 538 717 cumulative-prob-tech1 cumulative-prob-tech1 0 100 5 1 1 % HORIZONTAL SLIDER 345 646 538 679 cumulative-prob-tech2 cumulative-prob-tech2 0 100 0 1 1 % HORIZONTAL SLIDER 345 18 494 51 seed seed 0 100000000 73880597 1 1 NIL HORIZONTAL SLIDER 16 144 326 177 tech1-coefficient-acceptance tech1-coefficient-acceptance 0 100 100 1 1 NIL HORIZONTAL SLIDER 15 292 325 325 tech2-coefficient-acceptance tech2-coefficient-acceptance 0 100 0 1 1 NIL HORIZONTAL SLIDER 796 16 949 49 movement movement 0 10 1 1 1 patches/move HORIZONTAL SLIDER 15 219 326 252 prob-tech1-to-tech2 prob-tech1-to-tech2 0 5 0 0.1 1 percent HORIZONTAL SLIDER 15 182 326 215 prob-tech1-to-potential prob-tech1-to-potential 0 5 0 0.1 1 percent HORIZONTAL SWITCH 17 109 170 142 tech1-switch tech1-switch 0 1 -1000 SWITCH 174 109 326 142 tech2-switch tech2-switch 1 1 -1000 SLIDER 14 328 324 361 prob-tech2-to-potential prob-tech2-to-potential 0 5 0 0.1 1 percent HORIZONTAL SLIDER 13 364 324 397 prob-tech2-to-tech1 prob-tech2-to-tech1 0 5 0 0.1 1 percent HORIZONTAL TEXTBOX 92 440 241 458 External Influence Parameters 11 0.0 0 PLOT 1034 543 1235 663 Acquaintance Level Simulated Time No. 0.0 100.0 0.0 2.0 true false "" "" PENS "Acquaintance Level" 1.0 0 -10899396 true "" "" MONITOR 963 494 1025 539 Contacts contacts-per-time 0 1 11 MONITOR 1032 494 1094 539 Starts starts-per-time 0 1 11 MONITOR 1172 493 1235 538 Ongoing active-conversations 0 1 11 SLIDER 14 254 325 287 tech1-agent tech1-agent 0 100 0 0.1 1 percent HORIZONTAL SLIDER 14 398 324 431 tech2-agent tech2-agent 0 100 0 0.1 1 percent HORIZONTAL SLIDER 173 646 324 679 x-disrupt x-disrupt -100 100 35 1 1 NIL HORIZONTAL SLIDER 16 645 166 678 x-adopt x-adopt -100 100 -51 1 1 NIL HORIZONTAL SLIDER 173 683 324 716 y-disrupt y-disrupt -100 100 57 1 1 NIL HORIZONTAL SLIDER 16 682 166 715 y-adopt y-adopt -100 100 -51 1 1 NIL HORIZONTAL SLIDER 17 534 325 567 prob-to-adopt-tech1-external prob-to-adopt-tech1-external 0 100 100 1 1 % HORIZONTAL SLIDER 17 570 326 603 prob-to-adopt-tech2-external prob-to-adopt-tech2-external 0 100 0 1 1 % HORIZONTAL SLIDER 15 719 166 752 s-adopt s-adopt 0 100 54 1 1 NIL HORIZONTAL SLIDER 173 720 324 753 s-disrupt s-disrupt 0 100 40 1 1 NIL HORIZONTAL SWITCH 17 607 166 640 External-Tech1? External-Tech1? 1 1 -1000 SWITCH 173 609 325 642 External-Tech2? External-Tech2? 1 1 -1000 SLIDER 17 497 325 530 listening-time listening-time 0 50 1 1 1 time units HORIZONTAL PLOT 963 250 1236 370 Adoption Type Savvy|Innov|Adopt|Early|Later|Lagrd|Never Frequency 0.0 7.0 0.0 50.0 true false "" "" PENS "kind" 1.0 1 -13345367 true "" "" SLIDER 345 722 538 755 cumulative-prob-early-adopter cumulative-prob-early-adopter 0 100 15 1 1 % HORIZONTAL SLIDER 639 606 833 639 cumulative-prob-early-majority cumulative-prob-early-majority 0 100 46 1 1 % HORIZONTAL SLIDER 640 645 834 678 cumulative-prob-late-majority cumulative-prob-late-majority 0 100 85 1 1 % HORIZONTAL SLIDER 640 683 835 716 cumulative-prob-laggard cumulative-prob-laggard 0 100 100 1 1 % HORIZONTAL SLIDER 17 460 325 493 Smoothness Smoothness 0 50 50 1 1 repeitions HORIZONTAL TEXTBOX 99 14 249 32 Internal Influence Parameters 11 0.0 1 SLIDER 541 646 633 679 tech2 tech2 1 25 1 1 1 NIL HORIZONTAL SLIDER 542 685 634 718 tech1 tech1 1 25 1 1 1 NIL HORIZONTAL SLIDER 542 722 635 755 earlyadopter earlyadopter 1 25 1 1 1 NIL HORIZONTAL SLIDER 836 606 932 639 earlymajority earlymajority 1 25 5 1 1 NIL HORIZONTAL SLIDER 837 645 932 678 latemajority latemajority 1 25 10 1 1 NIL HORIZONTAL SLIDER 838 682 932 715 laggard laggard 1 25 15 1 1 NIL HORIZONTAL SLIDER 838 720 932 753 hopeless hopeless 1 25 25 1 1 NIL HORIZONTAL SLIDER 640 722 834 755 cumulative-prob-hopeless cumulative-prob-hopeless 0 100 100 1 1 % HORIZONTAL TEXTBOX 346 609 415 638 Demographic Parameters 11 0.0 1 BUTTON 963 667 1018 707 MOVIE! make-movie NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 964 710 1238 755 NIL movie-status 17 1 11 SLIDER 1021 671 1236 704 movie-frames movie-frames 0 1000 100 50 1 frames HORIZONTAL BUTTON 615 12 671 56 Step 10 go go go go go go go go go go NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 672 12 727 56 Step 50 go go go go go go go go go go go go go go go \ngo go go go go go go go go go go go go go go \ngo go go go go go go go go go go go go go go \ngo go go go go NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 1103 494 1166 539 Ends ends-per-time 0 1 11 MONITOR 963 544 1026 589 Familiarity friend-total / conversation-starts 1 1 11 @#$#@#$#@ ## WHAT IS IT? これは、DIFFUSION OF INNOVATIONS(イノベーションの普及)モデルであり、INNOVATION PROCESS(イノベーションのプロセス)モデル全体の一部分となっている。 INNOVATION PROCESSは、(1)発明、(2)R&D、(3)イノベーションの生産、(4)イノベーションの伝播、(5)陳腐化や最終的な退場といった製品のライフサイクル上の様々な段階を含んでおり、“内部からの影響”(例:口コミ)と“外部からの影響”(例:マスメディア)に基づく、新技術の普及や採用に焦点を当てている。また、各個人は、“候補者(ポテンシャル)”(まだどんな新技術も採用していない者)、“採用者(アダプター)”(現在、新技術を使用している者)、“破壊者(ディスラプター)”(“採用者”よりもさらに新しい技術を使用している者)の3グループに分類される。 各人は状況空間を移動し、他者と出会い交流する。“候補者”が“採用者”と交流した場合、モデル作成者によって設定された確率で“候補者”は“採用者”となる。”候補者“が”破壊者“と交流した場合も同様である。”採用者“が、決断を覆し”候補者“へ逆戻りする確率、またより新しい”破壊者“の技術を受け入れ”採用者“の技術を捨てるパラメーターも存在する。同様のパラメーターは”破壊者“用にも存在する。 マスメディアの影響も同様に検討される。マスメディアの影響はマスメディアの利用者が特定の地域に滞在した時間の長さに基づく。色の違いにより影響の強弱、“採用者”と“破壊者”の技術の相違が示される。 単一技術毎に内部からの影響または外部からの影響に着目したシミュレーションをコントロールできるようスイッチが提供されている。但し、各個人間の交流はマスメディア地域では発生しない。 ## HOW IT WORKS (1) 人口動態  人口規模はモデル作成者によって設定され、各実行期間中は変化しない。変化する項目は人口のタイプ別構成比である。   (a)“Tech2”:何でも最新のものを求める超異端者 (b)”Tech1”:イノベーション理論でいうところの異端者またはイノベーター (c)“アーリーアダプター”:アイデアや技術が良さそうであれば意欲的に採用決定する者 (d)“アーリーマジョリティ”:採用にあたり多少躊躇が見られ他者の動向をみて決定する者 (e)“レイトマジョリティ”:採用にあたりかなり躊躇する者 (f)“ラガード(採用遅延者)”:原則として、最早イノベーションではなくなった段階まで採用を見合わせる者 (g)“ホープレス”:アイデアや技術を決して採用しようとしない者 尚、(b)から(f)までは、既存文献によくみられるカテゴリーに対応したものであるが、検討の幅を広げるためその両側に新たなカテゴリーを追加した。上記のカテゴリーに属する人々はSETUPボタンを押すことにより作られ、画面上を移動し、知人と交流(”内部普及”)、マスメディアやイノベーションに関する他の一般的な情報発信媒体を検討(”外部普及")する。 (2) 個別行動 現在、“会話状態”にない各人は多くのステップを実行する。 (a) 現在の状況を考える。新技術を受け入れたのちに考え直す可能性もある。彼らは”候補者”に戻る可能性があり、そこでは内部からもしくは外部からの影響を受けることになる。彼らが技術系の人間(“採用者”または”破壊者”)の場合、現時点で”採用者”であれば”破壊者”となる可能性があるし、現時点で”破壊者”であれば”候補者”となる可能性がある。但しこれらの変化は”個人の属性”に基づくものであり、外部からの影響や内部からの影響によるものではない。これらの変更は、スライダー値である ”prob-tech1-to-potential(tech1からpotentialへの変更確率:以下同様)、 ”prob-tech1-to-tech2”,”prob-tech2-to-potential”, ”prob-tech2-to-tech1”により決定される。 (b) インターフェース上セットされている”movement”スライダーに基づき少し移動する。 (c) 自分が”media center”にいるか確認する。”media center”では、“マスメディアからのプレゼンテーション”を聞いたのち新技術を受け入れる可能性がある。 (d) 最後に、自分の周りに技術について話すことのできる人間がいるかどうか確認する。”movement”パラメーターと”prob-conversation”スライダーを操作することにより会話の頻度が決まる。単に他人と会うだけでは技術に関する会話が発生しない。会話が発生する場合、一人が情報発信者、他方が情報受信者となる。 もし各人がすでにペアとなっているときは、各人は自分自身の現状をアップデートする。新技術を受け入れるかどうかは各技術毎のスライダー上の確率に基づき決まる。これの確認は、唯一、会話の終了時点でのみ実行される。単位時間当たり1回ということではない。これらのスライダーは”tech1-coefficient-acceptance(tech1の受容係数:以下同様)”と“tech2-coefficient-acceptance”である。 しかしながら、これらの係数は各人のタイプ(以下のDemographic Parameters(人口動態変数)を参照)別に設定された倍率により除されたものとなる。例えば、“イノベーター”は一般的な”受容係数“レベルで新技術を受け入れるが、”ラガード“は高い抵抗倍率(例えば10倍)を付与される。即ち、一般的な”受容係数“レベルの1/10の確率でしか受容しない。 (3) 統計 アウトプットのグラフはモデル設定者用に多くのサマリーを提供する。加えて、プログラムをディバグするための説明書きもスクリーン上印刷される。これらは、Excel等他のツールに保存し、後の分析に活用することができる。 ## HOW TO USE IT このセクションでは、各ボタン、スライダーを中心に多少詳しくモデルを説明する。 (1) Demographic Parameters(人口動態パラメーター) これらは”runtime display(動作時間表示)"の下にあるスライダーでセットされる。モデル作成者は全体の人口規模(この規模はモデルが走っている間は固定化される)を設定する。この人口は7つのカテゴリーに分別され、各グループに属する人口は累積分布により決定される。例えば、”cumulative-prob-tech2”は、常に最新技術を持たないと気のすまない”超異端者“や”破壊者“ に該当する。もしモデル上が該当する人がいなければスライダーは0にセットされる。例えば5%にセットされれば、それは全人口の5%が”超異端者“であることを示す。 次のセグメント”cumulative-prob-tech1”は、”採用者“に該当する。もし、最初のグループが5%にセットされ、”採用者“の比率を全人口の8%としたければ、スライダーを13%にセットする。同様にすべての累積比率をセットし、最後のカテゴリーが100%にセットされるようにする。もし、”ホープレス”がいない場合は、”ホープレス”と”ラガード“の両方のスライダーを100%にセットする。ロジャース他は5分類(”イノベーター“、“アーリーアダプター”、“アーリーマジョリティ”、“レイトマジョリティ”、“ラガード(採用遅延者)”)としているが、このモデルでは両側に新たなカテゴリー"tech2(超異端者)”と“ホープレス”を加えて補完している。 ”cumulative-prob-"スライダーの隣のスライダーは、他者と会った場合の新しいアイデアや技術の受容度に影響を与える倍率を各カテゴリーごとに示すものである。採用者と破壊者の技術にそれぞれ対応して、”tech1-coefficient-acceptance(tech1の受容係数:以下同様)”と“tech2-coefficient-acceptance”と呼ばれる内部からの普及にかかる受容度値が存在する。この受容度値は各タイプに応じて定められた倍率により割って求められる。例えば、”1”は、「技術を通常の”tech1”tech2”のレートで受容する」することを示し、”5”は、「技術を通常レートの1/5で受容する」ことを示す。   (2) 内部からの影響パラメーター (a) prob-conversation(会話の確率) 出会うことが、情報交換が行われることを意味するわけではない。このパラメーター(パーセンテージ)と移動パラメーター(下記のRuntime Setup参照)を合成したものが、分析的またはシステム動学的な普及モデルをより精緻なものとするために使用される。 (b) conversation-length(会話の長さ) この変数は、人々が会話状態にある時間の長さを決定するが、この長さは新技術の採用の確率に影響を与えるものではない。ただモデルに遅れ要因を与えるのみである。なぜなら、新技術やアイデアの受容や拒絶は会話が終了するまでは起こらないからである。 (c) tech1-switch,tech2-switch あるモデル動作においてどの技術の普及が起こるかを決定するものである。モデル内部の動きが十分に理解できるまで、1つの技術(例えばtech1)に固定しておくことを薦める。 (d) tech1-coefficient-acceptance and tech2-coefficient-acceptance 会話の終了時におけるイノベーションの受容度を示すものであり、0~100の値をとる。この数字は各人口動態カテゴリー別にセットされた倍率により除される。人口動態カテゴリーの数字が高いほど、イノベーションを受け入れる確率は低くなる。 (e) prob-tech1-to-potential and prob-tech2-to-potential 後戻りの確率である。 (f) prob-tech1-to-tech2 and prob-tech2-to-tech1 他の技術へスイッチする確率である。 (g) tech1-agent and tech2-agent まだ実装されていない。   (3) 外部からの影響パラメーター (a) Smoothness(滑らかさ) このパラメーターはtech1及びtech2の外部からの普及の背景づくりに使用される。 (b) listening-time(聴聞時間) 各人がマスメディアエリアに滞在する時間である。ここでも、これはただモデルに遅れ要因を与えるのみである。なぜなら、新技術やアイデアの受容や拒絶はメディアエリアにいる間は決定されないからである。 (c) prob-to-adopt-tech1-external and prob-to-adopt-tech2-external 受容率 (d) External-Tech1? and External-Tech2? 外部からの普及モデルのオンとオフ (e) x-adopt, y-adopt, s-adopt and x-disrupt, y-disrupt, s-disrupt マスメディアの範囲を設定するために使用される。(x,y)がエリアの中心を示し、sが (x-s,y-s),(x+s,y-s),(x+s,y+s),(x-s,y+s)によって範囲を定める。 (4) Outputs (a) Simulated Time(シミュレーション時間) ステップ回数の変化を表示する (b) Populations 各カテゴリー毎の全体人数を示す(7つのタイプ、候補者対採用者・破壊者も含む) (c) Adopter Type 採用者のタイプ別ヒストグラム (d) Meetings 2人の会話のヒストグラム(ある特定の時間に行われた会合の件数、何件がスタートし、何件が終了したか、実際に行われた会話の件数) (e) Acquaintance Level (and counter) 会話における個人間の親和度の測定. (5) Setup (a) Setup 上記により解説されたパラメーターに基づくモデルを設定する。 (b) Step 一度に一段階ずつモデルの動作を進める。 (c) Step N モデルをN段階進める。 (d) On/Off 再びクリックさせるまでモデルを動かす。 (e) Seed モデルを走らせるたびに使われる乱数シード (f) Movement 1段階ごとに各人がどこまで動くか。 (6) Movie スライダーを使用して、集めるべきフレーム数を設定。movieボタンを押してmovieを作成。これはAppletフォームでは作動しない。 ## THINGS TO NOTICE 最善の使用アイデアは、まず一つの技術(“採用者”)を口コミモードで動かし、その後外部からの普及モード、混合モードへと進んでいく方法である。これらの結果は下記のREFERENCESセクションで議論される分析モデルと比較することができる。モデル作成者が簡単なケースの行動パターンに習熟するまでは、”tech2”を使わないことを推奨する。 ## THINGS TO TRY パラメーターに基づき技術の受容率の変化を記録する。口コミを通じた紹介により単一の技術の普及はロジスティックカーブを描くことが予想される。厳密な“マスメディア”経由の紹介はより急速に広がり、(パラメーターの設定如何だが)若干の遅れののち最高値まで一挙に達するであろう。これを観察するために、まず”tech1”の内部からの普及をオンにし、“tech2”とすべての外部からの普及をオフにする。Step50ボタンを押して、一定期間モデルを動かす。その後、”tech1”の内部からの普及をオフにし、外部あらの普及をオンにして、全画面がマスメディアを示すようにセットする(xとyのパラメーターを0として、sパラメーターを100とする)。同じ期間動かし、人口動態グラフの形状の差異を記録する。 短い遅れをもって第二の技術を導入すると興味深い行動が観られる。いくつかのケースではより新しい技術は普及の足掛かりを獲得することができない。逆戻り機能を追加したり“採用者”が“破壊的”技術へ変更することができるようにすると、技術カーブは極めて複雑になる。理論的には、少なくとも、一旦技術の普及が成熟してしまうと、破壊的技術が普及の足掛かりを得るためにはしばしば特定のニッチ層にヒットしなければならない(例 “WII” vs Playstation 3 vs. Xbox 360 のマーケティング戦略)。 ## EXTENDING THE MODEL (1) Change agents ロジャース(文献参照)は新たな技術やアイデアの採用をより容易にするチェンジエージェントの重要性を説いている。現在のモデルでは、2人が出会い、会話時間の長さ(パラメーター)に基づき採用が決定される。しかしながら、何人かが予めチェンジエージェントとして設定され、彼らはあるカテゴリーに属する者に対し、より少ない時間で技術の採用を説得できる。 (2) Internet 古典的なモデルでは、個人的接触とマスメディアを区別する。しかしながらインターネットは正にその2つの組み合わせである。特定の個人と親密な会話を行う一方で、広くマーケティングを行うことができる。 ## NETLOGO FEATURES 初期のモデルは、個人の”採用カテゴリー”を直接コードで設定していた。そのテクニックはCommunity Web Pagesで示されたものであるが、興味深いプログラミング技法であるのでここに記しておきたい(実際のところ、このコードはこの目的のためには最早使用されていない。従って下記のコード部分は最新バージョンのNetLogo向けにアップデートされていない)。 アイデアとしては、何人かが”イノベーター”となり、何か新しいことを試みる。また何人かは決して新しいものを採用しない。残った人々は他のグループに広がる。ロジャースは一般的な普及を5つのカテゴリー(アーリーアダプター(1&2)、採用に当たっての抵抗が強い5、それらの間にある2つのカテゴリー(3&4))で論じた。これは、モデル上”kind-structure”と言われる。カテゴリー1は、”採用者"と”破壊者”の数(シミュレーションの開始時点ですでに新技術を所持している者)により設定される。残りの人口を決定するために、モデルの組み込み時に、同類が設定される。 ============= set kind-structure [ [ 2 12 ] [ 3 47 ] [ 4 81 ] [ 5 100 ] ] ============= 最初の入力は、カテゴリータイプ、次に確率である。これは次の報告指示に使用される。: ============= to-report determine-kind [ probability-index ] let this_kind first ( first ( filter [ last ? >= probability-index ] kind-structure ) ) print this_kind+“:”+probability-index+“:”+filter [last ? >= probability-index] kind-structure report (this_kind) end ============= この”let”の文については、コミュニティウェブページを通じて私に対し非常に丁寧に説明がなされた。これがうまくいくことについて得心するのに少々時間を要したが、インプットが確率を付与されたカテゴリーであるような、我々モデルもしくは同様な人口動態モデルには非常に有用な構造である。 この指示は、モデルのセットアップ間、採用者の種類を決定するため呼び起される。 ============= to setup-people cct-people initial-potentials [ set total-population initial-potentials + total-population setup-people-parms setup-potential set kind determine-kind ( random 100 ) ] end ============= “kind”の特性の有効な使用法は考慮すべき人の属性に応じて異なる採用率を割り当てることである。 ## TODO 将来バージョンに向けた考察 (1) 上記のような、複数の人間に同時に影響を与えるチェンジエージェント。チェンジエージェント向けにスライダーが設定されているが、行動はまだ追加されていない。 (2) 記憶の活用。パートナーに対する親和性に応じ受容度が変化する。親和度グラフは設定されているが、親和度に応じた行動の変化はまだ追加されていない。 (3) 混合モード普及。例えばウェブベースの普及は、内部からの普及と外部からの普及モデルを混合したもののように思われる。 (4) 社会ネットワーク分析。ネットワークの構造や動態(例えば”6次の隔たり”)に応じて、イノベーションの普及スピードがどう変わるか。 (5) 普及の数理モデル。ここでのアイデアは、多くの数理的普及モデルのパラメーターとこのシミュレーションのパラメーターが相関を持てるようにすることである。 ## CREDITS AND REFERENCES (1) Other Models  このモデルのフレームワークは、Net Logo webにある2つの素晴らしいモデルに基づいている。 (a) AIDS - Copyright 1997 Uri Wilensky. All rights reserved. このモデルは、同じ場における個人のペアにかかる基本的なアイデアを供給した。 (b) Fitness Landscape - Copyright 2006 David McAvity. このモデルは、Net Logo サイトにある Community Models sectionからのものであり、Evergeen State College(Olympia Washington)において、物理学、生物学の原理を表示するための一連のコンピュータープログラムの一部として開発された。 (2) References このモデルは、アイデアや技術の発明から、開発、普及、使用、陳腐化に至る”イノベーションプロセス”を理解する継続的な努力の小さな一部分に過ぎない。モデル全体は、System Dynamicsを利用して開発されたが、エージェントベースモデリングは、競争や技術普及にかかるアイデアを明確にするのに極めて有用である。この作業の理論的バックグランドとして以下の 3文献がある。 (a) Mahajan, Vijay and Robert A. Peterson, “MODELS FOR INNOVATION DIFFUSION,” Quantitative Applications in the Social Sciences, Sage Publications, 88 pages. (b) Bass, F. M. (1969). “A NEW PRODUCT GROWTH MODEL FOR CONSUMER DURABLES,” Management Science, 15, 215-227. (c) Rogers, Everett M., DIFFUSION OF INNOVATIONS, 5th Edition, Free Press, 512 pp. ## COPYRIGHT INFORMATION Copyright 2009 The MITRE Corporation. All rights reserved. Approved for Public Release: Distribution Unlimited (Tracking #09-1575) 「著者とThe MITRE Corporationとの関係は、確認・承認目的のためのみに行われ、著者の立場、意見、視点に対するMITRE’s の同意や指示を伝達または意味するものではない。」 このモデルを無償で使用、編集、転送することができるが、CopyrightとPublic Release文書が含まれかつ修正後のモデルが営利目的で使用されないことが条件である。 質問、コメントは以下まで。 Michael Samuels at mijujoel@ieee.org ======================== Last updated: 05/19/2009 ======================== 翻訳 穴山:2013/3/3 ## WHAT IS IT? This is a model of the DIFFUSION OF INNOVATIONS, one segment of the entire INNOVATION PROCESS that includes (1) invention, (2) R&D, (3) production of innovations, (4) dissemination of these innovations, and (5) various stages of a product's life cycle such as obsolescence and eventual retirement. It focuses on the diffusion and adoption of new technologies based on "internal influences" (e.g., word-of-mouth) and "external influences" (e.g., mass media). Individuals are divided into three groups: "Potentials" who have not yet adopted any new technologies, "Adopters" who are using a new technology and "Disrupters" who are using an even newer technology than "Adopters." Individuals move through the state space, where they meet and interact with other individuals. If a "Potential" interacts with an "Adopter," he or she may become an "Adopter" based on probabilities set by the modeler. The same holds true for "Potentials" interacting with "Disrupters." There are also parameters for "Adopters" to "renege" and return to "Potentials" or to accept the even newer "Disrupter" technology and discard their "Adopter" innovation. Similar parameters are available for "Disrupters." Mass media impacts may also be studied. The impact of mass media is based on the length of time a user spends in a particular region (using different colors to represent "strength" of the influence, as well as differences between "Adopter" technologies and "Disrupter" technologies.) Toggle switches are provided to control each simulation so that a study may focus on internal or external influences of one technology in isolation. Note that interactions between individuals will not occur inside a "mass media" region. ## HOW IT WORKS (1) Demography The population size is set by the modeler and does not change during each run. What changes are the percentages of each type of user: (a) "Tech2" super-geeks who must have the latest of everything (b) "Tech1" geeks, or "Innovators" in the typical parlance of innovation theory (c) "Early Adopters" who will decide to adopt if the idea or technology sounds good (d) "Early Majority" who are a little hesitant and wait to see what others are doing (e) "Late Majority" who are very hesitant (f) "Laggards" who basically wait until the technology is no longer considered innovative (g) "Hopeless" who will never adopt the technology or idea. Note that (b) through (f) correspond to the categories commonly seen in the literature; I have added a new category on either end for more flexibility. These people will be created by pressing the SETUP button and will move around the display interacting with other folks ("internal diffusion") or examining mass media or other general forms of information about the innovation ("external diffusion"). (2) Individual Behavior Individuals who are not currently in a "conversation" will perform a number of steps: (a) Think about their current status, possibly changing their mind after accepting a new technology: they may return to a "Potential," whereby they are subject to the influences of internal or external factors. If they are a technologist ("Adopter" or "Disrupter"), they may become a "Disrupter" if they are currently an "Adopter" or an "Adopter" if currently a "Disrupter." Note that these changes are based on "personal reflection" rather than due to external or internal influences. These changes are based on slider values "prob-tech1-to-potential," "prob-tech1-to-tech2," "prob-tech2-to-potential" and "prob-tech2-to-tech1." (b) Move a little based on the "movement" slider set in the interface. (c) Check to see if they are on a "media center" patch, in which case they may accept a new technology after hearing a "mass media presentation." (d) Finally, they check to see if someone is around to talk to about technologies. The "movement" parameter" and "prob-conversation" sliders help determine how often conversations occur - just meeting someone does not guarantee that a conversation about technology occurs. If a conversation does occur, one individual is the initiator and the other the recipient of information. If an individual is already paired, he or she will update his or her status. Whether to accept the new technology is based on the slider probability for each technology. This is only checked at the end of the conversation, not once per time unit. These sliders are "tech1-coefficient-acceptance" and "tech2-coefficient-acceptance." However, each of these values is divided by a factor set for each individual's type (see Demographic Parameters below). For example, an "Innovator" may accept the new technology at the general "coefficient-acceptance" level, where as a "laggard" may be given a high resistance factor, say 10, meaning that acceptance is 1/10th of the general "coefficient-acceptance" level. (3) Statistics Output graphs provide a number of summaries for the modeler's use. In addition, debugging statements are printed to the screen. These may be saved in other tools (e.g., Excel) for later analysis. ## HOW TO USE IT This section describes the model in a little more detail, highlighting each of the buttons and sliders. (1) Demographic Parameters These are set by sliders located below the runtime display. The modeler sets the total population (which remains fixed in size throughout the model run). This population is divided into 7 categories, with a cumulative distribution used to determine the number in each group. For example, "cumulative-prob-tech2" are the "super-geeks" or "Disrupters" who absolutely have to have the latest technology. The slider is set to 0 if there aren't any of these folks in the model. If it is set to some percentage, say 5%, then 5% of the total population will be "super-geeks." The next segment, "cumulative-prob-tech1" are the Adopters. If the first group is set to 5, and the modeler wants 8% of the population to be Adopters, then set this slider to 13%. Similarly, set all of the cumulative probabilities so that the last category desired is set to 100%. If there are no "hopeless" members of the population, then both the laggard and hopeless sliders will be at 100%. Note that Rogers and others identify 5 categories of people - Innovators, Early Adopters, Early Majority, Late Majority and Laggards. In this model, these five categories are supplemented by new categories on either end of the spectrum - the "tech2" super-geeks on one side and "hopeless" on the other. Next to the "cumulative-prob-*" sliders are sliders for each category indicating a factor that affects the acceptance of a new idea or technology when meeting with other individuals. There are acceptance factors for internal diffusion called "tech1-coefficient-acceptance" and "tech2-coefficient-acceptance" for Adopter and Disrupter technologies, respectively. This value will be divided by the factor for each individual user type, so that a "1" means accept the technology at the general "tech1" or "tech2" rate, whereas a user value of 5 means only accept the technology at 1/5th of the general rate. (2) Internal Influence Parameters (a) prob-conversation - Just because individuals meet, it doesn't mean they will exchange information. The combination of this parameter (a percentage) and the movement parameter (see Runtime Setup below) can be used to calibrate the model against analytical or system dynamics models of diffusion. (b) conversation-length - This parameter decides how long people are "tied up" in a conversation, but it does not affect the probability of accepting a new technology. It basically just adds a delay factor to the model since the acceptance/rejection of a technology or idea doesn't occur until the end of the conversation. (c) tech1-switch and tech2-switch - these determine if any internal diffusion will occur in a given model run. The recommendation is to stick to only one innovation ("tech1") until the inner workings of the model are well understood. (d) tech1-coefficient-acceptance and tech2-coefficient-acceptance - this is a generic number for accepting the innovation at the end of a conversation, with values from 0 to 100. However, this number is divided by a factor for each demographic category. The higher the demographic category number, the lower the chance of accepting the innovation. (e) prob-tech1-to-poential and prob-tech2-to-potential - a "renege" factor (f) prob-tech1-to-tech2 and prob-tech2-to-tech1 - probability of switching from one technology to the other (g) tech1-agent and tech2-agent - not yet incorporated into model (3) External Influence Parameters (a) Smoothness - this parameter is used to create the background for external diffusion of tech1 and tech2 innovations. (b) listening-time - how long the user stays inside the mass media area. Again, this is just a delay factor since acceptance/rejection of the innovation is determined at the end of the period of time the user remains in the area. (c) prob-to-adopt-tech1-external and prob-to-adopt-tech2-external - acceptance factors (d) External-Tech1? and External-Tech2? - turn external diffusion on and off (e) x-adopt, y-adopt, s-adopt and x-disrupt, y-disrupt, s-disrupt - used to set the bounds for the region of mass media. (x,y) places the center of the region, while (s) builds an area from (x-s,y-s),(x+s,y-s),(x+s,y+s),(x-s,y+s). (4) Outputs (a) Simulated Time - keeps track of time steps (b) Populations - total number of individuals of each type (7 types of individuals plus potentials vs adopters/disrupters, as well as total) (c) Adopter Type - histogram of types of users (d) Meetings - histogram of two-person conversations (with counters for the number of contacts made in a time period, how many started in that time period, how many ended, and number of active conversations. (e) Acquaintance Level (and counter) - measure of familiarity of the individuals in a conversation. (5) Setup (a) Setup - initializes model based on the parameters described above (b) Step - increment model one step at a time (c) Step N - move model N steps forward (d) On/Off - run model until clicked again (e) Seed - random number seed for each run (f) Movement - how far individuals move in each step (6) Movie Use slider to set number of frames to collect. Then press movie button to create a movie. This does not work in the Applet form of the model. ## THINGS TO NOTICE Best idea is to run one technology at a time ("Adopter") in word-of-mouth mode, followed by external mode, followed by a mixed mode. These results can be compared to analytical models discussed in the REFERENCES section below. It is recommended that the "tech2" innovation not be used until the modeler is well versed on the behavior of simpler cases. ## THINGS TO TRY Note change in rate of technology adoption based on parameters. The "expected" behavior is a logistic curve for a single technology introduced by word-of-mouth. A strictly "mass media" introduction will spread more rapidly, shooting up to the maximum after a small delay (depending upon parameter settings). To see this, turn on "tech1" internal diffusion while turning off "tech2" and all "external diffusion" switches. Run the model for a set length of time with the Step 50 button. Then turn off "tech1" internal diffusion, turn on "tech1" external diffusion with the entire screen representing mass media (x and y parameters set to 0, s parameter set to 100). Run for the same period of time and note the differences in the shape of the population graphs. Adding a second technology after a short delay leads to all sorts of interesting behavior. In some cases, the newer technology will not be able to gain a foothold. If reneging is added, or if "Adopters" can switch to the "Disrupter" technology, the technology curves become quite complex. According to theory, at least, a "Disrupter" technology often needs to hit a specific niche in order to gain a foothold once an "Adopter" technology has saturated the market (e.g., "WII" vs Playstation 3 vs. Xbox 360 marketing strategies). ## EXTENDING THE MODEL (1) Change agents - Rogers (see references) talks about the importance of change agents to facilitate adoption of new technologies or ideas. In the current model, two individuals will meet; adoption is based on parameters such as length of time of the conversation. However, some users could be initialized as change agents, in which case they might require much less time to convince certain categories of users. (2) Internet - The classic diffusion models differentiate individual contacts from mass media. The Internet, however, is really a combination of the two, providing "intimate" conversations with a single user, but marketing to a wide audience. ## NETLOGO FEATURES Early versions of the model set the "adoption category" of individuals directly in code. The technique was suggested to me on the Community Web Pages, and so I have included it here because I thought it was an interesting programming construct. (It is actually not used for this purpose any more, so the code segment below has not been updated to the latest version of Netlogo.) The idea is that some folks are "innovators" and will try anything new. Some will never adopt anything new, and others are spread out into other groups. Rogers (see references below) discusses a normal distribution with 5 categories such as 1 & 2 (the early adopters) = 5 (adopt with a lot of resistance) and two middle categories, 3 & 4. This is referred to as the "kind-structure" in the model. Category 1 is set by the number of "adopters" + "disrupters" - those who already have the new innovation at the start of the simulation. To determine the rest of the population, an array is set up in the initialization part of the model: ============= set kind-structure [ [ 2 12 ] [ 3 47 ] [ 4 81 ] [ 5 100 ] ] ============= The first entry is the category type; the second is a probability. This is used in the following reporter routine: ============= to-report determine-kind [ probability-index ] let this_kind first ( first ( filter [ last ? >= probability-index ] kind-structure ) ) print this_kind+":"+probability-index+":"+filter [last ? >= probability-index] kind-structure report (this_kind) end ============= The "let" statement was graciously explained to me through the community web pages. It took awhile to convince myself it was working, but it is a very useful structure for this and similar demographic modeling in which the inputs are often categories assigned probabilities. This routine is called during setup in this model to determine the kind of adopter: ============= to setup-people cct-people initial-potentials [ set total-population initial-potentials + total-population setup-people-parms setup-potential set kind determine-kind ( random 100 ) ] end ============= A good use of the "kind" attribute is to assign different adoption rates based on the kind of person under consideration. ## TODO Some thoughts on future versions: (1) As noted above, change agents that impact several colleagues simultaneously. Sliders are provided for change agents, but the behavior has not yet been added to the model. (2) Making use of memory - acceptance changes with familiarity of partner. A familiarity graph is included in the model, but the behavioral changes due to familiarity have not been added. (3) Mixed mode diffusion - e.g., web-based diffusion seems like a mixture of internal and external diffusion models. (4) Social Network Analysis - how fast innovations spread depends on network structure and dynamics ("6 degrees of separation" idea). (5) Mathematical models of diffusion - idea here is to be able to correlate parameters in various math models of diffusion to the parameters in this simulation. ## CREDITS AND REFERENCES (1) Other Models The framework for this model is based on two great models on the Netlogo web site: (a) AIDS - Copyright 1997 Uri Wilensky. All rights reserved. This provided the basic idea of pairing individuals on the same patch. (b) Fitness Landscape - Copyright 2006 David McAvity. This model, from the Community Models section of the Netlogo web site, was created at the Evergeen State College, in Olympia Washington as part of a series of applets to illustrate principles in physics and biology. (2) References This model is actually a small portion of an ongoing effort to understand the "Innovation Process" from the invention of ideas and technologies to their development, diffusion, use and obsolescence. The overall model is being developed through System Dynamics, but agent-based modeling has been very helpful in clarifying ideas concerning the competition and spread of technologies. The background for this work comes from three sources: (a) Mahajan, Vijay and Robert A. Peterson, "MODELS FOR INNOVATION DIFFUSION," Quantitative Applications in the Social Sciences, Sage Publications, 88 pages. (b) Bass, F. M. (1969). "A NEW PRODUCT GROWTH MODEL FOR CONSUMER DURABLES," Management Science, 15, 215-227. (c) Rogers, Everett M., DIFFUSION OF INNOVATIONS, 5th Edition, Free Press, 512 pp. ## COPYRIGHT INFORMATION Copyright 2009 The MITRE Corporation. All rights reserved. Approved for Public Release: Distribution Unlimited (Tracking #09-1575) "The author's affiliation with The MITRE Corporation is provided for identification purposes only, and is not intended to convey or imply MITRE's concurrence with, or support for, the positions, opinions or viewpoints expressed by the author." The model may be freely used, modified and redistributed provided the copyright and Public Release statements are included and the resulting models are not used for profit. Contact Michael Samuels at mijujoel@ieee.org if you have questions or comments. ======================== Last updated: 05/19/2009 @#$#@#$#@ default true 0 Polygon -7500403 true true 150 5 40 250 150 205 260 250 airplane true 0 Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15 arrow true 0 Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150 box false 0 Polygon -7500403 true true 150 285 285 225 285 75 150 135 Polygon -7500403 true true 150 135 15 75 150 15 285 75 Polygon -7500403 true true 15 75 15 225 150 285 150 135 Line -16777216 false 150 285 150 135 Line -16777216 false 150 135 15 75 Line -16777216 false 150 135 285 75 bug true 0 Circle -7500403 true true 96 182 108 Circle -7500403 true true 110 127 80 Circle -7500403 true true 110 75 80 Line -7500403 true 150 100 80 30 Line -7500403 true 150 100 220 30 butterfly true 0 Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240 Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240 Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163 Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165 Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225 Circle -16777216 true false 135 90 30 Line -16777216 false 150 105 195 60 Line -16777216 false 150 105 105 60 car false 0 Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180 Circle -16777216 true false 180 180 90 Circle -16777216 true false 30 180 90 Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89 Circle -7500403 true true 47 195 58 Circle -7500403 true true 195 195 58 circle false 0 Circle -7500403 true true 0 0 300 circle 2 false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 cow false 0 Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167 Polygon -7500403 true true 73 210 86 251 62 249 48 208 Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123 cylinder false 0 Circle -7500403 true true 0 0 300 dot false 0 Circle -7500403 true true 90 90 120 face happy false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240 face neutral false 0 Circle -7500403 true true 8 7 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Rectangle -16777216 true false 60 195 240 225 face sad false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183 fish false 0 Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166 Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165 Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60 Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166 Circle -16777216 true false 215 106 30 flag false 0 Rectangle -7500403 true true 60 15 75 300 Polygon -7500403 true true 90 150 270 90 90 30 Line -7500403 true 75 135 90 135 Line -7500403 true 75 45 90 45 flower false 0 Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135 Circle -7500403 true true 85 132 38 Circle -7500403 true true 130 147 38 Circle -7500403 true true 192 85 38 Circle -7500403 true true 85 40 38 Circle -7500403 true true 177 40 38 Circle -7500403 true true 177 132 38 Circle -7500403 true true 70 85 38 Circle -7500403 true true 130 25 38 Circle -7500403 true true 96 51 108 Circle -16777216 true false 113 68 74 Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218 Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240 house false 0 Rectangle -7500403 true true 45 120 255 285 Rectangle -16777216 true false 120 210 180 285 Polygon -7500403 true true 15 120 150 15 285 120 Line -16777216 false 30 120 270 120 leaf false 0 Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195 Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195 line true 0 Line -7500403 true 150 0 150 300 line half true 0 Line -7500403 true 150 0 150 150 link true 0 Line -7500403 true 150 0 150 300 link direction true 0 Line -7500403 true 150 150 30 225 Line -7500403 true 150 150 270 225 pentagon false 0 Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120 person false 0 Circle -7500403 true true 109 6 80 Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90 Rectangle -7500403 true true 127 79 172 94 Polygon -7500403 true true 195 90 240 150 225 180 165 105 Polygon -7500403 true true 105 90 60 150 75 180 135 105 Circle -1184463 true false 126 33 14 Circle -1184463 true false 156 34 13 Line -1184463 false 158 70 167 62 Polygon -1184463 true false 141 63 148 40 154 63 Rectangle -1184463 true false 135 70 160 75 Line -1184463 false 134 70 126 61 Polygon -1184463 true false 58 162 34 196 37 190 Rectangle -16777216 true false 30 180 45 195 Rectangle -16777216 true false 45 180 60 165 Rectangle -16777216 true false 60 180 45 165 Rectangle -16777216 true false 45 165 60 180 plant false 0 Rectangle -7500403 true true 135 90 165 300 Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285 Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285 Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210 Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135 Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135 Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60 Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90 square false 0 Rectangle -7500403 true true 30 30 270 270 square 2 false 0 Rectangle -7500403 true true 30 30 270 270 Rectangle -16777216 true false 60 60 240 240 star false 0 Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108 target false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 Circle -7500403 true true 60 60 180 Circle -16777216 true false 90 90 120 Circle -7500403 true true 120 120 60 tree false 0 Circle -7500403 true true 118 3 94 Rectangle -6459832 true false 120 195 180 300 Circle -7500403 true true 65 21 108 Circle -7500403 true true 116 41 127 Circle -7500403 true true 45 90 120 Circle -7500403 true true 104 74 152 triangle false 0 Polygon -7500403 true true 150 30 15 255 285 255 triangle 2 false 0 Polygon -7500403 true true 150 30 15 255 285 255 Polygon -16777216 true false 151 99 225 223 75 224 truck false 0 Rectangle -7500403 true true 4 45 195 187 Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194 Rectangle -1 true false 195 60 195 105 Polygon -16777216 true false 238 112 252 141 219 141 218 112 Circle -16777216 true false 234 174 42 Rectangle -7500403 true true 181 185 214 194 Circle -16777216 true false 144 174 42 Circle -16777216 true false 24 174 42 Circle -7500403 false true 24 174 42 Circle -7500403 false true 144 174 42 Circle -7500403 false true 234 174 42 turtle true 0 Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210 Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105 Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105 Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87 Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210 Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99 wheel false 0 Circle -7500403 true true 3 3 294 Circle -16777216 true false 30 30 240 Line -7500403 true 150 285 150 15 Line -7500403 true 15 150 285 150 Circle -7500403 true true 120 120 60 Line -7500403 true 216 40 79 269 Line -7500403 true 40 84 269 221 Line -7500403 true 40 216 269 79 Line -7500403 true 84 40 221 269 x false 0 Polygon -7500403 true true 270 75 225 30 30 225 75 270 Polygon -7500403 true true 30 75 75 30 270 225 225 270 @#$#@#$#@ NetLogo 5.0 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ default 0.0 -0.2 0 0.0 1.0 0.0 1 1.0 0.0 0.2 0 0.0 1.0 link direction true 0 Line -7500403 true 150 150 90 180 Line -7500403 true 150 150 210 180 @#$#@#$#@ 0 @#$#@#$#@