【问题标题】:How to choose the second highest value of a patch variable in NetLogo 6.2?如何在 NetLogo 6.2 中选择补丁变量的第二高值?
【发布时间】:2021-10-21 02:44:53
【问题描述】:

我在执行以下代码时遇到了困难:我有一段代码让海龟在圆锥内选择一个资源 > 30 的补丁。什么时候,乌龟的补丁是具有最高值的补丁 a乌龟没有动。所以我使用“其他”命令放置代码行。但是,现在发生的情况是,如果海​​龟所在的补丁具有最高的资源价值,它会选择另一个资源> 30的补丁。问题是,例如,在乌龟的一侧有一个具有资源价值的补丁= 51,另一个值为31,她选择31。我想实现的是:如果乌龟所在的补丁是资源价值最高的补丁(并且乌龟已经收集了这个资源),她将选择另一个具有第二高资源价值的邻居补丁。我尝试使用 max-one-of 但出现错误:“MAX-ONE-OF 预期 2 个输入,一个代理集和一个数字块。

有没有人有什么想法,我该如何解决这个问题?

提前致谢

to go 
ask turtles
  [
    let availablePatch patches in-cone 5 90 with [ resource-value > 30 ]     
    ask patch-here [ set availablePatch other availablePatch ] ;; remove the patch it is in, because if the patch it is in is the one with the highest value within your range of vision, the turtle does not move      
   ; ask patch-here [ set availablePatch other max-one-of [ availablePatch ] ]
    let neighAvailable count availablePatch
    ifelse neighAvailable = 0
    [
      move-around
    ]
    [
      let target max-one-of availablePatch [ resource-value ]
      face target move-to target
      set step-count step-count + 1
    ]    
  ] 
end

to move-around
  right random 360 
  let step-length 2
  forward step-length
end

【问题讨论】:

  • 您应该知道您在海龟上下文中创建availablePatch,然后在补丁上下文中更改它。这总是容易出错和意外结果。目前尚不清楚other 在这种情况下应该是什么意思。
  • 如果您从更笼统的术语描述程序开始(它应该代表什么,海龟在做什么以及为什么?)也会有所帮助

标签: netlogo


【解决方案1】:

就像新程序员经常遇到的情况一样,您过于拘泥于特定的思维模式。因此,当代码应该始终反映您正在尝试做的事情时,您正在使问题变得真正技术性和代码臃肿。你想要的很简单,所以代码应该很简单。尝试缩小并考虑其他选项。

如果我理解正确,海龟应该选择资源丰富的补丁来利用它们/收集它们的资源。但他们不应该两次选择同一个补丁。

有意义的可能解决方案:

-乌龟利用补丁后,资源应该低于 30。这样它就不会成为候选者。如果不低于 30,移动似乎也没什么意义。

- 使用一个 patch-own 变量“exploited”,在海龟移动到那里后设置为“true”,在海龟离开后设置为“false”。然后你可以使用with [ resource-value > 30 & exploited = false ] 代替当前的with 校验。

【讨论】:

  • 感谢 Jumboman!
  • 没问题,我希望我没有居高临下。如果这些解决方案对您有用,请使用绿色复选标记接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多