Simulateur_EN_v5.7

Simulateur_EN_v5.7 preview image

1 collaborator

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.2-RC3 • Viewed 378 times • Downloaded 32 times • Run 0 times
Download the 'Simulateur_EN_v5.7' 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

extensions [sound]

turtles-own [meme
             pre
             infl_list
             ]

globals [nb
         rn
         co      
         nets               
         meme_2
         meme_R                
         pre_R
         host         
         change
         pole       
         total
         percentage
         p_class1
         p_class2
         p_class3
         p_class4
         p_class5
         p_class6
         in_data
         iteration                           
         file-data
         list_data      
         percent
         autolink
         Dif
         TermMoins
         TermPlus                          
         u1
         u2
         w1
         w2
         s
         z
         ]

to randomize  ;; générer des variables aléatoires normalisées
  set u1 random-float 1
  set u2 random-float 1
  set w1 (2 * u1 - 1)
  set w2 (2 * u2 - 1)
  set s ((w1 ^ 2) + (w2 ^ 2))
  if s <= 1
     [set z (w1 * sqrt(-2 * ln s / s) * random noise / 10)]
end 

to setup
  set out false 
  set majority false
  file-close-all
  clear-all
  if pole_right = true [out_pole set pole true]
  set nb 0  
  ifelse model = false [set Do_network true]
                       [set Do_network false]
  set change 0
  set total 0 
  ask patches [ set pcolor lime]
  draw
  ifelse model = false [setup-turtles]
                       [set-default-shape turtles "person"]
  if circle [layout-circle turtles limits / 3
              ask turtles [set color yellow
                           set meme xcor
                           set pre ycor]]
 if model = false [ask turtles [ifelse meme < 0 [set color red] [set color blue]]] 
  reset-ticks
end 

to draw  ;; dessiner les axes
  ask patches [if pxcor = 0 and pxcor <= 30 [set pcolor gray]
               if pycor = 0 and pycor <= 30 [set pcolor gray]]
  
 
  ask patch  -5  0 [set pcolor violet]
  ask patch  -10  0 [set pcolor violet]
  ask patch  -15  0 [set pcolor violet]
  ask patch  -20  0 [set pcolor violet]
  ask patch  -25  0 [set pcolor violet]
  ask patch  -30  0 [set pcolor violet]
  ask patch  0  0 [set pcolor violet] 
  ask patch  5  0 [set pcolor violet]
  ask patch  10  0 [set pcolor violet]
  ask patch  15  0 [set pcolor violet]
  ask patch  20  0 [set pcolor violet]
  ask patch  25  0 [set pcolor violet]
  ask patch  30  0 [set pcolor violet]
  ask patch  0  5 [set pcolor violet]
  ask patch  0  10 [set pcolor violet]
  ask patch  0  15 [set pcolor violet]
  ask patch  0  20 [set pcolor violet]
  ask patch  0  25 [set pcolor violet]
  ask patch  0  30 [set pcolor violet]
end 

to strength ;; générer la prégnance initiale en relation avec le niveau de polarisation
   set pre (abs(meme) + log(random-float noise) 2)
   if pre < 0 [set pre random-float 1]
end 

to memetic ;; générer la polarisation des memes à l'intérieur des limites fixées
 set meme random-xcor
 ifelse meme >= 0 [if abs(meme) > limits [set meme random-float limits]]
                 [if abs(meme) > limits [set meme random-float limits * -1]]
 set xcor meme
end 

to setup-turtles  ;; créer les agents
   set-default-shape turtles "person"
   create-turtles sample [memetic
                          strength
                          if model = false [if not circle [setxy meme pre                                                                            
                          ifelse meme < 0 [set color red] [set color blue]]]]
  if model = false [ask turtle 0 [set color magenta]
                         ask turtle 1 [set color yellow]
                         ask turtle 2 [set color orange]
                         ask turtle 3 [set color pink]]
end 

to go 
  set nb 1 
  if out = false and pole_right != true [file-close]
  if pole_right = false [set pole false]
  ask turtles [set co (exp(abs(meme)))
               set host who
               if event_left > event_right [set event_right event_left + 1] ;; faire suivre la limite droite de l'événement en fonction de la limite gauche              
               if Auto_Nets [if autolink >= X_sample_nets * sample * 3 [set Do_Network false ;;envoyer le signal pour l'arrêt de l'auto_nets
                                                                    set Auto_Nets false
                                                                    set out false
                                                                    sound:play-note "CELESTA" 60 64 1]]                                                                                        
               randomize               
               if Do_network [influence]
               set nets round(count links / influencers) 
               if nets >= round(sample * (sample - 1) / influencers) [set out false]                                                                                          
               transmission
               if model = false [ifelse meme < 0 [set color red] [set color blue]]                             
               if out = true and model = true [file-write  who file-write meme file-write pre file-write infl_list]  
               ]
    tick   
    if nb_ticks = ticks [stop]
    if pole = true [set percentage count turtles with [meme > 0]
                    set percentage round(percentage / sample * 100)
                    set p_class1 count turtles with [color = blue and meme > 0]
                    set p_class1 round(p_class1 / count turtles with [color = blue] * 100)
                    set p_class2 count turtles with [color = magenta and meme > 0]
                    set p_class2 round(p_class2 / count turtles with [color = magenta] * 100)
                    set p_class3 count turtles with [color = orange and meme > 0]
                    set p_class3 round(p_class3 / count turtles with [color = orange] * 100)
                    set p_class4 count turtles with [color = yellow and meme > 0]
                    set p_class4 round(p_class4 / count turtles with [color = yellow] * 100)
                    set p_class5 count turtles with [color = pink and meme > 0]
                    set p_class5 round(p_class5 / count turtles with [color = pink] * 100)
                    set p_class6 count turtles with [color = red and meme > 0]
                    set p_class6 round(p_class6 / count turtles with [color = red] * 100)                   
                   ifelse model = true [file-write percentage file-write "; "  file-write p_class1 file-write "; " file-write p_class2 file-write "; " file-write p_class3 file-write "; " file-write p_class4 file-write "; " file-write p_class5 file-write "; "file-print p_class6]
                                          [file-print percentage]]                          
    if majority = true [if count turtles with [meme > 0] / sample * 100 > 50 [stop]]
    set percent (change / total * 100)   
    if Hide_links [ask links [hide-link]]
    set iteration ticks ;;rafraichir le graphique
    if iteration >= 500 [reset-ticks
                         clear-plot]          
end              

to influence  ;; établir les influenceurs pour chaque agent
   set infl_list []
   while [nb <= influencers]
          [set rn random sample 
           while [rn = who]
                 [set rn random sample]
          ifelse in-link-neighbor? turtle rn [set autolink autolink + 1]                                                                                                              
                                             [if length infl_list <= influencers [create-link-from turtle rn]]                                                                                                                                                                                                                                                                                
          set nb nb + 1          
          set infl_list sentence infl_list (list rn)
          if nb > influencers [if out [file-write  who file-write meme file-write pre file-write infl_list]]
          ]                 
end 

to transmission  ;; procéder à la transmission mémétique                                         
   ask in-link-neighbors [set total total + 1                                                  
                          if [pre] of self > [pre] of myself  
                                            [set meme_R ([meme] of self)                                                                                                                                                              
                                             set pre_R ([pre] of self)                                                                                                               
                                             ifelse (([meme] of self < 0 and [meme] of myself > 0) or ([meme] of self > 0 and [meme] of myself < 0))
                                                    [set meme_2 [meme] of myself * -1
                                                     set change change + 1 ]                                                                                                          
                                                    [set meme_2 [meme] of myself]
                                             ifelse no-polarize 
                                                    [if pre_R > [pre] of myself  [set meme_2 (meme_2 + (meme_R * pre_R / co * [pre] of myself) + z * noise) / base]] 
                                                    [if pre_R > [pre] of myself  [set meme_2 (meme_R - ([meme] of myself * [pre] of myself / co * pre_R) + z * noise) / base]]                                           
                                             ifelse meme_2 >= 0 [if abs(meme_2) >= limits [set meme_2 (limits - random-float noise)]]
                                                                [if abs(meme_2) >= limits [set meme_2 (limits - random-float noise) * -1]]                                                                                         
                                     ask turtle host [pregnance
                                     set meme meme_2                                                              
                                     set xcor meme                                      
                                     if pre > limits [set pre limits]
                                     set ycor pre                                  
                                     ]
                                                                                                                         
                         ]]                                            
end 

to pregnance ;; calculer la prégnance après la transmission mémétique
  randomize  
  Set Dif (abs(meme_2 - meme)) / squeeze  
  Set TermMoins (pre - Dif + z) / base
  Set TermPlus (pre + Dif + z) / base
  ifelse pre >= abs(meme_2) - effect
     [if TermMoins >= 0 and TermMoins <= limits [set pre TermMoins]]
     [if TermPlus >= 0 and TermPlus <= limits [set pre TermPlus]]
  if pre <= 0 [set pre random-float noise] 
end 

to event ;; produire un événement
  ask turtles [if meme > event_left and  meme < event_right and pre < pre_top and pre > pre_bottom [set meme_2 meme
                                                              set meme_2 meme_2 + Move
                                                              ifelse meme_2 >= 0 [if abs(meme_2) >= limits [set meme_2 (limits - random-float noise)]]
                                                                                 [if abs(meme_2) >= limits [set meme_2 (limits - random-float noise) * -1]]            
                                                              ifelse Move_strength = 0 [pregnance]
                                                                     [set pre Move_strength + log(random-float noise) 2]
                                                                      
                                                              set meme meme_2                                                            
                                                              setxy meme pre]
               ]
end 

to out_file
  file-close
  set file-data user-new-file
    if is-string? file-data
  [ 
    if file-exists? file-data
      [file-delete file-data]
    file-open file-data   
  ]
if pole_right = false [set out true]
end 

to in_file  
  set file-data user-file
  if (file-data != false)
  [
    set list_data []
   file-open file-data
   while [not file-at-end?]
         [set list_data sentence list_data (list (list file-read file-read file-read file-read)) ]
   user-message "File loading complete!"
   file-close
  ]
  clear-turtles
  set in_data 1
  create-turtles sample
   ifelse (is-list? list_data) [foreach list_data [ask turtle first ? [if in_data <= (limit_in * sample) + 1  [set meme item 1 ?                                                 
                                                                                                               set pre item 2 ?
                                                                                                               set infl_list last ?                                                 
                                                                                                               foreach infl_list [create-link-from turtle ?] 
                                                                                                               ask links [hide-link]
                                                                                                               setxy meme pre
                                                                                                               ifelse model = false [ifelse meme < 0 [set color red] [set color blue]]
                                                                                                                                         [if who <= 50 [set color blue]
                                                                                                                                          if who > 50 and who <= 111 [set color magenta]
                                                                                                                                          if who > 111 and who <= 136 [set color orange]
                                                                                                                                          if who > 136 and who <= 161 [set color yellow]
                                                                                                                                          if who > 161 and who <= 185 [set color pink]
                                                                                                                                          if who > 185 [set color red]]
                                                                                                               set in_data in_data + 1]]]]
                                                                                                                 
                                                                                
                                [user-message "Error loading"]
if pole_right [out_pole set pole true]
end 

to out_pole   
  file-close
  set file-data user-new-file
    if is-string? file-data
  [ 
    if file-exists? file-data
      [file-delete file-data]
    file-open file-data   
  ]
 ;;set pole true
end 

   

              

There is only one version of this model, created about 10 years ago by Pierre-Alain Cotnoir.

Attached files

File Type Description Last updated
Simulateur_EN_v5.7.png preview Preview for 'Simulateur_EN_v5.7' about 10 years ago, by Pierre-Alain Cotnoir Download

This model does not have any ancestors.

This model does not have any descendants.