2013-11-28 3 views
2

탈세 모델링입니다. 내 모델에는 고정 거래자 (거북이 한 마리)와 고객 (다른 종)이 있습니다.거북이가 목표물을 지나치며 무한 운동 루프에 걸렸습니다.

상인은 주변에서 가장 저렴한 상인을 찾습니다.

내 모델의 트레이더가 10 명 미만인 경우이 문제가 발생하지 않았습니다. 그러나 20 번 이상으로 올라갈 때, 상인 중 한 명은 우연히 모든 고객이 1만큼 앞으로 움직이는 무한한 움직임 루프에 갇히게되는 일련의 좌표에있는 것처럼 보입니다. 그러나 목표를 초과하여 돌리면 주위 및 오버 슈트 등.

전진 동작을 줄여서 1 대신 0.001로 줄임으로써 문제를 줄일 수 있지만 문제는 결국 발생합니다.

이 문제의 빠른 해결 방법이 있습니까? 나는 ifelse가 범위 1 또는 무언가 내에서 거래자 좌표로 직접 점프하는 솔루션을 상상할 수 있지만 더 쉬운 방법이 있습니까?

: 나는 위의 제안,하지만 지금은 고객이 상인 여기

없이 임의의 위치에서 그룹 콩가 라인에 박히 코드가 운동에 관한입니다 - 내가 가장 가까운 상인 주어진 거리쪽으로 이동 구현 시도하는

대신 한 상인을 찾아, 당신은 항상 가까이에 상인 하나의 확인

을 : 다른 문제의 코드에서

to find_food 
ifelse (num-traders-close < 2) 
[nearest_food] 
[choose-cheapest] 
end 


to nearest_food 
let nearest-food min-one-of (traders)[distance myself] 
let cf-dist distance min-one-of traders [distance myself] 
ifelse closest-trader > 1 
[face nearest-food 
fd 1] 
[face nearest-food 
    fd cf-dist] 
end 

to choose-cheapest 
let cheapest-food min-one-of traders [price] 
let cf-dist distance min-one-of traders [distance myself] 
ifelse closest-trader > 1 
[face cheapest-food 
fd 1] 
[face cheapest-food 
    fd cf-dist ] 
    end 
+0

문제의 원인이되는 코드를 게시하십시오. –

+0

일부 코드가 포함되도록 게시물을 편집했습니다. 문제가 각 상인이 같은 장소로 옮기려고 할 때 관련이 있을지 궁금해하십니까? 어쩌면 문제가 동시에 모두 움직이면 해결 될 수 있을까요? – Ullsokk

+0

코드가 괜찮습니다. 어쩌면 고객이 상인에 도달하여 움직이지 않을 때를 알기 위해 일종의 충돌 감지가 필요할 수 있습니다. 컴퓨터의 정밀도가 제한되어 있기 때문에 고객과 상인이 정확히 같은 지점을 차지할 가능성은 거의 없습니다. 그래서 그것은 항상 작은 양으로 움직일 것입니다. 그러나 방향을 바꾸어야하므로 그 자리에서 흔들 리게됩니다. 무슨 일 이니? –

답변

0

, 나는 자신의 코드를 따라하려고 노력하지만, 당신은뿐만 아니라이 작업을 수행 할 수 있습니다 고객 가장 저렴한 음식과 가장 가까운 음식은 고객의 재산입니다.

Breed [Customers Customer] 
Breed [Traders trader] 
Customers-own 
[cheapest-food nearest-food traders-close] 
    traders-own [price] 

to setup 
    random-seed 234523432 
    clear-all 
    Create-traders 10 [move-to one-of patches set price random 100 set shape "house" set color white ] 
    create-Customers 50 [move-to one-of patches set shape "person" ] 


    reset-ticks 
end 


to go 
    ask customers 
    [ 
    set-customers 
    find_food 
    ] 
    tick 
end 
to set-customers 
    rt random 100 
    fd 1 
set traders-close traders with [distance myself < 5] 

set nearest-food min-one-of (traders-close )[distance myself] 
set cheapest-food min-one-of traders-close [price] 
end 
to find_food 
     ifelse (count traders-close < 2) 

    [ifelse nearest-food != nobody 
    [Move-to nearest-food ] 
    [Move-to min-one-of Traders [Distance myself]] 
    ] 
    [ ifelse cheapest-food != nobody 
    [Move-to cheapest-food] 
    [Move-to min-one-of Traders with [Distance myself < 5][price]] 
    ] 
end 
+1

매력처럼 작동합니다! "move-to"를 얼굴로 향하게하고 fd 1을 움직여 원하는 방식으로 움직여야했습니다. 고맙습니다! – Ullsokk

+0

확인, 잘됐다 :) – Marzy

관련 문제