aaa---micro-macro_evolve_salzano.nlogo
来自「NETLOGO」· NLOGO 代码 · 共 951 行 · 第 1/5 页
NLOGO
951 行
if (Individuals_N = 1) [p-exchange] ;2 end to o2-prepare-plot-2 set f2tc (Individuals_N + Firm2-to-check - 1) Ask turtle f2tc [ifelse (item 0 individual-choose = itc1) and (f1tc = f2tc) [set itc2 (item 1 individual-choose)][set itc2 (item 0 individual-choose)]] set-current-plot "2? Ind checked - Work and Good" set-current-plot-pen "work II" plot-pen-reset set-current-plot-pen "w-offer II" plot-pen-reset ask turtle itc2 [set tw-list i-mylist3 set two-list i-mylist4 set tp1-list i-work_r1-list] (foreach tw-list two-list tp1-list [set twII ?1 set twoII ?2 set tpII1 ?3 z-do-plot2]) set-current-plot "2? Ind checked - Work and Good" set-current-plot-pen "demand II" plot-pen-reset set-current-plot-pen "d-offer II" plot-pen-reset ask turtle itc2 [set lwl length work_r-list]; set Regime-2 IReg] ask turtle (Individuals_N + Firm2-to-check - 1)[; This Populates the lists with zero if flag2 = 0 [if (tickbf2 < lwl) [ repeat lwl[ set tp-list lput 0 tp-list set td-list lput 0 td-list set t-o-list lput 0 t-o-list set tickbf2 tickbf2 + 1]] set flag2 1]] set tickbf2 0 ask turtle (itc2)[set tp-list work_r-list set td-list mylist2 set t-o-list mylist1] (foreach tp-list td-list t-o-list [set tpII ?1 set tdII ?2 set t-oII ?3 z-do-plot2 ]) p-exchange end to f-move-random ; -1 ask individual [ setxy 0 0 set work_r 0 ;wait .3 repeat 10 [set heading random-float 360 fd 1 wait .02]] end to g-move1 ; 0 h-choosing_the_firm ; 1 set index 0 repeat Individuals_N [ ask turtle index [ ask turtle (choosen + Individuals_N - 0) [set xf xcor set yf ycor set work_r1 0] set gotox xf set gotoy (yf + 1) set work_r 0 ] set index index + 1] ask individual [setxy (gotox - 2 + random-float random-float 4) (gotoy - 2 + random-float random-float 4) ]; wait .3] end ; CALCULATION OF THE DIFFERENT EXCHANGE AND DIFFERENT REGIMES OF RATIONING AND EXCHANGE to p-exchange ; calculation of level of exchange of good and work of each individual and in Total set ind-indiv 0 set Tggg 0 set Twww 0 ask individual [set Iggg 0 set Iwww 0] ask individual [set exa0 [] set exa1 [] set exb0 [] set exb1 [] set exc0 [] set exc1 [] set exd0 [] set exd1 []] ask Agg_individual [set exa0 [] set exa1 [] set exb0 [] set exb1 [] set exc0 [] set exc1 [] set exd0 [] set exd1 []] set worklist[] while [(ind-indiv < Individuals_N )] [set FlagR 0 ask turtle (ind-indiv) [set inn 0 set in2 0 set index 0 set GH H set Glist1 mylist1 set Glist2 mylist2 set Glistw work_r-list set GF i-F set Glist3 i-mylist3 set Glist4 i-mylist4 set Glistw1 i-work_r1-list ; for each individual, for each value of "in" the procedure sets exa0 .... exwa1 and go to p1-Calculation_of_Regimes ; to calculate individual regime and the exchange levels of good and work. while [(index < (length Glist4 - 1)) and flagR = 0] ;sostituire sempre con lo stesso indice - index? No perch? lo fa sempre con la stessa toputre [if ((item index Glist4 <= item 1 GH) and (item (index + 1) Glist4 >= item 1 GH)) ; Attentione perch? in 1 GH e non in 0 PASSARLO A 0 [set exw1a0 item index Glistw1 set exw1a1 item (index + 1) Glistw1] set index index + 1]] ifelse (length Glist1 < length Glist3) [set inR length Glist1 - 2][set inR length Glist3 - 2] ; ask turtle ind-indiv [ set inn 0 set in2 0 while [(inn <= inR and flagR = 0)] [set exa0 lput item (inn) Glist1 exa0 set exa1 lput item (inn + 1) Glist1 exa1 set exb0 lput item (inn) Glist2 exb0 set exb1 lput item (inn + 1) Glist2 exb1 set exc0 lput item (in2) Glist3 exc0 set exc1 lput item (in2 + 1) Glist3 exc1 set exd0 lput item (in2) Glist4 exd0 set exd1 lput item (in2 + 1) Glist4 exd1 ;] set inn inn + 1 set in2 in2 + 1] ask individual [set worklist work_r-list] p1-Calculation_of_Regimes ask turtle ind-indiv [ ] ; Go for calculation of individual regime ] set Iwww-of turtle ind-indiv www set Iggg-of turtle ind-indiv exch set IReg-of turtle ind-indiv rr set InReg-of turtle ind-indiv inrr set Twww (Twww + www) set Tggg (Tggg + exch) set ind-indiv ind-indiv + 1 ] ; same procedure for the aggregated individual ask Agg_firm [set Total-good lput Tggg Total-good set Total-Work lput Twww Total-Work] ; Populate Total-Work and Total-Good exchanged. ask turtle itc1 [set Regime-1 IReg] ask turtle itc2 [set Regime-2 IReg] ask firm [set Mwww 0 set Mggg 0] set inex 0 while [(inex < Firms_N)] [ask turtle (Individuals_N + inex) [ set Mwww sum values-from individual with [choosen = inex] [Iwww] set Mggg sum values-from individual with [choosen = inex] [Iggg] set inex inex + 1] ] p-timeTgggTwww ask Firm [set worklist work_r1-list] p2-Agg-Calculation_of_Regimes ; Go for calculation of aggregated Regimes if time >= 2 [z-do-plot-total-exchange z-do-plot-Individual-exchange z-do-plot-regimes z-do-plot-total-exchange-Phase-Diagram] end to p-timeTgggTwww Ask Agg_Individual [set timeTggg [] set timeTwww[]] ifelse (length timeTggg-of turtle (Individuals_N + Firms_N) > 10); build the 10 timeTggg, timeTwww for Agg_individual [Ask Agg_Individual [set timeTggg but-first timeTggg set timeTwww but-first timeTwww set timeTggg lput Tggg timeTggg set timeTwww lput Twww timeTwww]] [Ask Agg_Individual [set timeTggg lput Tggg timeTggg set timeTwww lput Twww timeTwww]] end to p1-Calculation_of_Regimes ; Per chiarezza ? possibile sostituire Iggg al posto di exch e Iwww al posto di www set exch 0 set www 0 ask turtle ind-indiv [set Iggg 0 set www 0 set rr "No-R"];;;;; Keynesian if(flagR = 0) [ set inn 0 while [inn <= inR] [ if (item inn exa0 >= item inn exd0 and item inn exa1 <= item inn exd1) [ set flagR 1 set rr "Keynesian" set inrr 1 ask turtle ind-indiv [ set exch (item inn exa0 + ((item inn exa1 - item inn exa0) *((item inn exa0 - item inn exd0) / ((item inn exa0 - item inn exd0) + (item inn exd1 - item inn exa1)) ) )) ; FORSE SI PU? TOGLIERE FLAGR0 DAI SINGOLI PASSAGGI set www (item inn worklist + ((item (inn + 1) worklist - item inn worklist) * ((item inn exa0 - item inn exd0) / ((item inn exa0 - item inn exd0) + (item inn exd1 - item inn exa1)) ))) ] ]set inn inn + 1] ] ;;;;; Repr-Infl if(flagR = 0) [ set inn 0 while [inn <= inR] [ if (item inn exc0 >= item inn exb0 and item inn exc1 <= item inn exb1 and item inn exb0 <= item inn exc1 and item inn exc0 > 0 and item inn exb0 > 0) [ set flagR 1 set rr "Repr-Infl" set inrr 4 set exch (item inn exc0 + ((item inn exc1 - item inn exc0) *((item inn exc0 - item inn exb0) / ((item inn exc0 - item inn exb0) + (item inn exb1 - item inn exc1)) ) )) set www (item inn worklist + ((item (inn + 1) worklist - item inn worklist) * ((item inn exc0 - item inn exb0) / ((item inn exc0 - item inn exb0) + (item inn exb1 - item inn exc1)) ))) ]set inn inn + 1] ;set www item (inn) Glistw ] ] if(flagR = 0)[ ;;;;; Walrassian-case if ((((item 0 GF * .9) <= (item 0 GH)) and ((item 0 GF * 1.1) >= (item 0 GH))) and (((item 1 GF * .9) <= (item 1 GH)) and ((item 1 GF * 1.1) >= (item 1 GH)))) [type " indiv: " type ind-indiv type " inn: " type inn print " PASSA W " set flagR 1 set exch (item 0 GH) set www (item 1 GH) set rr "Walras"set inrr 0 ];;;;; Neoclassics set flagR1 0 set inn 0 while [inn <= inR] [if ((item inn exa1 >= 0 and item inn exc1 >= 0 and item inn exa1 >= item inn exc1) and (item inn exb0 >= 0 and item inn exd0 >= 0 and item inn exb0 <= item inn exd0))[set flagR1 1 ] set inn inn + 1] if (flagR1 = 1) [ if ((item 0 GF < item 0 GH) and (item 1 GF < item 1 GH)) [ set flagR 1 set rr "Neoclassics" set inrr 2 set exch (item 0 GF) ; Controllare se pu? o deve essere i-F set www (item 1 GF) ]];;;;; Under-Cons set flagR1 0 set inn 0 while [inn <= inR] [if ((item inn exa1 >= 0 and item inn exc1 >= 0 and item inn exa1 <= item inn exc1) and (item inn exb0 >= 0 and item inn exd0 >= 0 and item inn exb0 >= item inn exd0))[set flagR1 1 ] set inn inn + 1] if (flagR1 = 1) [;print "PASSA CONTROLLO" if ((item 0 GF > item 0 GH) and (item 1 GF > item 1 GH)) [ set flagR 1 set rr "Under-Cons"set inrr 3 set exch (item 0 GH) set www (item 1 GH) ] ]] end to p2-Agg-Calculation_of_Regimes; p exchange procedure for Aggregated Individual - Calculation of Regimes; set ind-indiv Individuals_N + Firms_N Ask Agg_individual[set Iwww 0 set Iggg 0] set FlagR 0 Ask Agg_Firm [set GF sumT-F set Glist3 sum-list3 set Glist4 sum-list4 set Glistw1 sum-listwf set inn 0 set in2 0 ]; Procedure for Aggregated_Firms ask Agg_Individual [set GH sumT-H set Glist1 sum-list1 set Glist2 sum-list2 set Glistw sum-listw] ; Procedure for Aggregated_individual ask Agg_Individual [set index 0 Ask Agg_Firm [while [index < (length Glist4 - 1)] [if ((item index Glist4 <= item 1 GH) and (item (index + 1) Glist4 >= item 1 GH)) [set exw1a0 item index Glistw1 set exw1a1 item (index + 1) Glistw1] set index index + 1]]] ; Procedure for Aggregated_Firms ifelse (length Glist1 < length Glist3) [set inR length Glist1 - 2][set in
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?