2014-10-04 24 views
1

我有兩個列表和一個值(在每個補丁中)。我想將單個值與列表結合起來,然後爲每個交互設置一個特定的權重值。例如Netlogo,從列表和單個值的組合中選擇一個值

let single random 3; represent the center patch 
let list1 [ 0 1 2 2 1 0 0 2 ]; represent the moore neighbors values 
let weights [0.2 0.3 0.5 0.1 0.8 0.1 0.6 0.2 0.2 ]; combination of centerpatch and neighb. 

我想創建一個新的列表(列表2),在爲單每個組合列表1得到一個特定的權重值。例如 如果單= 0和列表1 = 0,則列表2將有0.2 如果單= 1和list1的= 1,則列表2將有0.8等..

我試圖用「ifelse值」但沒有成功。

let single_and_list sentence single list1 
let condition1 map [ifelse-value (? = 0 and list1 = 0 ) [0.2][?]] single_and_list 
let condition2 map [ifelse-value (? = 1 and list1 = 1 ) [0.8][?]] single_and_list 
let list2 [condition1, condition2,….] 

,我將不勝感激任何見解感謝

回答

2

我建議寫一個明確的記者過程,從列表中單值到權重轉換值。例如:

to-report weight [ single list-val ] 
    if single = 0 and list-val = 0 [ report 0.2 ] 
    if single = 1 and list-val = 1 [ report 0.8 ] 
    ... 
    report <default-value> 
end 

然後,得到的權重,你可以做

let weights map [ weight single ? ] list1 

通過將代碼像這樣,它變得更加清晰。

2

我同意Bryan Head的建議,但會增加更多的建議。它看起來好像single和list1總是包含小整數。如果這是正確的,那麼一種選擇是將要返回的值放入列表的列表中。例如,可以把線等這些在報道:

let weights [[0.2 0.3 0.5] 
      [0.1 0.8 0.1] 
      [0.6 0.2 0.2]] 

report (item list-val (item single weights)) 

在前面的線,single必須是0,1,或2,並且其中選擇內部列表(行)使用。然後list-val - 也必須是0,1或2 - 從item single weights選擇的列表中選擇一個數字。 (顯然,你可以用更多行或更長的內部列表來擴展這個模式。)