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 + -
显示快捷键?