'2010/06/10'에 해당되는 글 2건

  1. 2010.06.10 유전 알고리즘
  2. 2010.06.10 영향력 분포도

열심히 알고리즘도 찾는 중인데 우선 유전 알고리즘이라는걸 찾아서 정리해봤다.

책에 나온 내용은 거의 400 ~500쪽이라서 대략 어떠한 알고리즘인지만 이해했고

더 조사해서 우리 프로젝트에 적합한지 확인해봐야겠다.


유전알고리즘

 

 

100개의 초기 염색체 집단을 만들고 다음과 같이 해보자.

1. 각 염색체게 문제를 푸는데 얼마나 적당한가를 검사하고 그에 상응하는 적응도를 부여한다.

2. 현재 집단에서 두 개를 선택한다. 선택되는 확률은 적응도에 비례한다. 이런 선택 방법은 흔히 룰렛 선택이라고 한다.

3. 두 염색체의 비트들 중에서 임의의 비트를 선택하여 교차 확률로 교차시킨다.

4. 선택된 염색체의 비트들을 돌연변이 확률로 뒤집는다.

5. 100개의 새로운 염색체가 생길 때까지 2, 3, 4단계를 반복한다.

 

 

룰렛선택 염색체를 적응도에 비례하여 선택하는 방법입니다. 적응도가 높은 염색체일수록 선택될 확률은 높다. 적응도가 가장 높은 염색체가 반드시 다음 세대로 유전된다는 것을 보장하지 않는다.

 

  

 


교차 선택된 두 염색체가 새로운 자식 염색체를 만들기 위해서 그들의 비트를 서로 바꾸는 것

 

 

돌연변이 염색체에서 어떤비트가 뒤집어지는 것을 말한다. , 0 1이 되고 1 0이 되는 것을 말한다. 돌연변이는 매우 희박하게 일어난다. 0.001의 확률로 일어난다.

 

 

갼략한 시나리오

-       염색체 집단에서 염색체를 염색체를 선택할 때마다 교차를 적용해야 하는지를 검사해야 한다. 교차 과정이 끝난 자식 염색체들은 돌연변이 적용 여부를 검사한다. , 자식 염색체의 각 비트들에 대해서 돌연변이 확률로 돌연변이를 적용한다.

 

 

 

 

상세 시나리오

1.     초기 염색체 집단을 임의로 생성합니다.

2.     인공 신경망을 훈련시키고 에러에 따라서 적응도를 부여한다. 인공 신경망이 커질수록 적응도를 삭감하는 것도 좋다. 이렇게 하면 적은 수의 뉴런과 연결을 가진 인공 신경망을 얻을 수 있다.

3.     선택 방법(적응도 비례 선택 혹은 토너먼트 선택 등)으로 두 개의 염색체를 선택한다. 선택된 염색체들은 부모가 된다.

4.     교차 연산자를 적용한다.

5.     돌연변시 연산자를 적용한다.

6.     새로운 집단이 원하는 크기의 다다를 때까지 3~5단꼐를 반복한다.

7.     만족스러운 인공 신경망을 얻을 때까지 2단계로 돌아간다.

 

실시간 진화 게임이 실행되는 동안 악당들을 진화시킬 수 있는 간단한 테크닉

              (악당들의 풀을 관리한다.)

 


 

시나리오

1.     게임에서 필요한 개체는 이 풀에서 만들어진다.

2.     게임에서 개체가 사라지는 즉시 새로운 개체가 게임으로 투입된다.

3.     , 게임에서 사라진 개체보다 적응도가 높은 개체를 선택하여(퓰에 있는 최소 적응도보다 낮으면 풀에 들어갈 수 없다) 돌연변이를 적용한 다음 그것을 게임에 투입한다.




참고 - 쉽게 풀어 쓴 인공지능 게임 프로그래밍  (정보문화사)

'프로그래밍 기초 > 자료구조 & 알고리즘' 카테고리의 다른 글

유전알고리즘(2)  (0) 2010.06.21
영향력 분포도  (0) 2010.06.10
연결리스트를 이용한 이진트리의 순회방법  (0) 2010.05.14
트리의 배열표현 방법  (0) 2010.05.14
큐 만들기  (0) 2010.05.14
Posted by 아몰라

시작할 때 밭을 구성할 때 쓰면 괜찮을 것 같은 알고리즘
이것 역시 가능한지 더 조사해봐야함~


영향력분포도 기법 – AI 에이전트가 세계에 대해 지니고 있는 지식을 공간적으로 표현한 것으로, 게임 환경의 물리적/지형적 표현과 현재의 게임 상태(유닛 배치 등등)에 기반해서 전략적 결정에 필요한 정보만을 적절히 추출한 것이다.

 

영향력분포도의 이점

1.     어디에 유닛들을 배치할 것인지, 적이 어디에 있는지(또는 어디쯤에 가면 찾을 수 있는지 알 수 있다)

2.     두 객체 사이에 전선 어디이고 가장 격력한 전투가 벌어지는 또는 벌어질 만한 곳은 어디인지 같은 전략/전술적으로 매우 유용한 정보를 얻을 수 있다.

3.     지형 지물에 관한 정보도 제공할 수 있다.(전술적 가치가 가장 높은 지점이라던가 방어의 허점이 될 만한 지점, 매복 할 지점 등을 제공 받을 수 있다.)

 

간단한 영향력분포도

-       게임이 시작되면 모든 칸들은 0으로 초기화 된다.

-       그리고 각 칸에 대해, 그 칸이 가질 수 있는 영향력 값이 배정된다.

-       전투의 효율성을 영향력 값을 간주하며, 아군 유닛은 양, 적군은 음의 값을 가진다고 한다.

 

 

 

 

 

 

+2

아군

 

 

 

 

 

-1

적군

-1

적군

 

 

 

<초기의 영향력분포>

 

 

 

 

 

 

+0.7

+1

+0.7

+0.35

+1

+2

아군

+1

+0.5

+0.7

+1

+0.7

+0.35

+0.35

+0.5

+0.35

+0.24

<영향력의 전파>

 

 

0.51

0.79

0.47

0.06

0.66

1.66

0.53

-0.06

0.07

0.40

0.03

-0.74

-0.74

-0.17

-0.25

-0.39

<최종적인 영향력분포도>

 

-       이 분포도를 보면 아군과 적군의 역관계를 확실히 알 수 있다.

-       음의 값과 양의 값이 맞부딪히는 칸들을 이으면 전선이 된다.


참고 - GameProgramming Gems2

'프로그래밍 기초 > 자료구조 & 알고리즘' 카테고리의 다른 글

유전알고리즘(2)  (0) 2010.06.21
유전 알고리즘  (0) 2010.06.10
연결리스트를 이용한 이진트리의 순회방법  (0) 2010.05.14
트리의 배열표현 방법  (0) 2010.05.14
큐 만들기  (0) 2010.05.14
Posted by 아몰라
이전버튼 1 이전버튼