Back to the student project listing page


powered by NetLogo

view/download model file: Innovation Ecosystem.nlogo

WHAT IS IT?

This model explores the dynamics of an innovation eco-system. It simulates firms cooperatively developing new technologies to generate revenue and to enhance their technological knowledge. The model builds on recent research on technological innovation which suggests that increasingly firms' innovation success depends on available and capable innovation partners as technological knowledge required for such innovation becomes more complex and specialized among firms.


HOW IT WORKS

In a stable environment firms search for and form partnerships with other firms, jointly invest in a development effort for a new product, and - if this development is successful - launch the product and gain revenue from the launched product. Collaboration partners also gain knowledge through their collaboration efforts. All product development is carried out through collaboration.

There are two critical variables that change the dynamics of the eco-system.
The first regards the variety of knowledge in the system. If the variety is low, only one type of knowledge that the different firms hold in different amounts. Through collaboration firms combine this same type of knowledge to develop "normal" products (type 0; blue boxes). If the variety is high, two different types of knowledge exist and can be combined by firms. Successfully combining the same type of knowledge produces "normal" products (type 0; blue boxes). Successfully combining different types of knowledge produces "special" products (type 1; red boxes).

The second critical variable regards the strategy followed by firms during development. If they are ambitious, firms - as they grow older - will increasingly try to develop products that exceed the technological standard set by previous products. If firms are not ambitious, they aim to develop products that simply meet, not exceed, the technological standard. Different levels of revenues are gained from products that do and those that do not exceed the technological standards of previously launched products.

Product development is a risky affair. Firms are given a MAXIMUM DEVELOPMENT TIME to push their development projects' progress to or beyond the TECHNOLOGICAL HURDLE, which is initial set a certain level and then increases depending on the technological progress in the industry. To advance their projects' progress they apply their KNOWLEDGE. Each tick they have a chance that their applied knowledge successfully advances the project. That chance is improved the more products the collaborating firms have already launched. Once the hurdle is reached the product can be launched.

In the course of their operation, firms consume resources. Every tick, each firm incurs a set level of OPERATING COSTS, which increases the more products that firm has launched successfully. During product development firms incur DEVELOPMENT COSTS for each unit of knowledge they apply to the project to advance its progress to the technological hurdle.


HOW TO USE IT

1. Set the KNOWLEDGE-VARIETY slider to 1 or 2, to determine the number of different knowledges in the system. If 2 varieties exist, the SPECIAL-KNOWLEDGE-LIKELIHOOD slider determines how rare the second type of knowledge is. Firms that hold the first type of knowledge are shown as circles. Firms that hold the second type of knowledge are shown as triangles.
2. Switch the AMBITIOUS? switch from FALSE to TRUE to have firms strive to exeed the technological level of previously launched products.
3. Adjust the slider parameters (see below), or use the default settings.
4. Press the SETUP button.
5. Press the GO button to begin the simulation.
6. Look at the monitors to see the current population statistics (age, knowledge, resources, level of technology, collaboration success rates)


PARAMETERS

World
===============
Firm-no.: initial number of firms generated for the simulation at setup.
Knowledge-variety: number of different set of knowledge in the system. Every firm can only hold one type of knowledge.
Firm-spawn: likelihood of a new firm being founded at each tick.
Max-firms: maximum number of firms that can exist in the system. As long as the maximum number is reached, no new firms will be founded.

Firms
==============
Link-capacity:
Initial-resources:
max-initial-knowledge:
regular-knowledge-gain:

hightech-price1: multiplier that determines how much revenue firms earn from special (type 1, red) products that exceed the technology of previous products.
lowtech-price1: multiplier that determines how much revenue firms earn from special products that do not exceed the technology of previous products.
hightech-price0: multiplier that determines how much revenue firms earn from normal products (type 0, blue) that exceed the technology of previous products.
lowtech-price0: multiplier that determines how much revenue firms earn from normal products (type 0, blue) that do not exceed the technology of previous products.
(generally: multiplier * level of technology of new product = revenue)

logged?: switches between linear (FALSE) to log (TRUE) increase of operating costs relative to a firm's number of products launched.
oper-cost: operating costs incured by firm at each tick.
admin-factor: multiplier that influences how much operating costs increase for a firm that have successfully launched products (if logged? is on FALSE). (calculation: # of successfully lauched products * admin-factor * oper-costs = total operating costs)
log-multiple: multiplier that influences how much operating costs increase for a firm that have successfully launched products (if logged? is on TRUE).

partnering-likelihood: percentage chance that a firm is establishing a partnership with an elegible partner it has detected. A firm is an eligible if it has not yet reached its link capacity and has no current link with the other firm.
partner-radius: within the partner firms can detect elegible partners.
radius-increase: multiplier that influence how much the radius for detecting partners increases with a firm's age

dev-risk: development risk determines the likelihood that a firm's contribution of knowledge successfully advances the progress of the development project.
experience-multiplier: multiplier that influences how much firms improve their chances of successfully advance their development projects depending on their track record of successful product launches.
knowledge-multiplier: multiplier that influences how much firms' knowledge assets are applied to the development project.
learning-success: percentage of the successfully launched product's level of technology that firms benefit from to increase their knowledge assets. (lessons-learned from success)
learning-success: percentage of an unsuccessful development effort's level of technology (before the project was abandoned) that firms benefit from to increase their knowledge assets. (lessons-learned from failure)

dev-costs: cost per unit of knowledge that is applied the the development effort.
devtime-max: maximum number of ticks firms have to progress their development projects to or beyond the hurdle.
initial-hurdle: level technology that new project developments must reach before they can be launched.
min-tech-hurdle: if the technology has significantly progressed beyond the initial technology hurdle, this percentage indicates the minimum level of technology, relative to the most advanced product so far, new products must reach before they can be launched.

ambitious?: determines whether firms try to push new products beyond previous products' level of technology.


THINGS TO NOTICE

Under many parameter combinations the eco-systems total resources (sum of all resources held by all firms) roughly follows a sinus curve. What produces they spikes of wealth in the system and the eventual collapse to a low level?

How do the dynamics of the system change when firms become technologically ambitious, i.e. when they try to push new products beyond previous products' level of technology?


THINGS TO TRY

Try adjusting the parameters under various settings. How sensitive is the stability of the model to the particular parameters?

Can you find any parameters that generate a stable ecosystem in which the industry continues indefinetly without incumbent firms dominating the system ?

Which (partnering & development) parameters have the strongest impact on technological advance, on average age of firms, and on resources held by firms?


EXTENDING THE MODEL

The model is already complicated, but the their are a few feature worth adding:

Partnering strageties: firms can be given different partnering strategies (either adaptive strategical or generic fixed strategies at birth) that influence their choice of partners. Criteria for partner selection could be partners' track record of development, the knowledge endowment, their resources, or the number of times they have previously colloborated with the other firm.

Knowledge dynamics: an optional knowledge mechanism could be that firms' knowledge assets' value depreciate at an increasing rate with age. That mean an old firm may have a lot of knowledge, but that knowledge is not up-to-date and thus contributes little value to a development effort. This might create and interesting tipping point in situations where incumbents see their wealth and knowledge explode thus all-but exclude new comers from the system.


NETLOGO FEATURES

While, the "interesting" uses of NETLOGO feature may appear so only to the author of this model, here are a two tentative suggestions:

Use of links as development projects which absorb / combine properties of the actors they connect.

Dynamically advancing technology thresholds.

Products that gracefully fade out of the market.


CREDITS AND REFERENCES

M Iansiti, R Levien (2004). The keystone advantage: what the new dynamics of business ecosystems mean for strategy, innovation, and sustainability. Cambridge, MA: Havard Business School Press.

R Adner (2006). Match your innovation strategy to your innovation ecosystem. In: Harvard Business Review. vol:84 iss:4 pg:98

B Iyer, TH Davenport (2008). Reverse engineering Google's innovation machine. In:
Harvard Business Review. vol:86 iss:4 pg:58


PROCEDURES

;to dos:
; adaptive partnering strategies (regarding type of knowledge and depths of experience of partners; preference for repeat partnerships)
; should firms be learning from bad partnering experience?
; should there be some experimentation with partnering preferences?


globals [
  progress-hurdle0 progress-hurdle1
  knowledge-check0 knowledge-check1
  total-blue total-red
  firm-deaths  firm-births
  gsuccessful-collab0 gsuccessful-collab1
  gunsuccessful-collab0 gunsuccessful-collab1
  tech-leveltmp highest-tech0 highest-tech1
  oldest biggest wisest
  oldest-death biggest-death wisest-death
]

breed [products product]
breed [firms firm]

firms-own [
  resources resourcesi firm-age
  knowledge-type knowledge-depth knowledge-depthi knowledge-breadth 
  my-radius
  contribution accum-dev-costs max-resources
  successful-collab0 successful-collab1 unsuccessful-collab0 unsuccessful-collab1
  ]

links-own [
  link-duration
  product-type
  progress
  partners-successes0
  partners-successes1 
  partners-knowledge
  ]

products-own[
  life 
  tech-level
  ]

to setup
  clear-all
  create-firms firm-no ;; create the firms 
  [
    set shape "circle" 
    setxy random-xcor random-ycor
    set resources initial-resources
    set resourcesi resources
    set firm-age 0
    set knowledge-type knowledge-variety  
    if knowledge-variety > 1 [
      if random-float 100 < special-knowledge-likelihood 
                [set knowledge-type random knowledge-variety set shape "triangle"] 
                ]
    set knowledge-depth random ( max-init-knowl + 1)
    set knowledge-depthi knowledge-depth
    set resourcesi resources
    if resources > 0 [set size ln resources / 4 ] 
  ]
    set-default-shape products "box"
    set progress-hurdle0 initial-hurdle set progress-hurdle1 initial-hurdle 
  
end




to go
  ask patches [set pcolor black]
  ask firms [ if resources > max-resources [set max-resources resources]]
  ask firms with [resources <= 0] [
    set firm-deaths firm-deaths + 1 
    if firm-age > oldest-death [set oldest-death firm-age]
    if max-resources > biggest-death [set biggest-death max-resources]
    if knowledge-depth > wisest-death [set wisest-death knowledge-depth] 
    die
    ] 
  if count firms = 4 [ stop ]
  if stop-at-5000? [if ticks >= 5000 [stop]]
  ask firms [
    set firm-age firm-age + 1 
    if knowledge-depth > 0 [set knowledge-depth knowledge-depth + regular-knowledge-gain] 
    if knowledge-type = knowledge-variety [set shape "circle"]
    if knowledge-type < knowledge-variety [set shape "triangle"]
    if resources > 0 [set size ln resources / 4]
  ]
  ask firms [set my-radius (partner-radius + (radius-increase / 100) * ln (firm-age + 1))]
  create-newfirm
  move
  learn
  partner
  collaborate
  age-products
  if (highest-tech0 * (min-tech-hurdle / 100)) > initial-hurdle [set progress-hurdle0 highest-tech0 * (min-tech-hurdle / 100)]
  if (highest-tech1 * (min-tech-hurdle / 100)) > initial-hurdle [set progress-hurdle1 highest-tech0 * (min-tech-hurdle / 100)] 
  tick
  do-statistics
end

;========================================================================================
; basic stuff

to create-newfirm
  if count firms < max-firms [
  if random 100 < firm-spawn [create-firms 1
    [
    set shape "circle" 
    set size 2  ;; easier to see
    setxy random-xcor random-ycor
    ask patches in-radius 2 [set pcolor white]
    set resources initial-resources
    set firm-age 0
    set knowledge-type knowledge-variety  
    if knowledge-variety > 1 [
      if random-float 100 < special-knowledge-likelihood 
                [set knowledge-type random knowledge-variety set shape "triangle"] 
                ]
    set knowledge-depth random ( max-init-knowl + 1)
    set knowledge-depthi knowledge-depth
    set resourcesi resources
    set firm-births firm-births + 1
  ]
     ]]
end 

to move
  ask firms [rt random 50 lt random 50 fd 1]
  ifelse logged? [ask firms [set resources resources - (oper-costs * (1 + (3 * ln ( successful-collab0 + successful-collab1 + 1)))) ]]
                 [ask firms [set resources resources - (oper-costs * (1 + ((successful-collab0 + successful-collab1) * admin-factor))) ]]
end

to learn
  ; ask firms [set knowledge-depth knowledge-depth + knowledge-gain] 
end


;========================================================================================
; partnering

to partner
let new-partner nobody
if any? firms with [any? other firms in-radius my-radius ] [
    ask firms with [any? other firms in-radius my-radius] 
       [
         if count my-links < link-capacity [
           if random 101 <= partnering-likelihood [
         if any? other firms with [count link-neighbors < link-capacity] with [not link-neighbor? myself] in-radius my-radius [
         set new-partner one-of other firms with [count link-neighbors < link-capacity] with [not link-neighbor? myself] in-radius my-radius
       create-link-with new-partner
       set knowledge-check0 [knowledge-type] of self
       set knowledge-check1 [knowledge-type] of new-partner  
       ask link-with new-partner [
         set link-duration 0 
         if knowledge-check0 != knowledge-check1 [set product-type 1]
       ]]
         ]
           ]
         ]
       ]
  end

;observer> ask turtles with [shape = "arrow"] with [color = red ] [fd 5]

;========================================================================================
; collaborating and launching products

to collaborate
        ; ask links [ask both-ends [set resources resources - dev-costs]] ;; old linear/fixed development costs
        ask links [set partners-successes0 (sum [successful-collab0] of both-ends)
                   set partners-successes1 (sum [successful-collab1] of both-ends)]
                   
        ask links [ ifelse product-type = 1   ;; decision tree for special products
          
          [
              ifelse link-duration >= devtime-max [ if progress < progress-hurdle1 
                                                      [ask both-ends [set unsuccessful-collab1 unsuccessful-collab1 + 1
                                                          set gunsuccessful-collab1 gunsuccessful-collab1 + 1
                                                          ]
                                                       set tech-leveltmp [progress] of self
                                                       ask both-ends [set knowledge-depth knowledge-depth + (tech-leveltmp * (learning-failure / 100))]   
                                                       die] 
                                                      launch-product1]
              [  ifelse ambitious? [if progress >= progress-hurdle1 [
                                         if random (partners-successes0 + 1) = partners-successes1  [launch-product1]]]
                                   [if progress >= progress-hurdle1 [launch-product1]] ;; firms with more successes are more likely to push further in dev.
              ]
          ]
          
          [                            ;; decision tree for normal products
              ifelse link-duration >= devtime-max [ if progress < progress-hurdle0 
                                                     [ask both-ends [set unsuccessful-collab0 unsuccessful-collab0 + 1
                                                         set gunsuccessful-collab0 gunsuccessful-collab0 + 1
                                                         ]
                                                       set tech-leveltmp [progress] of self
                                                       ask both-ends [set knowledge-depth knowledge-depth + (tech-leveltmp * (learning-failure / 100))]
                                                       die] 
                                                     launch-product0] 
              [  ifelse ambitious? [if progress >= progress-hurdle0 [
                                         if random (partners-successes0 + 1) = partners-successes0  [launch-product0]]]
                                   [if progress >= progress-hurdle0 [launch-product0]]   
              ]
          ]
        ] ;; closing bracket for collaborate decision tree
        ask links [add-knowledge]
        ask links [set link-duration link-duration + 1]
                    
end

to launch-product1 ;; link procedure
  set tech-leveltmp [progress] of self
  ifelse tech-leveltmp > highest-tech1 [set highest-tech1 tech-leveltmp
                                        ask both-ends [set resources resources + ((tech-leveltmp * hightech-price1 * dev-costs) / 2)]]
                                       [ask both-ends [set resources resources + ((tech-leveltmp * lowtech-price1 * dev-costs) / 2)]]
  ask one-of both-ends [ hatch-products 1 [
            set color red 
            set total-red total-red + 1
            set tech-level tech-leveltmp
            set size (ln tech-level) / 2
            ]]
  
  ask both-ends [
    if knowledge-type = knowledge-variety [set shape "circle 2"]
    if knowledge-type < knowledge-variety [set shape "triangle 2"]
    ; set resources resources + (product1-price * product-life)
    set successful-collab1 successful-collab1 + 1
    
    set knowledge-depth knowledge-depth + (tech-leveltmp * (learning-success / 100)) 
    ]
  set gsuccessful-collab1 gsuccessful-collab1 + 1
  die
end

to launch-product0 ;; link procedure
  set tech-leveltmp [progress] of self
  ifelse tech-leveltmp > highest-tech0 [set highest-tech0 tech-leveltmp
                                        ask both-ends [set resources resources + ((tech-leveltmp * hightech-price0) / 2)]]
                                       [ask both-ends [set resources resources + ((tech-leveltmp * lowtech-price0) / 2)]]  
  ask one-of both-ends [ hatch-products 1 [
            set color blue 
            set total-blue total-blue + 1
            set tech-level tech-leveltmp
            set size (ln tech-level) / 2
            ]]
 
  ask both-ends [
    if knowledge-type = knowledge-variety [set shape "circle 2"]
    if knowledge-type < knowledge-variety [set shape "triangle 2"]
    ; set resources resources + (product0-price * product-life) ;; old product pricing
    set successful-collab0 successful-collab0 + 1
    set knowledge-depth knowledge-depth + (tech-leveltmp * (learning-success / 100)) 
    ]
  set gsuccessful-collab0 gsuccessful-collab0 + 1
  die
  
   
end

; to add-knowledge ;; link procedure, old development-procedure: random base + added progress proportional to partners' combined knowledge
;  
;  set progress progress + (random (random-progress))
;  set combined-knowledge (sum [knowledge-depth] of both-ends / 2)
;  set progress progress + ((ln combined-knowledge) * experience-multiplier)
;  end 

to add-knowledge
  ask one-of both-ends [
                        set contribution (knowledge-multiplier * (ln (knowledge-depth + 1))) ;;* ((1 + (ln (successful-collab0 + successful-collab1 + 1)* experience-multiplier) ))) 
                        set resources resources - (contribution * dev-costs)
                        set accum-dev-costs accum-dev-costs + (contribution * dev-costs)
                        ask other-end [set contribution (knowledge-multiplier * (ln (knowledge-depth + 1))) ;; * ((1 + (ln (successful-collab0 + successful-collab1 + 1)* experience-multiplier) )))  
                                       set resources resources - (contribution * dev-costs)
                                       set accum-dev-costs accum-dev-costs + (contribution * dev-costs)]
                       ]
  if random (101 - ((1 + (ln (partners-successes0 + partners-successes1 + 1)* experience-multiplier) ))) < dev-risk [set progress progress + (sum [contribution] of both-ends)]
   
end


;to collaborate-old
;        ask links [ if link-duration > devtime-max [ ifelse product-type = 1 [
;            ask one-of both-ends [ if random 100 < success-rate [ hatch-products 1 [
;            set color red 
;            set heading 180
;            set total-red total-red + 1 
;            ]]] 
;        ask both-ends [set resources resources + (product1-price * product-life)]
;        die
;        ]
;        
;        [
;        ask one-of both-ends [ if random 100 < success-rate [hatch-products 1 [
;            set color blue 
;            set heading 180 
;            set total-blue total-blue + 1
;            ]]] 
;        ask both-ends [set resources resources + (product0-price * product-life)]
;        die
;        ]]
;      ask both-ends [set resources resources - dev-costs]
;      set link-duration link-duration + 1  
;        ]
;      
;end

;========================================================================================

to age-products
  ask products [set life life + 1
                set color color - 0.1
                if life >= 40 [die]]
;  if color 
;  [
;    ask products with [life > product-life] [die]
;    ; ask products with [ycor > -16] [fd .1]
;    set life life + 1
;  ]
end  
  


;========================================================================================

to do-statistics
  set-current-plot "firms-counter"
  plot count firms
    set-current-plot "sum-resources"
  plot sum [resources] of firms
  set-current-plot "tech-dev-plot"
  set-current-plot-pen "prod0"
  plot highest-tech0
  set-current-plot-pen "prod1"
  plot highest-tech1 
  
if max [firm-age] of firms > oldest [set oldest max [firm-age] of firms]
if max [resources] of firms > biggest [set biggest max [resources] of firms]
if max [knowledge-depth] of firms > wisest [set wisest max [knowledge-depth] of firms]  

  
end

;========================================================================================

;to hippo-mate
;  ask hippos [ if pcolor = blue [
;      let mate count other hippos in-radius shy-ness                   
;  if mate = 1                           
;    [ if random 100 < fertility [hatch 1 rt random-float 360 fd 1]]]] 
;  end


; to hippo-die
;   ask ufos [ask patches with [pcolor = green] in-radius tractor-beam [set pcolor yellow]]
;   ask hippos [ if pcolor = yellow [ die ]]                      
; end