2017-12-07 7 views
0

안녕, Netlogo의 6 절에서중첩의 Foreach 목록 NetLogo

, 나는 동료의 협력 행동의 시간 가중 측정을 계산하기 위해 노력하고있어. 요컨대, NetLogo에서 중첩 된 foreach를 수행하는 방법을 정확하게 파악할 수 없습니다.

내 현재의 접근 방식 :

  1. 설정 목록 : reputation_peer
  2. 설정 목록 : reputation_peer_list, 변수 1 (행동)의 변수 2 (타임 틱)
  3. 각각의 만남에 reputation_list를 추가 reputation_peer의 reputation_peer에게리스트의 목록을 만드는
  4. 가중 명성을 계산 :
    • 항목 2를 복용 reputation_peer에있는 각 목록의 시간 간격은
    • 이며 현재 시간 틱으로 나눕니다. 이 분수를 제공
    • : 그 만남/총 시간의 틱은
    • 설치가리스트의 명성을 무게 변수 동작이 reputation_peer의 첫 번째 항목으로 시간 비율을 곱 위해
    • 을 reputation_weighted 틱
  5. 그런 다음 reputation_weighted의 모든 값을 가져 와서 추가하여 reputation_current를 알고 싶습니다.

저는 foreach 함수를 망쳐 놓고 있습니다. 그러나 나는 그것을 알아낼 수 없습니다. 이러한 접근 방식은 Netlogo에서 어떻게 코딩됩니까?

내 현재 코드입니다 (자신 reputation_peer 설정하면 그것을 테스트) :

to calculate_reputation 
    set reputation_peer [[8 4][9 2][10 3][11 2][14 1]] 
    if ticks > 0 [ 
     foreach reputation_peer [x -> set reputation_peer_list list (item 0 x) ((item 1 x)/ticks) 
     set reputation_peer_list_2 lput reputation_peer_list reputation_peer_list_2] 
     foreach reputation_peer_list_2 [x -> set reputation_peer_list_list (list (item 0 x * item 1 x))] 
     foreach reputation_peer_list_list [x -> set reputation_peer_current reputation_peer_current + x] 
    ] 
end 

정말 내가 잘하지만 주로,이 코드는 모든과 매우 부피가 큰 것하고 있어요 여부를 알 수없는 list_list 일이 계속되고있어. 나는 그것이 훨씬 더 간단 할 수 있다고 생각하고있다.

여러분이 몇 가지 조언을 해주면 크게 도움이 될 것입니다.

답변

1

최종 출력물로 기대하는 것의 100 % 확신 할 수는 없지만 이것이 필요한 것일까요?

to calc-rep-2 
    set reputation_peer [[8 4][9 2][10 3][11 2][14 1]] 
    let weighted_rep_list [] 

    if ticks > 0 [ 
    foreach reputation_peer [ x -> 
     ; Pull out the values from reputation_peer for ease of use 
     let encounter_behavior item 0 x 
     let encounter_time item 1 x 

     ; Calculate the time fraction for the current item 
     let time_fraction encounter_time/ticks 

     ; Calculate the weighted reputations 
     let weighted_rep encounter_behavior * time_fraction 

     ; Add the weighted rep to the list of weighted reps 
     set weighted_rep_list lput weighted_rep weighted_rep_list 
    ] 

    ; Now, weighted_rep_list is a list of weighted reputations 
    print weighted_rep_list 

    ; Get the sum of the list 
    print sum weighted_rep_list 
    ] 

    tick 
end 
+0

안녕 루크, 도와 줘서 고마워! 귀하의 코드는 더 나아졌습니다. 내가 해결할 수없는 문제가 생겼어. 시간이 있다면 어쩌면 그걸 살펴볼 수 있습니다. 편집 문제에서 가장 중요한 질문입니다. – maria118code

+0

@ maria118code 안녕하세요 마리아, 다행히 도왔습니다! 별도의 문제이므로 편집에 대한 새로운 질문을 시작할 가치가 있습니다. 사실, 비슷한 문제를 겪을 수있는 다른 사람들을 돕기 위해 원래의 코드가 제대로 작동하지 않는 한 완전히 제거하지 않는 것이 가장 좋습니다. 개인적으로 원래 질문이 표시되도록 수정 사항을 '롤백'하는 것이 좋습니다 (게시물의 '편집 된 x 시간 전'링크 아래에서 수정 사항을 추적 함) 새 질문을 시작하십시오. –

+0

네, 합리적인 것 같네요! 관심있는 사람에게 다른 질문은 https://stackoverflow.com/questions/47720730/netlogo-list-updated-in-time에 게시됩니다. – maria118code