Netlogo:海龟直接进入" home"与前锋1

时间:2015-03-31 08:34:35

标签: netlogo

我有一个模型,其中乌龟(名为: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。

1 个答案:

答案 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