不使用品种,而是处理两种类型的海龟

Not to use breed but deal with two types of turtles

我有两组代理:retailerA 和 retailerB。以前,我使用品种来创建它们,但由于我想创建一个随机网络,在其中询问所有海龟并随机选择一些进行连接,我决定最好将海龟保留在随机网络代码中(在图书馆)并做这个改变:

create-turtles 130 ; 100 of which are retailerA and 30 are retialerB.

现在我希望每组代理都有不同的显示。 RetailerA 将随机分布,而 retailerB 应显示在一个圆圈中。然而,下面的代码并没有达到我的要求。

to A
create-turtles 100
set retailerA? true
set shape "person"
setxy random-xcor random-ycor
end

to B
  create-turtles 30 [
    set retailerB? true
    set shape "person"
    set color gray

  ]
  ask turtles with [retailerB?] [
    layout-circle turtles with [retailerB?] (max-pxcor - 5)
    ]
end

这会将所有海龟都显示为圆形。

谢谢,

当您创建一个 turtles-own 变量时,默认值为 0。因此,如果您这样做

  create-turtles 100 [
    set retailerA? true
    set shape "person"
    setxy random-xcor random-ycor
  ]

您已将 retailerA? 正确设置为 true,但由于您没有为此代理集设置 retailerB?,因此 retailerB? 它们的值都将为 0 .因此,如果您尝试使用 with(例如 turtles with [retailerB?]...)来评估 true/false 表达式,但某些海龟 return 的值为 0 而不是 [=15] =] 或 false,NetLogo 不知道该怎么办。要解决此问题,您可以在设置过程中显式设置这些变量,如下所示:

to spawn-a
  create-turtles 100 [
    set retailerA? true
    set retailerB? false
    set shape "person"
    setxy random-xcor random-ycor
  ]
end

或者您可以明确地说 with [retailerB? = true]

此外,请查看 syntax for layout-circle- 您不需要 ask 海龟使用该原语。那么,要解决您的问题,您需要类似的东西:

turtles-own [ retailerA? retailerB? ]

to setup
  ca
  spawn-a
  spawn-b
  reset-ticks
end

to spawn-a
  create-turtles 100 [
    set retailerA? true
    set shape "person"
    setxy random-xcor random-ycor
  ]
end

to spawn-b
  create-turtles 30 [
    set retailerB? true
    set shape "person"
    set color gray

  ]  
  layout-circle turtles with [retailerB? = true] (max-pxcor - 5)
end