2015-03-31 69 views
0

我有一个模型,其中乌龟(名字:werknemers)应该在早上上班,晚上回家。开始工作(对heenreis),但回家后(对terugreis)似乎并不奏效。它将海龟直接传送到他们的家中(这是一种海龟自己的变量,称为thuis),而不是每次只有一个补丁。这是我的代码:Netlogo:海龟直接前进到“家”前进1

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,而是移动有1 * 1它立即传送到thuis。

回答

0

代码的骨架:

to go 
    ask turtles [ terugreis ] 
end 

to terugreis 
    ask werknemers [ fd 1 ] 
end 

这就像写:

to go 
    ask turtles [ 
    ask werknemers [ 
     fd 1 
    ] 
    ] 
end 

我希望这是清楚,为什么乌龟正在每个时钟周期的不止一个步骤?嵌套的问题意味着每只乌龟都要求每个乌鸦都会移动。

很难确定您的意图是什么,尤其是因为代码太多,但我认为您可能不希望terugreis程序中的ask werknemers

相关问题