오늘은~~^^* target을 만들고~ 그 타켓에 어떻게 다가가면 좋을 지 고민하는 똑똑한 로켓 Smart Rocket을 만드는 코드를 시작하는 날이예요~~^^* 아무래도 fitness 적합성에 대해 고민해 봐야 하는 날일 것 같은데요~~^^*
본격적으로 genetic algorithm을 반영하는 코드작업이 시작될 것 같아, 설레면서도 신이 납니다~~^^*
이 설레는 마음을 살풋이 누르고 찬찬히 코드 공부해서 돌아올게요~^^*
따뜻한 바람이 부는 지중해 해변에서 편안하게 공연 1 작품 감상하고 계셔요~~^^* 쓩~~^^*
네~~^^* 먼저 우리 target 목표을 만들어 볼까요~~^^*
var target;
function setup(){
createCanvas(400, 400);
population = new Population();
target = createVector(width/2, 50);
}
function draw(){
background(0);
population.run();
elipse(target.x, target.y, 16, 16);
}
이번엔~^^* rocket 로켓들이 전면적으로 세대교체를 하도록 준비해 보겠습니다.
수명 lifespan이 200 프레임이쟎아요~~^^* 200프레임이 지나면 새로운 population 군집을 생성해 보겠습니다~~^^*
로켓의 수명을 카운트 했던 변수 count를 로켓 내부 변수가 아니라 글로벌 변수로 바꾸겠습니다. 로켓의 수명이 개별적으로 다르지 않기 때문에, 글로벌 변수로 다루면 더 간단할 것 같습니다~^^*
count가 lifespan 200에 다다르면 전면적 세대교체가 이루어지고 count가 0에서부터 다시 시작하는 모습을 캔버스 아래 부분에 표시해 보겠습니다.
화면 아래에 count 수치를 보여주기 위해 문단 요소를 생성하는 함수 createP()를 사용해 보겠습니다~^^*
이 문단을 저장하는 변수 lifeP에 저장하고, 변수 lifeP에 저장된 count 값을 web언어인 html로 표현해 보겠습니다~^^*.
var lifeP;
var count = 0;
function setup() {
.
.
.
lifeP = createP(); //paragraph 문단 요소를 만들어 변수 lifeP에 저장합니다.
.
.
.
}
function draw() {
.
.
.
lifeP.html(count);
count++;
if (count == lifespan) {
population = new population();
count = 0;
}
.
.
.
}
우리의 rockt 로켓의 움직임이 매우매우 활발한데요~~^^*. rocket 로켓의 DNA의 genes[i]에 저장된 무작위 벡터의 크기를 0.1로 통일해서, 움직임을 좀더 안정화시켜 보겠습니다~~^^*. 방향은 무작위적인데 움직임 크기는 0.1로 똑같아서 캔버스 안에 오래 머무르게 될 것 같아요~^^* 그러면 rocket 로켓의 lifespan 수명 동안 우리가 로켓들을 좀더 잘 볼 수 있을 것 같아요~^^*
function DNA () {
this.genes = [];
for(var i = 0; i < lifespan; i++) {
this.genes[i] = p5.Vector.random2D();
this.genes[i] = setMag(0.1);
}
}
자 그럼 여기까지의 작업을 반영한 프로그램을 우리 함께 플레이 해 볼까요~~^^* lifeP가 200에 다다르면 세대교체가 이루어 지는 것이 보이시나요~^^*
네~^^* fitness 적합성을 다루기 전에, 전면적 세대 교체 작업을 먼저 해보았습니다. 의외로 새로 알게된 함수 createP()와 웹 언어 HTML에 대해 배우게 되어서, 내용이 자못 풍성한 단계였던 것 같아요~~^^*
그래서요~~^^* 우리~~^^* fitness 적합성은 화요일에 고민해 볼까요~~^^*
개별 수명을 가지고 있었던 상호작용 선택 꽃밭 프로그램에서 우리가 만나보았던, 절대치 -> 상대치 변환 작업을 통한 normalize 정규화 과정(서로 다른 수치 집합의 최고-최저 차이 조정: 최저 0 최고 무한대 -> 최저 0 최고 1)을 이 로켓의 fitness 적합성을 다루면서 반영해 보면 어떨까요~~^^*
이제까지 배웠던 것을 복습하는 느낌으로 우리의 코드 작업에 하나 하나 적용하면서~~^^*,
새로운 함수나 프로그래밍 언어도 만나가면서~~^^*,
우리 함께 재미있게 Smart Rocket 똑똑한 로켓 프로그램을 만들어 보는~~^^*,
이 도전이 기쁘고 감사하게 느껴져요~~^^*
오늘 저와 함께 공부해 주셔서 감사합니다~~^^*
내일 우리 편안하게 음악 함께 들을까요~~^^*
우리들의 rocket처럼 변화무쌍하지만 안정된 보폭으로~~^^*
우리의 소중한 우주 속에서 즐겁게 유영하는 하루 보내시기 바래요~~^^*
네~~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기