3

얼마 전 나는 셀룰러 오토 마타 (see Wikipedia)와 같은 Wa-Tor를 작성했지만 몇 종과 조금 더 똑똑한 종으로 작성했습니다. 안정된 시스템을 얻기 위해 많은 미세 조정을 제외하고는 매우 간단하고 잘 작동했습니다. 그러나 그 시간 이후로 나는 "현실적으로"셀을 업데이트하는 방법을 스스로에게 (그리고 지금 당신에게) 묻습니다.셀룰러 오토 마트와 같은 Wa-Tor. 셀을 어떤 순서로 업데이트해야합니까?

내 '세계'는 그리드였으며 항상 왼쪽 위부터 오른쪽 아래까지 업데이트되었습니다. IMO는 상단과 좌측에 더 가까운 셀이 항상 더 빠름을 의미합니다. 그래서 예. 세포 [3, 3]에있는 물고기는 업데이트되기 전에 [3, 2]에 상어가 먹을 수 있습니다. 세포가 상반되는 위치에 있으면 물고기는 상어로부터 항상 빠져 나옵니다. 상어가 상어에서 멀어 질 수 있기 때문입니다.

'문제'(또는 적어도 비현실적인 문제)라고 수정합니까?

현실적인 설정의 IMO는 모든 셀을 동시에 업데이트해야하지만 그런 식으로 구현하는 방법을 모르겠습니다. 내가 상상할 수있는 또 다른 방법은 '섞인'순서로 세포를 평가하는 것입니다.

어떻게이 문제를 해결하겠습니까?/이러한 문제는 일반적으로 어떻게 해결됩니까?

답변

1

@Rogach에서 언급했듯이 동시 업데이트는 작동하지 않습니다. 셀룰러 오토 마톤이 비 결정적이기 때문에 두 마리의 물고기는 서로의 다음 위치를 알지 못하고 충돌 할 수 있습니다.

나는 셀룰러 오토 마톤이 비 결정적이라는 점을 감안할 때 비 결정적 방식으로 그리드를 업데이트하는 것이 가장 좋은 해결책이라고 생각한다. 무작위로. 업데이트 할 랜덤 셀을 선택하십시오. 셀을 무작위로 선택하고 어느 셀을 업데이트했는지 추적하여 각 셀이 틱마다 정확히 한 번 업데이트되거나 무작위로 셀을 선택하고 추적을 유지하지 않아도됩니다. 두 번째 방법은 쉬울 지 모르지만 업데이트되는 셀이 더 많을 수 있습니다. . 균등하게 분포 된 임의 함수가 있다면 평균적으로 모든 셀이 동일한 양으로 업데이트됩니다.

+0

이것은 또한 내가 선호하는 방법 일 것입니다. 그러나 affenlerer도 "조금 더 똑똑한 종"을 언급했기 때문에 무작위 업데이트는 AI를 조금 더 어렵게 만들 것입니다. :) – Rogach

+1

그리고 "트랙을 유지하는 것을 괴롭히지 마십시오"방법은 "현실적인"접근법에 더 좋을 수 있습니다 - 결국, 각 동물은 현실 세계에서 다른 속도로 움직입니다 :) – Rogach

+0

늦게 답장을 드려 죄송합니다 ... 제가 사용했던 접근법보다 좋게 들립니다! 나는 또한 생명체와 세포의 차이에 대해서 생각하고 있었다.내가 업데이트해야하는 개인의 목록을 가지고 있다면 (셀의 삶에 관계없이) 목록을 뒤섞고 각 목록을 업데이트하면 제대로 작동 할 수 있습니다. 그러나 그것이 여전히 CELLular 오토 마타로 간주 될지 확실하지 않습니다. 다른 한편으로, 만약 내가 세포를 가지고 그렇게한다면, 동일한 개체 (그러나 같은 세포가 아닌)가 여러 번 업데이트 될 가능성이 있습니다 ... – katzenversteher

1

현실적인 설정의 IMO는 모든 셀을 동시에 업데이트해야하지만 어떻게 구현해야할지 모르겠다.

이것은 내가 제안하는 접근 방식입니다. '구식'과 '새/현재'의 두 가지 격자를 사용하십시오. 다음 세대를 계산할 때 이전 그리드에서 계산을 기반으로 새 그리드에 결과를 작성하십시오. 그런 다음 새 그리드를 표시하십시오. 이제 포인터를 바꿔서 새 그리드가 이제 '오래된'포인터가되고 오래된 그리드가 새로운 그리드가됩니다. 반복.

+0

그러나 두 물고기가 같은 차례에 같은 세포에 가려면 어떻게하나요? – Rogach

+0

@Rogach 좋은 지적으로, 나는 Conway의 Game of Life에 대한 나의 경험에 대한 나의 대답을 근거로 삼았다. 당신 말이 맞아, 나는 같은 접근법이 여기서는 효과가 없을 것이라고 생각한다. –

+0

나는 또한 먼저 그런 생각을하고 있었지만 Rogach가 언급 한 것처럼 까다로운 상황으로 이끌 수 있습니다. 어쩌면 여러 단계로 수행 할 수 있습니다. 다음과 같이하십시오. 먼저 수행하고자하는 것을 계획하고 (이동, 먹기, 번식 등) 충돌이 발생하지 않는 작업으로 새 그리드를 업데이트 한 다음 충돌이 없어 질 때까지 모든 충돌을 해결하십시오. 큰 문제는 그런 갈등을 해결하는 방법입니다 ... – katzenversteher

관련 문제