欢迎来到复杂学课程 我是 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 步骤将会调用这些内容 我们想想怎样实现再生