【问题标题】:Netlogo Lists: detecting the patch in a list with max distance to one specific patch - for each turtleNetlogo 列表:在列表中检测到一个特定补丁的最大距离的补丁 - 对于每只海龟
【发布时间】:2021-04-29 08:36:26
【问题描述】:

我想在 Netlogo 中解决一个远远超出我的编程技能的问题。我想为每只海龟建立一个列表,其中包含海龟在这一“天”去的最远的补丁。到目前为止,我试图建立一个列表,为每只海龟存储所有补丁。现在我想计算——对于每只海龟——这个列表中离它的家有最大距离的补丁(隐藏)。我想每天晚上清空列表(这不是强制性的)到目前为止这是我的代码:

let temp-visited-patch-list lput patch-here temp-visited-patch-list
  if period = night
  [ 
    [foreach [temp-visited-patch-list] [x ->  set visited-patch-list lput (max x [distance hide]) visited-patch-list]]
    let temp-visited-patch-list []
]

所以我离单独提取每只海龟的值并没有那么远 - 甚至我发布的部分也不起作用。我收到“预期的命令”错误。我将非常感谢任何解决此问题的建议。 此致 奥利维亚

【问题讨论】:

  • 您需要列表是否有特定原因?有更简单的方法来概念化这一点。如果您只关心最大距离,而不是存储列表然后在晚上处理并删除它,只需计算到隐藏的距离,因为它四处游荡,如果它大于先前存储的值,则保留该值跨度>
  • 嗨 JenB,我不需要列表 - 但我需要每个海龟到隐藏处的最大距离的补丁 - 我认为这个信息很容易(到目前为止我不是完全确定如何)从列表中提取 :) 我想为模拟中的每只乌龟计算家园范围。我也有使用代理集而不是列表的想法,但我有一个问题是为了计算我会混合补丁和海龟变量 - Netlog 对此不满意......
  • 每只海龟都有自己的变量值。就像有些海龟可以是绿色的,有些可以是蓝色的——这就是turtles-own 的用途。所以乌龟 1 会知道它说 5,乌龟 2 会知道它说 4 等等。
  • 我不确定我是否理解您想要告诉我的内容。我需要每只海龟相对于它的皮走的最远的补丁(不是距离,补丁)。这个补丁应该单独存储在每个海龟的所有列表中,以便我可以计算家庭范围的最小凸包/多边形。我怎么能用海龟自己做到这一点?也许你可以添加一些代码,让我更容易理解你将如何解决这个问题。

标签: list netlogo


【解决方案1】:

这段代码让海龟移动,记住它们最远的补丁,然后将这些补丁变成红色并计算平均距离。它应该可以帮助您了解如何使用补丁和海龟属性来解决您的问题。

globals [home-patch]

turtles-own
[ farpatch
  maxdistance
]

to setup
  clear-all
  set home-patch one-of patches
  ask home-patch
  [ set pcolor blue
    sprout 20
  ]
  reset-ticks
end

to go
  repeat 20 [movement]
  ask (patch-set [farpatch] of turtles) [set pcolor red]
  type "Average max distance:" print mean [maxdistance] of turtles
  tick
end

to movement
  ask turtles
  [ set heading random 360
    forward 1
    if distance home-patch > maxdistance
    [ set maxdistance distance home-patch
      set farpatch patch-here
    ]
  ]
end

【讨论】:

  • 非常感谢您的帮助 - 但如果我将这个 ONE 主补丁更改为与我一起工作的情况,我会再次陷入困境,遇到代理、代理集和列表的问题 - DSTANCE for示例不适用于代理集 - 仅适用于一个代理(补丁)。我需要一个包含 PATCHES 的列表(或代理集)的解决方案,并以某种方式找出离各自隐藏最远的每个海龟的列表补丁。大多数原语在这种情况下都不起作用。 Maby,我只是觉得很复杂-我愿意接受其他能给我同样结果的解决方案......
  • 当然你找不到到代理集的距离 - 想想逻辑,如果代理集中有 5 个代理,你让乌龟找到到的距离是什么?最接近的代理或 5 个代理的中间还是其他?我给你的示例代码在变量 farpatch 中存储了一个补丁 - 这不是数字或其他数据类型,它是一个补丁
  • 您好 JenB,如果您能够通过代码解决我遇到的问题,我希望您能提供帮助。不幸的是,只是告诉我什么不起作用并不能解决任何问题。我的问题正是我必须找到一个计算范围的解决方案——它不像你知道的我已经发现的那样工作。但是您通过代码提供的解决方案也不能解决我的问题。我能够将变量存储在补丁中。但不幸的是,我必须找到一种适用于多个补丁的解决方案——这就是我所要求的。
  • 我试图提供帮助,但您没有以我可以理解的方式解释您的问题,这是什么不起作用。我已经提供的代码完全创建了我认为您想要的一组补丁 - 每只海龟都为该集合贡献一个补丁,它到达最远的补丁(即变成红色的补丁)。
猜你喜欢
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多