def test_invade_3(self):
     env = Environment("map_init.txt", "population_init.txt")
     try:
         env.invade(GamePlayId.P2, 1, 4, 1)
     except Exception as error:
         self.assertEqual(
             str(error), "Can't invade no route from ( " + str(1) +
             " ) to ( " + str(4) + " )")
 def test_march_5(self):
     env = Environment("map_init.txt", "population_init.txt")
     try:
         env.march_troops(GamePlayId.P1, 1, 5, 1)
         self.fail()
     except Exception as error:
         self.assertEqual(
             str(error), "Can't march no route from ( " + str(1) +
             " ) to ( " + str(5) + " )")
 def test_march_4(self):
     env = Environment("map_init.txt", "population_init.txt")
     try:
         env.march_troops(GamePlayId.P1, 1, 3, 13)
         self.fail()
     except Exception as error:
         self.assertEqual(
             str(error), "Not enough troops to march from ( " + str(1) +
             " ) to ( " + str(3) + " ) troops are in country are " + str(7))
 def test_march_3(self):
     env = Environment("map_init.txt", "population_init.txt")
     try:
         env.march_troops(GamePlayId.P1, 1, 4, 1)
         self.fail()
     except Exception as error:
         self.assertEqual(
             str(error),
             "Can't march troops to unowned country : country owner (" +
             str(GamePlayId.P2) + ") ," + "player (" + str(GamePlayId.P1) +
             ")")
Exemple #5
0
 def test2_greedy(self):
     env = Environment("map_init.txt", "population_init.txt")
     state = EnvState(env, None, None, GamePlayId.P1)
     player1 = Greedy(GamePlayId.P1)
     player2 = PacifistAgent(GamePlayId.P2)
     player1.search(state, player2)
     print(player1.writeout_path())
Exemple #6
0
 def test3_Astar(self):
     env = Environment("map_init.txt", "population_init.txt")
     state = EnvState(env, None, None, GamePlayId.P1)
     player1 = AStar(GamePlayId.P2)
     player2 = PassiveAgent(GamePlayId.P1)
     res = player1.search(state, player2)
     print(player1.writeout_path())
Exemple #7
0
 def test_invade_1(self):
     env = Environment("map_init.txt", "population_init.txt")
     p2 = Human(GamePlayId.P2)
     p2.invade(env, 2, 3, 6)
     self.assertEqual(env.country_list[1].troops_count, 1)
     self.assertEqual(env.country_list[2].troops_count, 1)
     self.assertEqual(env.country_list[1].owner_id , GamePlayId.P2)
Exemple #8
0
 def test_invade_2(self):
     env = Environment("map_init.txt", "population_init.txt")
     p2 = Human(GamePlayId.P2)
     try:
         p2.invade(env, 2, 4, 1)
     except Exception as error:
         self.assertEqual(str(error), "Can't invade your own country")
Exemple #9
0
 def __init__(self,
              input_stream: TextIOBase,
              output_stream: TextIOBase,
              debug=False):
     self.env = Environment()
     extend_environment(self.env)
     self.handlers_net = HandlersNet(self.env, input_stream, output_stream)
     if debug:
         enable_debug_logging()
 def test_copy(self):
     env = Environment("map_init.txt", "population_init.txt")
     env_c = copy.deepcopy(env)
     env_c.country_list[0].owner_id = None
     env_c.border_list[0].country1 = None
     env_c.continent_list[0].owner_id = None
     self.assertNotEqual(env.country_list[0].owner_id, None)
     self.assertNotEqual(env.border_list[0].country1, None)
     self.assertNotEqual(env.continent_list[0].owner_id, None)
Exemple #11
0
 def test1_RTAstar(self):
     env = Environment("map_init.txt", "population_init.txt")
     state = EnvState(env, None, None, GamePlayId.P1)
     player1 = RTAStar(GamePlayId.P1)
     state = player1.search(state, MoveType.DEPLOY)
     print(state.env.change, state)
     state = player1.search(state, MoveType.MARCH)
     print(state.env.change, state)
     state = player1.search(state, MoveType.INVADE)
     print(state.env.change, state)
Exemple #12
0
 def test_march_2(self):
     env = Environment("map_init.txt", "population_init.txt")
     p1 = Human(GamePlayId.P1)
     try:
         p1.march_troops(env, 2, 3, 1)
         self.fail()
     except Exception as error:
         self.assertEqual(str(error),
                          "Can't march troops from unowned country : country owner ("
                          + str(GamePlayId.P2) + ") ,"
                          + "player (" + str(GamePlayId.P1) + ")")
Exemple #13
0
 def test_deploy_1(self):
     env = Environment("map_init.txt", "population_init.txt")
     p1 = Human(GamePlayId.P1)
     p2 = Human(GamePlayId.P2)
     p1.deploy_reserve_troops(env, 1, 1)
     try:
         p2.deploy_reserve_troops(env, 1, 1)
         self.fail()
     except Exception as error:
         self.assertEqual(str(error), "Can't deploy troops to unowned country : country owner ("
                          + str(GamePlayId.P1) + ") ,"
                          + "player " + str(GamePlayId.P2) + ")")
 def test_deploy_1(self):
     env = Environment("map_init.txt", "population_init.txt")
     env.reserve_1 = 1
     env.deploy_reserve_troops(GamePlayId.P1, 1)
     try:
         env.deploy_reserve_troops(GamePlayId.NONE, 1)
         self.fail()
     except Exception as error:
         self.assertEqual(
             str(error),
             "Can't deploy troops to unowned country : country owner (" +
             str(GamePlayId.P1) + ") ," + "player " + str(GamePlayId.NONE) +
             ")")
 def __init__(self, player1_type, player2_type):
     self.player1 = self.get_player(player1_type, GamePlayId.P1)
     self.player2 = self.get_player(player2_type, GamePlayId.P2)
     self.env = Environment("/server_files/map_init.txt",
                            "/server_files/population_init.txt")
     self.env.reserve_1 = 2
     self.env.reserve_2 = 2
     self.turn = True
     self.state = EnvState(self.env, None, None, GamePlayId.P1)
     self.history = []
     self.history_counter = 0
     if player1_type == "astar":
         self.history = self.player1.search(self.state, self.player2)
     elif player1_type == "greedy":
         self.history = self.player1.search(self.state, self.player2)
     elif player2_type == "astar":
         self.history = self.player2.search(self.state, self.player1)
     elif player2_type == "greedy":
         self.history = self.player2.search(self.state, self.player1)
Exemple #16
0
class ShellTransformerTest(unittest.TestCase):
    command_factory = CommandFactory(Environment())

    def setUp(self) -> None:
        self.parser = ShellParser(ShellTransformerTest.command_factory)

    def parse(self, string):
        return self.parser.parse(string)

    def testEmpty(self):
        result = self.parse('')
        self.assertEqual(0, len(result))

    def testEcho(self):
        result = self.parse('echo 123 | echo "hey" | echo 7')
        self.assertEqual(3, len(result))
        args = ['123', 'hey', '7']
        for command, arg in zip(result, args):
            self.assertTrue(isinstance(command, EchoCommand))
            self.assertEqual([arg], command.args)

    def testExit(self):
        result = self.parse('exit')
        self.assertEqual(1, len(result))
        command = result[0]
        self.assertTrue(isinstance(command, ExitCommand))

    @parameterized.expand([
        ('echo', 'echo 123', EchoCommand, ['123']),
        ('exit', 'exit', ExitCommand, []),
        ('cat', 'cat main.py', CatCommand, ['main.py']),
        ('custom command', '/bin/sh main.sh', CustomCommand, ['/bin/sh', 'main.sh']),
        ('equality', 'x = 3', AssignmentCommand, ['x', '3']),
        ('pwd', 'pwd', PwdCommand, []),
        ('wc', 'wc main.py', WcCommand, ['main.py']),
    ])
    def test(self, _, string, command_type, args):
        result = self.parse(string)
        self.assertEqual(1, len(result))
        command = result[0]
        self.assertTrue(isinstance(command, command_type))
        self.assertEqual(args, command.args)
Exemple #17
0
class EnvironmentTest(unittest.TestCase):
    def setUp(self) -> None:
        self.env = Environment()

    def testEmpty(self):
        self.assertRaises(ShellException, lambda: self.env.get('x'))

    def testExisting(self):
        self.env.set('x', 'y')
        self.assertEqual('y', self.env.get('x'))

    def testNonExisting(self):
        self.env.set('x', 'y')
        self.assertRaises(ShellException, lambda: self.env.get('y'))

    def testOsEnvironment(self):
        extend_environment(self.env)
        self.assertTrue('PATH' in self.env.data)
    def setup(self):
        try:
            self.environment = Environment.setup(self.arguments)

            self.mission = Mission.create(self.environment, self.arguments)

            self.monitor = Monitor(self.mission, self.environment)
        except Exception:
            self.arguments.error(traceback.format_exc())

        self.arguments.check_help()

        infrared_sensor = self.environment.get_infrared_sensor()
        if infrared_sensor is not None:
            infrared_sensor.register("start", self.enable)
            infrared_sensor.register("pause", self.monitor.pause)
            infrared_sensor.register("stop", self._infrared_disable)
            infrared_sensor.register("poweroff", self._infrared_poweroff)
            infrared_sensor.activate()
        else:
            self.activated = True

        print("Setting up mission")
        self.mission.setup()
        self.mission.display()

        self.monitor.setup()

        # Arm the vehicle and take off to the specified altitude if the vehicle 
        # can fly.
        self.mission.arm_and_takeoff()
        self.mission.display()

        while not self.activated:
            self.monitor.sleep()

        self.start()
Exemple #19
0
    def setup(self):
        try:
            self.environment = Environment.setup(self.arguments)

            self.mission = Mission.create(self.environment, self.arguments)

            self.monitor = Monitor(self.mission, self.environment)
        except Exception:
            self.arguments.error(traceback.format_exc())

        self.arguments.check_help()

        infrared_sensor = self.environment.get_infrared_sensor()
        if infrared_sensor is not None:
            infrared_sensor.register("start", self.enable)
            infrared_sensor.register("pause", self.monitor.pause)
            infrared_sensor.register("stop", self._infrared_disable)
            infrared_sensor.register("poweroff", self._infrared_poweroff)
            infrared_sensor.activate()
        else:
            self.activated = True

        print("Setting up mission")
        self.mission.setup()
        self.mission.display()

        self.monitor.setup()

        # Arm the vehicle and take off to the specified altitude if the vehicle
        # can fly.
        self.mission.arm_and_takeoff()
        self.mission.display()

        while not self.activated:
            self.monitor.sleep()

        self.start()
Exemple #20
0
 def test_march_1(self):
     env = Environment("map_init.txt", "population_init.txt")
     p1 = Human(GamePlayId.P1)
     p1.march_troops(env, 1, 3, 1)
     self.assertEqual(env.country_list[0].troops_count, 2)
     self.assertEqual(env.country_list[2].troops_count, 6)
Exemple #21
0
 def test_deploy_2(self):
     env = Environment("map_init.txt", "population_init.txt")
     p1 = Human(GamePlayId.P1)
     p1.deploy_reserve_troops(env, 1, 1)
     self.assertEqual(env.country_list[0].troops_count, 4)
def optimize_joint(system_nn, pol_nn, log_writer, **kwargs):
    # unpack kwargs
    horizon = kwargs.get("horizon")
    nb_iterations = kwargs.get("nb_iterations")
    batch_size = kwargs.get("batch_size")

    policy_fit = kwargs.get("policy", False)
    system_fit = kwargs.get("system", False)

    mc_samples = kwargs.get("mc_samples", 128)

    env = Environment(system_nn)
    agent = Agent(pol_nn, env, horizon)

    # Optimizers
    parameters_list = []
    if policy_fit:
        parameters_list = parameters_list + list(pol_nn.parameters())

    if system_fit:
        parameters_list = parameters_list + list(system_nn.parameters())
    if parameters_list:
        lr = kwargs.get("learning_rate", .001)
        optimizer = Adam(parameters_list, lr=lr)

        for it in range(nb_iterations):
            loss = {}
            params = {}

            # set gradient to zero
            optimizer.zero_grad()

            # generate the batch
            _, states_batch, dist_batch, _, oha_batch, rew_batch = agent.sample_trajectory(
                batch_size)

            # Loss #
            system_loss = system_error(system_nn, pol_nn, states_batch,
                                       dist_batch, oha_batch, rew_batch)

            system_loss.backward(retain_graph=policy_fit)

            optimizer.step()
            system_nn.project_parameters()
            pol_nn.project_parameters()

            if system_fit and log_writer is not None:
                params['system'] = system_nn.unwrapped.named_parameters()
                log_writer.add_system_parameters(system_nn.parameters_dict(),
                                                 step=it)

            if policy_fit and log_writer is not None:
                params['policy'] = pol_nn.named_parameters()
                actions = pol_nn(
                    states_batch)  # (B, H, A), need to stack along the B dim
                log_writer.add_policy_histograms(actions.view(
                    -1, actions.shape[2]),
                                                 step=it)

            if log_writer is not None:
                loss['loss'] = system_loss.item()

                log_writer.add_grad_histograms(params, step=it)
                log_writer.add_loss(loss, step=it)

                # performance of the agent on the epoch
                ep_perf, return_estimate = agent.avg_performance(mc_samples)
                log_writer.add_expected_return(ep_perf, step=it)
                log_writer.add_return(return_estimate, step=it)

    return env, agent
Exemple #23
0
 def setUp(self) -> None:
     self.parser = SubstitutionParser()
     self.env = Environment()
Exemple #24
0
from tqdm import trange

from agents.agents import *
from environment.Environment import Environment

if __name__ == '__main__':
    fst_agent = GreedyVFuncAgent(1, 0.7, 0.1)
    snd_agent = BasicVFuncAgent(2, 0.7)

    for _ in trange(1000):
        env = Environment()

        turn = 0
        while not env.is_finished(env.field):
            # First agents turn
            current_state = env.get_state_description(env.field)
            possible_actions = env.get_possible_actions(fst_agent.player_num)
            chosen_action = fst_agent.chose_action(current_state,
                                                   possible_actions)

            prev_field, action, new_field, is_done, rewards = env.step(
                chosen_action, fst_agent.player_num)
            fst_reward, snd_reward = rewards

            if is_done:
                fst_agent.learn(fst_reward)
                snd_agent.learn(snd_reward)
                break

            # Second agents turn
            current_state = env.get_state_description(env.field)
import numpy as np
import torch
import torch.optim as optim

from agent.Agent import Agent
from environment.Environment import Environment
from policy.Policy import Policy
from utils.utils import plot_training_evolution

learning_rate = 0.01
discount_factor = 0.99
episodes = 5000

env = Environment('LunarLander-v2')
policy: Policy = Policy(env.observation_space(), env.action_space())
optimizer = optim.Adam(policy.parameters(), lr=learning_rate)
agent = Agent(env, policy, optimizer)

for episode in range(episodes):

    agent.run_episode()
    agent.update_policy(discount_factor=discount_factor)

    if episode % 50 == 0:
        print('Episode {}\tAverage reward: {}'.format(
            episode,
            np.array(policy.reward_history[-50:]).mean()))

        if env.is_solved(np.array(policy.reward_history[-50:]).mean()):
            break
Exemple #26
0
 def test_reference(self):
     env = Environment("map_init.txt", "population_init.txt")
     p1 = Player(GamePlayId.P1)
     self.assertEqual(1, 1)
Exemple #27
0
def extend_environment(environment: Environment) -> None:
    """Load variable from real environment."""
    os_vars = os.environ
    for key, value in os_vars.items():
        environment.set(key, value)
Exemple #28
0
import torch

from environment.Environment import Environment
from policy.Policy import Policy

env = Environment('LunarLander-v2')

policy: Policy = Policy(env.observation_space(), env.action_space())
policy.load_state_dict(torch.load('saved_policy/policy.pt'))
policy.eval()

for episode in range(500):
    state = env.reset()
    done = False

    for time in range(1000):
        action = policy.select_action(state)
        state, reward, done, _ = env.step(action)
        env.render()

        if done:
            break

    env.close()
Exemple #29
0
 def setUp(self) -> None:
     self.environment = Environment()
     self.input_stream = io.StringIO()
     self.output_stream = io.StringIO()
Exemple #30
0
class SubstitutionTest(unittest.TestCase):
    def setUp(self) -> None:
        self.parser = SubstitutionParser()
        self.env = Environment()

    def testSubstitution(self):
        self.env.set('x', 'x_value')
        res = self.parser.parse(self.env, '$x')
        self.assertEqual('x_value', res)

    def testSubstitutionInSingleQuotes(self):
        self.env.set('x', 'x_value')
        res = self.parser.parse(self.env, "'$x'")
        self.assertEqual("'$x'", res)

    def testSubstitutionInDoubleQuotes(self):
        self.env.set('x', 'x_value')
        res = self.parser.parse(self.env, '"hello $x"')
        self.assertEqual('"hello x_value"', res)

    def testSubstitutionInDoubleAndSingleQuotes(self):
        self.env.set('x', 'x_value')
        res = self.parser.parse(self.env, '"\'hello $x\'"')
        self.assertEqual('"\'hello x_value\'"', res)

    def testExit(self):
        self.env.set('x', 'ex')
        self.env.set('y', 'it')
        res = self.parser.parse(self.env, '$x$y')
        self.assertEqual('exit', res)

    @parameterized.expand([
        'echo hello | wc',
        'echo "hello"',
        "echo 'hello'",
        'x=ghj',
        'cat file.txt',
        "cat '$x'",
        "cat '\"$x\"'",
        'echo      hello',
        'echo \t hello     \t',
        '   ',
        '',
    ])
    def testWithoutSubstitution(self, string):
        res = self.parser.parse(self.env, string)
        self.assertEqual(string, res)

    @parameterized.expand([
        ('illegal var name', '$67', 1),
        ('wrong quotes', 'echo \'hello"', 5),
        ('wrong quotes', "echo 'hello", 5),
    ])
    def testUnexpectedCharacter(self, _, input_string, position):
        try:
            self.parser.parse(self.env, input_string)
        except ShellException as e:
            self.assertEqual(
                '[Substitution]Unexpected characters at position %d' %
                position, e.error)
            return
        assert False

    @parameterized.expand([
        ('wrong quotes', 'echo "hello'),
        ('wrong quotes', 'echo "hello\''),
    ])
    def testParseError(self, _, input_string):
        try:
            self.parser.parse(self.env, input_string)
        except ShellException as e:
            self.assertEqual('[Substitution]Parse error', e.error)
            return
        assert False
Exemple #31
0
 def setUp(self) -> None:
     self.env = Environment()