如何限制捕食者“吃掉”的猎物数量并重新计算残留量?

时间:2018-07-17 09:52:41

标签: variables netlogo agents

在我的程序中,每只海龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序指出,葡萄糖和细菌的初始质量为1 mmol。程序规定葡萄糖将被水解并分裂。因此,葡萄糖质量将不同于初始的1mmol。细菌的检测程序说,当细菌进食一个葡萄糖时,细菌的质量将从最初的1 mmol加葡萄糖的质量(在to split_hydrolyzed_glucose程序中确定的随机数)乘以a。固定数字(即0.3)。如何限制每个tick虫可以消耗的葡萄糖量(最大吸收率)? (1滴答声= 1小时)如何设置猎物的剩余葡萄糖质量?例如,如果细菌只能吃(摄取)0.0207 mmol / h的葡萄糖,但水解的葡萄糖质量为0.6 mmol;那么,细菌只能使用0.0207的葡萄糖质量。剩余的葡萄糖质量必须重新计算为(0.6 – 0.0207)。我使用原始的“我自己”来指代“外部”上下文中的媒介,在这种情况下,“外部”媒介是细菌。但是,错误显示“没有代理人可以参考”。

对此问题有任何意见或建议吗?

Breed [glucose a-glucose];; Food-prey  
Breed [bacteria bacterium] ;; Predator

glucose-own [glucose_mass] 
Bacteria-own [bacteria_mass uptake]

设置
;;;葡萄糖;;;

 Create-glucose (8) ;; Create the glucose available in mmol/d, 
 [set glucose_mass (1)] ;; in mmol

;;;菌;;;

Create-Bacteria (10) ;; Create the clostridiales in mmol
  [set batceria_mass (1)
   Set uptake (0.0207)
  ]
end

ask glucose
 [
  Hydrolyse_glucose
  Divide_hydrolyzed_glucose
 ]

ask Bacteria
 [Bacteria_eat_glucose]

to hydrolyse_glucose
  if (glucose_mass < 200) [
   set glucose_mass ((glucose_mass * 0.025 + random-float 32.975) / 24)
  ]
end

to divide_hydrolyzed_glucose
   if (glucose_mass > 1)
   [
    set glucose_mass (glucose_mass / 2)
    hatch 1
 ]
end

to Bacteria_eat_glucose
  let prey one-of glucose-here
  if prey != nobody
  [ 
    ifelse [glucose_mass] of prey > [ uptake ] of myself
    [
      set bacteria_mass bacteria_mass + [[ uptake] of myself * 0.3]
      ask prey [set glucose_mass glucose_mass – [uptake] of myself]
    ]
    [
      set bacteria_mass bacteria_mass + [glucose_mass * 0.3] of prey
      ask prey [die]
    ]
  ]

end

1 个答案:

答案 0 :(得分:1)

通常,您可以使用minmax函数来进行这种限制。 myself缺乏参考是一个单独的问题。

在限制上,最明确的方法是构造一个临时变量(以下称为“食品”),该变量就是要调整的数量。

myself问题似乎(尚未测试),因为细菌是实际运行代码的媒介。也就是说,没有“外部”上下文。您正在直接对细菌代理的变量执行set命令。如果细菌要求猎物做某事,然后猎物需要访问细菌所拥有的一些变量,那将是一个外部环境。

如果我的解释正确,那么您只需参考bacteria_mass而不是[bacteria_mass] of myself

to Bacteria_eat_glucose
  let prey one-of glucose-here
  if prey != nobody
  [ 
    ifelse [glucose_mass] of prey > uptake
    [ let food min (list uptake [glucose_mass] of prey)
      set bacteria_mass bacteria_mass + food * 0.3
      ask prey [set glucose_mass glucose_mass – 0.3]
    ]
    [
      set bacteria_mass bacteria_mass + [glucose_mass * 0.3] of prey
      ask prey [die]
    ]
  ]

end