2016-01-10 24 views
0

在界面選項卡中,我有一個滑塊,它的取值範圍爲2 & 10.根據用戶使用此滑塊定義的值,應該創建許多數量的烏龜。在netlogo 2中創建動態烏龜[contd ..]

我試過使用多個if語句,但在後續步驟中存在問題。

if (slider-value = 2) [create2] 
if (slider-value = 3) [create3] 
if (slider-value = 4) [create4] 
if (slider-value = 5) [create5] 

使用上述條件,如果創建龜後,我分配額外的規則像座標位置每一個人烏龜,他們應該如何行動等等,我試圖再次使用多個if語句規則。但它似乎並不奏效。

例如子查詢用於創建用於創建3個龜如下

to create2 
    create-challengers 2 
    ask turtle 0 [set color blue set label-color blue set size 2 
       set xcor party1-left-right ] 
    ask turtle 1 [set color red set label-color red set size 2 
       set xcor party2-left-right ] 

    ask turtles [ update-rule set old-mysize 0 set shape "default"] 

end 

to create3 
    create-challengers 3 
    ask turtle 0 [set color blue set label-color blue set size 2 
       set xcor party1-left-right ] 
    ask turtle 1 [set color red set label-color red set size 2 
       set xcor party2-left-right ] 
    ask turtle 2 [set color green set label-color green set size 2 
       set xcor party3-left-right ] 

    ask turtles [ update-rule set old-mysize 0 set shape "default"] 

end 

等等等等。

主要問題是即使程序工作,無論用戶定義了多少龜,所有10個都會被創建,但只有用戶定義的龜數量會移動,即如果用戶已經確定了3,那麼當我運行程序10龜被創建,但只有3個移動。

有沒有辦法像其他編程語言一樣,可以簡單地使用if-else語句。

有人可以提出一種方法,真的很感謝幫助。

在此先感謝!

創建海龜後我給你一定的規則對他們移動:

to update-rule 
    if (slider-values = 2) [update2] 
    if (slider-values = 3) [update3] 
    if (slider-values = 4) [update4] 
    if (slider-values = 5) [update5] 
end 

而且我再一次創造多個子規則UPDATE2,UPDATE3這基本上是爲每個龜取決於有多少用戶已經定義:

如果有2種海龜:

to update2 
    ask turtle 0 [set my-rule party1-rule] 
    ask turtle 1 [set my-rule party2-rule] 
end 

在3龜的情況下:

to update3 
    ask turtle 0 [set my-rule party1-rule] 
    ask turtle 1 [set my-rule party2-rule] 
    ask turtle 2 [set my-rule party3-rule] 
end 

以下是在運動規則

to adapt 
    if (my-rule = "hunter") [hunt] 
    ;;NB stickers do nothing 
    if (my-rule = "aggregator") [aggregate] 

end 


to hunt     
    ifelse (mysize > old-mysize) [jump 1] [set heading heading + 90 + random-float 180 jump 1] 
    set old-mysize mysize 
end 

to run-general 
    create2 create3 create4 create5 create-voters update-support 
    ask challengers [adapt] update-support 

end 

to go 
    run-general 

    tick 

end 
+1

的NetLogo有ifelse –

+1

「如果用戶已經確定了3,然後當我運行該程序時,創建了10個烏龜,但只有3個移動「 - 你能告訴我們讓烏龜移動的代碼嗎?這聽起來像是問題出在那裏,而不是你向我們展示的代碼。到目前爲止,我看不到任何錯誤。 –

+0

@SethTisue:我已經包含了這個問題的代碼。有沒有辦法我可以嵌套if-else語句。從我在netlogo字典中檢查的當前if-else語句只允許兩種可能的操作,有沒有一種方法來編碼(如果condition = True,那麼,否則如果condition = False,那麼這樣做,否則做到這一點) – Yuvaraj

回答

3

正如由Seth指出的,問題很可能是在代碼的move一部分,因爲正在創建的海龜。就像一般性評論一樣,它看起來像創建3只烏龜的代碼與創建2只烏龜的代碼一樣,除了額外的烏龜。如果這是大致如此,你的代碼是,如果你使用類似的格式更容易:

to setup-challengers 
    create-challengers 1 [set color blue set label-color blue set size 2 
       set xcor party1-left-right ] 
    create-challengers 1 [set color red set label-color red set size 2 
       set xcor party2-left-right ] 
    if slider-value >= 3 
    [ create-challengers 1 [ set color green set label-color green set size 2 
          set xcor party3-left-right ] ] 
    if slider-value >= 4 
    [ create-challengers 1 [ <whatever you want number 4 to look like> ] ] 

    ask challengers [<do stuff>] 
end 

這樣,你只需要所以如果你改變主意的顏色或東西每個龜被寫入一次的代碼,改變就容易多了。

1

好吧,嘗試編輯您的代碼如下所示:

to adapt 
    type "Hunters: " print count turtles with [my-rule = "hunter"] 
    type "Aggregators: " print count turtles with [my-rule = "aggregator"] 
    if (my-rule = "hunter") [hunt] 
    if (my-rule = "aggregator") [aggregate] 
end 

這是一個標準的調試技巧。它將打印獵人和聚合器的數量到命令中心(界面選項卡的底部)。這可以讓你找出代碼出錯的地方。例如,就您的情況而言,它會讓您知道問題出在移動代碼上還是代碼將規則分配給海龜。

另一個訣竅是如果您不確定某個過程是否已達到,則可以使用類似print "Got to hunt procedure"的東西。

+0

感謝您的幫助和評論。欣賞它。 – Yuvaraj

0

這個if-else的東西對於基於滑塊的設置來說非常討厭。

另一種方法是爲每個人單獨設置的所有屬性都有一組(全局)列表。 那麼你可以使用下面的代碼

;assuming global_list1 and global_list2 exist 

to setup 
    let index 0 
    create-turtles slidervalue [ 
           set turtle_value1 item index global_list1 
           set turtle_value2 item index global_list2 
           set index index + 1 
          ] 
end 

,那麼你只需要確保每個海龜會知道什麼時候要求做一些

Geerten做什麼