픽셀로 보는 생태계와 진화: The Life Engine (1)

픽셀로 보는 생태계와 진화: The Life Engine (1)

콘웨이의 생명게임

콘웨이의 생명 게임(Conway's Game of Life)에 대해 들어본 적이 다들 있을 것이다. 콘웨이의 생명 게임은 무한히 펼쳐진 격자 세계에서 픽셀들이 상호 작용하며 만들어내는 패턴을 관찰하는 프로그램인데, 룰은 매우 간단하다.

  1. 각 격자(셀)는 살음 또는 죽음 상태를 가진다
  2. 어떤 살아있는 셀은 인접한 주위 8개의 셀 중 2개 또는 3개가 살아있다면 살아있는 상태를 유지한다
  3. 어떤 죽어있는 셀은 인접한 주위 8개의 셀 중 정확히 3개가 살아있다면 살아난다
  4. 그 외 모든 경우에는 셀은 죽은 상태를 유지하거나 죽게 된다.

이러한 간단한 룰만으로도 셀들은 다양한 패턴을 만들게 된다. 여러 재미있는 패턴이 많으며 인터넷에 검색하면 다양한 패턴들을 볼 수 있다.


The Life Engine

사실 보다 보면 생명 게임은 "생명 게임"이라기보다는 그냥 간단한 컴퓨터 프로그램에 가깝다. 생명과 연관된 부분은 각 세포들이 살거나 죽는다, 그 정도? 분명 생명 게임의 콘셉트 - 단순한 격자로 이루어진 간단한 규칙이 카오스를 일으켜 복잡한 패턴을 만들어 낸다 - 는 좋다. 그러나 실제 생명체 와 유사한 다양한 상호작용을 원했던 사람들도 분명 있을 것이다. 그래서 나온 것이 The Life Engine 이다.

플레이 링크: https://thelifeengine.net

개요

The Life Engine(앞으로 tle로 부르겠다)은 생명 게임처럼 격자에서 진행된다. 다른점은 벽이 존재한다는 것이다. 사실 생명 게임보다 연산량이 많기도 하고 게임 특성상 세포들의 움직임이 자유분방하기 때문에 벽이 있을 수밖에 없다.

또한 세포의 개념에서부터 큰 차이를 보인다. tle의 세포는 실제 생물처럼 몇개의 세포가 모여 개체를 이룬다. 생명 게임에서는 피아식별이 사실상 없었지만 (물론 특정 패턴을 이루는 세포 느낌으로 개체를 정의할 수는 있다) tle에서는 이를 매커니즘 수준에서 구현했다. 또한 개체들은 기본적으로 강체이다. 즉 회전이나 병진운동만 가능하고 세포들이 분해될 수는 없다.

이쯤 되면 알겠지만 사실 tle는 생명 게임에서 영감을 받아 만들어진 완전히 다른 시뮬레이션이다. 그러나 이 또한 생명 게임 못지 않는 풍부한 패턴을 보여준다.

세포 종류 별 메커니즘

세포에는 총 8종류가 있고 그중 개체를 이루는 것은 6종류이다.

1. 8개의 세포
  1. mouth(입) 세포

노란색 세포로 개체를 구성한다. 인접한 4칸에 음식(food) 세포가 있을시 그 음식 세포들을 섭취, 즉 없애고 자신이 섭취한 음식 수 카운트를 늘린다.

  1. producer(생산자) 세포

녹색 세포로 개체를 구성한다. 인접한 4칸 중 다른 셀이 점유하고 있지 않는 인접한 4칸에 일정 주기로 음식 세포를 생성한다. 생산자 세포와 이동자 세포가 한 개체 내에 같이 존재한다면 음식을 생산하지 않는다.

  1. mover(이동자) 세포

하늘색 세포로 개체를 구성한다. 개체가 이동자 세포를 한개라도 가지고 있다면 그 개체는 병진 및 회전 운동 할 수 있다. 기본적으로 개체를 무작위로 움직이게 한다. 그러나 개체가 뇌(후술할 예정)를 가지고 있다면 뇌에 명령에 맞도록 움직인다. 이동자 세포를 개체가 여러 개 가지고 있다고 이동 속도가 더 빨라지진 않는다.

4, killer(살해) 세포

자홍색 세포로 개체를 구성한다. 어떤 개체가 다른 개체의 살해 세포 하나에 접촉(주위 4칸 인접) 했다면 그 닿은 개체는 기본적으로 대미지를 1 받는다.

  1. armor(갑주) 세포

보라색 세포로 개체를 구성한다. 어떤 개체에 다른 개체의 살해 세포가 접촉했더라도 살해 세포와 접촉한 세포가 갑주 세포라면 그 개체는 데미지를 받지 않는다.

  1. eye(눈) 세포

푸른빛을 띄는 회색 세포로 개체를 구성한다. 세포 하나의 크기를 작게 설정했다면 그림 1 에서의 모습에 가운데 줄이 사라진 모습이다. 바라보는 방향(줄이 있는 쪽 면)의 세포들을 감지한다. 이때 이동자 세포가 없다면 어떠한 기능도 하지 않지만 이동자 세포가 있다면 "??세포를 감지했을 때 ??반응 하기" 와 같은 판단 회로 신경망, brain(뇌)을 가지게 된다.

  1. food(음식) 세포

파란색 세포로 개체를 구성하지 않는다. 절대 이동하지 않으며 기본적으로 개체가 죽으면 개체의 세포 자리에 생성되며 또한 생산자 세포를 통해서도 만들어진다. 인공적으로 플레이어(사람)가 그려 넣을 수도 있다.

  1. wall(벽) 세포

흰색 세포로 개체를 구성하지 않는다. 절대 이동하지 않으며 플레이어가 그려 넣거나 생성하는 것이 아니면 자연적으로 생성되지 않는다. 어떤 세포도 벽을 관통해서 이동할 수 없다.

개체 매커니즘

2. 개체의 예시

개체는 위 예시와 같이 몇개의 다양한 세포들로 구성되어 있다. 이제부터 이동자 세포가 존재하는 개체를 "동물", 그렇지 않은 개체를 "식물"이라고 부르겠다. 그림 2의 개체는 식물이다.

개체는 기본적으로 생명 주기를 가진다. 먼저 자신의 몸을 구성하는 세포의 개수에 비례하여 수명이 결정된다. 즉, 세포를 많이 가진 개체는 더 오래 산다는 것이다. 정해진 수명을 다하면 자연사하게 된다. 또한 개체가 자신의 몸을 이루는 세포 개수만큼의 데미지를 받게 되면 개체는 죽는다. 어떤 방법으로든 개체가 죽으면 모든 이동은 정지하고 모든 세포는 음식 세포로 변하게 된다.

살아있는 동안 자신을 구성하는 세포 개수 만큼의 음식 세포를 섭취하면 자신의 사본, 즉 자손을 만들 수 있다. 이때 자손은 주위 랜덤한 위치, 랜덤한 방향을 바라보고 생성되며 주위에 충분한 공간이 없다면 생성할 수 없다.

유전 메커니즘

기본적으로 tle의 모든 개체들은 증식할 때 자신과 같은 사본을 만들어낸다. 그러나분열할 때 특정 확률에 따라 개체를 구성하는 세포가 바뀌거나 새로운 세포가 추가되거나 기존에 있던 세포가 사라지기도 한다. 이런 변이가 일어날 확률은 개체의 mutation rate(변이율)이라는 고유한 함수값에 비례한다. 변이율이 클수록 개체가 번식 시 더 자주 이런 세포의 변이가 일어난다는 것이다. 변이율 또한 유전되는데 번식할 때마다 부모의 변이율에서 1씩 더하거나 뺀 값으로 유전된다.

앞에서 뇌(brain)에 대해 언급한 적이 있었는데 뇌의 자극-반응 메커니즘 또한 모종의 메커니즘을 통해 유전된다.

3. 뇌 예시

뇌는 개체에게 눈과 이동자 모두 존재할때 생기는 특성으로 시각 자극이 감지되었을때 특정 행동을 하는 방식으로 이루어진다.

자극에는 empty(빈 공간), 음식, 벽, 입, 생산자, 이동자, 살해, 갑주, 눈 세포를 관측한다 가 있고

반응에는 neutral(중립), chase(추격-가까워지기), retreat(후퇴-멀어지기), stop(정지), move right/left(오른쪽/왼쪽으로 이동), turn right/left(오른쪽/왼쪽으로 회전) 이 있다.

또한 뇌에는 state(일종의 레이어)가 있는데, ??자극을 받았을 때 뇌의 state를 현재 state에서 다른 특정 state로 전환 가능하다. 각 state는 독자적인 자극-반응 매커니즘을 가진다. 예를 들어 보자면 그림 3에서 현재 뇌의 state가 0이라고 하자. 만약 음식 세포가 감지되었다면 0 state 그대로 유지하고 음식 세포를 추격한다. 만약 이동자 세포가 감지되었다면 state 1로 state를 전환하고 후퇴, 그 상태에서 바로 생산자 세포를 감지했다면 정지하고 state 1을 유지한다.

이처럼 뇌는 나름 복잡한 체계를 가지고 있으며 이것을 진화시키고 고도화 시키는 것은 순전히 자연선택에 달려 있다.

거의.


유저 설정 기능

tle는 시뮬레이션 게임인 만큼 유저가 직접 몇가지 세계 규칙을 바꾸거나 생물 종을 창조, 혹은 통계를 확인 할 수도 있다.

에디터

4. 생명체 설계 창

기본적으로 왼쪽의 검은색 구역에서 유저는 원하는 대로 종을 구성할 수 있다. 또한 종의 이름, 초기 변이율, 설명하진 않았지만 이동 범위 또한 마음대로 정할 수 있다. brain 버튼을 누르면 생물의 뇌 구조를 마음대로 변경 할 수 있다.

또한 손가락 버튼을 토글한 상태에서 필드의 아무 생명체나 클릭하면 그 개체의 정보가 뜨며 에디터 창에서 마찬가지로 편집 할 수 있다. 다만 편집한다고 그 종 전체가 바뀌는 것은 아니다.

왼쪽 + 버튼을 토글한 상태에서 필드의 아무 곳이나 클릭하면 그 개체를 한 마리 이식할 수 있다.

저장 버튼과 불러오기 버튼을 통해 자신이 선택한 종을 저장하고 불러올 수 있으며 새싹 버튼을 누르면 세계를 초기화 시킨 후 최초의 생명체를 에디터 내 종으로 하여 게임을 진행한다.

세계 조작

5. 세계 조작 창

세계 조작 창에서는 세계의 기본적 세팅을 조작한다. grid size 부분은 세포 한개의 크기를 변경해주며 사실상 세계의 크기를 조절한다고 보면 된다.

6. 격자 사이즈를 3으로 설정한 세계 모습
7. 격자 사이즈를 5로 설정한 세계 모습

그 외 다른 기능들은 말 그대로의 기능이다.

무작위 벽 생성으로 시작할 때부터 랜덤으로 벽을 생성할 수 있고

세계를 저장하고 불러올 수 있다.

진화 조작

8. 진화 조작 창

진화 조작 창에서는 여러 게임 메커니즘과 주요 변수 설정을 바꾼다.

생산자가 음식을 생산할 확률 변수를 조작할 수 있고 세포 수에 따른 수명 비율이나 눈으로 관측 가능한 범위 등 다양한 변수를 조작할 수 있다.

통계

통계 창에서는 총 4가지 그래프와 몇가지 자료를 얄려주는데

  1. 총 개체 수(population)&그래프
  2. 총 종 수&그래프
  3. 평균 변이율&그래프
  4. 개체 구조(평균 세포 수, 및 세포 종류별 평균 개수)그래프
  5. 가장 많은 종 이름과 개수
  6. 가장 컸던 종의 세포 수

이다.


이쯤에서 The Life Engine의 기본적인 메커니즘과 시스템 소개는 끝난다. 관심이 조금이라도 생기신 분들은 링크해놓은 사이트에 들어가 한번쯤 켜놓고 구경해좌도 재밌을 것이다.

다음 편에서는 구체적으로 시뮬레이션의 시간에 따른 진행에 대해 고찰 해보겠다.

The End