turtles-own [ money save_rate ;; 新增了一个保底比例 ] to setup clear-all create-turtles agent_num[ setxy random-xcor random-ycor set money (total_money / agent_num) set save_rate random-float 1 ;;对于每一个人来说,这个保底比例不一样 ] reset-ticks end to go ask turtles[ let agsets other turtles-here if count agsets >= 1 [ transaction (one-of agsets) ] forward 1 ] tick end to transaction [trader] let deltam 0 let money1 ([money] of trader) let epsilon (random-float 1) set deltam (epsilon - 1) * money + epsilon * money1 if money + deltam >= 0 and money1 - deltam >= 0 [ set money money + deltam ask trader[ set money money1 - deltam ] ] end to go2 ask turtles[ let agsets other turtles-here if count agsets >= 1 [ transaction2 (one-of agsets) ] forward 1 ] tick end to transaction2 [trader] ;; go2 按钮调用的函数 let deltam 0 let money0 ( (1 - save_rate) * money) ;; 自己拿出来交易的财富 let money1 ( (1 - ([save_rate] of trader)) * ( [money] of trader)) ;; 另外一个人拿出来交易的财富 let epsilon (random-float 1) ;; 随机分割财富的系数 set deltam (epsilon - 1) * money0 + epsilon * money1 if money + deltam >= 0 and ([money] of trader) - deltam >= 0 [ set money money + deltam ask trader[ set money money - deltam ] ] end to to-update-plot let lst [money] of turtles set-histogram-num-bars 100 if not empty? lst [ set-plot-x-range 0 max lst histogram lst ] end to save-file file-open "ag.txt" let wealths"" ask turtles[ set wealths (word wealths money "\r\n") ] file-print wealths file-close end to lorenz-plot clear-plot set-current-plot-pen "equal" plot 0 plot 1 set-current-plot-pen "dominant" plot-pen-down plotxy 0 0 plotxy 1 0 plotxy 1 1 plot-pen-up set-current-plot-pen "lorenz" set-plot-pen-interval 1 / agent_num plot 0 let sorted-wealths sort [money] of turtles let total-weath sum sorted-wealths let weath-sum-so-far 0 let index 0 let gini-s 0 ;; repeat agent_num [ set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths) plot (weath-sum-so-far / total-weath) set index (index + 1) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num ;; ] set-current-plot "吉尼系数" plot gini-s * 2 end to-report compute-gini ;;行为空间调用的重复函数 let sorted-wealths sort [money] of turtles let total-weath sum sorted-wealths let weath-sum-so-far 0 let index 0 let gini-s 0 repeat agent_num [ set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths) plot (weath-sum-so-far / total-weath) set index (index + 1) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num ] set-current-plot "吉尼系数" report gini-s * 2 end
to-report compute-gini ;; 这个函数是需要输出的 let sorted-wealths sort [money] of turtles let total-weath sum sorted-wealths let weath-sum-so-far 0 let index 0 let gini-s 0 repeat agent_num [ set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths) plot (weath-sum-so-far / total-weath) set index (index + 1) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num ] set-current-plot "吉尼系数" report gini-s * 2 end
原文:https://www.cnblogs.com/wiki-ray/p/12250772.html