- netlogo 适合做仿真,还是要配合 matlab 处理 产生的仿真数据
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. 改变纵轴的值为: 左边所有人的财富值和自己的财富值的累加。 然后进行归一化:
- 横轴除以 人口的总人数。
- 纵轴除以 所有人的财富总量。
- set-current-plot “图的名称” ----- 选定画哪个图
- set-current-pen “线段名称” ---- 选择你要画哪条线
- plot-pen-down ------ 下笔
- plot-pen-up ----- 提笔
- 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