Ok 现在进行竞争空间流程的代码编写 首先 在多重情况下的 即 如果有任何(输入If any? other turtles here) 要先输入ask turtles (输入If any? other turtles-here【die】) 这是一些需要熟悉的特殊的代码词语 if there is any other turtles here, die turtles代表着如果碰巧在存在于一个有其他turtles空间 那么 只有死路一条 这是过度拥挤的一个极端表现 Ok 现在我们需要为在什么条件下turtles会死亡编写进程 在过度拥挤的条件下 所以 我们要设定一个有关于过度拥挤的参数 称之为参数集 添加空间(Space),这里有一个带状叫space 我们知道 在每一个turtle周围 都有相邻的邻居 8个空间 从东西南北 东北 西南等等 给这8个方位定义从1至8的参数 我会编写(ask turtles) 我们可简单算出turtles都是相邻的 输入if count turtles on neighbors 杠号 if 8 - count turtles on neighbors 考虑一下 这个条件下我们有多少空余的空间 有8个空间占据 还剩余多少个空间 如果空余的空间数少于turtles生存所需要的空间 那么 turtles就必须死亡 所以 现在我们已经建立如果剩余空间小于turtles生存必须的空间 turtles就必须死亡的条件 我们可以将空间定义为从1至8的任何数字 明显的 turtles必须在有8个空间的条件下才能生存 也就是说将很难达到极度拥挤 我们可以认为这是资源限制了turtles数量的增长 我在这里加一个注释 限制数量增长(constraint to pop growth) 在这里我们也许需要添加注释 以便他人或者自己以后查看可以理解为什么这样做 现在编写分散进程(disperse procedure) 这是最后部分的进程 对于disperse部分 要通过ask turtles对程序进行移动修改 输入 move-to one-of patch with not any turtles here 这不是一个易懂的代码 这个代码需要通过大量的时间查阅相应的机器代码词典 使之看起来合理通顺 作为英文看起来可能简单 但是作为代码初学者并不能容易写出 所以最好的方法是查阅案例代码 这也许就是你看到的一个样本代码 记下特殊词语以及他们的功能 实际上 我们通过修补代码的代理关系 所有代码的子集 那些具有 no turtles here 性质的条件 通过 观察每一个小部分空间 没有turtles在上面 那么就往这一个空间移动 这里有点小技巧 如果我们运行ask turtles这部分代码 并且没有任何有效和相关的补丁(patch) 这些turtles可以通过没有使用过的这部分代码继续寻找 我们必须确保只在有补丁的情况下运行 这这样的条件下很重要 在 如果屏幕上的turiles计数少于或者等于补丁的数量 turtles的数量多于补丁数量的情况也存在 这样就会有turtles 的找不到相应的位置 代码会持续运行 我们会好奇道底会发生什么 从我的经验上看是这样 ok 我认为这些代码行得通 让我们验证一下这些代码是否可行 仍旧有一些问题 setup 在大的数量条件下 这里还有可以改变颜色的选项 去除之前用于侦测人为分散的代码 setup step 看起来好像有什么发生但不确定 编辑initial-population 将最大值改为360 运行step 我们会看到这些 如果设定大的空间 这就使得数量密集度下降(thiner population) 设定较少的空间 密度变大 这在我看来是有一个大致运行的模型 观察看图表在数量变化时有何变化 我将做一个简单的图表 默认情况下图表是针对turtles的计数 要让图表符合实际必须对模型进行变动 每次有tick(一小段时间)都会发生变化 每次运行step,加入tick 第一次运行会出现错误 看看会是什么错误 step Tick counter没有被运行 使用reset-ticks 必须在setup必须加入reset-tick代码 在清除命令后加入reset-tick setup step 我不确定这确实是想要的结果 从较低低数量条件和低于均值的空间条件运行 看是否可行 step 初始数量是12 ,这没错 在我看来再生产函数无效 step 来看看到底是怎么回事 编辑turtle320,13代 让你看看我如何排除这个故障 问题在reproduction环节ask turtles没有运行 或者set generation没有运行 父集在较早于现今一带的环节死亡 把这部分代码当成注释看会发生什么 似乎没什么变化 因为死亡率降低将伴随指数型的增长 所以在step环节有问题 父集的死亡对空间竞争没有作用 如果compete-for-space代码导致的问题呢 compete-for-space代码出了问题 ask turtles是否有任何其他turtles死亡 other turtles指的是除自身在外的turtles 这部分没有问题 将第二部分代码排除 我不认为这部分又问题 恢复compete-for-space代码 我将copmete-for-space环节中的第二条代码除去 我猜测仍旧有问题 猜错了 回到代码 这里规定的代码是 if any? other turtles-here die 我发现问题了 我们需要另外其他的turtles compter-for-space环节的第一个规则将后代杀死了 因为当后代出生 这个规则会使其他的turtles杀死新生的后代 在后代compete-for-space之前,就必须进行分散 先再生产 再进行分散 再compete-for-space 这个程序几乎没有正确运行过 所以你需要一直修改 但我这回确信行得通了 reproduction后进行disperse 将分散放在再生产后面 这样看起来有意义 之后就是parents die 前一辈死亡 然后才是compete-for-space 看一看改变顺序是否有效果 把parents die条件打开 每个代码都打开了,只是改变了顺序 setup, step 现在得到指数型增长了 得到了类似于平整的结果 但似乎没有看到重新改组 step,step,step 不完全是我所期望的 看看对空间需求的增加会怎样 step step 这就有点接近我的期望值了 有点像S型曲线 看看如果需要很多的空间 增长减慢 变异加大 我认为这个模型在常规上比起平整型,具有指数型增长 很好奇为什么在这个点上就静止了 但我确定通过查找代码来发现 这是一个你做模型是也会提出的问题 um 我很好奇为什么会这么运行 如果有一个不同的分散进程 或许会看到其他不同的 如果我花更多时间在这个模型上 我会更改disperse部分的代码 让这部分变得更为现实化,而不是仅仅摆设 turtles和奇妙地直接移到补丁处 为什么不是从现在的位置迁移,直到发现一个空余空间 这将会需要多一些代码,但也值得 如果想做出更多有趣的形式 你也可以改变不同集合家庭的颜色 来观察他们的迁移和成功变化 你会花很多时间但这将是一个很好的项目 最后 关掉程序中的缺口 程序中有step按钮 运行这一部分代码 编辑Go按钮 Go按钮中的命令是Step的代码 但其有永远打开的属性 而名称仍旧是Go 需要了解很重要的一点是 显示名称和命令名称不一定要一样 但如果没有显示名称来介绍运行命令(会混淆) 显示名称是按钮的标志 setup, step,go 初始数量和空间 我们得到一个很好的在特定空间下有限制模型 这是一个还凑合的指数型增长模型 在一定容量下一直循环 That's all