Netlogo中的动态图表

时间:2016-02-26 02:31:04

标签: charts netlogo dynamicquery

在我的模型中,根据用户使用滑块定义的值,乌龟的数量是动态的。滑块可以取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 ] ]

我重复了上述事项,直至参加派对= 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。

请告知如何解决这个问题。谢谢,谢谢你的帮助。

此致

1 个答案:

答案 0 :(得分:4)

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

幸运的是,NetLogo为您提供了处理“动态”数量的海龟所需的所有设施。 ask是您最常使用的原语,但是有很多其他原语可以处理整个代理集。您可以阅读有关agentsets in the programming guide的更多信息。

在绘图的情况下,您可以ask各方创建“临时绘图笔”。我们将使用who数字为每个笔提供唯一的名称。 (这是NetLogo中who号码的极少数合法用途之一。)

将此代码放入绘图的“绘图设置命令”字段中:

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

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

要进行实际绘图,我们可以使用非常相似的代码。将此代码放在绘图的“绘图更新命令”字段中:

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