오늘은 To be or not to be 문장 만들기(찾기) 프로그램을 알고리즘 단계별로 따라가며 이해해 보는 시간을 가져 보겠습니다~^^*
Genetic Algorithm의 Step 1 !!!
<SETUP>
Initialize: Create a population of N elements, each with randomly generated DNA
초기화 : 무작위로 생성된 DNA를 가진, N 개의 요소들의 군집을 하나 만들다
=> 하나의 군집 안에 N개의 개체들이 있는데, 이 각각의 개체들은 무작위로 생성된 DNA을 가지고 있습니다~~^^*
그럼 우리 함수 setup()의 Step 1 부분을 살펴 볼까요~^^*
function setup() {
target = "To be or not to be."; //목표 문구입니다.
popmax = 200; //군집 크기는 200입니다.
mutationRate = 0.01; //돌연변이 확률은 1퍼센트입니다.
population = new Population(target, mutationRate, popmax);
}
네~^^* 메인 파일 sketch.js의 setup함수에서~^^* target 목표 문구, popmax 군집 크기, mutaionRate 돌연변이 확률을 클래스 Population 생성을 위한 argument로 넘겨 주어서, 새롭게 생성된 클래스 Population을 변수 population에 저장하게 되네요~^^*
클래스 Population의 구성체를 한 번 살펴 볼까요~~^^*
class Population {
constructor(p, m, num) {
this.population; // 현재의 군집
this.matingPool; // 짝짓기 대상 후보자 모음
this.generations = 0; // 세대
this.finished = false; // 진화 종료 상태 표시 진리값
this.target = p; // 목표 문구
this.mutationRate = m; // 돌연변이 확률
this.perfectScore = 1; // 1점이 만점~^^*
this.best = ""; //생성된 문구들 중 가장 좋은 문구
this.population = []; //군집은 배열 형태로 준비합니다.
for (let i = 0; i < num; i++) {
this.population[i] = new DNA(this.target.length);
//목표 문구의 길이를 가진 새로운 DNA를 population 군집 배열에 저장합니다.
}
this.matingPool = [];
//짝짓기 대상 후보 모음도 배열 형태로 준비합니다.
this.calcFitness();
//적합도를 계산합니다.
}
목표 문구 p와 돌연변이 확률 m과 군집 크기 num을 parameter로 넘겨 받아서
클래스 population을 생성하는 구성체가 만들어 지네요^^*
어머 그런데~^^* 클래스 DNA를 생성해서 population 배열의 구성요소로 저장하는군요!!
그럼 우리~~^^* 클래스 DNA의 구성체도 함께 살펴 볼까요~~^^*
class DNA {
constructor(num) {
this.genes = []; // genetic sequence를 담는 배열입니다.
this.fitness = 0; //적합도 입니다.
for (let i = 0; i < num; i++) {
this.genes[i] = newChar(); // 문자 Char를 무작위로 pick하여 this.genes의 i번째 구성요소로 저장합니다.
}
}
네~^^* 클래스 Population 군집이, 목표 문구의 길이 this.target.length를 argument로 넘겨주며 클래스 DNA 생성을 호출하고, 클래스 DNA는 이 값 num을 parameter로 받네요.
num 수 만큼의 구성요소를 가진 배열 genes[]를 생성하게 되구요. genes[]의 구성요소들은 함수 newChar()를 호출하여 생성된 문자를 담게 됩니다.
정리해 보면~^^* 목표 문구 길이를 가진 무작위 문자들의 배열이 클래스 DNA의 this.genes이네요^^*
네~^^* Setup에서 N개의 클래스 Population 군집을 호출 생성합니다. 이 N개의 클래스 Population 군집 각각은 또 M개의 DNA를 호출 생성합니다. 이 M개의 DNA 각각은 목표 문구 길이의 무작위 문자 배열을 생성합니다.
오늘 저와 함께 Genetic Algorithm Step 1 <<Initialize 초기화>>에 대한 코드 부분을 살펴봐 주셔서 감사합니다~^^*
내일은 우리, 클래스 Population 군집 구성체의 this.matingPool 배열과 this.calcFitness() 함수도 마저 살펴 볼까요~^^*
추운 겨울이 왔습니다~^^* 따뜻한 온기를 신기하게도 잘 찾아내어 귀여운 코를 코~하는 고양이들처럼~~^^* 따뜻한 점심~~^^* 따뜻한 차~~^^* 따뜻한 핫팩~~^^* 따뜻하게 하루 보내시기 바래요~~^^*
오늘도
점심 맛있게 드시고요!
멋진 하루 보내시고요!
우리 내일 또 만나요~~~^^*
네!! 꿈은 이루어 집니다~~!!
댓글 남기기