GA - 진화하는 프로그램 언어

1. 개요

DNA는 단 4개의 코드가 연속된 구조를 가지고 있습니다. t-RNA는 이러한 DNA를 3마디씩 해석해서 여러가지 일을 하고 있습니다. 즉 DNA는 4개의 코드 3마디 - 64개의 명령어를 가진(물론 상당한 명령어가 중복) 프로그램 언어라고 할 수 있죠.

이러한 DNA를 본떠서 유전자 알고리즘용 프로그램 언어를 만들어 봤습니다.


2. 명령어

최초, 이 언어는 임의로 만들어진 2048개 길이의 바이트 배열입니다. 이런 식으로 말이죠.

0x0E 0x6D 0x8A 0xF3 0x3E 0xAD 0xB7 0xCD 0x08 0xBE 0x37 0x78 0x27 0x8A 0x23 ...

각 코드는 몇개의 명령어에 대응합니다. 이때 명령어 코드는 중복될 수 있으며(ex : 0x0F, 0x2D, 0x70 등이 같은 명령어) 이 명령어는 프로그램 실행시 임의로 배정됩니다.

각 명령어에는 이런 것들이 있습니다.


Jump Mask Arg
Jump 명령어를 만나면 이 명령어로부터 앞뒤로, Mask와 연산한 결과가 Arg와 같은 바이트들을 탐색합니다. 가장 가까운 바이트를 찾아서 그곳으로 제어를 옮기게 됩니다.

MemorySet MemPos Value
MemoryInc MemPos Value
MemoryDec MemPos Value
이 시스템에는 32개의 내부변수를 가지고 있습니다. 이 명령어는 MemPos로부터 메모리 위치를 계산한 후, Value값을 넣거나 그만큼 증가 또는 감소시킵니다.


IfGreater MemPos Value Jump Mask Arg
IfLess MemPos Value Jump Mask Arg
조건에 따라 분기를 하는 명령어입니다. MemPos의 메모리값과 Value를 비교해서 조건에 맞으면 뒤의 Jump명령어를 실행, 맞지 않으면 무시하는 명령어입니다.

3. 재생산 & 돌연변이

이런 몇개 안되는 명령어를 가지고 예전에 했었던 꼬마자동차에 실어 실행했습니다. 그 결과를 가지고 재생산을 해야겠죠. 원래 DNA에서 착안한 것이라 재생산에서도 DNA의 재생산을 참고했습니다.

복제야 그냥 복사만 하면 되고 교차 역시 코드를 둘로 끊어 붙이면 됩니다.

A A A A A A A A A A A A A A A A
B B B B B B B B B B B B B B B B

A A A A A A A A B B B B B B B B
B B B B B B B B A A A A A A A A


돌연변이는 다음과 같습니다.

1. 일반적인 돌연변이 : 코드의 각 비트(바이트 아님)마다 일정확률로 반전

2. 결실 : 코드의 일정 영역을 제거

3. 중복 : 코드의 일정 영역을 다시한번 복사

4. 역위 : 코드의 일정영역 두군데가 위치가 바뀜

4. 메모리 & 입출력

위에서 언급했듯 이 시스템에는 32개의 int형 메모리를 가지고 있습니다. 프로그램은 Memory관련 명령어로 이 메모리를 갱신할 수도 있고 If관련 명령어로 이 메모리를 꺼내 사용할 수 있습니다.

외부 상태 - 자동차 앞 3부분의 장애물 여부 - 는 항상 메모리 앞쪽의 세개에 적용됩니다.

한편 뒤쪽의 세개 메모리의 값을 가지고 자동차의 움직임을 결정합니다.


5 결과

이와 같은 프로그램을 돌려서 자동차가 움직입니다. 만약 장애물에 걸린다면(장애물로 들어가려 한다면) 그 자리에서 움직이지 못합니다.

가장 많이 진행한 자동차를 중심으로 3000세대 번식시킨 결과들의 일부입니다.





여기서 볼 수 있듯 정체상태에서도 내부에서 꾸준히 유전자의 재조합이 일어나고 있습니다. 그러다가 장애물을 돌파할 수 있는 유전자가 발견되면 그것에 의해 적응도가 튀어오르는 계단식 진화 - 단속평형적 진화 - 가 일어나고 있는 것을 볼 수 있습니다. 시간이 더 있었다면 더 먼 거리를 이동할 수 있는 자동차가 나왔을지도 모르겠네요.


오염된 후 화학전 전처리로 오염 제거

방사선 탄소 연대 측정법

여기서 어느 분이 이렇게 야외에서 톱질하는 것이 연구에 아무 상관 없다는 언급을 하시네요.

아무래도 그림으로 설명하는 것이 나을 것 같아서 새로 글을 팝니다.


본격적으로 들어가기 전에 한마디...

아무래도 님은 이렇게 생각하시는 것 같은데...

[어떤 오염이 된다고 해도 화학적 전처리를 통해 오염 이전의 상태로 완벽하게 되돌아갈 수 있다]

그렇다면 다른 화학자며 고생물학자들은 왜 그리 힘들게 시료를 밀폐하고, 깨끗한 실험실에서 처리할까요? 다른 화학자들은 화학적 전처리로 오염물질을 제거할 수 있다는 사실을 몰라서, 현장에서 저렇게 시료를 채취하는 간단한 일을 안하는 걸까요?

어떤 시료든 한번 오염되면 오염 전으로 완벽하게 되돌아갈 수 없습니다. 어떤 화학적 전처리를 해도 [오염 전에 최대한 가깝게] 되돌릴 수는 있어도 [오염 전으로 완벽하게] 되돌릴 수는 없어요.

그래서 수많은 과학자들이 [미리 오염 안되게] 조치(현장에서 밀폐, 깨끗한 실험실에서 외부 세척 후 내부시료 채취)하는 것이지, 저렇게 [오염된 후 화학적 전처리로 오염물질 제거]를 하지 않는 것입니다.

님이 말하는 오염을 제거하기 위한 화학적 전처리는 피치 못할 사정으로 시료를 채취하기 전에 이미 오염되어 있을 때 - 이를테면 이미 오염되어 있을 것이 확실한 표면에서 시료를 채취해야 할 경우 - 야 하는 것이죠. 물론 논문에는 [어떤 오염이 있었고 어떤 전처리를 했으니 감안하고 보라]는 식으로 명시해야 합니다.

본문제로 돌아와서

처음 발견된 화석은 이런 모습입니다. 회색의 화석 안에 극미량의 콜라겐(붉은색 점)이 존재합니다.

흙에 박혀 있는 이 화석 주위에는 온갖 유기물들로 가득차 있죠. 꽃가루, 박테리아, 동물들의 분변, 사람들이 흘린 땀 등....

이 상태로 톱질을 한다면 이런 상황이 됩니다.

편의상 크게 처리했지만 실제로 저것들은 매우 작은 크기입니다. 어쨋든 저렇게 톱질을 하면 주위 유기물들이 톱에 딸려들어가 잘려진 모든 표면이 오염됩니다.

여기서 화학적 전처리가 문제인데, 어떤 화학적 전처리를 해도 오염 이전으로 완벽하게 돌아갈 수는 없어요. 오로지 오염 이전으로 최대한 가깝게 돌아갈 수 있을 뿐입니다.

이렇게 이미 오염된 유기물을 완벽하게 제거하는 것이 아니라 일부 유기물이 남아있을 수밖에 없습니다. A와 B는 남아있는 오염된 유기물의 탄소, C와 D는 오염된 유기물의 탄소 + 극미량의 콜라겐 탄소가 측정되는 셈입니다. 여기서 콜라겐은 극미량이기에 A, B, C, D 모든 시료에서 거의 비슷한 pMC값이 측정될 수 있습니다. 즉 모든 구획에서 동일한 pMC값이 측정되었다는 것이 실험이 정확했다는 증거가 될 수 없는 것입니다.

실제로 정확한 실험은 이렇게 진행됩니다. 현장에서 샘플을 채취하는 것이 아니라 우선 밀폐 후 실험실로 옮깁니다.

그리고 실험실에서 외부의 유기물을 확실하게 제거합니다. 필요하다면 표면을 갈아서 제거하는 경우도 있습니다.

그 이후에야 톱질을 하고 시료를 채취하는 것이죠.

이렇게 되면 결과가 어떻게 나올까요? A, B와 같이 콜라겐을 함유하고 있지 않은 부분에서는 pMC값이 나오지 않습니다. 반면 콜라겐을 함유하고 있는 C, D부분에서는 pMC값이 나오겠죠.

즉 제대로 실험했다면 모든 구획에서 동일한 pMC값이 나올 수 없다는 뜻입니다.

마기아로사우루스와 섬

20세기 초, 루마니아 서부지역(당시 헝가리 지역)에서 용각류 공룡화석이 발견됩니다. 용각류란 브라키오사우루스 등의 거대 공룡으로, 가장 큰 아르젠티노사우루스의 경우에는 몸길이 30m까지 나가는 공룡들입니다.

하지만 여기서 발견된 공룡은 기껏해야 몸길이 6m, 키는 1.8m 정도의 미니 용각류 공룡이었죠.



그 때문에 처음에는 어린 용각류 공룡으로 추정되었으나 뼈의 성장 나이테를 분석한 결과로는 이미 다 큰 성체였다는 것이 밝혀졌죠. 결국 이 Magyarosaurus(헝가리 도마뱀)은 가장 작은 용각류 공룡으로 기록되어 있습니다.

용각류 공룡들이 그렇게 큰 몸집을 가지게 된 것은, 그 큰 몸집이야말로 가장 좋은 방어수단이었기 때문이죠. 몸길이가 20m에 가까운 공룡은 티라노사우루스도 함부로 건드리지 못합니다. 마치 지금 사자도 코끼리를 건드리지 못하는 것처럼 말입니다.

그런데 이 마기아로사우루스는 이 방어력을 포기하고 왜 저렇게 작은 몸집을 가지게 되었을까요?

___________________________


저 화석이 발견된 지역은 백악기 시절에는 섬이었습니다. 대륙의 환경과 섬의 환경은 다릅니다. 그 때문에 어떤 동물이 섬에 고립된다면 대륙과는 다른 방향으로 진화가 일어납니다. 특히 몸집에 변화가 생기는 것이 종종 관측됩니다.


1. 섬 왜소화(insular dwarfism 또는 island dwarfism)

보통 몸집이 큰 동물이 섬에 고립되었을 때 섬 왜소화 현상이 일어납니다. 이것은 섬의 제한된 공간 및 자원에 의해 일어나는 현상입니다. 자원이 제한되어 있으므로 자원을 조금 소모하는 방향 - 몸집을 줄이는 방향으로 진화가 일어납니다.

인도네시아 보르네오섬에는 피그미코끼리가 있습니다. 원래는 아시아코끼리였으나 보르네오라는 섬에 고립된 이후 섬의 제한된 먹이 때문에 몸집이 작아지는 방향으로 진화가 일어난 것입니다.

가운데가 피그미코끼리

피그미코끼리뿐 아니라 현재는 멸종한 시칠리아섬의 난쟁이코끼리나 마다가스카르의 난쟁이하마 등등이 있으며 위에서 설명한 마기아로사우루스 역시 섬 왜소화의 한가지 보기입니다.


2. 섬 거대화(insular gigantism 또는 island gigantism)

몸집이 큰 동물이 섬에서 섬 왜소화 현상이 일어난다면, 몸집이 작은 동물의 경우는 반대로 섬 거대화 현상이 일어납니다.

작은 동물들의 경우에는 워낙 사용하는 자원이 적기에 섬의 제한된 자원이 그렇게 큰 영향을 미치지 못합니다. 오히려 경쟁자의 부재(또는 감소)로 인해 더 많은 자원을 점유하여 몸을 키울 수 있죠. 이런 이유로 인해 작은 동물의 경우에는 섬 거대화 현상이 일어날 수 있습니다.