如何在所有补丁程序中仅向特定补丁程序添加属性?

时间:2020-07-24 22:50:51

标签: netlogo 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 

1 个答案:

答案 0 :(得分:1)

我可以在这里想到几个可能的问题。首先,我假设grass是一个patches-own变量。我尚未使用gis扩展名,但是我假设对于某些要成为草斑的补丁,它将grass的值设置为1、2或3。所有补丁的grass的值都初始化为零,因此非草丛补丁的grass等于零。因此,当您使用表达式patches with [grass <= 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堆错误。您确定在代码的前面不会发生这种情况吗?