欢迎来到复杂学课程 我是 John Balwit
这节课中 我将对高级别的题目
提供一些解决的思路
这节课会很有趣 我将用Netlogo建立一些模型
你会看到我是怎样建立模型的
因为有很多种建立模型的方法
最重要的一点是 当你开始编程以后
大胆去尝试 不要担心出错
因为你会从中受益匪浅
我已经见过成百上千个模型了
但我相信在建立这个模型的时候
我还是会出错
但这就是编程必须经历的一部分
好的 高级别问题
我们将建立一个模型
基于主体 (agent) 的人口增长模型
我们不基于方程来建立模型
我们会让很少的一些实体再生
我们将看看 能不能创建一种表现
我们想知道 用逻辑模型来描述
能否反映出我们需要的表现
因此我们要通过某种方法 得出这个表现
但是是根据某个实际的主体来获得的
从哲学上来讲 这个题目是很有趣的
从某种角度上讲 这些模型是比较低级的
我们能从这些代理主体的性质和相互关系中
得出很多人类的集体行为
好的 我们开始吧 这是 Netlogo 启动的画面
界面很简单
当我新建一个模型的时候
我一般先添加一个 setup 按钮
再添加一个
step 按钮
以及一个 go 按钮
当然 这些按钮都跟我之后编写的程序对应
我一般很注意把几个按钮都设成相同的大小
并且把它们均匀地排列整齐
这只是我的个人习惯
不过我经常这样做
我也会给我的模型加上标签
以便今后我能轻松地找到
好的 这些就是建立模型的基本操作
下面让我们看看我们的任务是什么
我们希望建立一些主体 并且让它们再生
然后我们要画出图像曲线
看看曲线是不是类似一条S型函数曲线
所以我们也需要绘制曲线
现在我们一步步来画
首先给这个图像取名为 population
我们知道这个图像应该是
表示人口和时间的关系
我们一般给坐标轴加上标签 方便观察
好的 这样我们的准备工作就做好了
好的
我们接下来要做的事情是
新建一个 setup 模块来建立那些主体
我们跳到代码页面 键入 to setup
我把 end 也先写上了
因为反正是必须写的
现在我们已经知道
首先我们需要新建一些主体
也许我们还需要一条滑动条
这样我们能更好地...
好吧 我们还是来做一个滑动条吧
回到前面的图形界面
新建一个滑动轴
取名为 initial-population
把它复制一下
然后在代码中 输入 crt 新建
然后粘贴过来
这样我们就可以对新建的这个参数赋值了
比如 设置颜色为 green (绿色)
设置形状 circle (圆形)
设置尺寸
哦不不不 一开始尺寸就已经被初始化为1了
这里即将出现一个问题
我马上演示给你看
setup 按钮现在运行正常
缺省状态新建50个主体
我可以随便拖动滑动条来调整
我想说的是
虽然你现在看见只新建了一个主体
但实际上一共是有27个
它们一个一个重叠在一起
为了能让它们移动
我们需要回到代码界面
告诉它们向前移动10个单位
然后按下 setup 我们不难发现
它们随机形成了一个圆圈
但这还不是我们想要的
这看起来太整齐了 太像是人工制造的
而且我们中间的那个个体还在那里
这提醒了我一件很重要的事
就是每次运行 setup 的时候
使用一个 clear-all 命令 缩写为 ca
这样之前绘制的图形就会被擦掉
我们使用的这行命令
是最简单的 能新建一系列人口主体的命令
但现在我们不用这条命令
我们使用 ask patches (请求瓦片) 命令
这样我们可以请求特定数量的瓦片 (patches)
请求 n 个 初始人口主体 (initial-population)
因此我需要请求这么多的瓦片
让它们生长 (sprout)
当然 别忘了我们的对象
我们的对象是瓦片
我要求他们执行的命令是 sprout
也就是让它们生长
就好像我说 嘿 你们这12个瓦片
我希望你们每一个都给我生出一个新的来
并且把生出来的那个 也设为绿色 圆形 并且向前移动10步
哦不 我们删掉这句 不让它们向前移动了
我们来看看运行效果如何
可以确信
每一次运行 都随机请求特定数量的瓦片
目前的数量是27
目前变成了80
好的 这样我们就初步拥有了一系列瓦片
只需要这句简单的代码就够了
好的 下一步
我们需要想一想
我们建立这些东西用来干什么
这些绿色的点 这些主体
我们希望它们再生
它们应该会死亡
因为我们希望得到非重叠的隔代关系
也就是父代生下子代
然后父代会死亡
也就是说
我们需要记录和跟踪每一代
我们还需要它们分散展开
不要互相重叠
这样我们观察起来会比较方便
我们不会加入繁殖的功能
我们可以做 但是会很复杂
所以我们一起来看看怎么做
对每一个时间间隔 我想让它们再生一次
因此 使用一个 step 步骤
我下面写的其实是一种伪代码
我们需要让瓦片再生
我们需要父代死亡
剩下的那些要散开分布
好的
这些实际上都是一些
我后面需要编写的内容
因此这个 step 步骤将会调用这些内容
我们想想怎样实现再生