如何绘制两个不同品种的分布图
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
对于 breeds1
,q
的值在 [0,1] 中,而 c
取其值。
对于 breeds2
,q
的值等于 0,而 c
在 [0,1] 中取随机值。
两个品种都有 d=3
(固定值)。
c,q
,两个势都是全局变量。
我需要做的是绘制两个 potentials/distributions。
我使用 plotxy
在绘图代码框中绘制分布:
[![在此处输入图片描述][1]][1]
我想要的是同一图中的以下两个分布。图 1 显示品种 1 的分布,图 2 显示品种 2 的分布。
如果我将 potential_1
和 potential_2
视为 turtles-own(第一个用于 breeds1
,第二个用于 breeds2
),我收到的消息是我不能在观察者上下文中使用 potential_1
,因为 potential_1
仅适用于海龟。 potential_2
也一样。
如果我将 q
和 c
视为 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' 值。
我用 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
对于 breeds1
,q
的值在 [0,1] 中,而 c
取其值。
对于 breeds2
,q
的值等于 0,而 c
在 [0,1] 中取随机值。
两个品种都有 d=3
(固定值)。
c,q
,两个势都是全局变量。
我需要做的是绘制两个 potentials/distributions。
我使用 plotxy
在绘图代码框中绘制分布:
[![在此处输入图片描述][1]][1]
我想要的是同一图中的以下两个分布。图 1 显示品种 1 的分布,图 2 显示品种 2 的分布。
如果我将 potential_1
和 potential_2
视为 turtles-own(第一个用于 breeds1
,第二个用于 breeds2
),我收到的消息是我不能在观察者上下文中使用 potential_1
,因为 potential_1
仅适用于海龟。 potential_2
也一样。
如果我将 q
和 c
视为 turtles-own 如下:
breeds1-own
[ q
c
potential_1
]
breeds2-own
[
q
c
potential_2
]
我收到以下错误:
You can't use
c
in an observer context, becausec
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' 值。