《Netlogo多主体建模入门》笔记 7

7- 导出数据与复杂曲线绘制

该系列笔记基于集智乐园的《Netlogo多主体建模入门》课程,感谢张江老师与各位志愿者的辛勤付出。

  • 集智乐园 《Netlogo多主体建模入门》 https://campus.swarma.org/play/play?id=429

 

《Netlogo多主体建模入门》笔记 7_第1张图片

 

 

  • netlogo 适合做仿真,还是要配合 matlab 处理 产生的仿真数据

 

数据导出

 

默认导出到与模型文件同级的 文件夹下

先创建一个 ag.txt 文件

《Netlogo多主体建模入门》笔记 7_第2张图片

创建一个save的按钮

《Netlogo多主体建模入门》笔记 7_第3张图片

 

代码实现

to save-file
  file-open "ag.txt"
  let wealths""
  ask turtles[
    set wealths (word wealths money "\r\n")
  ]
  file-print wealths
  file-close
end
 

运行模型,产生数据之后,就可以导出

《Netlogo多主体建模入门》笔记 7_第4张图片

接着就可以利用 matlab 进一步做数据分析。

 

 

 

绘制洛伦兹曲线

 

首先需要知道:什么是洛伦兹曲线?

 

假设一个王国里有6个人,他们的图形高度代表了财富量。

《Netlogo多主体建模入门》笔记 7_第5张图片

先由高到低进行排序,最左边的人的序号是1,最右边的序号是6.

《Netlogo多主体建模入门》笔记 7_第6张图片

改变纵轴的值为: 左边所有人的财富值和自己的财富值的累加。

《Netlogo多主体建模入门》笔记 7_第7张图片

 

然后进行归一化:

  • 横轴除以 人口的总人数。
  • 纵轴除以 所有人的财富总量。

这样,横纵坐标就变成了比例。

红色虚线代表最平均的财富分配,蓝色实线就代表了最不平均的财富分配。

《Netlogo多主体建模入门》笔记 7_第8张图片

 

然后就可以开始绘制

X、Y的最大值为1

绘图更新命令写中间的就行,下面三个不用写。

然后去完善对应的代码。(在文末)

《Netlogo多主体建模入门》笔记 7_第9张图片

 

 

《Netlogo多主体建模入门》笔记 7_第10张图片

 

 

要用到的一个函数或者命令:

 

Plot:绘图

  • set-current-plot “图的名称” ----- 选定画哪个图

 

Pen:画笔

  • set-current-pen “线段名称” ---- 选择你要画哪条线
  • plot-pen-down ------ 下笔
  • plot-pen-up ----- 提笔

 

plot :等水平间隔地绘制点(线)

plot 0

plot 1

plot 3

《Netlogo多主体建模入门》笔记 7_第11张图片

 

  • set-plot-pen-interval 设置画笔 等水平间隔地绘制点
  • plotxy :任意绘制点(线)
plot-pen-down
plotxy 0 0
plotxy 1 1
plotxy 3 3
plot-pen-up

 

《Netlogo多主体建模入门》笔记 7_第12张图片

 

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

 

你可能感兴趣的:(Netlogo多主体建模入门,Netlogo,数据仿真)