Netlogo:要求特定的乌龟做某事
Netlogo: Ask specific turtle to do something
我正在尝试使用名为 carriers
的机器人模拟汽车工厂。在我的 go 方法中,我试图让一个没有工作的承运人找到 cutter
并去做。
如何要求特定运营商做某事?
这是我目前所做的:
metal-sheets
cut-sheets
standard-skeleton
finished-standard-skeleton
prestige-skeleton
finished-prestige-skeleton
]
breed[carriers carrier]
turtles-own [
on-job?
]
patches-own [
processing-time
machine-type ;;cutter, standard-welder, prestige-welder, riveter
status ;;import, export, pending
]
to setup
set-default-shape carriers "circle"
create-carriers number-of-carriers
[set color grey
set on-job? false]
setup-patches
reset-ticks
end
to setup-patches
ask patches [
if pxcor = 1 and pycor = 1 [set machine-type "cutter"]
if pxcor = 1 and pycor = 5 [set machine-type "standard-welder"]
if pxcor = 5 and pycor = 1 [set machine-type "prestige-welder"]
if pxcor = 5 and pycor = 5 [set machine-type "riveter"]
if machine-type = "cutter"
[set pcolor red
set status "import"]
if machine-type = "standard-welder"
[set pcolor green
set status "import"]
if machine-type = "prestige-welder"
[set pcolor blue
set status "import"]
if machine-type = "riveter"
[set pcolor yellow
set status "import"]
]
end
to Go
let cutter patches with [machine-type = "cutter"]
let standard-welder patches with [machine-type = "standard-welder"]
let prestige-welder patches with [machine-type = "prestige-welder"]
let riveter patches with [machine-type = "riveter"]
let free-carriers carriers with [in-job? false]
ask free-carriers [
;;on-job is a carrier-owned variable
ask cutter [
if status = "import" [
set status "pending"
face cutter ;; I want the carrier to face the cutter and move towards it
fd 1
]
]
]
end```
我假设您希望 free-carriers
找到状态为 "import" 的切割器补丁,让该切割器更改其状态,然后让载体向它移动。
ask free-carriers [
;;on-job is a carrier-owned variable
let my-cutter one-of cutter with [status = "import"]
if my-cutter != nobody [
ask my-cutter [ set status "pending" ]
face cutter ;; I want the carrier to face the cutter and move towards it
fd 1
]
]
由于每个自由航母在(随机)轮次中执行此操作,因此任何两个自由航母都不应进入同一个切割机。这将随机选择一个符合条件的刀具。如果你愿意,你可以让免费承运人去最近的。
我正在尝试使用名为 carriers
的机器人模拟汽车工厂。在我的 go 方法中,我试图让一个没有工作的承运人找到 cutter
并去做。
如何要求特定运营商做某事?
这是我目前所做的:
metal-sheets
cut-sheets
standard-skeleton
finished-standard-skeleton
prestige-skeleton
finished-prestige-skeleton
]
breed[carriers carrier]
turtles-own [
on-job?
]
patches-own [
processing-time
machine-type ;;cutter, standard-welder, prestige-welder, riveter
status ;;import, export, pending
]
to setup
set-default-shape carriers "circle"
create-carriers number-of-carriers
[set color grey
set on-job? false]
setup-patches
reset-ticks
end
to setup-patches
ask patches [
if pxcor = 1 and pycor = 1 [set machine-type "cutter"]
if pxcor = 1 and pycor = 5 [set machine-type "standard-welder"]
if pxcor = 5 and pycor = 1 [set machine-type "prestige-welder"]
if pxcor = 5 and pycor = 5 [set machine-type "riveter"]
if machine-type = "cutter"
[set pcolor red
set status "import"]
if machine-type = "standard-welder"
[set pcolor green
set status "import"]
if machine-type = "prestige-welder"
[set pcolor blue
set status "import"]
if machine-type = "riveter"
[set pcolor yellow
set status "import"]
]
end
to Go
let cutter patches with [machine-type = "cutter"]
let standard-welder patches with [machine-type = "standard-welder"]
let prestige-welder patches with [machine-type = "prestige-welder"]
let riveter patches with [machine-type = "riveter"]
let free-carriers carriers with [in-job? false]
ask free-carriers [
;;on-job is a carrier-owned variable
ask cutter [
if status = "import" [
set status "pending"
face cutter ;; I want the carrier to face the cutter and move towards it
fd 1
]
]
]
end```
我假设您希望 free-carriers
找到状态为 "import" 的切割器补丁,让该切割器更改其状态,然后让载体向它移动。
ask free-carriers [
;;on-job is a carrier-owned variable
let my-cutter one-of cutter with [status = "import"]
if my-cutter != nobody [
ask my-cutter [ set status "pending" ]
face cutter ;; I want the carrier to face the cutter and move towards it
fd 1
]
]
由于每个自由航母在(随机)轮次中执行此操作,因此任何两个自由航母都不应进入同一个切割机。这将随机选择一个符合条件的刀具。如果你愿意,你可以让免费承运人去最近的。