好的 下面我们来完成再生过程
再生的意思是 请求海龟们进行自我复制
我们通常使用孵化 (hatch) 步骤来让
海龟们进行自我复制
也就是说 请求每个海龟
孵化出两个海龟
并且在缺省时 孵化出的子海龟
会继承父代海龟的所有特征
前面我已经提到了
我们需要对隔代关系进行跟踪
这就包括 赋给海龟一个自定义变量
我将这个海龟自身变量 定义为 generation
因此 现在当我们新建一个海龟时
在任何时候 通过特定的步骤新建海龟时
都会自动地生成一个变量叫 generation
并且当出现有 hatch 的这行命令时
generation 这个变量也应该出现
它将会自动被设为和父代海龟
具有相同值的变量
但这不是我们想要的些
我们想要的是下一代的
generation 变量 设为
这里我们设为 generation of myself + 1
这里应该加上方括号
所以 实际上我们做的事情是
对 hatch 后面的东西
也就是新孵化出的一代
用一条语句来赋值
所以这里我做的唯一一件事是
将它们的 generation 变量
设置为 generation of myself 的值加1
而 generation of myself 的值在中括号的外面
所以实际上我在对其值进行一个叠加
这里好像我有点不太确定
我不敢确定这里需不需要中括号
有两个办法
第一种办法是可以查阅快速帮助中
有关 myself 的使用规则
我们来看看 嗯 很显然
确实需要加上中括号使用
这里它给的例子使用了的
这里它解释了 self 和 myself 的区别
其实我们之前应该花点时间看看这些帮助文件
我想现在应该没问题了
所以 我们要孵化2个新的
然后对其进行操作
为了方便观察
我们可以将它们的颜色设为红色
并让它们向前前进3个单位
这样我们就能很容易地看出
这个再生功能是不是成功
那我们试试吧
回到前面
我们暂时先把这条语句注释掉
然后再来测试我们的代码
我们先单击 setup
然后单击 step
看起来好像
每一个海龟都孵化出了...
让我们把主体数量设置少一点再来看
新建五个主体 然后再 step
看起来似乎情况不妙
哦我知道了 对了
我想这些主体继承的特征是没问题的
1 2 3... (数数中)
有时候你建模时确实会感到很困惑
因为你不知道你到底生成了多少个海龟
这时候最简单的办法是
用一句命令 show count turtles
来显示出海龟的数量
对我这个情况 看起来好像是10个海龟
但实际上我们看到 一共有15个
所以这里有些海龟是相互重叠了
这时候你可以做的是
你可以点击一下这些海龟
你可以看到第11和12个海龟重叠在一起了
好的 那么现在没问题了
孵化功能让子代继承了父代的特征
这也是它们重叠在一起的原因
之后我们可以让它们散开分布
现在我们暂时不考虑这个问题
好的 成功完成再生 (reproduction) 了
现在
我们可能会想知道
generation 能否正常显示隔代关系
所以我们回到前面的界面
如果我们监视这个海龟
我们可以找到它的代的变量
咦 我怎么没看到呢
我再来看看这个海龟呢
好吧 还是没找到
我们来看看哪里没对
我们还是先把这里注释掉
执行 setup 新建
监测这个海龟
现在有了 可能刚才我没 setup
现在我们能看到表示代的变量了
这是第0代
表示3号海龟就是第0代
然后我们点 step 跟进
再来看看
希望我们能有好运
这里我们看到它是第1代
所以我们在逐渐增加代 (generation) 的值
所以你可以看到
它的代值是1 表示第1代
而我们初始的那个海龟 绿色表示的那个
代值是0 而现在新孵出的子代 代值是1
所以 generation 功能就运行成功了
好的 接下来我们要
请求父代海龟死亡
很显然我们需要随时跟踪
知道我们处理的海龟是哪一代
因此需要一个全局函数
我们声明一个新的全局变量叫 current-generation
我们每一次执行 step
我们也要同时对 current-generation 加1
这让我们能够跟踪我们正在操作的海龟
告诉我们需要让哪些死亡
所以每次当我们执行 step
我们都要增大一次这个变量的值 初值为0
每次我们对其值加1
然后我们要让父代死亡
请求 generation 小于或等于
current-generation 的那些海龟
这里也是最棒的部分
你建立了这些主体集合
你可以只对某些主体进行操作
所以我们不需要对每一个海龟进行操作
我们只需要关心那些自身的 generation 变量
小于或等于 current-generation 值的那些海龟
这里我不太确定
貌似应该用小于而不是小于等于
好的 然后我们要请求这部分海龟死亡
好的 我们回到前面的界面
执行 setup 新建
step 跟进下一步
看起来好像我们不应该
设置这些海龟为红色
我们将颜色设为一个随机的数值 比如100
这样我们就会看到不同的颜色
然后我们还是让它们向前移动
前进一个随机的距离
这样我们应该能很容易地看出来了
我们看到了不同代的海龟
并且海龟的数量在不断增加
你可以看到颜色在不断变化
这告诉我们
产生了很多不同的代
我们可以跟踪观察它们
现在产生了很多很多海龟
我们挑一个 第20000海龟来监视
它只是第12代
但我们已经有了20000个海龟
因为海龟的数量是呈指数级增长的
好的 现在我们完成了让父代死亡的任务
总的来说 完成的要点在于
我们需要借助某个条件
难点在于我们不能让
再生过程无限制地进行下去
一种简单的方法就是
建立某个情形
或者说个体死亡的条件
根据拥挤的程度等因素来决定
好的 父代死亡
我们加上这句
compete-with-nature (与自然竞争)
这是一个进化生物学的概念
个体之间相互竞争
同时个体也要以某种方式与环境竞争
在这里我们可以想象 它们为了生存空间
而跟同伴进行某种竞争
其实我应该把这句改成
compete-for-space (为空间而竞争)
好的