我有一个模型,该模型包含两种类型的特工:救援特工和人口特工。该模型基本上是一个搜索和救援,其中有一堆节点通过链接连接。救援代理将首先搜索要救援的代理,然后在节点之间移动直到到达人口代理。
可以说,我的人口代理拥有一个称为伤害等级的变量,其取值为1,2或3。我希望我的救援人员首先抢救伤害级别为2或3的人口代理。是。下一步继续到伤害等级1。
我编写代码的方式是,如果我的伤害级别为2和3的人口代理的计数变为0。开始搜索伤害级别为1的代理。但是问题是,因为我的伤害级别为2或3的人口代理3接近0(还剩下1或2),我的一些救援人员将一直留在同一节点上,而不寻找伤害级别1的代理商,直到所有受伤2或3的代理商被救出为止。
例如,如果有2个救援人员,1个受伤级别为3的弹出代理和2个受伤级别为1的弹出代理。其中一个救援代理将移动到受伤为3的弹出代理,但另一个仍将保留在同一节点上,直到所有受伤为3的流行特工获救,然后他将开始转移到受伤1。
请注意,每个救援人员将只针对一个人口代理,以确保他们不会前往同一个人。
有什么方法可以解决此问题,即救援人员要等到伤害2和3的总数达到0时才在同一节点中等待吗?或更好的解决方法
谢谢
breed[rescue-agents rescue-agent]
breed[pop-agents pop-agent]
pop-agents-own [injury]
rescue-agents-own [target-pop-agent]
...
to go
...
;search agent
to find-agents
let pop-ij1 pop-agents with [injury = 1]
let pop-ij2 pop-agents with [injury = 2]
let pop-ij3 pop-agents with [injury = 3]
let Pop-ij2&3 pop-agents with [injury = 2 or injury = 3]
if target-pop-agent = nobody[
ifelse (count pop-ij2 = 0 and count pop-ij3 = 0)
[set target-pop-agent min-one-of (pop-ij1) in-radius 30 with [not
targeted?][distance myself]]
[set target-pop-agent min-one-of (pop-ij2&3) in-radius 30 with [not
targeted?][distance myself]]
]
...
end