7- 導出數據與復雜曲線繪制
- netlogo 適合做仿真,還是要配合 matlab 處理 產生的仿真數據
數據導出
默認導出到與模型文件同級的 文件夾下

先創建一個 ag.txt 文件

創建一個save的按鈕

代碼實現
to save-file file-open "ag.txt" let wealths"" ask turtles[ set wealths (word wealths money "\r\n") ] file-print wealths file-close end
運行模型,產生數據之后,就可以導出

接着就可以利用 matlab 進一步做數據分析。
繪制洛倫茲曲線
首先需要知道:什么是洛倫茲曲線?
假設一個王國里有6個人,他們的圖形高度代表了財富量。

先由高到低進行排序,最左邊的人的序號是1,最右邊的序號是6.

改變縱軸的值為: 左邊所有人的財富值和自己的財富值的累加。

然后進行歸一化:
- 橫軸除以 人口的總人數。
- 縱軸除以 所有人的財富總量。
這樣,橫縱坐標就變成了比例。
紅色虛線代表最平均的財富分配,藍色實線就代表了最不平均的財富分配。

然后就可以開始繪制
X、Y的最大值為1
繪圖更新命令寫中間的就行,下面三個不用寫。
然后去完善對應的代碼。(在文末)


要用到的一個函數或者命令:
Plot:繪圖
- set-current-plot “圖的名稱” ----- 選定畫哪個圖
Pen:畫筆
- set-current-pen “線段名稱” ---- 選擇你要畫哪條線
- plot-pen-down ------ 下筆
- plot-pen-up ----- 提筆
plot :等水平間隔地繪制點(線)
plot 0
plot 1
plot 3

- set-plot-pen-interval 設置畫筆 等水平間隔地繪制點
- plotxy :任意繪制點(線)
plot-pen-down plotxy 0 0 plotxy 1 1 plotxy 3 3 plot-pen-up

item 的用法
item:從列表中根據下標取出任意一個元素出來
item idx lst
idx: 一個整數,即第幾個下標
lst:一個由多個元素構成的列表
Netlogo中的下標是從0開始的
繪制洛倫茲曲線的代碼:
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 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) ] end