네~^^*
오늘은 화요일~^^* 코딩 공부 다시 시작하는 요일~^^*
코딩 공부 사랑을 충전하여~^^* 다시 힘차게 공부해 볼까요~^^*
오늘은 드디어 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!!! 도전해 볼까요~~^^*
네~~^^* 함께하는 도전은 언제나 설레죠~~^^*
추운 계절이 왔지만~~^^*
실내에 있어 햇살을 못 볼 경우도 많지만~~^^*
둠칫둠칫 즐거운 하루 보내시기 바래요~~^^*
오늘도 멋진 아침! 맛있는 점심! 멋진 하루! 포근한 밤! 누리셔요~~^^*
네~~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기