《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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM