我用品种命令设置了两个不同的品种:
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
对于breeds1
,q
的值为[0,1],而c
为其取值。
对于breeds2
,q
的值等于0,而c
的随机值是[0,1]。
两个品种都有d=3
(固定值)。
c,q
,并且两个电位都是全局变量。
我需要做的是绘制两个电位/分布。
我使用plotxy
在绘图代码框中绘制分布:
[![在此处输入图片描述] [1]] [1]
我想要的是同一图中的以下两个分布。图1显示了品种1的分布,图2显示了品种2的分布。
如果我认为potential_1
和potential_2
是乌龟拥有的,(breeds1
的第一个,breeds2
的第二个),我收到一条消息,我可以请勿在观察者上下文中使用potential_1
,因为potential_1
仅限于乌龟。与potential_2
相同。
如果我将q
和c
视为乌龟拥有,如下所示:
breeds1-own
[ q
c
potential_1
]
breeds2-own
[
q
c
potential_2
]
我收到以下错误:
您不能在观察者上下文中使用
c
,因为c
仅适用于乌龟
所以我的问题是:如何绘制两个分布?
希望您能帮助我。
答案 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'值使用。