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