【问题标题】:How to make agent stay at certain patch in netlogo within certain ticks?如何让代理在特定滴答内停留在 netlogo 中的特定补丁?
【发布时间】:2019-12-24 14:29:30
【问题描述】:

我正在编写代码,让代理在世界各地漫游以觅食。

找到食物后,他们应该在找到食物的地方停留一段时间。但是我有一个问题是让他们在食物补丁上停留一段时间。

特定时间:每只海龟都有自己的变量“s”,“s”是由 NetLogo 生成的随机数,该数字不应在每个刻度内改变,我有一个问题要使“s”没有' t 改变。

例如,乌龟 1 的“s”=60,乌龟 1 找到食物后,会在食物上停留 60 刻。乌龟 1 在那里停留了 60 刻后,它将离开食物,“s”的值将再次重置为另一个随机值。而且每只海龟都有不同的“s”值

我尝试使用计时器编码,但每次代理遇到食物时计时器只会减少(就像他们只是在食物上行走而不是呆在那里)我不能使用bk 1 or fd -1 命令,因为乌龟只是保持在他们向后走 1 刻后向前移动。

感谢任何帮助。

代码如下:

turtles-own
[ 
  food
  location 
  s
]

patches-own
[
  food-quality
]

to go
  move
  forage
end

to move
 ask turtles
  [fd 1]
end


to forage

 set s random 100

   ask turtles
     [ [ if food < food-quality  ;meaning that turtle will only keep the best food's value each time they found food
        [set food food-quality  ;food-quality is patch-own, the food's value
          set location patch-here]
          if s >= 50  
           [stay] ]

    ]
    ]

end

to stay   
  set s s - 1   ;decrement-timer  
  if s = 0 
    [move
      set label ""
      reset-s
    ]    

end

to reset-count-down   
  set s random 100
end

编辑:使问题更清晰并更新一些代码。

【问题讨论】:

  • 你还没有描述问题(如果可能的话,还要去掉不相关的代码)。请解释您希望乌龟停留的情况是什么。一般的方法是使用withgo 程序中只选择那些你想移动的海龟。
  • 我已经编辑并简化了我的代码,感谢您的时间@JenB :')

标签: netlogo


【解决方案1】:

我认为您有逻辑问题而不是编码问题,但不是特别清楚。如果您的变量 's' 应该是类似于停留计时器的东西(更具描述性的名称),那么不要在草料过程的开头set 它。相反,set 当海龟找到食物时,它只会在没有被停留计时器持有的情况下移动/觅食。您的代码中的任何地方也没有tick,因此您没有推进时钟。我想你想要这样的东西:

to forage
  ask turtles
  [ if food < food-quality  ; has found food that is more than currently owned
    [ set stay-timer random 5 + 20    ; sets number of ticks to stay between 5 and 24
      set food food-quality  ; food-quality is patch-own, the food's value
      set location patch-here
    ]
    set stay-timer stay-timer - 1 
  ]
end

to go
  ask turtles with [stay-timer = 0] [ move ]
  forage
  tick
end

【讨论】:

  • 意味着乌龟拥有stay-timer而不是s,并且只有在他们找到食物后才会开始计时,对吧?但是我有这个问题,if有错误,If expected 2 inputs, a true/false and a command block,我尝试更改括号位置,但是计时器没有减少。
  • 我已更改支架位置。停留计时器应减少每个刻度。您是否在 go 过程中添加了“tick”以及在草料过程中进行了更改。
  • 我没有添加,因为我只需要海龟,对不起,我想如果我通过将ask turtles而不是ask teammates简化代码,会更容易去理解。如果我的to go 只是海龟,我可以在哪里放置刻度?
  • 我尝试在没有队友的情况下制作一个新代码,这样我就可以在里面放置蜱虫去,但是每次乌龟移动时,虽然他们没有找到食物,但停留时间会减少。
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多