2014-03-05 50 views
0

我是新手,Netlogo和stackoverflow,但你的其他帖子已經幫了我很多。如何讓海龜面對面,等待3滴,然後繼續流浪?

我目前正在嘗試編寫一個模型,其中代理隨機漫步一個空間,並讓它們在遇到時停下來。這裏的「會議」是指「相互傳遞in-radius 2」。他們應該互相對等,等待2個滴答聲,然後繼續移動,直到他們找到下一個代理。

我試圖用NzHelen's question on a timer,但並沒有真正成功。

到目前爲止,我設法讓他們面對面。我無法將tick命令放在我的代碼中的正確位置。 (編輯:通過取出wait-命令解決了這個問題,感謝Seth。 - >我不希望所有的龜都停止移動,但只有那些相互碰到的龜)。 我正在努力的另一件事是他們會面的某種視覺表現形式,比如他們見面的時候會有補丁閃爍,或者他們見面時會出現一個圈出現在他們周圍的圈子。使用wait命令,一切都會再次停止,這是我想要阻止的。

下面的代碼到目前爲止。

to go 

    tick 

    ask turtles 
    [ 
    wander 
    find-neighbourhood 
    ] 

ask turtles with [found-neighbour = "yes"] 
    [ 
    face-each-other 
    ] 

ask turtles with [found-neighbour = "no" or found-neighbour = "unknown"] 
[ wander ] 

    end 

;------- 
;Go commands  

to wander 
     right random 50 
     left random 50 
     forward 1 
end 

to find-neighbourhood 
    set neighbourhood other turtles in-radius 2 
    if neighbourhood != nobody [wander] 
    find-nearest-neighbour 
    end 

    to find-nearest-neighbour 
    set nearest-neighbour one-of neighbourhood with-min [distance myself] 
    ifelse nearest-neighbour != nobody [set found-neighbour "yes"][set found-neighbour "no"] 
      end 

to face-each-other        ;;neighbour-procedure 
    face nearest-neighbour 
    set found-neighbour "no" 
    ask patch-here [        ;; patch-procedure 
    set pcolor red + 2 
    ;wait 0.2 
    set pcolor grey + 2 
     ] 
    if nearest-neighbour != nobody [wander] 
    rt 180 
    jump 2 

    ask nearest-neighbour 
[ 
    face myself 
    rt 180 
    jump 2 
    set found-neighbour "no" 
    ] 
    end 
+0

當它裏面有一堆註釋掉的代碼和縮進遍佈整個地方時,讀代碼真的很難。這可能就是爲什麼沒有人試圖回答這個問題 - 這是很多代碼閱讀,你不是很容易。 –

+0

跳到我身上的一件事就是你絕對不想使用'wait'。當一隻烏龜「等待」時,一切都會停止。 –

+0

這些都是非常有用的意見,非常感謝。我試圖相應地編輯它。 –

回答

1

在一位同事的幫助下,我設法解決了我的計時問題。正如Seth指出wait不是正確的命令,太多的to-end -loops也讓我的海龜困惑不已。該代碼現在看起來像以下,並工作。海龜彼此接近,彼此面對,改變他們的形狀爲星星,等待三個蜱,然後跳向相反的方向。

to setup 

    clear-all 
ask turtles 
    [ 
    set count-down 3 
    ] 
reset-ticks 

end 
;--------- 
to go 

ask turtles 
    [  
    if occupied = "yes" [ 
    ifelse count-down > 0 
[ 
     set count-down (count-down - 1) 
     set shape "star" 
    ][ 
     set shape "default" 
     rt 180 
     fd 2 
     set occupied "no" 
     set count-down 3 
    ] 
    ] 

    if occupied = "no" [ 
    ; Wandering around, ignoring occupied agents 

    set neighbourhood other turtles in-radius 2 

    ; If someone 'free' is near, communicate! 

    set nearest-neighbour one-of neighbourhood with-min [distance myself] 
    ifelse nearest-neighbour != nobody [ 
     if ([occupied] of nearest-neighbour = "no") [ 
      face nearest-neighbour    
      set occupied "yes" 
      ask nearest-neighbour [ 
       face myself    
       set occupied "yes" 
      ]] 
    ][ 
     ; No one found, keep on wandering 
     wander 
    ]]] 
    tick 
    end 
;------- 
;Go commands  

to wander 
     right random 50 
     left random 50 
     forward 1 
end 
0

你是正確的鏈接到Nzhelen的問題。基本上,你的問題的答案是你需要做同樣的事情。當你試圖這樣做時,你就走在了正確的軌道上。我建議再試一次,如果卡住了,請告訴我們你卡在哪裏。

+0

我得到了一位同事的幫助,我們設法解決了這個問題。不是說我現在不會陷入下一步,但我認爲我可以解決這個問題......我該怎麼做? –

+0

您可以回答自己的問題併發布代碼,因爲解決方案可能對其他人有幫助。或者關閉,請參閱http://meta.stackexchange.com/questions/37752/how-do-i-close-my-own-question –

相關問題