오늘은 Genetic Algorithm Step 3를 공부해 보겠습니다~^^* YEAH~~^^*
우리 주변의 평화를 기원하는 노래를 몇 곡 듣고 시작해 보겠습니다~~^^*
네^^* 사랑이 가장 큰 선물입니다~^^*
고사리 손 오므작거리는 순수한 마음으로 일상의 평화를 감사히 새겨봅니다~^^*
평화를 빚어내는 정성으로 Genetic Algorithm Step 3 공부하고 돌아올게요~^^*
햇살이 고운 아침입니다~^^* 지긋이 눈 감고 따뜻한 차 한 모금 마시며, 잠시 쉬고 계셔요~^^*
곧 돌아 올게요~~^^*
햇살가루 더운 물에 녹여 한 모금 맛있게 드셨나요~~^^*
네^^* 그럼~~^^*
Genetic Algorithm Step 3 <<Reproduction>> 공부를 시작하겠습니다~~^^*
Step 3: Reproduction 번식
a. Pick two parents with probability according to relatice fitness
b. Crossover - create a "child" by combining the DNA of these two parents
c. Mutation - mutate the child's DNA based on a given probability
d. Add the new child to a new population
=>
a. 상대적 적합도 값에 따른 확률로 두 부모를 선택하기
b. 교차 - 이 두 부모의 DNA를 합하여 "아이"를 만들기
c. 돌연변이 - 주어진 확률을 바탕으로 아이의 DNA를 변이시키기
d. 새 아이를 새 군집에 더하기
어제 우리는 DNA들의 상대적 fitness 적합도에 따라 matingPool[ ]을 만드는 것을 살펴 보았었지요~^^* 상대적 fitness 적합도가 높은 DNA는 matingPool[] 안에 더 많이 들어있어서, 무작위로 선택하더라도 선택될 확률이 높아지는 방식이었습니다~^^*
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;
this.best = "";
this.population = [];
for (let i = 0; i < num; i++) {
this.population[i] = new DNA(this.target.length);
}
this.matingPool = [];
this.calcFitness();
}
.
.
.
generate() {
for (let i = 0; i < this.population.length; i++) {
//population 군집 배열의 모든 구성 요소에 대하여~^^*
let a = floor(random(this.matingPool.length));
//0에서 matingPool[] 전체 구성원 수 사이 무작위 값의 정수 부분만 변수 a에 저장합니다.
let b = floor(random(this.matingPool.length));
//0에서 matingPool[] 전체 구성원 수 사이 무작위 값의 정수 부분만 변수 b에 저장합니다.
let partnerA = this.matingPool[a];
let partnerB = this.matingPool[b];
//matingPool[]의 a번째 요소와 b번째 요소를 변수 partnerA, B에 저장합니다.
//matingPool에서 무작위로 두 부모를 선택하는 작업이네요^^*
let child = partnerA.crossover(partnerB);
//parterA와 partnerB를 교차한 결과를 변수 child에 저장합니다.
child.mutate(this.mutationRate);
//mutationRate 돌연변이률에 따라 child를 mutate 돌연변이시킵니다.
this.population[i] = child;
//child를 population 군집 배열의 요소로 저장합니다.
//부모 세대의 정보는 matingPool[]에 담겨있으니, population 군집 배열 요소는 자녀 세대의 정보로 Update하게 되는 것 같습니다~^^*
}
this.generations++;
//population 군집 배열의 모든 구성요소가 child의 정보로 갱신완료 되었으니, generation 세대 값을 1 증가 시키겠습니다.
}
.
.
.
}
네~^^* 클래스 Population의 내장함수 generate( )이 Reproduction 번식을 관장하는 것 같아요~^^*
교차 작업과 돌연변이 작업을 담당하는 함수 crossover()와 mutate()도 살펴 봐야 될 것 같네요~^^*
오늘 저와 함께 Genetic Algorithm Step 3 <<Reproduction 번식>>의 전반적인 절차에 대해 살펴봐 주셔서 감사합니다~^^*
우리 내일은 crossover 교차 작업과 mutation 돌연변이 작업도 함께 살펴 볼까요~^^*
평화롭고 안정적인 일상을 서로에게 선물하는 마음으로~^^*
기쁨을 나누는 만남을 감사하게 누리며~^^*
오늘 하루도 알차게 보내시기 바랄게요~~^^*
맛있는 점심 드시고요~
다섯글자 예쁜말 서로 나누며~^^*
보람있는 낮과 밤 되시고요~^^*
따뜻하게 주무시고요~^^*
네~~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기