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