2017-05-08 145 views
0

存在,我想問一個問題,關於導演的代理是,當我試圖鍵入此代碼,我得到的是特定路徑(的NetLogo)

>操作符只能是錯誤用於兩個數字,兩個字符串或兩個相同類型的代理,但不在數字和列表上。

我要問什麼是我該怎麼解決這個問題,假的發生在這行代碼:

如果PRI-LEV> [PRI-LEV]的oppoint1和PRI-LEV > [pri-lev] oppoint2

我試圖把它改成「汽車上」或「汽車與」,但他們都沒用。我也嘗試在Netlogo字典中查找,但是我沒有找到關於在特定路徑上定位代理的代碼的結果。 我在這裏要做的是當代理來到特定部分時,它將檢查是否有任何代理被列爲「oppoint1」; 「oppoint2」; 「oppoint3」; 「oppoint4」,然後將值調用pri-lev與其他值進行比較,以設置其繼續移動或停止並等待其他值的決定。 這是我的代碼的一部分:

ask cars 
[ 
    let oppoint1 (cars-at (xcor + 2) (ycor + 2)) 
    let oppoint2 (cars-at (xcor - 1) (ycor + 1)) 
    let oppoint3 (cars-at (xcor - 2) (ycor + 1)) 
    let oppoint4 (cars-at (xcor - 3) (ycor + 1)) 
    ifelse oppoint1 != nobody and oppoint2 != nobody 
    [ 
    if pri-lev > [pri-lev] of oppoint1 and pri-lev > [pri-lev] of oppoint2 
     [ 
     set pri-lev 4 
     speed-up 
     ] 
    ] 
    [ 
    if oppoint2 = nobody and oppoint3 = nobody and oppoint4 = nobody 
    [ 
     set speed 1 
     fd speed 
     if turning = "Rtrue" 
     [ 
     set heading heading + 90 
     speed-up 
     ] 
    ] 
    ] 
] 

真誠,胡志明市

回答

1

看來你收到此錯誤的原因是,你是一個的屬性(現車)比較的屬性許多(oppoint agent集)。你的代碼現在說「如果我的特權超過了該組的特權,請執行此操作......」問題是,[pri-lev] of oppoint1返回oppoint1代理組的所有成員的pri-lev列表,如[ 10 12 13 24 ]和Netlogo不會自動遍歷該列表並將每個項目與請求的龜的屬性進行比較。

有幾種方法可以解決這個問題。例如,你可以確保你只比較兩隻海龜 - 也許通過確保你在給定的時間只有一隻海龜每個補丁。如果您打算將一個代理與代理集進行比較,則可以使用any?原語來檢查您正在查看的組中是否有任何成員滿足您的條件語句。例如,鑑於此設置:

turtles-own [ 
    pri-lev 
] 

to setup 
    ca 
    reset-ticks 
    crt 10 [ 
    set pri-lev 1 + random 10 
    ] 
end 

你可以問你的one-of龜檢查,如果對當前補丁龜not any?具有比問烏龜更高pri-lev。如果他們都沒有,現在的烏龜會向前移動。否則,它會打印出當前補丁上有另一隻海龜pri-lev

to compare-with 

    ask one-of turtles [ 
    let other-turtles other turtles-here 
    ifelse not any? other-turtles with [ pri-lev > [pri-lev] of myself ] [ 
     fd 1 
    ] 
    [ 
     print ("A turtle here has a higher pri-lev than I do.") 
    ] 
    ] 
    tick 

end 
+0

親愛的盧克,感謝您的意見,但是,我不希望在全球範圍內做到這一點,因爲當它在全球範圍檢查,總會有一些藥物具有更高的優先級比當前,我想要的代理檢查只在特定地區的代理商。例如:當前在(6,10)的代理;我希望他檢查另外3個位置(5,11); (7,12)和(5,9),但在例如(9,11)或(11,12)等中沒有檢查。反正有指定它們嗎?或者我應該從這些地方組成一個小組,然後在小組成員之間進行檢查? –

+0

在我上面的例子中,海龜只檢查他們當前**的補丁('turtles-here'是做這件事的原語) - 並非全部補丁/全局。試用一個新文件,它是所有需要的代碼。我試圖做的一點是,你不能以你的方式比較一個代理和許多代理,因爲你將一個代理的變量與代理集的變量列表進行比較。所有你需要做的就是改變上面例子中的'let'語句以專門適合你的模型(例如,而不是我定義的'other-turtles'代理集,替代你的「oppoint」代理集)。 –