如何绘制两个不同品种的分布图

How to plot distributions of two different breeds

我用 breed 命令设置了两个不同的品种:

breed [breeds1 breed1]
breed [breeds2 breed2]

然后,我随机要求一只乌龟执行一个动作命令,如下所示:

to go
ask one-of turtles [
   action
  ]
end

其中 action 定义为

    to action
      ifelse (breed = breeds1) 
      [
        set q random-float 1
        set c q
        set potential_1 (1 + d) * (1 - c)^(d)
      ]
      [
        set c random-float 1
        set potential_2 (1 + (1 / d))*(1 - c)^(1 / d)
      ]
    end

对于 breeds1q 的值在 [0,1] 中,而 c 取其值。 对于 breeds2q 的值等于 0,而 c 在 [0,1] 中取随机值。 两个品种都有 d=3(固定值)。

c,q,两个势都是全局变量。 我需要做的是绘制两个 potentials/distributions。 我使用 plotxy 在绘图代码框中绘制分布: [![在此处输入图片描述][1]][1]

我想要的是同一图中的以下两个分布。图 1 显示品种 1 的分布,图 2 显示品种 2 的分布。

如果我将 potential_1potential_2 视为 turtles-own(第一个用于 breeds1,第二个用于 breeds2),我收到的消息是我不能在观察者上下文中使用 potential_1,因为 potential_1 仅适用于海龟。 potential_2 也一样。 如果我将 qc 视为 turtles-own 如下:

breeds1-own
[ q
  c
  potential_1
]
breeds2-own
[
  q
  c
  potential_2
]

我收到以下错误:

You can't use c in an observer context, because c is turtle-only

所以我的问题是:如何绘制这两个分布?

希望你能帮助我。

好的,我无法使用您的代码回答您的问题,因为我无法理解 ask one-of 的逻辑。因此,我所做的是创建一个完整的模型来进行绘图,希望能帮助您找出代码中的问题。

试试这个:

globals [d]

turtles-own
[ potential
  group
  c
]

to setup
  clear-all
  set d 3
  create-turtles 100
  [ set group one-of ["type1" "type2"]
    action
  ]
  reset-ticks
end

to action
  ifelse (group = "type1") 
  [ let q random-float 1
    set c q
    set potential (1 + d) * (1 - c)^(d)
  ]
  [ set c random-float 1
    set potential (1 + (1 / d))*(1 - c)^(1 / d)
  ]
end

那么您将需要以下内容作为情节中的笔。您还需要将每支笔的绘图设置更改为 'point' 而不是 'line'.

ask turtles with [group = "type1"] [plotxy c potential]
ask turtles with [group = "type2"] [plotxy c potential]

我所做的是在两组中创建 100 只海龟,使用您的代码为每组计算变量 'c' 和 'potential' 的值。但这一切都是一次性完成的——每只海龟都进行计算,然后控制权移至下一只创建的海龟。然后我让图中的每支笔只绘制一组中的值。

您收到的错误消息 "You can't use c in an observer context, because c is turtle-only" 意味着您试图使用变量 c 而没有让 NetLogo 知道您想使用哪个海龟的 'c' 值。