NetLogo新手修改病毒教程,如何让10只随机turtles执行3个预设随机过程
NetLogo随机指定10只Turtle执行3个随机过程的实现方案
原代码的语法适配问题
你编写的代码存在几个关键语法细节问题,调整后即可正常运行,核心问题集中在三点:
- 缺少每只Turtle独立的随机值生成逻辑:如果直接使用全局变量存
choice,会导致被选中的10只Turtle拿到同一个固定选择值,全部执行同一个过程,无法实现“每只随机选过程”的效果 run的调用逻辑不匹配:原代码没有将ifelse-value的返回结果和命令执行要求做绑定,语法结构不符合NetLogo对命令块传递的规范- 嵌套括号的位置会触发NetLogo的语法解析报错
可直接运行的正确实现
相比你原本嵌套多层ifelse-value的写法,用“命令列表+随机索引取值”的方式更简洁,后续新增可选过程也不需要调整分支结构,代码参考:
ask n-of 10 turtles [ ; 提前定义所有可选的执行过程 let process-options [ go-quarantine wear-mask get-sick ] ; 每只Turtle独立生成0-2的随机索引,对应列表里的三个过程 let select-index random 3 ; 取出对应过程并执行 run (item select-index process-options) ]
关键注意点:随机索引的生成逻辑一定要放在
ask的代码块内部。如果把随机值的定义写在ask外面,所有被选中的Turtle会共用同一个随机值,完全达不到每只独立随机选择的效果。
如果你更倾向于保留原本用ifelse-value实现分支判断的写法,只需要在原逻辑基础上调整两个细节:把随机值生成放在ask内部、修正括号嵌套结构即可,修正后的参考代码:
ask n-of 10 turtles [ let choice random 3 let target-command ifelse-value choice = 0 [ go-quarantine ] choice = 1 [ wear-mask ] [ get-sick ] run target-command ]
内容的提问来源于stack exchange,提问作者Brandon Ormsby
相关产品推荐
相关产品推荐

