【问题标题】:How to add a attribute only to a specific patch out of all patches?如何仅将属性添加到所有补丁中的特定补丁?
【发布时间】:2020-11-14 20:11:44
【问题描述】:

我希望基于滑块的输入仅作为特定补丁中的属性。例如,我正在尝试对只选择优质草的马 [agent] 进行建模。作为补丁的输入,我有草、农作物、贫瘠土地等的补丁。这里的主要焦点是草地。它已经具有可变的高 (3)、中 (2) 和低质量草 (1)。所以我想只为草地补丁添加一个属性(只有草地,这很重要),可以在设置(设置环境)期间由滑块控制以进行实验。

我尝试了这段代码,但它不起作用(并给我一个 java 堆错误)

set fodder gis:load-dataset "Data/grass.asc"
 gis:apply-raster fodder grass
 ask patches [if grass = 3 [set pcolor green]                  
              if grass = 2 [set pcolor yellow]                    
              if grass = 1 [set pcolor red]                       ;; 1 is low quality 
  ]
if any? patches with [grass <= 3] [ask patches [set modified-grass quality-of-grass]]  ;; controlled by slider 

【问题讨论】:

    标签: netlogo agent


    【解决方案1】:

    我可以在这里想到几个可能的问题。首先,我假设 grass 是一个 patches-own 变量。我没有使用过 gis 扩展,但我假设它将 grass 的值设置为 1、2 或 3,以用于某些将是草补丁的补丁。所有补丁的grass 的值都初始化为零,因此非草补丁的grass 将等于零。因此,当您使用表达式patches with [grass &lt;= 3] 时,您指的不仅仅是草地,而是所有的补丁。 (当然,对于非草地补丁,您可能已将 grass 设置为大于 3 的某个值,在这种情况下,这不是问题。)

    其次,您说您想将modified-grass(另一个patches-own 变量?)设置为仅用于草地补丁的滑块值。但是[ask patches [set modified-grass quality-of-grass]]所有 补丁设置了grass 变量,而不仅仅是草地补丁。

    所以,我认为你可能真正想要的是

    ask patches with [grass > 0 and grass <= 3] [set modified-grass quality-of-grass]
    

    如果没有这样的补丁,什么都不会发生。

    现在我不知道为什么这些问题都会导致 java 堆错误。你确定你的代码中没有发生这种情况吗?

    【讨论】:

    • 谢谢查尔斯,我认为您的建议揭示了问题。该代码现在有效。我还增加了 Netlogo 的内存上限,我想这也解决了 java 堆空间错误的问题。
    • 您也可以考虑将您的各种补丁放入收藏中。就像用 [grass > 0 和 Grass
    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2020-10-16
    • 2011-12-21
    相关资源
    最近更新 更多