Simulateur_EN_v5.7
Model was written in NetLogo 5.2-RC3
•
Viewed 378 times
•
Downloaded 32 times
•
Run 0 times
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.