《Netlogo多主體建模入門》筆記7

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
相關文章
相關標籤/搜索