在不同品种的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]
你说“似乎不是