捕食者-猎物模型中捕食者最优策略复制代码故障排查
解决你的NetLogo捕食者策略赋值问题
嘿,我一眼就发现问题出在哪了——你把NetLogo的赋值语法和比较运算符搞混啦!
在NetLogo里,=是用来判断两个值是否相等的比较运算符,它会返回true或false;而给变量赋值要用set 变量名 新值的格式,不需要额外的=。你的代码里正好把这俩搞反了,导致成功捕猎时把布尔值false赋给了best-strat。
具体错误点修复:
evaluate-hunt过程中的赋值错误
原来的代码:if last-hunt = "success" [set best-strat best-strat = strat]这里
best-strat = strat是在做比较(判断当前best-strat和strat是否一样),而不是赋值。因为第一次成功捕猎时best-strat是"NA",和当前strat不相等,所以比较结果是false,就把best-strat设成了false。修正后:
if last-hunt = "success" [set best-strat strat]直接把当前成功的策略
strat赋值给best-strat就对了。strategy过程中的赋值错误
原来的代码:ifelse best-strat = "NA" [set strat one-of strategies] [set strat strat = best-strat]同样的问题,
strat = best-strat是比较,不是赋值。修正后改成直接用best-strat给strat赋值:ifelse best-strat = "NA" [set strat one-of strategies] [set strat best-strat]
修正后的完整代码
to recall-hunts if ticks = 98 [ ifelse hunt-today = 1 [set last-hunt "success"] [set last-hunt "failure"] ] end to evaluate-hunt if ticks = 99 [ if last-hunt = "success" [set best-strat strat] if last-hunt != "success" [set strat one-of strategies] stop ] end to strategy if ticks = 1 [ ifelse best-strat = "NA" [set strat one-of strategies] [set strat best-strat] ] stop end
额外小建议
如果你的模型是每天都要执行这些逻辑,而不是只在ticks=98和ticks=99的时候,你可以把ticks = X的判断改成更通用的触发逻辑(比如放在每天的执行流程末尾),这样模型的扩展性会更好哦!
内容的提问来源于stack exchange,提问作者Kilian Murphy
相关产品推荐
相关产品推荐

