본문 바로가기
study/algorithm

Cellular Automata 1 Dimention Binary State Simulator

by foooo828 2021. 7. 20.

 

 

p5js로 Cellular Automata 1 Dimention Binary State Simulator를 만들었다.

 inputfield 창에 0 -255 사이의 수를 입력하면

 규칙별 시뮬레이션이 가능하다.

 

 

1차원 2개의 상태(0,1 또는 살아있거나 죽어있거나)가 있는 환경의 세포자동자 에서는

 어떤 셀의 양 옆 셀의 정보를 바탕으로 특정 규칙에 따라 다음 세대에서의 셀 상태가 결정된다.

 

 

검은 칸은 죽어있는 상태이고(1) 하고 흰 칸(0)은 살아있는 상태라고 가정하자.

 

 

한 칸이 다음세대에 어떻게 진화되는지 알기위해서는 위의 그림처럼 나와 양 옆의 두 이웃 , 총 3개 셀을 검사해야한다.

그러면 

 

나와 양 옆의 셀 모두 죽은 경우 -> 0,0,0

나와 오른쪽 셀은 살아있고 왼쪽 셀은 죽은상태인 경우 -> 0,1,1

나만 죽은 경우 -> 1,0,1

나와 왼쪽 셀은 죽고 오른쪽 셀은 살아있는경우 -> 1,1,0

..

등등등등등  8개의 케이스가 나오게된다.

 

그리고 각 케이스별로 다음 세대에 어떻게 될지 대입하여 찾아볼수 있는 어떤 매뉴얼 같은것이 Rule이다.

총 8가지 케이스가 있기 때문에 조합이 가능한 경우의 수 256가지의 Rule 이 나오게 된다.

 

0000 0000 (0) -> Rule 0

0000 0001 (1) -> Rule 1

0000 0010 (2) -> Rule 2

0000 0011 (3) -> Rule 3

...

1111 1110 (254) -> Rule 254

1111 1111 (255) -> Rule 255

 

 

 

 

예를 들어 Rule 110 (0110 1110)에서는

현재 나와 왼쪽이 죽었고 오른쪽 은 살아있는 상황일때

즉 6번(1,1,0) 케이스일때 다음 세대에 나는 죽는다고 알려준다.

 

오른쪽부터 해당 케이스 번호의 칸으로 이동하여 확인해보면

해당 케이스일때 다음 세대에 내가 어떤상태가 될지 알수 있다.

 이것을 코드로 구현하기 위해서는 다양한 방법이 있는데 나는  >> 시프트 연산 사용했다.

케이스 번호만큼 시프트 연산을 한다.

   if ((rules >> parseInt(sum, 2)) % 2 == 1) {cellArrayNext[i] = 1;} 

연산한 결과가 홀수면 규칙 10진수의 2진수 변환한 마지막 자리 숫자가 1인 것이고

짝수거나 0이면 0인 것이므로 해당 결과를 셀의 다음 세대에 대입하여 주면 된다.

반응형

'study > algorithm' 카테고리의 다른 글

토끼와 거북이 알고리즘  (0) 2021.06.18

댓글