5 多数据save_《Netlogo多主体建模入门》笔记 7

298ce247ec2daf63e694c5a7ab943315.png

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

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

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

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

数据导出

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

2f96b54271bf95e39a8c3a1b49ff20d3.png

先创建一个 ag.txt 文件

9178839341307b9415e7f79735aec39d.png

创建一个save的按钮

7b226149851a13e0df7be8114f6417b5.png

save按钮的 代码实现

to save-filefile-open "ag.txt"let wealths""ask turtles[set wealths (word wealths money "rn")]file-print wealthsfile-close
end

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

5c9d68aee0f34da8a1ecfdc79d1b614a.png

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

绘制洛伦兹曲线

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

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

3e7914e422164f8027faa5b094957bbb.png

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

f257faefd7c63a5b21cc1840923010ce.png

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

ff29a0ee597903be9a883a8ee41e1d62.png

接着进行归一化

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

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

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

52d571e38d65545e3bc7a7ccc1a5e0c7.png

然后就可以开始绘制

X、Y的最大值为1

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

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

38f485a592278cb630aa6764ff94df98.png

d5a7ada04692ae8cc1f66b5f47da3b4c.png

要用到的函数或者命令:

Plot:绘图

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

Pen:画笔

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

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

plot 0
plot 1
plot 3

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

66b3116a0e0372ba59f70ead1c6b9ec6.png

item 的用法

item:从列表中根据下标取出任意一个元素出来

item idx lst

idx: 一个整数,即第几个下标

lst:一个由多个元素构成的列表

Netlogo中的下标是从0开始的

绘制洛伦兹曲线的函数代码:

to lorenz-plotclear-plot set-current-plot-pen "equal"plot 0plot 1set-current-plot-pen "dominant"plot-pen-down plotxy 0 0plotxy 1 0plotxy 1 1plot-pen-upset-current-plot-pen "lorenz"set-plot-pen-interval 1 / agent_numplot 0let sorted-wealths sort [money] of turtleslet total-weath sum sorted-wealthslet weath-sum-so-far 0let 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部