프로그래밍/AI

Malmo 플랫폼 튜토리얼

ZenoAhn 2017. 7. 15. 01:30

Malmo 플랫폼 튜토리얼

1. 시작하기

Malmo 배포판의 루트부터 시작한다.

  1. Minecraft 실행 방법:
cd Minecraft launchClient.bat (on Windows) ./launchClient.sh (on Linux or MacOSX)

Windows 유저라면 launchClient.bat을 더블 클릭해서 실행해도 된다.

참고: 만약 메인 메뉴가 잘 보인다면 커맨드창에서 "Building 95%"라고해서 기다리지 말고 무시해도 된다.

  1. Python_Examples 폴더를 coomand나 prompt창에서 연다.

2. 필드에 서있기

tutorial_1.py를 실행해보자. 이 튜토리얼은 가장 기본이되는 뼈대 mission이다.

agent는 아무것도 하지않고 필드 위에서 서있을 뿐이다.

튜토리얼을 실행시키면 다음과 같은 내용을 볼 수 있을 것이다.

c:\Malmo\Python_Examples>python tutorial_1.py
DEBUG: Sending MissionInit to 127.0.0.1 : 10000
DEBUG: Looking for client, received reply from 127.0.0.1: MalmoOK
Waiting for the mission to start .....
Mission running ..............................................................
Mission ended

Minecraft 창의 왼쪽 미션이 끝날때까지 남은 시간을 카운트 다운으로 알려주고 있는데 default 값은 10초 뒤에 미션이 끝나도록 설정되어 있다.

3. 움직이기

mission이 실행되는 동안, 우리는 Agent에게 명령어를 보내서 제어할수 있다. 아래의 코드를 main mission loop: 전에 추가 해 보자.

agent_host.sendCommand("turn -0.5") agent_host.sendCommand("move 1") agent_host.sendCommand("jump 1")

이제 이 mission 코드를 다시 실행시켜보면 agent가 움직이는 것을 볼 수 있다.

TIP!

Minecraft 창에서 F5키를 누르면, 1인칭 시점 외로 플레이어를 볼 수 있습니다. 이를 통해 Agent가 무엇을 하는지 보기 더 좋을 것 입니다. F3키를 누르게 되면 Minecraft의 Debug 정보를 볼 수 있습니다. 이를 통해 위치, 회전 정보가 변하는 것을 볼 수 있습니다.

기본적으로 Agent는 다음과 같은 계속적인 움직임 명령으로 제어됩니다.

By default, the agent is being controlled by the ContinuousMovementCommands – these are:

move[-1, 1]

"move 1"은 최대 속력으로 앞으로 나아갑니다.

"move -0.5"는 뒤로 반만큼의 속력으로 나아갑니다.

strafe[-1,1]

"strafe -1"은 최대 속력으로 왼쪽으로 이동합니다.

"strafe 0.5"는 최대 속력으로 오른쪽으로 이동합니다.

pitch [-1,1]

"pitch -1"은 카메라를 위쪽 방향으로 최대 속력으로 회전시키기 시작합니다.

"pitch 0.1"은 카메라를 아래 방향으로 천천히 회전시켜 내려다봅니다.

turn [-1, 1]

"turn -1"은 최대 속력으로 왼쪽으로 회전하기 시작합니다.

jump 1/0

"jump 1"은 점프를 시작합니다.

"jump 0"는 점프를 멈춥니다.

couch 1/0

웅크리기를 하거나 멈춥니다.

attack 1/0

공격하기를 시작하거나 멈춥니다.

use 1/0

아이템 사용하기를 시작하거나 멈춥니다.

Tip!

마인크래프트의 낮과 밤은 20분 주기를 갖고있습니다. 그래서 10분 뒤에는 월드가 밤이 되서 잘 안보이게 됩니다. 낮으로 돌리려면 Minecraft 창을 눌러서 다음 명령어를 입력합니다. /time set 1000 (이 명령어는 Minecraft의 낮의 시작으로 만들어줍니다. 13000은 석양이 지는 시간이며, 마인크래프트의 밤의 시작입니다.)

main mission loop 밖에서 위에서 언급한 명령어들로 여러가지 실험들을 해보세요.

예를 들어, 이전 명령어들을 다음의 명령어로 바꿔보면 어떤 일이 일어날까요?

agent_host.sendCommand("pitch 1") time.sleep(1) agent_host.sendCommand("attack 1")

4. Introducing the Mission XML

my_mission = MalmoPython.MissionSpec()

이 코드는 scene의 배경으로 default mission XML 문자열을 만드는 일을 합니다.

생성된 XML은 Minecraft의 특별한 미션을 정의하는데 보내집니다.

보내지는 XML명령어를 보고싶다면, 다음과 같이 호출해서 볼 수 있습니다.

print my_mission.getAsXML(True)

그럼 다음과 같이 텍스트를 보여 줄 것 입니다.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Mission xmlns="http://ProjectMalmo.microsoft.com" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://ProjectMalmo.microsoft.com Mission.xsd"> <About> <Summary/> </About> <ServerSection> <ServerHandlers> <FlatWorldGenerator generatorString="3;7,220*1,5*3,2;3;,biome_1"/> <ServerQuitFromTimeUp description="" timeLimitMs="10000"/> <ServerQuitWhenAnyAgentFinishes description=""/> </ServerHandlers> </ServerSection> <AgentSection mode="Survival"> <Name>Cristina</Name> <AgentStart/> <AgentHandlers> <ObservationFromFullStats/> <ContinuousMovementCommands turnSpeedDegs="180"/> </AgentHandlers> </AgentSection> </Mission>

MissionSpec 객체는 이와같은 XML을 만들어내기 위한 기본적인 API를 제공합니다. 하지만 우리는 예제에서 직접 편집을 해 볼 것입니다.

tutorial_2.py를 편집기에서 열면, XML이 직접 MijsssionSpec의 생성자를 통해서 전달되는 것을 볼 수 있습니다.

또한, 기본적인 mission에 몇개의 빈 공간들을 채워 넣어 두었고, 시간 제한을 30초로 올려 두었습니다. 미션을 실행을 시켜보면 우리는 필드위에 서 있는 모습을 볼 수 있습니다.

Tip!

Ctrl-C키를 눌러서 미션이 끝나기를 기다리지 않고 Python의 처리를 끝낼 수 있습니다.


'프로그래밍 > AI' 카테고리의 다른 글

Open AI Gym 시작하기  (0) 2019.04.13
DQN 읽을 거리  (0) 2019.04.13
Rust Machine Learning Ecosystem  (0) 2019.04.13
Malmo 플랫폼 설치  (0) 2017.07.15
Minecraft로 AI 만들기 Malmo  (0) 2017.07.15