为什么不';在NetLogo中以海龟位置为中心的t邻居补丁?同样,当设置;“目标”;当我们在邻居家时,为什么不互相回报呢?
使用Netlogo:我想要的是海龟吃其他海龟,这取决于它们的位置(后来取决于它们的大小)。我尝试过以下代码:为什么不';在NetLogo中以海龟位置为中心的t邻居补丁?同样,当设置;“目标”;当我们在邻居家时,为什么不互相回报呢?,netlogo,Netlogo,使用Netlogo:我想要的是海龟吃其他海龟,这取决于它们的位置(后来取决于它们的大小)。我尝试过以下代码: breed [cods cod] cods-own [energy target] to setup clear-all setup-patches setup-turtles reset-ticks end to setup-patches ask patches [set pcolor grey] end to setup-turtles create
breed [cods cod]
cods-own [energy target]
to setup
clear-all
setup-patches
setup-turtles
reset-ticks
end
to setup-patches
ask patches [set pcolor grey]
end
to setup-turtles
create-cods number [
set color blue
setxy random-xcor random-ycor
set shape "fish"
set energy 100
if random 100 < 80 [ set size 12]
if random 100 < 75 [set size 11]
if random 100 < 70 [set size 10]
if random 100 < 65 [set size 9]
if random 100 < 60 [set size 8]
if random 100 < 55 [set size 7]
if random 100 < 50 [set size 6]
if random 100 < 45 [set size 5]
if random 100 < 35 [set size 4]
if random 100 < 30 [set size 3]
if random 100 < 25 [set size 2]
if random 100 < 20 [set size 1]
]
end
to go
if not any? cods [stop]
ask turtles [wander
wiggle
move
eat
check-if-dead
]
ask cods [set size size + growth-rate
set energy energy - movement-cost]
tick
my-update-plots
end
to wander
ask cods [
wiggle
move
]
;; sheep procedure, the sheep moves which costs it energy
end
;; sheep procedure, the sheep changes its heading
to wiggle
;; turn right then left, so the average direction is straight ahead
right random 90
left random 90
end
to move
forward 1
end
;; sheep procedure, if my energy is low, I die
to check-if-dead
if energy < 0 [
die
]
end
to eat
if any? turtles-on neighbors[
ask neighbors [set pcolor green]
set target one-of turtles-on neighbors ;with [ size <= [size] of myself - 1 ]
create-link-with target [set color red]
ask target [ set color red]
]
end
品种[cods cod]
cods自身[能源目标]
设置
清除所有
安装补丁
安置海龟
重置滴答声
结束
设置修补程序
询问补丁[设置颜色为灰色]
结束
安置海龟
创建密码[
设置颜色为蓝色
setxy随机xcor随机ycor
定形“鱼”
设置能量100
如果随机100<80[设置大小12]
如果随机100<75[设置大小11]
如果随机100<70[设置大小10]
如果随机100<65[设置大小9]
如果随机100<60[设置大小8]
如果随机100<55[设置大小7]
如果随机100<50[设置大小6]
如果随机100<45[设置大小5]
如果随机100<35[设置大小4]
如果随机100<30[设置大小3]
如果随机100<25[设置大小2]
如果随机100<20[设置大小1]
]
结束
外带
如果没有?代码[停止]
问海龟[漫游]
扭动
移动
吃
检查是否死亡
]
询问cods[设定尺寸+增长率]
设置能量-移动成本]
打上钩
我的更新图
结束
游荡
询问cods[
扭动
移动
]
;; 绵羊程序,绵羊移动需要消耗能量
结束
;; 绵羊程序,绵羊更改其标题
摇摆
;; 先向右转,然后向左转,这样平均方向就是正前方
右随机90
左随机90
结束
移动
转发1
结束
;; 如果我的能量不足,我就会死
检查是否死亡
如果能量<0[
死亡
]
结束
吃
如果有的话?邻居们的乌龟[
询问邻居[将颜色设置为绿色]
将其中一只海龟的目标对准邻居[size我认为问题在于鳕鱼的移动和进食发生在go
过程中的同一个ask
块中。请记住,在ask
中,海龟被随机要求执行ask
中的所有命令。因此,一只鳕鱼会在它的邻居中找到另一只鳕鱼,创建一个到它的链接,然后返回rn它是红色的。但是当ask
到达那个红色的cod时,它由于自己的游荡、摆动和移动而移动了,因此它不再是邻居。事实上,两个cod都移动了。当每个cod在go过程中执行ask
时,它反过来要求所有cod在wander
过程中摆动和移动。这就是这就是为什么你发现原来的两个邻居鳕鱼都搬走了。如果你把eat
从go
过程中的ask
中拿出来,移动到一个单独的ask
中,在所有移动完成后执行,你会发现你得到了你想要的互惠
有两件事需要考虑。首先,你想让每只鳕鱼都让所有的鳕鱼游荡,还是让它们自己游荡?第二,因为你所有的海龟(至少到目前为止)都是鳕鱼,所以在整个过程中使用cod
可能比使用海龟
更清楚