在不同品种的NetLogo中用图案填充绘制
我在策划品种方面有些困难。 具体来说,我有三个品种,在不同品种的NetLogo中用图案填充绘制,netlogo,Netlogo,我在策划品种方面有些困难。 具体来说,我有三个品种,卖家、买家和汽车。 品种之间的关系如下: if breed = buyers [ hatch-cars 1 [ set attribute_1 random-float 1 ...] ] if breed = sellers [ hatch-cars 1 [set attribute_2 random-float 1 ...] 我想画的是不同品种的车,以便有两条不同的线,一条供买家使用,一条供卖家使用。 我试过了 ask cars with
卖家、买家和汽车。
品种之间的关系如下:
if breed = buyers [
hatch-cars 1
[ set attribute_1 random-float 1
...]
]
if breed = sellers [
hatch-cars 1
[set attribute_2 random-float 1
...]
我想画的是不同品种的车,以便有两条不同的线,一条供买家使用,一条供卖家使用。
我试过了
ask cars with [breed = buyers ][plotxy attribute_1 ticks]
ask cars with [breed = sellers ] [plotxy attribute_2 ticks]
ask cars [plotxy attribute_1 ticks]
ask cars [plotxy attribute_2 ticks]
但它并没有描绘任何东西,我也并没有收到任何错误信息。
然后,我试了一下
ask cars with [breed = buyers ][plotxy attribute_1 ticks]
ask cars with [breed = sellers ] [plotxy attribute_2 ticks]
ask cars [plotxy attribute_1 ticks]
ask cars [plotxy attribute_2 ticks]
而且几乎没有问题。然而,它还绘制了其他点:它似乎考虑了所有品种,买家
,卖家
,以及汽车
。
如果我写
if breed = buyers [ask cars [plotxy attribute_1 ticks]]
if breed = sellers [ask cars [plotxy attribute_2 ticks]]
我收到以下错误消息:您不能在观察者上下文中使用“品种”,因为“品种”仅为海龟/link
如何解决此问题
感谢您的帮助。让我们先看看为什么您的第一次尝试没有绘制任何内容:
ask cars with [breed = buyers ][plotxy attribute_1 ticks]
ask cars with [breed = sellers ] [plotxy attribute_2 ticks]
当您在NetLogo中声明一个品种时,它会创建一个与该品种同名的特殊代理集。如果你写:
breed [ buyers buyer ]
breed [ sellers seller ]
breed [ cars car ]
NetLogo创建了三个特殊代理集:买家
、卖家
和汽车
。每个代理集只包含相应品种的海龟。还有一个特殊的海龟
代理集,它包含模型中的所有海龟,不管它们的品种如何
除此之外,所有海龟都有一个breed
变量,该变量引用它们所属的繁殖代理集。每只海龟可以是“无刺”的,并且将海龟作为其品种
变量的值,或者属于一个(但不超过一个)品种,并将该品种的代理集作为其品种
变量的值
关于breed
变量,需要知道的一件事是您通常不需要使用它。写作:
具有与书写相同的效果:
ask cars [ do-something ]
除了ask cars
版本比ask turtles with…
版本快得多(可读性也更高)
现在,我们能看到有什么问题吗询问[bride=买家]的汽车?根据定义,所有汽车都将汽车
作为其品种
变量的值,因此品种=买家
条件将始终为假。这就是为什么该声明没有任何作用。(它也没有理由给你一条错误消息。这就像要求带[color=red]
的海龟在没有红海龟的情况下做些什么:什么都没有发生,但问也没有错。)
现在让我们看一下您的第二次尝试:
ask cars [plotxy attribute_1 ticks]
ask cars [plotxy attribute_2 ticks]
你说“它似乎考虑了所有的品种”,但考虑到我们对品种如何工作的理解,你应该能够看到,无论它有什么问题,都不可能是这样。据我所知,它应该会起作用
我的猜测是,你一直在某处制造额外的汽车,却没有意识到这一点。或者是别的什么。根据你提供的信息,我们真的说不出来
(一个小小的旁注:通常在x
轴上打勾,但您要在y
轴上绘制它们。)
最后,您的最后一次尝试是:
if breed = buyers [ask cars [plotxy attribute_1 ticks]]
if breed = sellers [ask cars [plotxy attribute_2 ticks]]
我们已经看到,breed
是一个海龟变量,因此它只能在特定海龟的上下文中访问,这就是为什么您会收到关于在观察者上下文中使用它的警告(即,尝试在海龟上下文之外使用它)
总而言之,我不能为你的问题提供一个直接的解决方案,但我希望更好地了解品种是如何工作的将有助于你找出问题所在
也许最后一件需要澄清的事情是这样说:
ask one-of sellers [ hatch-cars 1 ]
不会在新孵化的汽车和卖家
品种之间建立任何类型的关系。这辆车不知道它是由一个卖家设计的。而且,除非您将此信息保存在另一个变量的某个地方,否则无法查询NetLogo中“所有由卖家孵化的汽车”。但如何做到这一点是另一个问题(如果需要,欢迎您在本网站上提问)。让我们先看看为什么您的第一次尝试没有绘制任何内容:
ask cars with [breed = buyers ][plotxy attribute_1 ticks]
ask cars with [breed = sellers ] [plotxy attribute_2 ticks]
当您在NetLogo中声明一个品种时,它会创建一个与该品种同名的特殊代理集。如果你写:
breed [ buyers buyer ]
breed [ sellers seller ]
breed [ cars car ]
NetLogo创建了三个特殊代理集:买家
、卖家
和汽车
。每个代理集只包含相应品种的海龟。还有一个特殊的海龟
代理集,它包含模型中的所有海龟,不管它们的品种如何
除此之外,所有海龟都有一个breed
变量,该变量引用它们所属的繁殖代理集。每只海龟可以是“无刺”的,并且将海龟作为其品种
变量的值,或者属于一个(但不超过一个)品种,并将该品种的代理集作为其品种
变量的值
关于breed
变量,需要知道的一件事是您通常不需要使用它。写作:
具有与书写相同的效果:
ask cars [ do-something ]
除了ask cars
版本比ask turtles with…
版本快得多(可读性也更高)
现在,我们能看到有什么问题吗询问[bride=买家]的汽车?根据定义,所有汽车都将汽车
作为其品种
变量的值,因此品种=买家
条件将始终为假。这就是为什么该声明没有任何作用。(它也没有理由给你一条错误消息。这就像要求带[color=red]
的海龟在没有红海龟的情况下做些什么:什么都没有发生,但问也没有错。)
现在让我们看一下您的第二次尝试:
ask cars [plotxy attribute_1 ticks]
ask cars [plotxy attribute_2 ticks]
你说“似乎不是