2014-10-04 2 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. 

새 목록 (list2)을 만들고 싶습니다. 여기서 single 및 list1의 각 조합에 대해 특정 가중치를 얻고 싶습니다. 단 = 1 및 목록 1 = 1 다음리스트 2 등등 0.8있을 것이다 예 위한 단일 = 0 및 목록 1 = 0, 다음리스트 2가

내가 "ifelse 값"사용하려고 .. 0.2 이 경우 하지만 성공하지 못했습니다.

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)의 제안에 동의하지만 추가 제안 사항을 추가 할 예정입니다. 그것은 단일 및 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에서 선택한 목록에서 번호를 선택합니다. (분명히 더 많은 행이나 더 긴 내부 목록으로이 패턴을 확장 할 수 있습니다.)