네~~^^* 오늘 우리 코딩 공부 다시 시작하는 거예요~~~^^* YEAH~~^^*
그런데요~^^* 지금요~~^^*
겨울 아침을 시작하는 노란 아침 햇살이 내려와요~^^*
부지런히 움직이는 사람들에겐 따뜻한 빛이 피부에 닿아요~^^*
편안히 쉬고 있는 사람들에겐 화사한 풍경이 눈 안에 들어와요~^^*
밖에 있는 이들도 안에 있는 이들도 복사꽃 뺨 발그레지는 아름다운 아침이예요~^^*
크리스마스가 딱 반달 15일 남아서 그런 걸까요~~^^*
저도 지금 부지런히 이동 중이어서요~~^^*
우리 Live로 음악 함께 들을까요~~^^*?
저는 빠르게 나는 아침 해를 열심히 따라가 볼게요~~^^*
이동 완료 후 코딩 공부를 해 보겠습니다~~^^*
크리스마스엔 예쁜 목소리로 노래를 부르는 것도 큰 선물이 되고~~^^*
밤의 공간을 예쁘게 꾸미는 것도 참 신기한 선물이 되는 것 같아요~^^*
식탁이 풍성하도록 먹거리를 마련해 주는 것도 참 넉넉한 선물이 되어요~^^*
즐거운 노래와 춤을 무대에 올리는 것도 엄청 흥겨운 선물이 되네요~^^*
네~^^* 크리스마스의 의미와 기쁨을 두 배로 만드는 많은 분들의 노고에 감사하며~^^*
저는 코딩 공부 정리해서 다시 돌아올게요~^^*
노란 아침 햇살 따뜻이 즐기고 계셔요~^^*
쓩~~^^* 이동하였습니다~^^* 하얀 나뭇가지에 노란 꼬마 전구등들이 크리스마스의 느낌을 전해주고 있는 포근한 까페입니다~^^*
오늘은~^^*, Fitness 적합성 측정에 대해 살펴 보겠습니다~^^*
클래스 Population 군집의 내장 함수 calFitness()가 클래스 Rocket의 내장 함수 calFitness()를 호출합니다~~^^*
class Population {
constructor(m, num) {
this.mutationRate = m;
this.population = new Array(num);
this.matingPool = [];
this.generations = 0;
for (let i = 0; i < this.population.length; i++) {
let position = createVector(width / 2, height + 20);
this.population[i] = new Rocket(
position,
new DNA(),
this.population.length
);
//클래스 Rocket을 생성하여 클래스 Population 군집의 내부 구성자인 배열 popuation[]의 i번쨰 구성요소인 population[i]에 저장합니다.
}
}
.
.
.
calcFitness() {
for (let i = 0; i < this.population.length; i++) {
this.population[i].calcFitness();
}
//클래스 Population 군집의 내부 구성자인 배열 population[]의 구성요소인 클래스 Rocket형의 생명체들의 fitness 적합성 정도를 계산하려고 합니다.
// 클래스 Rocket의 내장 함수인 calFitness()를 호출합니다.
}
. .
.
.
}
class Rocket {
constructor(pos, dna, totalRockets) {
this.acceleration = createVector();
this.velocity = createVector();
this.position = pos.copy();
this.r = 4;
this.dna = dna;
this.finishTime = 0;
// target에 도달하는데 걸리는 시간을 나타낼 것입니다.
this.recordDist = 10000;
//목표물과의 거리를 나타낼 것입니다. 처음엔 10000 만큼 떨어져 있습니다.
this.fitness = 0;
this.geneCounter = 0;
this.hitObstacle = false;
//장애물에 닿았는 지에 대한 상태 진리값입니다.
this.hitTarget = false;
//목표물에 닿았는 지에 대한 상태 진리값입니다.
}
.
.
.
calcFitness() {
if (this.recordDist < 1) this.recordDist = 1;
//만약 목표물과의 거리가 1보다 작을 떄에는
//목표물과의 거리를 1로 재조정합니다.
//fitness 적합성 값은 목표물에 도달하는 시간에만 따라 결정될 것입니다.
//목표물에 도달하는 시간 * 1 = 목표물에 도달하는 시간
this.fitness = 1 / (this.finishTime * this.recordDist);
//fitness 적합성은 (목표물에 도달하는 시간 * 목표물과의 거리)에 반비례합니다.
//목표물에 도달하는 걸리는 시간이 짧을 수록 fitness 적합성 값이 높아집니다.
//목표물과의 거리가 짧을 수록 fitness 적합성 값이 높아집니다.
this.fitness = pow(this.fitness, 4);
//fitness 적합성 값의 4승을 계산하여 fitness 적합성 값으로 저장합니다.
//fitness 적합성의 값의 미묘한 차이도 아주 큰 차이로 증폭될 것입니다!
if (this.hitObstacle) this.fitness *= 0.1;
//장애물에 부딪히면 fitness 적합성 값은 열 배 작아집니다.
if (this.hitTarget) this.fitness *= 2;
//목표물에 닿으면 fitness 적합성 값은 두 배 커집니다.
}
.
.
.
}
오늘 저와 함께~^^* 클래스 Population과 클래스 Rocket의 내장함수 calFitness()들의 관계성을 통해 Fitness 적합성 계산 방법을 살펴봐 주셔서 감사합니다~~^^*
내일은 Genotype 유전형에 대해 우리 함께 살펴 볼까요~~^^*
오늘도~^^*
점심 맛있게 드시고요~^^*
편안하고 즐거운 오후와 저녁 보내시고요~^^*
새까만 밤엔~~^^* 따뜻하게 코~~~하셔요~~^^*
네~~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기