Silverback9

#야생으로

Creative Coding 독학 제252일 2024년12월04일(수)

오늘은 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 돌연변이 작업도 함께 살펴 볼까요~^^*

평화롭고 안정적인 일상을 서로에게 선물하는 마음으로~^^*

기쁨을 나누는 만남을 감사하게 누리며~^^*

오늘 하루도 알차게 보내시기 바랄게요~~^^*

맛있는 점심 드시고요~

다섯글자 예쁜말 서로 나누며~^^*

보람있는 낮과 밤 되시고요~^^*

따뜻하게 주무시고요~^^*

네~~^^* 꿈은 이루어 집니다~~^^*

댓글 남기기