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

时间:2019-10-20 18:19:46

标签: netlogo

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

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,并且两个电位都是全局变量。 我需要做的是绘制两个电位/分布。 我使用plotxy在绘图代码框中绘制分布: [![在此处输入图片描述] [1]] [1]

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

如果我认为potential_1potential_2是乌龟拥有的,(breeds1的第一个,breeds2的第二个),我收到一条消息,我可以请勿在观察者上下文中使用potential_1,因为potential_1仅限于乌龟。与potential_2相同。 如果我将qc视为乌龟拥有,如下所示:

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

我收到以下错误:

  

您不能在观察者上下文中使用c,因为c仅适用于乌龟

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

希望您能帮助我。

1 个答案:

答案 0 :(得分:1)

好的,我无法使用您的代码回答您的问题,因为我无法得出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

然后,您需要以下作为情节中的笔。您还需要将每支笔的打印设置更改为“点”而不是“线”。

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

我要做的是分两组创建100只海龟,并使用您的代码为每组计算变量'c'和'potential'的值。但这都是一次完成-每个乌龟都会进行计算,然后控制权会在创建时移到下一只乌龟。然后我让图中的每支笔都绘制一组中的值。

您收到的错误消息“您不能在观察者上下文中使用c,因为c仅限于乌龟”,这意味着您尝试使用变量c而不让NetLogo知道您想要哪个乌龟的'c'值使用。