Silverback9

#야생으로

Creative Coding 독학 제251일 2024년12월03일(화)

네~^^*

오늘은 화요일~^^* 코딩 공부 다시 시작하는 요일~^^*

코딩 공부 사랑을 충전하여~^^* 다시 힘차게 공부해 볼까요~^^*

오늘은 드디어 matingPool[ ]에 대해 공부해 보겠습니다~^^*

DRAW 
Step 2: Selection: Evaluate the fitness of each element of the population and build a mating pool. 
선별: 군집의 각 요소들의 적합성을 평가하여 mating pool를 만든다.

지난 일요일에 fitness 에 대해 공부해 보았었는데요~^^*

이 fitness 적합성 값에 따라 matingPool[ ]이 만들어 질 것 같아요~^^*

군집 population[ ]의 각 요소인 DNA가 fitness값을 가지게 되었고~^^* fitness 적합성 값이 높은 DNA mating pool에 더 많이 들어가게 되는 구조입니다~^^*

예를 들어,

군집 population[ ]의 한 요소가 “A”인데, “A”의 fitness 적합성 값이 0.5라면 matingPool[ ] 배열에 5번 반복해서 넣어 보는 거예요~^^*

군집 population[ ]의 한 요소가 “B”인데, “B”의 fitness 적합성 값이 0.1라면 matingPool[ ] 배열에 1번만 넣어 보는 것이죠~^^*

그래서~~^^* fitness 적합성 값이 큰 요소가 여러 번 matingPool[ ]에 담기게 되니, matingPool[ ]에서 무작위 선택을 하게 되더라도, fitness 적합성 값이 큰 요소가 선택될 확률이 높아지게 될 것 같네요~~^^*

그림으로 표현해 보면~~^^*

근데요~~^^* fitness 적합성 값을 재조정할 필요가 있는데요~^^*

우리는 fitness 적합성 값이 가장 큰 DNA를 기준으로, 다른 DNA들의 fitness 적합성 값을 재조정해보려고 합니다.

각 DNA의 상대적 fitness 적합성 값은 0과 가장 큰 fitness 값의 사이를 0과 1사이로 재조정해서 계산해 보겠습니다.

이때 사용할 수 있는 함수가 바로 함수 map()입니다~~^^*

우리의 예시에서는 Y의 fitness 적합성 값이 가장 큰데, 1.0 이네요. 그래서 재조정을 하더라도 같은 크기의 상대적 fitness 적합성 값을 가지게 되네요.

자 그럼 이제 우리 코드를 살펴 볼까요~^^*

 naturalSelection() {
  
    this.matingPool = [];

    let maxFitness = 0;
    for (let i = 0; i < this.population.length; i++) {
      if (this.population[i].fitness > maxFitness) {
        maxFitness = this.population[i].fitness;
      }
    }
    // 군집 population[ ]의 각 요소인 DNA의 fitness 값 중에서 가장 큰 fitness 값을 변수 maxFitness에 저장합니다~^^* 
    
    for (let i = 0; i < this.population.length; i++) {

      let fitness = map(this.population[i].fitness, 0, maxFitness, 0, 1);
      // 0과 maxFItness 값 사이를 0과 1사이라고 재조정했을 때, 각 DNA의 fitness 값이 가지는 상대적 위치값을 변수 fitness에 저장합니다.  

      let n = floor(fitness * 100); 
      // 상대적 fitness 값에 100을 곱하여 정수 부분만을 취하여 변수 n에 저장합니다.
 
      for (let j = 0; j < n; j++) {
        this.matingPool.push(this.population[i]);
      }
       //이 DNA를 n번 반복하여 배열 maptingPool[]에 담습니다. 
    }
  }

오늘 저와 함께 적합도가 높은 DNA가 여러 번 matingPool[]에 들어가게 되어, 무작위 선택을 하더라도 선택될 확률이 높아지는 과정을 살펴봐 주셔서 감사합니다~~^^*

상대적 거리 조정을 해주는 함수 map()기능도 다시 복습해 볼 수 있는 좋은 기회였던 것 같아서 감사한 마음이 또 드네요~~^^*

우리 내일은 Step 3!!! 도전해 볼까요~~^^*

네~~^^* 함께하는 도전은 언제나 설레죠~~^^*

추운 계절이 왔지만~~^^*

실내에 있어 햇살을 못 볼 경우도 많지만~~^^*

작열하는 뜨거운 태양을 마음으로 느끼며~~^^*

둠칫둠칫 즐거운 하루 보내시기 바래요~~^^*

오늘도 멋진 아침! 맛있는 점심! 멋진 하루! 포근한 밤! 누리셔요~~^^*

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

댓글 남기기