This is an old revision of the document!
Table of Contents
GamePlay track 시작
1. 게임의 설치
이전의 '시작하기 전에'문서를 통해 설치를 했다면, 무시해도 상관없다. 만일 아니라면 marioai.zip를 받아서 압축풀자.
2. 게임을 해보고 느낌과 영감을 얻자!
($은 유닉스 계열의 프롬프트이며 윈도우상에서는 cmd로 콘솔창을 띄우거나 이클립스에서 패러미터 변경으로 가능)
$ cd bin $ java ch.idsia.scenarios.Main
간단한 레벨과 기본 옵션으로 즐기자! (키:좌/우/아래 화살표와, a키와 s키)
bin 디렉토리에 있는 여러가지 컨트롤러들과 비교해보자.
$ java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents.controllers.ForwardAgent
$ java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ForwardJumpingAgent
에이전트로 조금 더 어려운 레벨 (-ld 1), 또다른 seed(-ls 42), 다른 길이(-ll 256), 다른 타입(-lt 1)에서 플레이 해보자.
$ java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ForwardJumpingAgent -ld 1 -ls 42 -ll 256 -lt 1 & java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ForwardAgent -vlx 330 -ld 1 -ls 42 -ll 256 -lt 1 & java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ScaredAgent -vlx 330 -vly 290 -ld 1 -ls 42 -ll 256 -lt 1 & java ch.idsia.scenarios.Main -vlx 0 -vly 290 -ld 1 -ls 42 -ll 256 -lt 1
더 다양한 옵션은 src/ch/idsia/utils/ParametersContainer.java 에서 찾아보자. 세세한 내용은 이곳 참고.
지금까지의 모든 에이전트들은 src/ch/idsia/agents/ai 패키지에서 참조되었다. 가서 getAction() 메소드를 보자. 주의! 작년과는 달리 너는 반드시 boolean[] getAction() 메소드를 충족시켜야 한다. 관찰정보는 에이전트 인터페이스의 integrateObservation(…)에 의해 제공되고 사용방법은 BasicAIAgent을 확장시키거나 그 메소드 부분을 카피해서 쓰면 된다.
agent.integrateObservation(environment); environment.performAction(agent.getAction());
3.평가와 시각화 속도증가 힌트
시각화 절차는 몇가지 방법으로 영향을 미칠 수 있다. 키보드 : +/-로 애니메이션 FPS를 증가/감소 시킬 수 있다. 만일 FPS가 99보다 크다면, 시각 컴포넌트는 가능한 최대 FPS로 작동할 것이고 'FPS: \infty' 라고 표시된다. V를 눌러 시각화를 멈춰도, 아직 평가 프로세스자체는 살아있는 채로 유지된다. 마리오AI 밴치마크가 최대 FPS로 작동하고 있을 때, 매우 유용하다 에이전트의 행동을 얻을 수 있지만 '실질적인' 점수를 얻고싶으면 방해하지 말고 단지 속도만 올려라. 그러면 가능한 한도내의 가장 빠른 평가 속도를 줄 것이다.
Command line parameters: -fps <int>, -vis <on|off> $ java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ForwardAgent -fps 100
시각화에 최대 FPS로 설정하기.
$ java ch.idsia.scenarios.Main -ag ch.idsia.ai.agents. controllers.ForwardAgent -vis off
시각화 없이 시각화 컴포넌트 설정조차 하지 않고 가장 빠른 평가 속도를 얻게 된다. 비쥬얼 컴포넌트는 전의 버전과 다르게 평가 절차와 완전히 단절되어 있다.
그리고 CmdLineOptions 프로시저의 사용 방법은 다음과 같다 CmdLineOptions.setFPS(int), CmdLineOptions.setVisualization(bool)
4.자신의 에이전트/컨트롤러 실행.
자바나 파이썬으로 된 ch.idsia.ai.agents.Agent 인터페이스를 써서 너의 컨트롤러나 학습 에이전트를 개발하자 ch.idsia.aai.agents.ai 패키지에 있는 예제 컨트롤러들과 에이전트들을 봐보자.
competition 패키지에는 evostar, wcci, cig의 3 패키지가 있을 것이다. 그중 하나인 cig는 BasicAIAgent의 확장을 기반으로한 예제다. 또다른 하나인 evostar는 scratch로 만들어진 예제다. 스크립트에 의한 평가가 끝난 뒤, 에이전트들의 평가를 받고 싶다면 신중히 매우 간단한 submission insructions을 따라라.
환경 인터페이스에 의해 제공된 정보에 주의해서 연구해라. 22×22 배열은 마리오 시점과 관계 있고, 그 시야는 고정된 점이 11,11인 egocentric w.r.t.이다.
getEnemiesPos() 는 크리쳐의 물리적 좌표 배열을 반환하는데, i번째 위치는 크리쳐의 타입, i+1은 크리쳐의 x위치, i+2는 크리쳐의 y위치를 나타낸다. getMarioState() 는 시간 제한 값과 레벨의 끝까지 남은 시간을 포함한 나머지 유용한 정보를 담고 있다. 몇몇 부분은 이런 지식이 매우 필수적이고 중요하게 나타났을 수도 있다. 너의 패키지에 헬퍼 메소드를 만드는 것은 getAction() 메소드를 충족시키고 규칙을 따르는 것을 보증한다. 토의에 참여하기 위해 Mario Competition Google Group에 합류해라
6. 너의 최고 해법을 보내고 이겨라!
GamePlay track 규칙
컨트롤러를 보냄으로써 경쟁에 참가할 수 있다. 제출물은 java 코드의 일부나 WOX파일로 구성할 수 있다.
컨트롤러를 보냄으로써 경쟁에 참가할 수 있다. 제출물은 java 코드의 일부나 WOX파일로 구성할 수 있다. (자세한건 다음 참조)
- 'YourNameYourSurnameControllerName'의 컨트롤러 안에 에이전트 인터페이스를 사용한 부분이 포함되어야 한다.
- 모든 환경에 대한 정보는 Environment 인터페이스를 통해 제공된다.
- 게임 중에 java.reflection나 그 같은 메소드를 통해 영향을 주거나 환경의 내부 상태에 대한 그 어떤 직접 접근도 금지한다.
- 컨트롤러는 실시간으로 돌아야한다.
매 시간 스텝은 2008년 맥북 프로(2GHz 코어2듀어, 4GB램)에서 40ms 이내에 끝나야 한다. 자기 컴퓨터에서 얼마나 빨리 도는지는 Stats 클래스를 사용해서 측정 가능하다. 만일 충분히 빨리 달리지 못할 위험성이 있다고 생각되면 미리 전에 Sergey에게 말해야 한다.
- Scoring은 전에 보지 못하던 적들이 있는 레벨 여러개에서의 평균 거리 여행으로 측정할 것이다.
우리는 CompetitionScore class를 사용할 것이다. 그래서 competition score의 seed가 0으로 해놓고 제출해야한다.
그러나 우리는 특정한 seed에 overfitting하는 컨트롤러를 방지하기 위해 scoring event 전에 마지막 scoring에 사용된 seed를 공개하지 않을 것이다.
- Multi Objective fitness.
MAIBe는 이제 ch.idsia.scenarios.champ.MarioSystemOfValues에 의해 변수화된 조율가능한 Multi Objective fitness 갖는다 이 접근법은 2개의 다른 에이전트가 같은 fitness를 갖을 수 없게 해준다. 그러나 우리는 특이한 상황에 대비하여 아직 연장전(tiebreaker)을 갖는다.
- Tiebreakers(연장전)
만일 두개의 컨트롤러가 몇번의 연장전에서 같은 점수를 얻는다면 이하의 규정된 규칙을 적용한다
1. 크리쳐 죽인 수 2. 코인 얻은 수 3. 시간(마리오 시간) 4. 시간(작동 시간)