“에이전트 하나를 만들어서 학습시키는 대신, 진화론을 채용해서 자연선택으로 에이전트들을 진화시키면 어떨까?”
→ 매개변수들이 서로 다른 여러 에이전트들을 환경에 풀어놓고 성과가 좋은 것들을 ‘교배’시켜서 부모의 좋은 형질들을 물려받은 새 에이전트를 만들자 !
→ 개별 에이전트의 학습이 필요하거나, 경사 하강법에 의존하지 않는다. ⇒ 기울기 무관 알고리즘
문자열과 유전알고리즘을 이용한 예시
“hello world!”라는 예시를 만들어내기 위한 유전알고리즘
교차/재교합을 이용해서 두 개의 자손 문자열을 만들어냄
그 뒤로는 유전알고리즘을 이용해서 문자열을 만드는 거 실습 코드들임
[유전 알고리즘 CartPole 실습 코드](<https://colab.research.google.com/drive/1A1o8l3Xsgk_cQ3XbDauZfxkFrdE4bz_D?usp=sharing>)
기존의 엡실론 탐욕 전략 등과 다르게 무작위로 생성한 에이전트들을 진화시키는 것이기 때문에 탐험성이 더 짙다.
변이 비율을 절충하는 문제는 여전히 존재한다.
너무 낮게 잡으면 수렴이 더 일찍 일어나서 개체군이 거의 동일한 개체들로 채워진다.
진화를 위해서는 세대마다 개체군의 모든 개체를 환경에서 실제로 실행해서 적합도를 평가해야 한다
→ 개체군을 한번 갱신하기 위해 계산작업을 개체의 수 만큼 해야 한다.
→ 데이터 효율성이 나쁘다.
what if, 개체군의 크기를 줄인다면?
계산 비용은 낮출 수 있다!
but, 부모로 선택될 개체들이 적다는 뜻
→ 덜 적합한 개체들이 다음 세대의 자손들을 남길 가능성 커짐