如何使用计算出的海龟拥有的变量 A 来计算不同的海龟拥有的变量 B
How to use a calculated turtle-owned variable A to calculate a different turtle-owned variable B
在我的程序中,每只乌龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序规定葡萄糖和细菌的初始质量为 1 mmol。待办程序表示葡萄糖将被水解和分解。因此 glucose_mass 将不同于最初的 1 mmol。细菌的待处理程序说当细菌吃一个葡萄糖时,细菌的质量将从最初的 1 毫摩尔加上葡萄糖的质量(在 divide_hydrolyzed_glucose 程序中确定的随机数)增长,即它消耗了固定数量的时间(即 0.3)。我尝试使用命令 "of myself" 将另一只乌龟的变量包含到细菌乌龟中。但是,它给我一个错误,说 "OF expected this input to be a reporter block, but got a variable or anything instead"。
对此问题有什么意见或建议吗?
Breed [glucose a-glucose];; Food
Breed [bacteria a-bacteria] ;; Predator
glucose-own [glucose_mass]
Bacteria-own [Bacteria_mass]
设置
;;;葡萄糖;;;
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
一开始错误信息似乎很难解释,但它告诉你到底出了什么问题:of
原语想要一个报告块,但你给了它一个变量。
所以你需要:
[ glucose_mass ] of myself
方括号告诉 NetLogo glucose_mass
应该被包装到 "reporter block" 中,也就是在不同的上下文中可以是 运行 的东西(在这种情况下,[ glucose_mass ]
在 myself
的上下文中将是 运行。)
仔细查看代码,但是,myself
似乎不是您所需要的。 myself
原语用于从 "outer" 上下文中引用代理...当有一个时,这里不是这种情况。
我建议您像这样重组 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
也一样好;
set Bacteria_mass ...
行需要在猎物死亡前,否则猎物的glucose_mass
将无法访问
在我的程序中,每只乌龟(即葡萄糖和细菌)都有自己的变量,称为质量。设置程序规定葡萄糖和细菌的初始质量为 1 mmol。待办程序表示葡萄糖将被水解和分解。因此 glucose_mass 将不同于最初的 1 mmol。细菌的待处理程序说当细菌吃一个葡萄糖时,细菌的质量将从最初的 1 毫摩尔加上葡萄糖的质量(在 divide_hydrolyzed_glucose 程序中确定的随机数)增长,即它消耗了固定数量的时间(即 0.3)。我尝试使用命令 "of myself" 将另一只乌龟的变量包含到细菌乌龟中。但是,它给我一个错误,说 "OF expected this input to be a reporter block, but got a variable or anything instead"。
对此问题有什么意见或建议吗?
Breed [glucose a-glucose];; Food
Breed [bacteria a-bacteria] ;; Predator
glucose-own [glucose_mass]
Bacteria-own [Bacteria_mass]
设置
;;;葡萄糖;;;
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
一开始错误信息似乎很难解释,但它告诉你到底出了什么问题:of
原语想要一个报告块,但你给了它一个变量。
所以你需要:
[ glucose_mass ] of myself
方括号告诉 NetLogo glucose_mass
应该被包装到 "reporter block" 中,也就是在不同的上下文中可以是 运行 的东西(在这种情况下,[ glucose_mass ]
在 myself
的上下文中将是 运行。)
仔细查看代码,但是,myself
似乎不是您所需要的。 myself
原语用于从 "outer" 上下文中引用代理...当有一个时,这里不是这种情况。
我建议您像这样重组 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
也一样好; set Bacteria_mass ...
行需要在猎物死亡前,否则猎物的glucose_mass
将无法访问