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任务来实现多态性。