2017-01-23 3 views
0

n 개의 경쟁 거북이 서로 다른 의사 결정 규칙을 사용하는 동작 공간을 사용하여 netlogo에서 일련의 시나리오를 실행하고 싶습니다. 내가 말하고자하는 것은 각각의 플레이어가 모든 틱에서 머리 또는 꼬리를 호출하도록 프로그래밍 된 코인 던지기 시나리오에서 메트릭을 측정하고자한다고 할 수 있습니다. 즉, 2 마리의 거북이 상황에서 플레이어는 항상 헤드를 호출하고 플레이어 B는 항상 테일을 호출합니다 .netlogo 동작 공간에서 유일한 시나리오 만 필터링하는 방법

거북이가 3보다 많으면 ABC 또는 ACB 또는 BCD가 헤드를 호출하고 다른 호출이 테일을 호출하는 경우가 있습니다. 본질적으로 HHTH는 HHHT와 같습니다.

그래서 내가 간략하게하고자하는 것은 샘플 공간에서 H 또는 T의 위치를 ​​고려하지 않고 고유 한 발생에 대해서만 필터링하는 것입니다. 즉 1H 및 3T, 2H 만있는 경우에만 & 2T , 3H & 1T.

도움을 미리 감사드립니다. 문안 인사.

답변

1

질문에 대한 질문에 행동 공간이 포함되어 있지 않은 것 같습니다. 목록에서 머리를 계산하려면 table 확장자를 사용하십시오. (당신이주는 예는 이진 길이 시퀀스를 고정하고있다, 그래서 머리의 수는 꼬리의 수를 결정, 그래서 당신은 그들 중 하나를 계산해야합니다.)

extensions [table] 

to-report nHeads01 [#lst] 
    let _t table:counts #lst 
    report ifelse-value (table:has-key? _t "H") [ 
    table:get _t "H" ;case sensitive ... 
    ][ 
    0 
    ] 
end 

예를 들어, 우리는 어떤 임의의를 생성 할 수 있습니다 길이 4의 시퀀스 (예제에서)와 길이 2 인 필터 (또는 다른 것). 당신이 문자열로 시퀀스를 저장하는 경우

to-report randomHT [#n] 
    report n-values #n [[?] -> one-of ["H" "T"]] 
end 

to test 
    let _xss n-values 20 [[?] -> randomHT 4] ;20 lists to filter 
    print filter [[?] -> (2 = nHeads01 ?)] _xss ;print those with 2 heads 
end 

, 당신은 위의 코드를 사용하기 전에 문자열 확장 및 explode 문자열을 설치하거나 문자 목록에 문자열을 변환하는 NetLogo read in file as list of characters을 따를 수 있습니다. 예 :

to-report nHeads02 [#str] 
    let _lst map [[?] -> item ? #str] n-values length #str [[?] -> ?] 
    report nHeads01 _lst 
end 
+0

답장을 보내 주셔서 감사합니다. – Yuvaraj