j0dm0YpkrmRs-z8XsQWscTDtPCBUiKk_UM6U1_a7TPHaXjETAK69gxhQ4wLF-C3DY2-Zcn1ajIuXSiLDjghud3d6Iptw1iCcz1cEkW5sXzgGj4BKLrw


안녕하세요? LGS입니다.

오늘은 Optimization(최적화) 2부 강의를 진행할까 합니다.

거두절미하고 바로 강의 들어가겠습니다. ^^


오늘 알아볼 녀석은 Genetic Algorithm(GA: 유전자 알고리즘)이라는 녀석입니다.

제가 생각하기에 수많은 Optimization Solver(최적해를 찾아주는 녀석들) 중에 

(Computing 능력이 충분히 받혀주면) GA가 끝판왕 쯤 되는 것 같습니다.

그 어떤 복잡 난해 괴기한 함수의 최적화도 유전자 알고리즘은 해낼 수 있어요~ 올레~


본격적으로 강의를 진행하기 전에 동영상 하나 보고 갈께요

사실 과학자들은 자연으로 부터 영감을 많이 얻습니다.

GA(Genetic Algorithm 유전자 알고리즘)도 자연에서 영감을 얻어 공학에 적용한 대표적인 사례입니다.

자~ 아래 TED 동영상을 감상하시죠~ ^^



잘 보셨나요?  ^^

이렇듯 과학자 공학자들은 자연으로보터 많은 영감을 얻어 자연을 흉내 냅니다.
우리가 주위를 둘러보면 그냥 눈에 보이는 나무들, 새들, 곤충의 모양새가 그냥 그렇게 생긴것이 아니라니까요!!
그렇게 생긴 이유는 수천만년의 진화의 결과입니다. 바퀴벌레가 납작한 이유가 있다니까요~

안 납작한 바퀴벌레는 다 죽었습니다 -_-;;

우리가 오늘 이야기하려는 유전자 알고리즘(Genetic Algorithm GA)는 생명체의 그 무엇을 모방하는 것이 아니라 
진화(evolution) 그 자체를 모방합니다. 즉 Genetic Algorithm이란 한미디로 진화(evolution)의 과정을 흉내내는 겁니다.

진화의 과정은 적자생존(適者生存 survival of the fittest) 즉, 주어진 환경에 잘 적응한 녀석들만 살아남아 후손을 남기고
그 후손은 유수한 유전자를 물려 받아 다시 환경에 적응하고... 
반대로 환경에 적응하지 못한 녀석들은 도퇴되는 것이 핵심입니다.
살아남은 후손들은 위의 과정을 반복 하면서(후손들 중에서도 우수한 녀석만 살아남고 적응하지 못한 녀석들은 도퇴)  
세대(generation)를 거듭하게 되면 몇백 몇천 세대후에는 주어진 환경(fitness)에 가장 적합한 놈만 남아있겠죠~

자~ 이제부터 여러분들은 여러분들의 세상을 창조할 신(神 God)이 되는 겁니다.
여러분 마음대로 환경(Fitness Function)도 설정할 수 있구요
여러분 마음대로 세상에 몇 놈이 있을까(Population Size) 정할 수 있구요
몇 세대(Generation)를 진화 시킬지도, 돌연변이(Mutation)를 어떻게 발생시킬지, 
교배(Crossover 유전자 교환)는 어떤식으로 할지 등등등...
정말 여러분 마음대로 할 수 있습니다. 여러분은 GOD 이니까요~ =(=^ㅅ^=)=


동영상 하나 더 보고 가겠습니다. 아래 동영상을 보시면 감이 딱! 오실겁니다요~
GOD 神이 가라사대 "서서 가장 멀리가는 녀석이 훌륭한 녀석이니라" 라고 말씀하시면 
점점 서서 멀리가는 쪽으로 진화를 합니다. 처음에는 땅바닥에서 꼽지락 거리다가 
400 세대(Generation) 정도 넘어가니 제법 서서 통통거리네요 ㅋㅋ




재미난 동영상 하나 더 보겠습니다. =(=^ㅅ^=)=

(아~ 이 교수님 재미있는 동영상이 많이 있네요 ^^)


그럼 MATLAB에서 직접 해봐야 겠죠? 마구 설레지 않나요?  ^^ 내가 신이 된다니!! 

Y9s4IX7N_CoH6Rxm7JAdJs0Kezb_2CF2Jq4f262qRO5sjv0MoqwNsKbppBPP0wRVi3DO2igoDHLl9nT6pmX4PKPBOee5ZO0Zp3GAKeGKt5THVkcs-tY


위의  그래프는 Rastrigin's Function 이라는 함수입니다. 올록~ 볼록~ 엠보싱~ 화장지는~ 으헤~ ^^
딱 보기에도 Local Minimum이 엄청나게 많네요 ;;; 쿨럭
Rastringin 함수를 지난 시간에 배운 fmincon Solver로 돌리면 Local Minimum에 100% 빠집니다요 -_-;;
컴퓨팅환경이 좋다면 아무 생각없이 뭐라구요? 네~ GA를 돌리 시면 됩니다. ㅋㅋ
자~ 그럼 본격적으로 MATLAB에서 Genetic Algorithm을 어떻게 써먹는지 알아봅시다.

Genetic Algorithm은 Global Optimization Toolbox 안에 있습니다.

(참고로 예전에는 GA Toolbox가 따로 있었다가 최근에 Global Optimization Toolbox로 통합 되었습니다.)

Command Window에서 >>optimtool('ga') 라고 입력하시면 바로 GA Solver가 셋팅되어서 Optimization Toolbox가 뜨게 됩니다.
아니면 지난 시간에 본 것 처럼  Start -> Toolboxes -> Global Optimization -> Optimization Tool 을 차례대로 클릭하신 후
GA Solver를 선택하셔도 되요~


그럼 아래와 같이 Optimization Tool이 뜨게 됩니다.

8wlEe3-TOsMUQwGtw15tWcNiMwn404feUWyNurtvff2yUlK5DFSuh8aTZDmq4-Qq3CrQy-cxwKm4ohxmlesMHlZvmhbkdpezkTRb95UICGXi6kzVwMk


Constraints(제약조건) 부분은 지난 Optimization 1부때 봤죠? 문제 없으시죠? 그쵸? 헤헤
위의 이야기에서 환경에 해당하는 것이 Fitness Function 이고,

그러므로 최소값을 찾고자하는 함수를 Fitness function 부분에 function handle로 넘겨주면 됩니다.
그럼 editor 창 하나 열어서 

fix_ga.png


myGAFitness.m으로 Fitness Function 하나 만들어 주시구요~ 
(식은 위의 Rastringin 함수식을 그대로 썼습니다)
주의하셔야 할 것은 각 population에 대해서 계산을 수행해주셔야 한다는 것입니다.
예를 들어 population size가 20이고 Number of variables가 2라면 fitness function에 넘어가는 x의 크기는 20 x 2 가 됩니다.
y의 크기는 20 x1 이 될꺼구요

자~ 그리고 아래 처럼 Setting 하시면 되요~

53LivYf8Y1-UFtBGbZML-byur3wCnPURzAAvmZpERSq-Mf_NTp2c82xo72N-5yiCTTbW3wg87OVC72IVFd89zhW78vIhAwoDFGWuKAI9PjbRC-o_-d8

Option 부분에서 세세한 옵션을 설정할 수 있습니다.
저는 다른 것은 다 디폴트로 두고 진화의 과정을 지켜보기 위해서 Plot functions에서 Best Fitness 항목을 체크하겠습니다.
그리고 진화 Start !!


(이하 생략)

profile