NetLogo第二次迭代tick未从0启动的问题原因及解决方法咨询
问题原因
你的代码问题出在go函数的执行顺序上:
- 第四次点击
go once时,首先运行moveproc逻辑,此时ticks值为3,触发乌龟死亡规则,乌龟数量变为0 - 进入乌龟数量为0的分支,将
iteration设为1后调用setup-world,setup-world末尾的reset-ticks会将tick值重置为0,这一步逻辑是正常的 - 但
setup-world执行完成后,当前go函数的流程还未结束,会继续运行函数末尾的tick语句,直接将刚重置为0的tick值加1变为1,因此第二次迭代启动后你看到的tick初始值就是1,而非预期的0
解决办法
最简单的修改方案是在调用setup-world后新增stop语句,直接跳出当前go函数的执行,避免后续多余的tick运行,修改后的go函数代码如下:
to go moveproc let n count turtles if n = 0 [ ifelse iteration = 0 [ set iteration 1 setup-world stop ; 新增该行,阻止后续tick语句执行 ] [ stop ] ] tick end
该方案仅新增一行代码,不会改动原有业务逻辑,修改后第二次迭代的tick值就会从0开始正常计数。
内容的提问来源于stack exchange,提问作者Rafaela
相关产品推荐
相关产品推荐

