Variables 如何限制猎物的数量“;吃过的’;通过捕食者和重新计算残留物?

Variables 如何限制猎物的数量“;吃过的’;通过捕食者和重新计算残留物?,variables,netlogo,agents,Variables,Netlogo,Agents,在我的程序中,每只海龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序规定葡萄糖和细菌的初始质量为1 mmol。接下来的步骤是葡萄糖会被水解和分解。因此,葡萄糖的质量将不同于最初的1 mmol。细菌的待办程序表示,当细菌食用一种葡萄糖时,细菌的质量将从最初的1 mmol加上它所消耗的葡萄糖质量(在“待分解葡萄糖程序”中确定的随机数)乘以一个固定数(即0.3)。我如何限制细菌每蜱虫可以消耗的葡萄糖(最大摄取率)?(1滴答=1小时)如何设置猎物的剩余葡萄糖量?例如,如果细菌只能摄取(摄取)0.0

在我的程序中,每只海龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序规定葡萄糖和细菌的初始质量为1 mmol。接下来的步骤是葡萄糖会被水解和分解。因此,葡萄糖的质量将不同于最初的1 mmol。细菌的待办程序表示,当细菌食用一种葡萄糖时,细菌的质量将从最初的1 mmol加上它所消耗的葡萄糖质量(在“待分解葡萄糖程序”中确定的随机数)乘以一个固定数(即0.3)。我如何限制细菌每蜱虫可以消耗的葡萄糖(最大摄取率)?(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
询问葡萄糖
[
水解葡萄糖
分解水解葡萄糖
]
询问细菌
[细菌吃葡萄糖]
水解葡萄糖
if(葡萄糖质量<200)[
设置葡萄糖质量((葡萄糖质量*0.025+随机浮动32.975)/24)
]
结束
分解水解的葡萄糖
如果(葡萄糖质量>1)
[
设置葡萄糖质量(葡萄糖质量/2)
舱口1
]
结束
让细菌吃葡萄糖
让我们在这里吃一块葡萄糖
如果是猎物!=没有人
[ 
如果猎物的[葡萄糖量]超过我自己的[摄取量]
[
设置细菌数量细菌数量+[[我自己的摄取量*0.3]
询问猎物[设定葡萄糖质量葡萄糖质量–[摄取]自己]
]
[
设置猎物的细菌数量细菌数量+[葡萄糖数量*0.3]
问猎物[死]
]
]
结束

通常,您可以使用
min
max
功能进行此类限制。对
本人
缺乏参考是另一个问题

在限制方面,最清晰的方法是构造一个临时变量(下面称为“food”),即要调整的数量

我自己
问题似乎是(尚未测试),因为细菌是实际运行代码的代理。也就是说,没有“外部”语境。您正在直接对细菌制剂的变量操作
set
命令。只有当细菌要求猎物做某事,然后猎物需要访问细菌拥有的某些变量时,才会有外部环境

如果我的解释是正确的,那么你只是指
细菌数量
,而不是我自己的
[细菌数量]

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

亲爱的JenB,非常感谢您的回复。我试过你的建议,但有两个问题冒了出来:1。对于代码行:“让食物最小摄取猎物的葡萄糖量”,错误在于它是“预期指令”。然后,我从同一代码行中删除了“猎物的[glucose_mass]”,但问题是“MIN期望输入是一个列表,但得到的是数字0.0207”,这是摄取的限制数字。你还有什么进一步的建议吗?对不起,我把格式弄错了。现在试试看。最小值的一般形式是
min(list val1 val2 val3…)
,我将其更改为。因为只有两个数字,所以您也可以执行
min[val1 val2]
没问题。请注意,我没有在整个过程中应用逻辑。例如,您需要将行
询问猎物[设置葡萄糖质量葡萄糖质量–0.3]
更改为
询问猎物[设置葡萄糖质量葡萄糖质量–食物]
以及任何其他类似更改