Netlogo 如何让不同的品种以随机顺序被“询问”在一起
假设我们有两个品种,Netlogo 如何让不同的品种以随机顺序被“询问”在一起,netlogo,Netlogo,假设我们有两个品种,猫和狗。在go上,我们想要猫喵喵叫和狗吠叫ask使给定代理集中的代理以随机顺序运行代码块,这很好。然而,如果我们这样做: to go ask cats [ meow ] ask dogs [ bark ] tick end 狗总是追猫。我们可以用条件来解决这个问题: to go ask turtles [ if breed = cats [ meow ] if breed = dogs [ bark ] ] tick end 但这很
猫和狗。在go
上,我们想要猫喵喵叫和狗吠叫ask
使给定代理集中的代理以随机顺序运行代码块,这很好。然而,如果我们这样做:
to go
ask cats [ meow ]
ask dogs [ bark ]
tick
end
狗
总是追猫
。我们可以用条件来解决这个问题:
to go
ask turtles [
if breed = cats [ meow ]
if breed = dogs [ bark ]
]
tick
end
但这很糟糕(请注意,您可以将海龟
替换为(海龟-猫-狗)
,以适应您不希望混入的更复杂的情况)。有更好的解决方案吗?一个混合的配对代理集和任务列表怎么样
to go
let actions (list
(list cats task meow)
(list dogs task bark)
)
foreach shuffle actions [
ask first ? [ run last ? ]
]
end
使用任务:
turtles-own [noise]
to setup
...
ask cats [ set noise task meow ]
ask dogs [ set noise task bark ]
...
end
to go
...
ask turtles [ run noise ]
...
end
嗨,尼古拉斯!这仍然会让猫在一个街区里跑,然后让狗在一个街区里跑,尽管这项技术可能会被修改,让它们混合在一起。可能会生成两个单独的(代理任务)
列表(一个用于猫,一个用于狗)和的,将它们与语句相结合,然后继续执行foreach shuffle
。哦,我想这是你想要的(即,你的第二个代码块是不需要的,因为它们混合在一起)。很抱歉误解了你的问题。我会把我的答案留在这里,以防万一它对某人仍然有用。这真是太棒了。它展示了如何使用NetLogo任务来实现多态性。