Silverback9

#야생으로

Creative Coding 독학 제277일 2024년12월29일(일)

오늘은~~^^* 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처럼 변화무쌍하지만 안정된 보폭으로~~^^*

우리의 소중한 우주 속에서 즐겁게 유영하는 하루 보내시기 바래요~~^^*

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

댓글 남기기