如何链接代理的动作?

时间:2014-05-04 19:33:45

标签: netlogo

我正在尝试使用3组代理程序(A,B,C)对模拟进行编程。 关键是来自集合A的代理可以选择执行或不执行操作。 如果他们决定不采取行动,模拟将停止。 当他们决定采取行动时,模拟继续进行下一步,来自集合B的代理也可以决定是否采取行动。同样在这里。 并且来自集合C的代理也可以决定是否执行操作,但是在这里,两种情况下的模拟都停止了。 这是我的代码:

ask turttles [
if breed = set A [ ifeslse do?= false [ set lazy]
                                        stop]
[ if breed = set B [ ifelse do1?= false [ set lazy]
                                         stop]
[ask other turtles [ if breed = set C [ ifelse do 2? = false [ set lazy
                                                               stop] ] 
                                       [set done
                                        stop] ]
                                        ]
                                      ]
                                    ]

代码不能很好地工作,我需要将这三个步骤链接起来,因为当我导出世界时,我只从第一步获得数据

1 个答案:

答案 0 :(得分:1)

如果你在stop内进行ask,则不会导致整个模拟停止。它只会阻止当前的乌龟执行ask的其余部分。

我想你想要更像的东西:

globals [done?]

to setup
  ...
  set done? false
  ...
end

to go
  if done? [ stop ]
  ifelse ...
    [ ask A [ do-action ] ]
    [ set done? true ]
  ifelse ...
    [ ask B [ do-action ] ]
    [ set done? true ]
  ifelse ...
    [ ask C [ do-action ] ]
    [ set done? true ]
  ...
end

但我有点猜测,因为从你的描述中很难说出你的实际意图是什么。 (特别是因为你还没有包含你的真实代码 - 你问题中的共同点不会超过编译器。)

相关问题