Innovation

Innovation preview image

1 collaborator

Default-person Michael Samuels (Author)

Tags

diffusion of technology 

Tagged by Michael Samuels over 5 years ago

innovation 

Tagged by Michael Samuels over 5 years ago

memes 

"Spread of ideas across a population"

Tagged by Michael Samuels over 5 years ago

Part of project 'Sociotech'
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 757 times • Downloaded 61 times • Run 0 times
Download the 'Innovation' modelDownload this modelEmbed this model

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


Comments and Questions

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

Click to Run Model

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; DECLARATIONS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
breed [ people ]          ;; use people instead of turtles

globals [
        
  ;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 
  
  ;Color
  tech0-color
  tech1-color
  tech2-color
] 

;Attributes for patches (other than Netlogo-defined attributes)
patches-own [
 intensity               ;; used to create degrees of influence (rather than a static background)
 original-color          ;; used in conjunction with external influence
]

;People have attributes
people-own [
  status                 ;; 0 for a potential, 1 for type 1 innovation (adoption), 2 for type 2 innovation (disruption)
  kind                   ;; 1 - 5 are "innovator","early-tech1","early-majority","late-majority","laggard" (using Rogers' terms). 
  acceptance             ;; general acceptance level, where "acceptance" gives probability of someone accepting technology 1 or 2
  initiator?             ;; keep track of who initiates the conversation
  partner                ;; The person that is our current partner in a conversation
  media?                 ;; Keep track of whether individual is listening to mass media presentation, such as billboard or magazine ad
  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 that can be used for altering rules of interaction in a future model

]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 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
  
  ;;Check inputs
  let total-prob prob-innovator + prob-early-adopter + prob-early-majority + prob-late-majority + prob-laggard
  if (total-prob != 100 )
  [
      print (word "Adoption types must sum to 100, but instead sum to " total-prob)
      stop
  ]

  setup-globals       ;initialize to 0
  setup-env           ;patches
  setup-people        ;individuals
  setup-histo1        ;initialize graph needed at time 0
  setup-histo2        ;initialize graph needed at time 0
  
  reset-ticks
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-globals
  
  ;set random seed to user number unless 0 chosen
  let my-seed select-seed           ;set once at beginning of model
  if random-seed-switch? [ set my-seed new-seed ]
  random-seed my-seed
  output-print my-seed
    
  ;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
  
  ;color
  set tech0-color black
  set tech1-color magenta
  set tech2-color violet
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 tech0-color
    set intensity (random 100)
    set original-color tech0-color
  ]
    
  ;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 tech1-color  
         set original-color tech1-color
      ]
    ]
  ]
  
  ;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 tech2-color
         set original-color tech2-color 
      ]
    ]
  ]

  ; 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 = tech1-color
          [ set pcolor scale-color tech1-color intensity 0 100 ]
          [ ifelse original-color = tech2-color 
               [ set pcolor scale-color tech2-color intensity 0 100 ]
               [ set pcolor tech0-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 status 0 ;default is potential
    set initiator? FALSE
    set media? FALSE
    set memory []

    ;determine kind of individual - from innovator to laggard.  
    let kind-prob (random 100)
    let cumulative-prob prob-innovator
    ifelse (kind-prob < cumulative-prob) 
    [ 
            set-innovator
    ] 
    [ 
            set cumulative-prob cumulative-prob + prob-early-adopter 
            ifelse (kind-prob < cumulative-prob) 
            [ 
                   set-early-adopter        
            ] 
            [ 
                   set cumulative-prob cumulative-prob + prob-early-majority 
                   ifelse (kind-prob < cumulative-prob) 
                   [ 
                          set-early-majority 
                   ]  
                   [ 
                          set cumulative-prob cumulative-prob + prob-late-majority 
                          ifelse (kind-prob < cumulative-prob)  
                          [ 
                                  set-late-majority  
                          ] 
                          [ 
                                  set cumulative-prob cumulative-prob + prob-laggard 
                                  ifelse (kind-prob < cumulative-prob)  
                                  [
                                      set-laggard 
                                  ]  
                                  [
                                      print (word "Adoption Group Error: Cumulative probability of " cumulative-prob " is less than 100%")
                                  ]
                          ]
                 ]
           ]
     ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;These are the kinds of people in a population.   Each has a factor by which the acceptance rate (overall) is divided
;in order to determine how quickly the technology or idea is accepted. The innovators will have already adopted the
;technology - either all tech1 or all tech2 or divided between them at the start of the simulation 

to set-innovator
   set-change-agent
   set kind 1
   set acceptance innovator
   set color red
end 

;To load some members of the population with the new technology.

to set-change-agent
   ifelse (Internal-Tech1?) 
   [
      ifelse (Internal-Tech2?)
      [
         ifelse (random 100 < change-agent) 
         [
            set-tech1 
         ]
         [
            set-tech2
         ]
      ]
      [
         set-tech1
      ]
   ]
   [
      if (Internal-Tech2?)
      [
         set-tech2
      ]
   ] 
end 

;These are the two technologies or ideas introduced into the population.
;Tech-1 is the adoption - i.e., the first new technology.  Tech-2 is a disruptive technology, something that
;comes in at a later time, but while Tech-1 is still fresh in people's minds.

to set-tech1
   set status 1
   set size 1
   set shape "triangle"
end 

to set-tech2
   set status 2
   set size 2
   set shape "dot"
end 

to set-early-adopter
   set kind 2
   set acceptance earlyadopter
   set color green
end 

to set-early-majority
   set kind 3
   set acceptance earlymajority
   set color cyan
end 

to set-late-majority
   set kind 4
   set acceptance latemajority
   set color blue
end 

to set-laggard
   set kind 5
   set acceptance laggard
   set color magenta
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; OUTPUT PROCEDURES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
;;; PLOTTING PROCEDURES
;;;

to setup-histo1
  ;Initial Histogram - don't set limits - let model autoset
  set-current-plot "Initial Adoption Type"
  set-histogram-num-bars 5
  update-plot-type
end 

to setup-histo2 
  ;Variable Histogram
  set-current-plot "Category of Adopters"
  set-histogram-num-bars 5
  update-plot-type-current
end 

to setup-histomem
  ;Memory of individuals
  set-current-plot "Memory"
  set-histogram-num-bars 100
  update-plot-mem
end 

to update-plot-pop
  ;update time series
  let total count people
  let t2 count people with [status = 2]
  let t1 count people with [status = 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
  set-current-plot-pen "Disruptors"
  plot t2

  set-current-plot "Groups"
  set-current-plot-pen "Innovators"
  plot count people with [ kind = 1 and status > 0 ]
  set-current-plot-pen "EarlyAdopter"
  plot count people with [ kind = 2 and status > 0 ]
  set-current-plot-pen "EarlyMajority"
  plot count people with [ kind = 3 and status > 0 ]
  set-current-plot-pen "LateMajority"
  plot count people with [ kind = 4 and status > 0 ]
  set-current-plot-pen "Laggard"
  plot count people with [ kind = 5 and status > 0 ]
end 

to update-plot-type
  ;update type histogram -  potentials and adopters
  set-current-plot "Initial Adoption Type"
  set-current-plot-pen "kind"
  histogram [kind] of people
end 

to update-plot-type-current
  ;update type histogram - indicates adopters
  set-current-plot "Category of Adopters"
  set-current-plot-pen "adopted"
  histogram [kind] of people with [status > 0]
end 

to update-plot-mem
  ;update memory histogram - indicates connectivity
  set-current-plot "Memory"
  set-current-plot-pen "mem"
  histogram [length memory] 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)
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; RULES OF INTERACTION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; External influence rules are described here - adoption of type-1 and of type-2

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 ticks
      set end-time round( random-exponential listening-time ) + ticks
      print (word ticks ": external influenced adoption initiated for " who " to last until " end-time)
    ][
      ;adoption probability based on intensity of patch with white as highest, black as lowest, and color in
      ;between.  Then divide this value by the acceptance value for that person type
      ifelse ticks >= 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
        ]
        ;Once done with mass media, move out of the zone
        move-away
        set num-externals (num-externals + 1)
        set total-external-time (end-time - start-time + total-external-time)
        print (word ticks ": " who " of type " kind " has finished adoption mass media session with probability of adopting " prob-to-adopt )
      ][
        print (word ticks ": " who " is listening to mass media presentation for tech1-type innovation")
      ]
    ]
end 

to check-external-disruption
  ;disruption check (Tech2) - works same way as adoption external
    ifelse ( media? = FALSE ) [
      ;Keep track of total number of externals made
      set externals (externals + 1)
      set media? TRUE
      set partner self
      set start-time ticks
      set end-time round( random-exponential listening-time ) + ticks
      print (word ticks ": external influenced disruption initiated for " who " to last until " end-time)
    ][
      ifelse ticks >= end-time [
        set media? FALSE
        set partner nobody
        let prob-to-adopt (([intensity] of patch-here / 100) * prob-to-adopt-tech2-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 ticks ": " who " of type " kind " has finished disruption mass media session with probability of adopting " prob-to-adopt )
      ][
        print (word ticks ": " 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 

;conversations are set up here

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 ticks ": no conversation initiated by " who)
     ]
  ][
    print (word ticks ": 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 me memory ] ]
               
       ;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 ticks
       ask partner [ set start-time ticks ]
       
       ;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) + ticks )
       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 ticks ": 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 (ticks <= end-time) [
       ifelse (ticks > start-time) [
         print (word ticks ": ongoing conversation between " who " and " [who] of partner)
       ][
         print (word ticks ": match already established between " who " and " [who] of partner)
       ]
    ][
       
       ;Decide whether to adopt the new technology when the conversation comes to a close
       ifelse status = 0 [
         ifelse Internal-Tech1? and [status] of partner = 1 [
           if random-float 100 < (1.0 / acceptance) * tech1-coefficient-acceptance [
               set-tech1
               if link-switch [ create-link-with partner]
               print (word ticks ": ID " who " of type " kind " with status " status " accepted partner " [who] of partner " of type " [kind] of partner " with status " [status] of partner)          
           ]
         ]
         [
               print (word ticks ": ID " who " of type " kind " with status " status " rejected partner " [who] of partner " of type " [kind] of partner " with status " [status] of partner)          
         ]
         ifelse Internal-Tech2? and [status] of partner = 2 [
             if random-float 100 < (1.0 / acceptance) * tech2-coefficient-acceptance [
                set-tech2
                if link-switch [ create-link-with partner ]
               print (word ticks ": ID " who " of type " kind " with status " status " accepted partner " [who] of partner " of type " [kind] of partner " with status " [status] of partner)          
             ]
         ]
         [
               print ( word ticks ": ID " who " of type " kind " with status " status " rejected partner " [who] of partner " of type " [kind] of partner " with status " [status] of partner)          
         ]
       ]
       [
               print ( word ticks ": ID " who " of type " kind " with status " status " ignored partner " [who] of partner " of type " [kind] of partner " with status " [status] 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 ticks ": initiator " who " ends conversation with " [who] of partner)
       ][
          print (word ticks ": 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 ticks ": " who " reneged tech1")
    ][
      if Internal-Tech2? and random-float 100 < prob-tech1-to-tech2 [
        set-tech2
        print (word ticks ": " who " changed from tech1 to tech2 innovation")
      ]
    ]
end 

to rethink-disruption
    ifelse random-float 100 < prob-tech2-to-potential [
      set-early-adopter
      print (word ticks ": " who " reneged on tech2 back to early adopter ")
    ][
      if Internal-Tech1? and random-float 100 < prob-tech2-to-tech1 [
        set-tech1        
        print (word ticks ": " who " changed back from tech2 to tech1 innovation")
      ]
    ]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; RUNTIME 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
  
  if (simlength > 0) [
    if (ticks >= simlength) [ stop ]
  ]
  
    
  ;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.
  ;
  ;In latest versions of Netlogo, "without interruption" directive no longer needed
  ask people 
  [
        ;external influence is only for those whose kind is not the same as the media center.  
        if External-Tech1? and [pcolor] of patch-here > tech1-color - 5 and [pcolor] of patch-here < tech1-color + 5 [
          check-external-adoption
        ]
        if External-Tech2? and [pcolor] of patch-here > tech2-color - 5 and [pcolor] of patch-here < tech2-color + 5 [
          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
            ]
        ]
   ]  
  
  ;plots are controlled by specific routines, not by update-plots primitive (which is run by tick now)
  update-plot-pop
  update-plot-type
  update-plot-type-current
  update-plot-mem
  update-monitors
  
  ;clock update
  tick
end 

There is only one version of this model, created over 5 years ago by Michael Samuels.

Attached files

File Type Description Last updated
Innovation.png preview Preview for 'Innovation' over 5 years ago, by Michael Samuels Download

This model does not have any ancestors.

This model does not have any descendants.