Новый для Мальмё и Мальмёнв. У меня проблемы с чтением файла XML. Я получаю ошибку Content is not allowed in prolog
на терминале, где запущен Minecraft. Я пробовал несколько разных XML-файлов, но безрезультатно. Мой код Python, сообщение об ошибке и XML-файл перечислены ниже:
Файл XML:
<?xml version="1.0"?>
<Mission xmlns="http://ProjectMalmo.microsoft.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<About>
<Summary>Everyday Minecraft life: survival</Summary>
</About>
<ModSettings>
<MsPerTick>50</MsPerTick>
</ModSettings>
<ServerSection>
<ServerHandlers>
<DefaultWorldGenerator />
<ServerQuitFromTimeUp timeLimitMs="3000000" description="out_of_time"/>
<ServerQuitWhenAnyAgentFinishes />
</ServerHandlers>
</ServerSection>
<AgentSection mode="Survival">
<Name>Agent0</Name>
<AgentStart>
<Placement x="-203.5" y="81.0" z="217.5"/>
</AgentStart>
<AgentHandlers>
<ContinuousMovementCommands/>
<MissionQuitCommands/>
<ObservationFromFullStats/>
<VideoProducer want_depth="true">
<Width>300</Width>
<Height>200</Height>
</VideoProducer>
<RewardForMissionEnd rewardForDeath="-10000">
<Reward description="found_goal" reward="1000" />
<Reward description="out_of_time" reward="-1000" />
</RewardForMissionEnd>
<AgentQuitFromTouchingBlockType>
<Block type="gold_block diamond_block redstone_block" description="found_goal" />
</AgentQuitFromTouchingBlockType>
</AgentHandlers>
</AgentSection>
</Mission>
Код в основном:
if __name__ == '__main__':
env = malmoenv.make()
env.init(Path('mission.xml').read_text(), 9001,
server='127.0.0.1',
server2='127.0.0.1', port2=9001,
role=0,
exp_uid='exp1',
episode=1, resync=0)
done = False
h, w, d = env.observation_space.shape
action_size = env.action_space.n
agent = NotBasicDQN((h, w, d), action_size)
agent.compile_models()
for eps in range(100):
state = env.reset()
state = state.reshape(1, h, w, d)
state = np.float32(state)
state /= 255
state += .0001
prev_state = state
curiosity = 0.0001
iter = 0
while not done:
action = agent.act(state)
next_state, reward, done, _ = env.step(action)
if done:
break
reward += curiosity
next_state = np.float32(next_state)
next_state /= 255
next_state += 0.0001
next_state = next_state.reshape(1, h, w, d)
agent.remember(prev_state, state, action, reward, next_state, done)
curiosity = agent.replay(1)
prev_state = state
state = next_state
print("REWARDS:", reward)
iter += 1
#if iter % 1000 == 0:
# print("Saving agent...")
# agent.save("./save/mc-dqn.h5")
time.sleep(.5)
env.close()
Ошибка:
[16:29:35] [Thread-23/INFO]: [STDOUT]: Received from localhost:<MalmoEnv0.37.0/>
[Fatal Error] :1:1: Content is not allowed in prolog.
[16:29:35] [Thread-23/INFO]: [STDOUT]: SAX exception: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
> BuildingCould not read error output of: command '/usr/lib/jvm/java-8-openjdk-amd64/bin/java'.
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:291)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.gradle.process.internal.streams.ExecOutputHandleRunner.run(ExecOutputHandleRunner.java:51)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)