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 |
| MemorySet | MemPos | Value |
| MemoryInc | MemPos | Value |
| MemoryDec | MemPos | Value |
| IfGreater | MemPos | Value | Jump | Mask | Arg |
| IfLess | MemPos | Value | Jump | Mask | Arg |
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. 메모리 & 입출력
외부 상태 - 자동차 앞 3부분의 장애물 여부 - 는 항상 메모리 앞쪽의 세개에 적용됩니다.
한편 뒤쪽의 세개 메모리의 값을 가지고 자동차의 움직임을 결정합니다.
5 결과
이와 같은 프로그램을 돌려서 자동차가 움직입니다. 만약 장애물에 걸린다면(장애물로 들어가려 한다면) 그 자리에서 움직이지 못합니다.
가장 많이 진행한 자동차를 중심으로 3000세대 번식시킨 결과들의 일부입니다.




댓글 없음:
댓글 쓰기