为什么不';在NetLogo中以海龟位置为中心的t邻居补丁?同样,当设置;“目标”;当我们在邻居家时,为什么不互相回报呢?

为什么不';在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

使用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-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
可能比使用
海龟
更清楚