Silverback9

#야생으로

Creative Coding 독학 제305일 2025년01월26일(일)

오늘은~^^*

동창이 아직 푸르스름할 때 공부를 바로 시작해 볼게요~^^*

아, 네^^* 그렇죠^^* “피”모씨의 따님 “부”양을 위해서~^^*

아침 재즈 타임 갖고 계셔요~^^* 공부 정리해서 곧 돌아올게요~^^* 쓩우웅~^^*

네~^^* 오늘은 다음 세대를 생성하는 함수 nextGeneration()을 만들어 보기로 해요~^^* YEAH~^^*

이제까지 우리는~^^*

무작위 위치에 생성된 도시들의 모음인 배열 cities[]의 구성요소들의 인덱스를 모은 배열인 order[]의 구성요소들을 무작위로 섞어서 만든 population[i]들의 모음인 배열 population[]까지 만들었었죠~^^*

그리고, 이 각각의 populations[i]의 ((도시들 사이 총 거리의 합 +1)에 반비례하는) fitness[i] 적합성 구성요소들을 모은 배열 fitness[]을 만들었어요~^^*

또한, 이 배열 fitness[]의 구성요소인 fitness[i]들을 모두 더하여 총합 sum을 만들고, 다시 구성요소인 fitness[i]을 이 총합 sum으로 나눈 뒤 다시 fitness[i]에 저장했어요~^^*

그래서~^^* fitness[i]들 사이의 상대적인 우열관계는 유지가 되면서도 서로의 값이 어울릴 수 있도록 하는 함수 normalize()까지 완성을 했네요~~^^*

우와~~^^* 우리 그동안 수고가 많았던 것 같네요~^^* 일단 우리 서로 수고한 것 서로 토닥여 줄까요~~^^*

먼 여정 잘 왔고~^^* 앞으로의 여정도 잘 해낼 거예요~^^* 토닥토닥~^^*

네~^^* 그럼 이제 새로운 세대 newPopulation[]를 생성하는 함수 nextGeneration()을 만들어 봅시다~~^^* YEAH~~^^*

function nextGeneration() {
  var newPopulation = [];
  for (var i = 0; i < population.length; i++) {
    newPopulation[i] = population[i].slice();
  }
  population = newPopulation;
}

네~^^* 기존의 각각의 population[i]의 복사본을 만들어 각각의 newPopulation[i]에 저장하여 구성된 전체 배열 newPopulation을 기존의 전체 배열 population에 저장하면, 전체 배열 population가 새로운 전체 배열 newPopulation으로 대체되어, 세대변환이 일어나게 되겠네요~~^^*

YEAH~~^^*

엄청 간단하네요~~^^* 와우~~^^*

아! 네! 네….음…..

그렇네요….

그러면, 이전 세대인 population의 구성요소들이 다음 세대인 newPopulation의 구성요소들이 되어서, 다음 세대인 newPopulation으로 이전 세대인 population을 대체해도, 사실 그 내용은 이전 세대인 population과 동일하네요…

그럼 우리 어쩌죠…???

이전에 Genetic Algorithm 기반 프로그램 만들 때의 기억을 되살려 볼까요….?

아…

네…맞아요….그렇네요….

fitness 수치가 선택 확률 값의 기능을 하도록 하는 단계가 있었네요!!!!

그럼 우리 새로운 함수를 하나 더 만들어서, 오늘 만든 함수 안에서 호출해서 사용해 볼까요~^^*

그러면, 오늘 만든 함수의 구성체계는 거의 비슷하게 유지될 것 같아요. 함수 slice() 대신 새로운 함수를 호출해 봅시다~~^^*

어머 근데요…

동창이 노랗게 밝아지고 있어요!!! 아침 해가 높이 날아오르고 있어요~^^*

그러면 우리, fitness 수치가 선택 확률로 작용하는 새로운 함수는 내일 만들어 볼까요~~^^*

네~~^^* 좋아요~~^^* 고마워요~~^^*

오늘도 멋진 아침! 맛있는 점심! 보람찬 하루 보내시고요!

편안한 저녁! 따뜻한 밤 코~^^* 하셔요~~^^*

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

댓글 남기기