Silverback9

#야생으로

Creative Coding 독학 제259일 2024년12월11일(수)

네~~^^* 오늘은 Genotype 유전형에 대해 공부해 보겠습니다~~^^*

오늘은 크리스마스가 딱 2주 14일 남은 날이네요~~^^*

강아지도 행복한 크리스마스~~^^* 산타 할아버지가 바빠지시는 계절~^^*

스코틀랜드에서도 즐거운 크리스마스~~^^* Nollaig Chridheil~~^^*

네~~^^* 크리스마스 분위기 충전하고~~^^* 이제 공부 시작해 볼까요~~^^*

Genotype 유전형은 생명체의 유전적 정보를 담고 있는 것 같아요~^^* 그래서 DNA 파일을 들여다 보겠습니다~~^^*

클래스 DNA의 전체 구조는 “To be or not to be” 프로그램의 클래스 DNA의 전체구조와도 비슷한 것 같습니다~^^*

crossover 교차와 mutation 돌연변이가 일어나는 것은 같습니다.

그런데 한 가지 다른 것은~^^* “어떤 정보를 DNA에 담고 있는가?”인 것 같아요~~^^*

즉, constructor()의 내용이 달라지는 것 같습니다.

“To be or not to be” 프로그램의 경우, 유전정보는 문자에 대한 것이었는데요~^^*

네~^^* Rocket에 관한 프로그램인 만큼, DNA 즉 genes[]의 구성요소에 새겨지는 정보는, 움직임 각도와 힘의 크기를 가진 벡터입니다~^^*


class DNA {
  constructor(newgenes) {
  
    this.maxforce = 0.1;
    //힘의 최대값

   
    if (newgenes) {
      this.genes = newgenes;
    } else {
      this.genes = [];
      for (let i = 0; i < lifetime; i++) {
        let angle = random(TWO_PI);
        this.genes[i] = createVector(cos(angle), sin(angle));
        this.genes[i].mult(random(0, this.maxforce));
      }
      // 무작위값의 회전각을 지는 벡터를 생성하여 genes[i]에 저장합니다.
     // genes[i]에 0에서 maxforce값 사이의 무작위 값을 곱하여 벡터의 크기를 변화시킵니다.  
    }
     //유전자 시퀀스를 만들어 냅니다.  

    this.genes[0].normalize();
    //Rocket의 초기 힘의 크기를 적정한 정도로 세팅합니다.  
  }

 
  crossover(partner) {
    let child = new Array(this.genes.length);
    
    let crossover = int(random(this.genes.length));
    //genes길이값 내의 무작위값으로 교자지점을 정합니다. 
    
   
    for (let i = 0; i < this.genes.length; i++) {
      if (i > crossover) child[i] = this.genes[i];
      else child[i] = partner.genes[i];
    }
    //교자지점을 기준으로 
    //앞부분은 자신의 유전정보로 
    //뒷부분은 상대의 유전정보로 
    //child의 정보를 채웁니다. 
    
    let newgenes = new DNA(child);
    return newgenes;
  }
  //유전자 정보를 교차합니다. 

 
  mutate(m) {
    for (let i = 0; i < this.genes.length; i++) {
      if (random(1) < m) {
        let angle = random(TWO_PI);
        this.genes[i] = createVector(cos(angle), sin(angle));
        this.genes[i].mult(random(0, this.maxforce));
     
        if (i == 0) this.genes[i].normalize();
      }
     //주어진 돌연변이 확률에 따라
     //무작위값의 회전각과 힘의 크기를 지닌 벡터를 만들어 
     //genes[i]에 저장하여 
     //기존의 genes[i]의 정보를 변화시킵니다. 
    }
  }
}

오늘 저와 함께 유전자형 Genotype에 대해 함께 살펴봐 주셔서 감사합니다~^^*

내일은 우리~~^^* 표현형 Phenotype에 대해 살펴 볼까요~~^^*

하루하루 크리스마스가 다가오는 것처럼~

하루하루 새로운 내용을 살펴보는 즐거움과 설렘이 있는 것 같아요~~^^*

오늘도 점심 맛있게 드시고요!

즐거운 하루 보내시고요!

따뜻한 밤 보내셔요~~^^*

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

댓글 남기기