오늘은 Fitness 적합성 개선을 위한 코드 분석 공부를 하는 날입니다~^^* Yeah~~~^^*
어머머! 어쩌죠? 오늘은 13일의 금요일이예요!!!
하지만 크리스마스가 있는 달이라서~~^^*
크리스마스 12일 남았다는 생각으로 설레기만 하는 날이예요~~^^* Yeah~~^^*
평화의 시기에도 분쟁의 시기에도 어린이도 어른도 마음 속 행복과 기쁨과 평안을 서로 바래주는 날~~크리스마스~~^^*
이제 Fitness 적합성 개선에 대해 공부해 보도록 할게요~~^^*
그런데요~~^^* 이건 이미 우리가 로켓 Fitness 적합성을 다루면서 살펴본 내용인 것 같아요~~^^*
그때~~^^* 함수 pow( )를 사용하여~^^* 변수 fitness의 값을 4승 하여 다시 변수 fitness에 저장한 것 기억하셔요?
미묘한 값의 차이라도 4승을 하면 이 차이가 커지는 것 때문에 그런 것 같다고 우리가 짐작해 보았었잖아요~^^*
근데 그게 맞게 짐작한 것 같아요~~^^*
동영상 강의 먼저 보실게요~~^^*
네~^^* “To be or not to be” 프로그램의 fitness도 “Rocket” 프로그램도 같은 방법으로 Fitness 적합성을 개선하고 있는 것 같네요~^^*
1승보다는 2승~~ 2승보다는 4승~^^* 이 수치 간의 차이를 더욱 크게 만들어서 변수 fitness 적합성 수치 기반으로 가장 적합한 것을 찾아내는 과정을 수월하게 만드는 것 같아요.
동영상 강의에 나오는 대로 변수 fitness 수치 간의 차이를 점차 크게 만들어 보겠습니다~^^*
“To be or not to be” 행복하게 고민해 볼까요~~^^*
- fitness 값 변화를 주지 않겠습니다~^^*
calcFitness(target) {
let score = 0;
for (let i = 0; i < this.genes.length; i++) {
if (this.genes[i] == target.charAt(i)) {
score++;
}
}
this.fitness = score / target.length;
}
저는 100번째부터 500 번쨰 사이 세대가 되어야 “To be or not to be”가 나오네요~^^*

2. fitness 값을 2승 해보겠습니다.
calcFitness(target) {
let score = 0;
for (let i = 0; i < this.genes.length; i++) {
if (this.genes[i] == target.charAt(i)) {
score++;
}
}
this.fitness = score / target.length;
this.fitness = pow(this.fitness, 2);
}
저는 100번째부터 300번째 세대가 되어야 “To be or not to be”가 나오는 것 같아요~^^*

3. fitness 값을 4승 해보겠습니다.
calcFitness(target) {
let score = 0;
for (let i = 0; i < this.genes.length; i++) {
if (this.genes[i] == target.charAt(i)) {
score++;
}
}
this.fitness = score / target.length;
this.fitness = pow(this.fitness, 4);
}
저는 80번째 세대부터 250세대까지 정도가 되면 “To be or not to be”가 나오는 것 같아요~^^*

4. 음…우리 16승도 한 번 가볼까요? 대~한민국 짝짝짝짜악짝!
calcFitness(target) {
let score = 0;
for (let i = 0; i < this.genes.length; i++) {
if (this.genes[i] == target.charAt(i)) {
score++;
}
}
this.fitness = score / target.length;
this.fitness = pow(this.fitness, 16);
}
저는 80번째 세대부터 160번째 세대까지가 되면 “To be or not to be”가 나오는 것 같아요~^^*

우리 Rocket도 쏘아 볼까요~^^*
- fitness 값 변화를 주지 않겠습니다.
calcFitness() {
if (this.recordDist < 1) this.recordDist = 1;
this.fitness = 1 / (this.finishTime * this.recordDist);
if (this.hitObstacle) this.fitness *= 0.1;
if (this.hitTarget) this.fitness *= 2;
}
시간이 아주 많이 나실 때 플레이 해 보셔요….저는 Generation 33까지 지켜봤는데요…점점 목표물에 가까와지는 것은 느낄 수 있었어요….
2. fitness 값을 2승 해보겠습니다.
calcFitness() {
if (this.recordDist < 1) this.recordDist = 1;
this.fitness = 1 / (this.finishTime * this.recordDist);
this.fitness = pow(this.fitness, 2);
if (this.hitObstacle) this.fitness *= 0.1;
if (this.hitTarget) this.fitness *= 2;
}
17번쨰 세대 즈음이 되니까 왼쪽 경로가 사라지고 모두 오른쪽 경로로만 움직였구요. 30번째 세대 즈음이 되니까 목표물에 닿는 로켓들이 점점 많아지기 시작했어요…오우!!

3. fitness 값을 4승 해보겠습니다.
calcFitness() {
if (this.recordDist < 1) this.recordDist = 1;
this.fitness = 1 / (this.finishTime * this.recordDist);
this.fitness = pow(this.fitness, 4);
if (this.hitObstacle) this.fitness *= 0.1;
if (this.hitTarget) this.fitness *= 2;
}
5 세대 이후 한쪽 방향 경로로 정해지더니 10세대 이후 목표물에 닿는 로켓들이 많아졌어요~^^*

4. 16승 도전!
calcFitness() {
if (this.recordDist < 1) this.recordDist = 1;
this.fitness = 1 / (this.finishTime * this.recordDist);
this.fitness = pow(this.fitness, 16);
if (this.hitObstacle) this.fitness *= 0.1;
if (this.hitTarget) this.fitness *= 2;
}
불과 2세대를 지나니 한쪽 경로로 바로 정해졌어요. 5세대 이후 목표물에 아주 가까이 다가가는 로켓들이 많았구요. 10세대 이후로는 목표물에 많이 닿았어요.

참…신기하네요~~~^^*
로켓 Fitness 1승일 때는 큰 변화가 없어서…나는 누구? 여긴 어디? 싶기도 했었는데요…
와우!!! Fitness 4승부터는….성능 좋은 Rocket들이 정말 많이 나타났어요….
지식과 경험과 삶의 태도와 문화를 발전시키고 세대를 이어 전수한다는 것의 중요성을 느끼게 되어서…
좀…가슴이 숙연해 지는 날입니다…
연구개발하는 것과 교육하는 것은 하나의 사이클로 함께 회전되어야 좋은 것이겠구나…생각하게 되어요….Research&Development AND Education
오늘 저와 함께 Fitness 적합성 개선 방법을 함께 살펴봐 주셔서 감사합니다~^^*!
새로운 것 많이 배우고, 배운 것 많이 나누는 보람찬 하루! 함께 만들어 주셔서 감사합니다~^^*!
내일은 Genetic Algorthm의 어떤 부분을 또 공부하게 될까요~^^* 궁금하시죠~~^^*
저두요~~^^*
내일 우리 또 만나서 함께 공부해 보면 좋겠어요~~^^*
오늘도~^^*
점심 맛있게 드시고요!
보람 찬 하루 보내시고요!
편안한 밤 여름날 꿈꾸시며 따뜻하게 보내시고요!
네~~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기