您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
70 行
2.9 KiB
70 行
2.9 KiB
import unittest.mock as mock
|
|
import pytest
|
|
import numpy as np
|
|
|
|
from gym import spaces
|
|
from gym_unity.envs import UnityEnv, UnityGymException
|
|
from mock_communicator import MockCommunicator
|
|
|
|
@mock.patch('mlagents.envs.UnityEnvironment.executable_launcher')
|
|
@mock.patch('mlagents.envs.UnityEnvironment.get_communicator')
|
|
def test_gym_wrapper(mock_communicator, mock_launcher):
|
|
mock_communicator.return_value = MockCommunicator(
|
|
discrete_action=False, visual_inputs=0, stack=False, num_agents=1)
|
|
|
|
# Test for incorrect number of agents.
|
|
with pytest.raises(UnityGymException):
|
|
UnityEnv(' ', use_visual=False, multiagent=True)
|
|
|
|
env = UnityEnv(' ', use_visual=False)
|
|
assert isinstance(env, UnityEnv)
|
|
assert isinstance(env.reset(), np.ndarray)
|
|
actions = env.action_space.sample()
|
|
assert actions.shape[0] == 2
|
|
obs, rew, done, info = env.step(actions)
|
|
assert isinstance(obs, np.ndarray)
|
|
assert isinstance(rew, float)
|
|
assert isinstance(done, bool)
|
|
assert isinstance(info, dict)
|
|
|
|
@mock.patch('mlagents.envs.UnityEnvironment.executable_launcher')
|
|
@mock.patch('mlagents.envs.UnityEnvironment.get_communicator')
|
|
def test_multi_agent(mock_communicator, mock_launcher):
|
|
mock_communicator.return_value = MockCommunicator(
|
|
discrete_action=False, visual_inputs=0, stack=False, num_agents=2)
|
|
|
|
# Test for incorrect number of agents.
|
|
with pytest.raises(UnityGymException):
|
|
UnityEnv(' ', multiagent=False)
|
|
|
|
env = UnityEnv(' ', use_visual=False, multiagent=True)
|
|
assert isinstance(env.reset(), list)
|
|
actions = [env.action_space.sample() for i in range(env.number_agents)]
|
|
obs, rew, done, info = env.step(actions)
|
|
assert isinstance(obs, list)
|
|
assert isinstance(rew, list)
|
|
assert isinstance(done, list)
|
|
assert isinstance(info, dict)
|
|
|
|
@mock.patch('gym_unity.envs.unity_env.UnityEnvironment')
|
|
def test_branched_flatten(mock_env):
|
|
mock_env.return_value.academy_name = 'MockAcademy'
|
|
mock_brain = mock.Mock();
|
|
mock_brain.return_value.number_visual_observations = 0
|
|
mock_brain.return_value.num_stacked_vector_observations = 1
|
|
mock_brain.return_value.vector_action_space_type = 'discrete'
|
|
mock_brain.return_value.vector_observation_space_size = 1
|
|
# Unflattened action space
|
|
mock_brain.return_value.vector_action_space_size = [2,2,3]
|
|
|
|
mock_env.return_value.brains = {'MockBrain':mock_brain()}
|
|
mock_env.return_value.external_brain_names = ['MockBrain']
|
|
env = UnityEnv(' ', use_visual=False, multiagent=False, flatten_branched=True)
|
|
assert isinstance(env.action_space, spaces.Discrete)
|
|
assert env.action_space.n==12
|
|
assert env._flattener.lookup_action(0)==[0,0,0]
|
|
assert env._flattener.lookup_action(11)==[1,1,2]
|
|
|
|
# Check that False produces a MultiDiscrete
|
|
env = UnityEnv(' ', use_visual=False, multiagent=False, flatten_branched=False)
|
|
assert isinstance(env.action_space, spaces.MultiDiscrete)
|