当多个代理以它为食时,如何让代理衰减?

How can I get an agent to decay as multiple agents feed on it?

在我的模型中,我有一些代理,它们充当具有固定能量的食品。许多海龟品种以这些为食,每个品种都有自己的食物能量,该能量低于食物的能量。

喂食代理代码如下:

to eat
  ifelse [food-energy] of myfood > 1.5 [
  set food-energy  1.5]
end

食品腐烂的相关代码是:

to decay
  if any? turtles-here [set food-energy 
  (1.5 * count feeders-here with  [myfood = myself]
end 

如果食物的能量不是喂食器可以消耗的能量的精确倍数,就会出现问题。因此,例如它可以下降到 1,这导致馈线占用 1.5 个单位,这应该是不可能的。当我饲养具有不同食物能量(即 < 或 > 1.5)的不同品种时,这种情况会加剧。

所以我的问题是我怎样才能让这些东西达到平衡?

  1. 你需要研究狼羊捕食模型。这是第一个 NetLogo 教程:http://ccl.northwestern.edu/netlogo/docs/tutorial1.html NetLogo 模型库中有五个版本越来越复杂,在 Wilensky 和 ​​Rand (2015) 的第 4 章中有介绍,您应该阅读。
  2. 在这里查看一些相关的 material: http://jasss.soc.surrey.ac.uk/14/2/5.html

后面有一些提示,但还有很多细节需要填写。

breed [feeders feeder]
patches-own [ food-energy ]
feeders-own [ myfood ]
to setup
  ca
  ask patches [set food-energy random 50]
  create-feeders 500 [
    move-to one-of patches
    set myfood one-of patches
  ]
end

to go
  ask feeders [move]
  ask feeders [feed]
  ask patches [growback]
end

to move ;how shd they move?
  rt random 20
  left random 40
  fd 1
  ;shd movement cost energy?
end

to feed
  if (patch-here = myfood) [
    let _extracted min (list food-energy 1.5)
    set food-energy (food-energy - _extracted)
  ]
end

to growback
  ;do you want growback?
end

感谢您的回复。我会尝试实现它们。这是一种对我有用的不优雅的解决方法:

to eat
ifelse (food-energy / capacity) < 1 and [meat] of myfood > capacity [
set food-energy  1.5] [set food-energy [meat] of myfood
ask myfood [set shape "square"]]  
if (food-energy / capacity) = 1 [
set color white]
if (food-energy > 0 and food-energy / capacity < 1) 
[ set color white ]
end 

这最初引起了一个问题,当食物能量下降到 0 时,我要求它死掉任何看着我食物的 [肉] 的动物都失去了它的目标,我得到了一个错误。所以我让动物在它们的颜色变成白色后打破这种联系。

to ignore
 set myfood nobody
 set food-energy food-energy * 1
end