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

How to add a attribute only to a specific patch out of all patches?

我只想将基于滑块的输入作为特定补丁中的属性。例如,我正在尝试对只选择优质草的马 [agent] 进行建模。作为补丁的输入,我有草、庄稼、贫瘠土地等的补丁。这里的主要焦点是草补丁。它已经具有可变的高 (3)、中 (2) 和低质量草 (1)。所以我想给grass patch only添加一个属性(only grass,这个很重要)可以在setup(设置环境)的时候通过slider控制来实验。

我试过这段代码,但它不起作用(并给我一个 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 

我在这里可以想到几个可能的问题。首先,我假设 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 堆错误。您确定您的代码之前没有发生这种情况吗?