Netlogo 中的动态图表

Dynamic charting in Netlogo

在我的模型中,海龟的数量是动态的,基于用户使用滑块定义的值。滑块可以取 2 到 10 之间的值。每只海龟都有自己的一组坐标和特征,因此我使用以下代码来创建它们。

create-parties 1 
[set color red set label-color red set label who + 1 set size 3 setxy party1-left-right party1-lib-con ]
create-parties 1 
[set color green set label-color red set label who + 1 set size 3 setxy party2-left-right party2-lib-con ]
if Num-of-parties >= 3
  [ create-parties 1 
[set color blue set label-color red set label who + 1 set size 3 setxy party3-left-right party3-lib-con ] ]

我已经重复了上面的步骤直到Num-of-parties =10。

在其中一个模块中,我创建了一个条件,如果海龟的某个值达到 0,它就会死亡。

在模型的后半部分,我使用 set-current-plot 使用以下代码创建图表:

set-current-plot "Voter Support"
  set-current-plot-pen "Party1"
  plot 100 * [my-size] of turtle 0 / sum[votes-with-benefit] of patches
  set-current-plot-pen "Party2"
  plot 100 * [my-size] of turtle 1 / sum[votes-with-benefit] of patches
  if Num-of-parties >= 3 [ set-current-plot-pen "Party3"
  plot 100 * [my-size] of turtle 2 / sum[votes-with-benefit] of patches ]

所有十种可能的海龟依此类推。

问题是,如果用户定义了 5 只海龟,而海龟 3 在第 10 个刻度时死亡,则代码的图表部分会抛出错误,因为没有海龟 3,但用户定义了海龟数量滑块值为 5。

请指教如何解决这个问题。谢谢,感谢帮助。

此致

在编写模型代码时,您应该尝试应用 DRY 原则:不要重复自己。分别创建每只海龟,然后尝试通过将它们分别定位为 turtle 0turtle 1 等来对它们中的每一个做一些事情,这将导致各种问题。您所遇到的绘图只是冰山一角。

幸运的是,NetLogo 为您提供了处理 "dynamic" 数量的海龟所需的所有工具。 ask is the primitive you will use most often for this, but there are plenty of other primitives that deal with whole agentsets. You can read more about agentsets in the programming guide.

在密谋的情况下,你可以ask你的每一方创建一个"temporary plot pen"。我们将使用 who 编号为每支笔指定一个唯一的名称。 (这是 who 数字在 NetLogo 中为数不多的合法用途之一。)

将此代码放在绘图的 "Plot setup commands" 字段中:

ask parties [
  create-temporary-plot-pen (word "Party" (who + 1))
  set-plot-pen-color color ; set the pen to the color of the party
]

(请注意,您不再需要之前定义的绘图笔:您可以删除它们。每次设置绘图时都会动态创建新的绘图笔。)

要进行实际绘图,我们可以使用非常相似的代码。将此代码放在绘图的 "Plot update commands" 字段中:

ask parties [
  set-current-plot-pen (word "Party" (who + 1))
  plot 100 * my-size / sum [ votes-with-benefit ] of patches
]