Cultural Diffusion of Programming Languages

Cultural Diffusion of Programming Languages preview image

1 collaborator

Sergi_valverde Sergi Valverde (Author)

Tags

cultural evolution  

Tagged by Sergi Valverde over 8 years ago

diffusion of technology 

Tagged by Sergi Valverde over 8 years ago

multilingualism 

Tagged by Sergi Valverde over 8 years ago

programming languages 

Tagged by Sergi Valverde over 8 years ago

software 

Tagged by Sergi Valverde over 8 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.5 • Viewed 622 times • Downloaded 41 times • Run 0 times
Download the 'Cultural Diffusion of Programming Languages' modelDownload this modelEmbed this model

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


Info tab cannot be displayed because of an encoding error

Comments and Questions

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

Click to Run Model

; A Model of Cultural Diffusion of Programming Languages
; Sergi Valverde and Ricard Solé
; May, 15th (2015)
; The array extension requires Netlogo 5.0
extensions [array]
globals 
[
  num-iter 
  max-capacity
  census
]

patches-own [
  ; the programming culture of a developer is described by a list holding up to 'max-capacity' languages  
  langj
]

to setup
  set num-iter 0
  set max-capacity 3
  set census array:from-list n-values ( 1 + MaxLang ) [5]
 
  ; set empty lists
  ask patches 
  [
;     set langj  (list (1 + random MaxLang )  (1 + random MaxLang ) ( 1 + random MaxLang ))
    set langj (list)
  ]
  transfer_colormap
end 

to plot-census
  clear-plot
 ; foreach n-values array:length census [?] 
 let llista sort-by > array:to-list census
  foreach llista
  [ 
    plot log ? 10 
  ]
end 

to transfer_colormap
  ask patches
  [
    let langs sort-by > langj
    let r 0
    let g 0
    let b 0
    let len length langs
    if len > 0 [
      set r (item 0 langs) / (1 + MaxLang)
    ]
    if len > 1 [
      set g (item 1 langs) / (1 + MaxLang)
    ]
    if len > 2 [
      set b (item 2 langs) / (1 + MaxLang)
    ]
    set pcolor rgb  (255.0 * r)  (255.0 * g) (255.0 * b)
  ]  
end 

; Weighted random draw from a list, options: 
; 1) Use the NetLogo/Rnd-Extension
; 2) http://stackoverflow.com/questions/22615519/netlogo-weighted-random-draw-from-a-list-how-to-use-rnd-extension

to-report weighted-rand-index2 [ values probs ]
  let i -1
  let found false
  let nc length probs
  while [(not found) ]
  [
    set i random nc
    let p item i probs
    if ( random-float 1.0 < p ) or ( p >= 0.9999999999 )
    [
       set found true 
    ]
  ]
  report i 
end 

 
; this is executed in patch context

to-report least-frequent-known [lan C ] ; langj census
  if C = 0 [   ; Is this a "Memento" world?
    report -1
  ]
  if length lan = 0 [ ; An ignorant programmer?  
    report -1
  ]
  if length lan = 1 [
    report 0 
  ]
  let prob map [ 1.0 - ((array:item census ?) / C) ] lan
  report  weighted-rand-index2 lan prob
end 

; this is executed in patch context

to-report most-frequent-known [ lan C ] ; langj census
  if C = 0 [   ; Is this a "Memento" world?
    report -1
  ]
  if length lan = 0 [ ; An ignorant programmer?  
    report -1
  ]
  if length lan = 1 [
    report 0 
  ]
  let prob map [ ((array:item census ?) / C) ] lan
  report weighted-rand-index2 lan prob
end 

to adoption 
   let check true
    
    ; Rule #1: Innovation 
    if (random-float 1.0 < ProbInnov) 
    [
      ; check if this developer has some free memory slots
      if length langj < max-capacity
      [
        ; discover one random language
        let l (1 + random MaxLang)
        
        ; is this new  ?
        if not member? l langj 
        [
          set langj lput l langj
          
           ; update census[l] ++; 
          array:set census l (array:item census l + 1)
        ]
      ]
      set check false
    ]
    
    ; Rule #2: Adoption
    if (random-float 1.0 < ProbAdoption) and check
    [
      ; pick one random neighbor
      let n one-of neighbors
      
      ; source(n) knows at least one language
      let langv [langj] of n
      if length langv > 0
      [
          ; compute normalization constant
        let C (sum array:to-list census)
        
        ; learn  the most frequent language  
         let lv item  (most-frequent-known langv C) langv
         
         ; check whether lv is a new language for the target j
         if not member? lv langj 
         [
            let lenj length langj 
            if lenj >= max-capacity
            [
              ; random replacement 
              let i random lenj 
              let f item i langj   
              set langj remove-item i langj   
              array:set census f (array:item census f - 1)              
            ]
            set langj lput lv langj
            array:set census lv (array:item census lv + 1)
         ]
      ]
      set check false
    ]
    
    ; Rule #3: Language Forgetting
    if (random-float 1.0 < ProbForget) and check
    [
      ; at least knows 2 different languages (one will be forgotten)
      if length langj > 1 
      [
        ; compute normalization constant
        let C (sum array:to-list census)
        
         ; remove the least frequent language
         let i (least-frequent-known langj C)
         let f item i langj 
         
         ; update census[l] --; 
         array:set census f (array:item census f - 1)
         
         ; forget 
         set langj remove-item i langj        
       ]
    ]
end 

to go   
  ; pick a random developer
  ;  let p one-of patches
  
  ; ask p  
  ask patches
  [ 
   adoption
  ] 
  
   transfer_colormap
 
  plot-census
  set num-iter num-iter + 1
end 

There are 2 versions of this model.

Uploaded by When Description Download
Sergi Valverde over 8 years ago Additional information about the model. Download this version
Sergi Valverde over 8 years ago Initial upload Download this version

Attached files

File Type Description Last updated
A cultural diffusion model of programming languages.pdf pdf This is the paper were the model was first described: Valverde, S., Solé, R. V. (2015) "A Cultural Diffusion Model for the Rise and Fall of Programming Languages" Human Biology 87(3), 224-234. over 8 years ago, by Sergi Valverde Download
Cultural Diffusion of Programming Languages.png preview Preview for 'Cultural Diffusion of Programming Languages' over 8 years ago, by Sergi Valverde Download

This model does not have any ancestors.

This model does not have any descendants.