2015-03-31 56 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

相關問題