네~^^* 푸르스름한 아침입니다~^^*
노랗게 밝아지기 전에 얼른! 공부를 시작하겠습니다~^^*
푸른 공기를 노란 입자들이 조금씩 채워나가는 소리에 몸을 풀며 기다리고 계셔요~^^*
공부 정리해서 돌아올게요~^^* 쓩우웅~^^*
네~^^* fitness 적합성 수치가 선택 확률의 작용을 하는 함수를 예전에 만들어 보았던 기억을 되짚어 볼게요~^^*
아침이니까요~^^* 신선한 과일 드실래요~~^^*? 망고? 블루베리? 체리? 멜론? 사과?
이 프로그램을 공부하면서…왜 그런지 모르겠지만…정말…잘 작동된다는 것을…손으로 따라가 본 적이 있었어요…
const fruits = [
{ name: 'mango', score: 5 },
{ name: 'blueberry', score: 3 },
{ name: 'cherry', score: 1 },
{ name: 'melon', score: 7 },
{ name: 'apple', score: 1 }
];
function setup() {
createCanvas(400, 300);
background(0);
let sum = 0;
for (let i = 0; i < fruits.length; i++) {
sum += fruits[i].score;
}
for (let i = 0; i < fruits.length; i++) {
fruits[i].prob = fruits[i].score / sum;
fruits[i].count = 0;
}
let melonCount = 0;
for (let i = 0; i < 100000; i++) {
let fruit = pickOne(fruits);
fruit.count++;
}
//console.log(fruits);
}
function pickOne(list) {
let index = 0;
let r = random(1);
while (r > 0) {
r = r - list[index].prob;
index++;
}
index--;
return list[index];
}



이 때 우리가 공부했던 함수 pickOne()을 Travelling Salesman Problem에 맞게 수정하여 사용해 보면 어떨까요?
function nextGeneration() {
var newPopulation = [];
for (var i = 0; i < population.length; i++) {
var order = pickOne(population, fitness);
newPopulation[i] = order;
}
population = newPopulation;
}
function pickOne(list, prob) {
let index = 0;
let r = random(1);
while (r > 0) {
r = r - prob[index];
index++;
}
index--;
return list[index].slice();
}
도시들을 모은 배열 cities의 구성요소의 인덱스를 모은 배열 order의 구성요소를 무작위로 섞어서 만든 population[i]들을 모든 배열 population과 각 population[i]의 적합성 값 fitness[i]를 모은 배열 fitness는 함수 pickOne()를 호출할 때 parameter가 되어 함수 pickOne() 내부에서 list와 prob로 작동합니다.
그러면, 참 신기하게도, fitenss 값이 선택 확률로 작용하여, fitenss 수치가 높은 population[i]가 좀 더 자주 pick되어 newPopulation[i]에 저장될 것 같습니다.
그러면~^^* fitness 수치가 전체적으로 좀 더 높은 newPopulation이 될 것 같은데요~^^*
그리고 이 newPopulation이 population으로 저장되어, 지금 세대보다 다음 세대는 전반적으로 fitness 수치가 높아질 것 같습니다~^^*
와우!!!
fitness 적합성 수치 향상이 이루어지는 세대교체!!! 완료!!!
네?
아!
음…
네..그렇네요…!!!
이전 세대 중 fitness 적합성 수치가 높은 개체가 좀더 많이 복사되어 새로운 세대를 이루게 되는 것이라서요~^^*, 새로운 세대의 fitness 적합성 수치는 전반적으로 높아지겠지만~^^*, 결국 이전 세대의 개체와 동일한 개체가 새로운 세대를 구성하고 있는 것이겠네요~^^*.
fitenss 값이 선택 확률로 작용하여~^^* 세대의 구성 비율이 달라질 뿐~^^*, 개체의 내부 속성은 동일할 것 같네요~^^*
음…~^^* 하…~^^*
그렇다면…~^^*
우리가 이제 해야 할 일은~~^^*???
그렇죠!!!!
mutation!!!! 돌연변이!!!!
개체의 내부 속성이 달라져야!!! 진정한 세대 변화!!!
오늘의 아쉬움은 내일을 추구할 동력!!!이 되어 줄 것 같아요~~^^*
오늘은, 구성 비율이 달라진 세대를 만들었고요~^^*
내일은, 개체 내부 속성도 달라진 세대를 만들어 볼까요~^^*
오늘 저와 함께 fitness 값이 선택 확률로 작용하는 weighted selection 가중선택 작업을 해내어 주셔서 감사합니다~^^*
내일은 개체 속성을 변화시키는 mutation 돌연변이 작업도 도전해 볼까요, 우리~~^^*
네~^^* 좋아요~^^* 고마워요~^^*
와우!
내일의 해가 뜨기를 기다리게 되네요!
개체 내부 속성도 변화된 순수한 세대 교체가 이루어 지는 날이 될테니까요!
네~^^*
오늘도 멋진 아침! 맛있는 점심!
해시계 한 바퀴 보람차게 도는 멋진 하루 보내시고요!

따뜻한 저녁 냠냠!
포근하고 깊은 밤 코~^^* 하셔요!
네~^^*
꿈은 이루어 집니다~^^*!
댓글 남기기