如何使用计算的龟拥有变量A来计算不同的龟拥有变量B.

时间:2018-03-26 07:51:11

标签: variables netlogo agents

在我的程序中,每只乌龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序表明葡萄糖和细菌的初始质量为1毫摩尔。过程中说葡萄糖会被水解和分裂。因此,葡萄糖质量将与最初的1mmol不同。细菌的去处理程序说,当细菌吃掉一个葡萄糖时,细菌的质量将从最初的1毫摩尔加上葡萄糖的质量(在分水解 - 葡萄糖过程中确定的随机数)生长,它消耗的时间为固定数字(即0.3)。我尝试使用自己的命令"#34;将另一只乌龟的变量包括在细菌龟中。然而,它给了我一个错误,说" OF期望这个输入是一个记者块,但得到一个变量或任何东西而不是"。

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

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

glucose-own [glucose_mass] 
Bacteria-own [Bacteria_mass]

设置

;;; GLUCOSE ;;;

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

;;;细菌;;;

Create-Bacteria (8) ;; Create the clostridiales in mmol
[set Batceria_mass (1)
]
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
[ask prey [die]
  set Bacteria_mass (Bacteria_mass + ((glucose_mass of myself) * 0.3))
]
end

1 个答案:

答案 0 :(得分:3)

错误信息最初可能看起来很难理解,但它告诉你到底出了什么问题:of原语想要一个记者块,但是你给了它一个变量。

所以你需要:

[ glucose_mass ] of myself

方括号告诉NetLogo应该将glucose_mass包装成“报告块”,这可以在不同的上下文中运行(在这种情况下,[ glucose_mass ]将在myself的上下文。)

然而,仔细观察代码,myself似乎不是您需要的。 myself原语用于从“外部”上下文中引用代理...当存在时,这不是这种情况。

我建议您重新构建Bacteria_eat_glucose程序,如下所示:

to Bacteria_eat_glucose
  let prey one-of glucose-here
  if prey != nobody [
    set Bacteria_mass Bacteria_mass + [ glucose_mass * 0.3 ] of prey
    ask prey [ die ]
  ]
end

需要注意的一些事项:

  • myself已被prey;
  • 取代
  • 记者块仍然用方括号包裹;
  • 我已将* 0.3放入记者块中,因为我觉得它更容易阅读,但[ glucose_mass ] of prey * 0.3本来就一样好;
  • {<1}}行必须在猎物死亡之前,否则将无法再访问猎物的set Bacteria_mass ...