我正在尝试选择最接近切割机的空载架,然后将其送出以从交货时取回金属片,以便切割机进行切割。这是相关代码:
globals[
metal-sheets
cutter-closest-free-carrier]
breed[carriers carrier]`
to cut
let free-carriers carriers with [laden = false]
let cutter patches with [machine-type = "cutter"]
let delivery patches with [area = "delivery"]
ask cutter [
if status = "import" [
set cutter-closest-free-carrier min-one-of free-carriers[distance myself]] ]
if any? cutter-closest-free-carrier[
ask cutter-closest-free-carrier [
face delivery
fd 0.01
set metal-sheets cars-here
if any? metal-sheets [
create-link-to one-of metal-sheets [tie]
face cutter
fd 0.01
ask cutter[set status "pending"]]
]
]
end
我收到的错误消息是:
“ ANY?预期输入为代理集,但改为使用数字0。”
我如何以预期的方式实现此功能?
我假设错误是由于此:
if any? cutter-closest-free-carrier[
作为全局变量,NetLogo将cutter-closest-free-carrier
初始化为零。如果在
ask cutter [
if status = "import" [
set cutter-closest-free-carrier min-one-of free-carriers[distance myself]] ]
status
不等于“ import”,那么当您将cutter-closest-free-carrier
应用于any?
时,其仍为零。因此错误。还有另一个问题-any?
应该应用于代理集,即使status = "import"
,由于cutter-closest-free-carrier
,min-one-of
将是单个代理,而不是代理集。
因此,首先在您的设置中或在cutter-closest-free-carrier
的开头将nobody
初始化为to cut
。然后将cutter-closest-free-carrier
的测试更改为
if cutter-closest-free-carrier != nobody [
我认为应该这样做。
希望这会有所帮助,查尔斯