在我的模型中,根据用户使用滑块定义的值,乌龟的数量是动态的。滑块可以取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。
请告知如何解决这个问题。谢谢,谢谢你的帮助。
此致
答案 0 :(得分:4)
在编写模型代码时,您应该尝试应用DRY原则:不要重复自己。分别创建每只乌龟,然后通过单独解决它们turtle 0
,turtle 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
]