当多个代理以它为食时,如何让代理衰减?
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)的不同品种时,这种情况会加剧。
所以我的问题是我怎样才能让这些东西达到平衡?
- 你需要研究狼羊捕食模型。这是第一个 NetLogo 教程:http://ccl.northwestern.edu/netlogo/docs/tutorial1.html NetLogo 模型库中有五个版本越来越复杂,在 Wilensky 和 Rand (2015) 的第 4 章中有介绍,您应该阅读。
- 在这里查看一些相关的 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
在我的模型中,我有一些代理,它们充当具有固定能量的食品。许多海龟品种以这些为食,每个品种都有自己的食物能量,该能量低于食物的能量。
喂食代理代码如下:
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)的不同品种时,这种情况会加剧。
所以我的问题是我怎样才能让这些东西达到平衡?
- 你需要研究狼羊捕食模型。这是第一个 NetLogo 教程:http://ccl.northwestern.edu/netlogo/docs/tutorial1.html NetLogo 模型库中有五个版本越来越复杂,在 Wilensky 和 Rand (2015) 的第 4 章中有介绍,您应该阅读。
- 在这里查看一些相关的 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