2016-09-04 2 views
1

브래킷 배치 및 ifelse 및 Netlogo의 명령 사용에 문제가 있습니다.브래킷 배치 및 Netlogo의 ifelse 및 let 명령 관련 문제

로컬 변수 (멀티)를 결정하는 패치 소유의 (envi) 및 거북 자신의 (niche-opt, niche-range) 변수와 관련하여 다양한 조건이 있으며, 재생산의 확률. 이 다음 패치 변수 ENVI 일치하는 경우

거북이, 변수 틈새 옵트이 지역 변수 다 = 1

= ENVI을 틈새-선택하지만, ENVI는 틈새 옵트 + 내에있는 경우 - (틈새 범위! 거북 변수, 정수 범위는 1 - 3) 다음 멀티 0.8

그리고 ENVI 경우, 마지막 외부 틈새 옵트 + - 틈새 범위는 다중 = 0.2

그래서 로컬 변수 "멀티"이 될 수있다 3 개의 값 (1,0.8 또는 0.2)을 곱한 다음 거북이 자신의 변수 (특성 -2)를 곱하여 해치가 발생할 확률을 결정하는 데 사용됩니다.

if random-float 100 < (multi * trait-2 * 100) 

오류 "정의 아무것도라는 이름의 멀티"와 함께 제공 :

내 문제는 코드의 라인에 있다는 것입니다. 문제는 지역 변수를 만드는 것처럼 내 브래킷 배치와 관련이 있다고 확신하지만 더 많은 대괄호를 추가해야하는지 또는 내가 갖고있는 것을 이동해야 하는지를 파악할 수 없습니다.

to go 
    ask turtles [ 
    reproduce 
    ] 
end 

to reproduce 
    ifelse niche-opt = envi 
    [let multi 1] 
    [ifelse envi >= (niche-opt - niche-range) and envi <= (niche-opt + niche-range) 
    [let multi 0.8] 
    [let multi 0.2] 
    ] 
if random-float 100 < (multi * trait-2 * 100) 
hatch 1 
end 
+1

'let'변수의 범위는 해당 블록 (있는 경우)으로 제한됩니다. 그래서 여기에는 두 개의 서로 다른'multi'가 있으며, 각각은 그것을 둘러싸는 대괄호 안에 만 존재합니다. –

답변

2

ifelse-value를 사용하는 것이 아마 가장 간단 : 테스트되지 않은

to reproduce 
    let multi ifelse-value (niche-opt = envi)[1] [ 
    ifelse-value (envi >= (niche-opt - niche-range) and envi <= (niche-opt + niche-range)) [0.8][0.2] 
    ] 
    if random-float 100 < (multi * trait-2 * 100) [hatch 1] 
end 

.

+0

완벽한, 다시 감사합니다 앨런. – flee