我有一个模型,其中乌龟(名为:werknemers)应该在早上去上班,晚上回家。上班工作(对heenreis),但回家后(对terugreis)似乎不起作用。它将海龟直接传送到他们的家(这是一个叫做thuis的龟自己的变量),而不是一次去那里一个补丁。这是我的代码:
globals [
werkplaatsen
huis
tankstations
laadpalen
tijd-minuten
tijd-uren
tijd-dagen
]
breed [ werknemers werknemer ]
werknemers-own [
thuis
werk
budget
verspilde-tijd
tevredenheid
elektrisch?
tank-status
reistijd
]
patches-own [
laadpaal?
]
to setup
clear-all
reset-ticks
set tijd-minuten 0
set tijd-uren 0
set tijd-dagen 0
;; Huizen / werk maken en werknemers in de huizen stoppen.
ask n-of 75 patches [ set pcolor grey ]
set huis patch-set patches with [ pcolor = grey ]
ask huis [ sprout-werknemers 2 ]
let mogelijkwerk patch-set patches with [ pcolor != grey ]
ask n-of 22 mogelijkwerk [ set pcolor grey + 1 ]
set werkplaatsen patch-set patches with [ pcolor = grey + 1 ]
ask werknemers [
set thuis patch-here
set werk one-of werkplaatsen
set shape "person"
set elektrisch? false
set reistijd distance werk
]
;; tankstation en laadpalen maken
let mogelijkstation patch-set patches with [ pcolor != grey and pcolor != grey + 2 ]
ask n-of initial-aantal-tankstations mogelijkstation [ set pcolor blue ]
set tankstations patch-set patches with [ pcolor = blue ]
ask n-of initial-aantal-laadpalen mogelijkstation [ set pcolor green]
set laadpalen patch-set patches with [ pcolor = green]
ask laadpalen [ set laadpaal? true ]
;; Elektrisch of benzine
;; WAAROM ALTIJD 3 OOK BIJ 0 % ???
ask n-of ( count werknemers / 100 * initial-percentage-elektrisch ) werknemers [
set elektrisch? true
set color green
]
ask werknemers [
if elektrisch? = false[
set color blue ]
set budget 0
set tank-status 0
ifelse elektrisch? [
set tank-status 100
][ set tank-status 300
]
]
end
to go
bereken-tijd
ask turtles [
ifelse tank-status > distance werk [ heenreis ] [ tanken ]
ifelse tank-status > distance thuis [ terugreis ] [ tanken ] ]
tick
end
to bereken-tijd
set tijd-minuten tijd-minuten + 5
if tijd-minuten = 60 [
set tijd-minuten 0
set tijd-uren tijd-uren + 1 ]
if tijd-uren = 24 [
set tijd-uren 0
set tijd-dagen tijd-dagen + 1 ]
end
to heenreis
ask werknemers [
if patch-here != werk [
ifelse reistijd <= 12 [
if tijd-uren = 8 and tijd-minuten >= 60 - reistijd * 5 [
face werk
forward 1
set tank-status tank-status - 1
] ][ if tijd-uren = 7 and tijd-minuten >= 60 - ( reistijd - 12 ) * 5 [ face werk forward 1 ]
if tijd-uren = 8 [
face werk
forward 1
set tank-status tank-status - 1 ] ]]
]
end
to terugreis
ask werknemers [
if patch-here != thuis [
if tijd-uren >= 17 [
face thuis
forward 1 ]]
]
end
重要的部分是:
to heenreis
ask werknemers [
if patch-here != werk [
ifelse reistijd <= 12 [
if tijd-uren = 8 and tijd-minuten >= 60 - reistijd * 5 [
face werk
forward 1
set tank-status tank-status - 1
] ][ if tijd-uren = 7 and tijd-minuten >= 60 - ( reistijd - 12 ) * 5 [ face werk forward 1 ]
if tijd-uren = 8 [
face werk
forward 1
set tank-status tank-status - 1 ] ]]
]
end
to terugreis
ask werknemers [
if patch-here != thuis [
if tijd-uren >= 17 [
face thuis
forward 1 ]]
]
end
这是完全相同的代码,面对thuis / werk前锋1,但不是一个接一个地移动到那里,它立即传送到thuis。
答案 0 :(得分:0)
代码的骨架是:
to go
ask turtles [ terugreis ]
end
to terugreis
ask werknemers [ fd 1 ]
end
就像写作一样:
to go
ask turtles [
ask werknemers [
fd 1
]
]
end
我希望这清楚地表明为什么海龟每蜱移动一步以上?嵌套的问题意味着每只乌龟要求每个werknemer移动。
很难确定您的意图是什么,特别是因为代码太多了,但我认为您可能不希望ask werknemers
程序中的terugreis
。