两只乌龟运行'similar'同时编码

Two turtles running 'similar' code at the same time

我的代码遇到了这个奇怪的问题。

在我的模型中,我有女性(设置女性为真)和男性(设置男性为真)。

在特定的触发条件下,每个人都会 'become' 一个分散器(将分散器设置为 true)。

分散器和非分散器的行为非常不同。

我尝试用代表这两个的不同品种来解决这个问题 类 但这也没有用。

问题是其中一只海龟,例如雄性,会相应地操作,并在遇到对面的乌龟时将分散器设置为 'false'。但是另一个不会,并且会继续使用 disperser set 'true'

我确定这是因为一旦其中一只海龟操作代码,它就不再是 'disperser' 因此不再适用于后来的海龟的搜索条件但是我尝试过的每项工作都导致了在同样的问题或没有人出错。

to search-for partner
    if male = true [ set potential-mates other turtles with [female = true
    and disperser = true]
    if female = true [ set potential-mates other turtles with [male = true
    and disperser = true]

    let chosen-mate min-one-of potential-mates [distance myself]

    if any? potential-mates [
        set heading towards chosen-mate]

    if male = true [ if any? other turtles-here with [female = true and
        disperser = true] [set disperser false]

    if female = true [ if any? other turtles-here with [male = true and
        disperser = true] [set disperser false]
end

我不完全相信我知道你想做什么,但我认为你要求将两只海龟的 disperser 设置为 false。在这种情况下,您需要看起来像这样的代码(未测试):

if male
[ let my-partner one-of other turtles-here with [female and disperser ]
  if my-partner != nobody
  [ set disperser false
    ask partner [ set disperser false ]
  ]
]

您或许还应该考虑将 'search for partner' 代码与 'found partner' 代码分开。此外,您最好让他们检查他们是否有合作伙伴,然后通过将标题设置为最近并向前移动来搜索合作伙伴。此刻他们四处张望,却没有去任何地方。