def test_smoke_bad_parameters_settings(self):
     params = {'class': 'some.class', 'parameters': 1}
     with self.assertRaises(Exception) as context:
         createAgent(action_space, None, params)
     self.assertEquals(
         "Parameters must have key 'parameters' containing a dict but got {'class': 'some.class', 'parameters': 1}",
         str(context.exception))
 def test_smoke_no_some_class(self):
     params = {'class': 'some.class', 'id': 'robot1', 'parameters': {}}
     with self.assertRaises(Exception) as context:
         createAgent(action_space, None, params)
     self.assertEquals(
         "Can't load some.class from {'class': 'some.class', 'id': 'robot1', 'parameters': {}}",
         str(context.exception))
 def test_smoke_agents_no_dict(self):
     params = {'class': randomclass, 'parameters': {}, 'subAgentList': 3}
     with self.assertRaises(Exception) as context:
         createAgent(action_space, None, params)
     self.assertEquals(
         "the subAgentList parameter must contain a list, but got {'class': 'aiagents.single.RandomAgent.RandomAgent', 'parameters': {}, 'subAgentList': 3}",
         str(context.exception))
 def test_check_subparty_rootclass_nochildren(self):
     params = {
         'class':
         randomclass,
         'parameters': {},
         'subAgentList': [{
             'class': randomclass,
             'id': 'robot1',
             'parameters': {}
         }]
     }
     with self.assertRaises(Exception) as context:
         createAgent(action_space, None, params)
     self.assertEquals(
         "aiagents.single.RandomAgent.RandomAgent failed on __init__:",
         str(context.exception))
Ejemplo n.º 5
0
    def __init__(self, agentId, action_space, observation_space, parameters: dict): 
        """
        TBA
        """
     #   try:
     #       self._model = parameters["model"] # model is a dictionary states to actions
     #   except KeyError:
        try:
            with open(parameters["modelFile"], 'r') as stream:
                try:
                    self._model = yaml.load(stream)
                except yaml.YAMLError as exc:
                    logging.error(exc)
        except FileNotFoundError:
            print("No agent files available yet")
            self._model={}

        backupClassDictionary = {}
        backupClassDictionary["id"]=agentId
        backupClassDictionary["class"]=parameters["backupClass"]
        backupClassDictionary["parameters"]=parameters["backupClassParameters"]
        self._subAgent = createAgent(action_space, observation_space, backupClassDictionary)

        super().__init__(agentId, action_space, observation_space, parameters)

        self.predicts=0
        self.noPredicts=0
Ejemplo n.º 6
0
def main():
    """
    Demo how to run an agent
    """
    dirname = os.path.dirname(__file__)

    if (len(sys.argv) > 1):
        env_configName = str(sys.argv[1])
        agent_configName = str(sys.argv[2])

    else:
        print("Default config ")
        env_configName = "./configs/factory_floor_experiment.yaml"
        env_filename = os.path.join(dirname, env_configName)
        agent_configName = "./configs/agent_combined_config.yaml"
        agent_filename = os.path.join(dirname, agent_configName)

    env_parameters = getParameters(env_filename)
    agent_parameters = getParameters(agent_filename)

    # whao, you need to know exact contents of all files here..
    recursive_update(
        agent_parameters['subAgentList'][0]['parameters']['simulator'],
        env_parameters['environment'])

    print(env_parameters)
    print(agent_parameters)

    random.seed(env_parameters['seed'])
    maxSteps = env_parameters['max_steps']
    baseEnv = FactoryFloor(env_parameters['environment'])
    packedActionSpace = PackedSpace(baseEnv.action_space,
                                    {"robots": ["robot1", "robot2", "robot3"]})
    env = ModifiedGymEnv(baseEnv, packedActionSpace)

    logging.info("Starting example MCTS agent")
    logoutput = io.StringIO("episode output log")

    try:
        logoutputpickle = open('./' + os.environ["SLURM_JOB_ID"] + '.pickle',
                               'wb')
    except KeyError:
        print("No SLURM_JOB_ID found")
        logoutputpickle = io.BytesIO()

    obs = env.reset()
    complexAgent = createAgent(env.action_space, env.observation_space,
                               agent_parameters)

    experiment = Experiment(complexAgent, env, maxSteps, render=True)
    experiment.addListener(JsonLogger(logoutput))
    experiment.addListener(PickleLogger(logoutputpickle))
    stats, confidence_ints = experiment.run()
    logoutputpickle.close()

    print("json output:", logoutput.getvalue())

    print("\n\nREWARD STATS: " + str(stats) + " \nCONFIDENCE INTERVALS " +
          str(confidence_ints))
Ejemplo n.º 7
0
    def test_smoke(self):
        actions = Mock(spec=Discrete)
        actions.n = 10
        env = Mock()
        actspace = Mock(spec=Dict)
        spacesmock = { 'entity1':actions}
        actspace.spaces = spacesmock
        env.action_space = actspace

        agent = createAgent(actspace, None, {'id': 'entity1',
                                  'class':'aiagents.single.RandomAgent.RandomAgent',
                                  'parameters':{}})
 def test_check_subparty(self):
     params = {
         'class':
         compoundclass,
         'parameters': {},
         'subAgentList': [{
             'class': randomclass,
             'id': 'robot1',
             'parameters': {}
         }]
     }
     agt = createAgent(action_space, None, params)
     subs = agt._agentSubcomponents
     self.assertEquals(1, len(subs))
     self.assertEquals('RandomAgent', type(subs[0]).__name__)
Ejemplo n.º 9
0
 def test_is_good_agent(self):
     actions = Mock(spec=Discrete)
     actions.n = 10
     env = Mock()
     actspace = Mock(spec=Dict)
     spacesmock = { 'entity1':actions}
     actspace.spaces = spacesmock
     env.action_space = actspace
     state = Mock()
     
     agent = createAgent(actspace , None, {'id': 'entity1',
                               'class':'aiagents.single.RandomAgent.RandomAgent',
                               'parameters':{}})
     action = agent.step(state)
     print('agent did action:' + str(action))
     self.assertTrue(['entity1'], action.keys())
Ejemplo n.º 10
0
    def __init__(self, agentId, action_space, observation_space, parameters: dict): 
        """
        TBA
        """
        try:
            self._model = load_model(parameters["modelFile"])
            self._subAgent = None
        except OSError:
            # for first generation we will start with a "backup class"
            backupClassDictionary = {}
            backupClassDictionary["id"]=agentId
            backupClassDictionary["class"]=parameters["backupClass"]
            backupClassDictionary["parameters"]=parameters["backupClassParameters"]
            self._subAgent = createAgent(action_space, observation_space, backupClassDictionary)
            logging.info("Agent " + str(agentId) + " using backup agent")

        super().__init__(agentId, action_space, observation_space, parameters)
Ejemplo n.º 11
0
def main():
    """
    Demo how to construct complex agents
    """
    configName = "configs/factory_floor_complex.yaml"
    dirname = os.path.dirname(__file__)
    filename = os.path.join(dirname, configName)

    parameters = getParameters(filename)

    env = FactoryFloor(parameters['environment'])
    obs = env.reset()

    complexAgent = createAgent(env.action_space, env.observation_space,
                               parameters['agents'])
    print(complexAgent)
    sub = complexAgent._agentSubcomponents[0]
    subsub = sub._agentSubcomponents
    print(subsub)
 def test_smoke(self):
     params = {'class': randomclass, 'id': 'robot1', 'parameters': {}}
     createAgent(action_space, None, params)
 def test_smoke_no_agents(self):
     params = {}
     with self.assertRaises(Exception) as context:
         createAgent(action_space, None, params)
     self.assertEquals("Parameters must have key 'class' but got {}",
                       str(context.exception))
Ejemplo n.º 14
0
def main():
    """
    MCTS Factory Floor experiment
    """
    dirname = os.path.dirname(__file__)

    parser = configargparse.ArgParser()
    parser.add('-e',
               '--env-config',
               dest="env_filename",
               default=os.path.join(
                   dirname, "./debug_configs/factory_floor_experiment.yaml"))
    parser.add('-a',
               '--agent-config',
               dest="agent_filename",
               default=os.path.join(dirname,
                                    "./debug_configs/agent_config.yaml"))
    parser.add('-d', '--data-dirname', dest="data_dirname", default="data")

    args = parser.parse_args()

    try:
        data_outputdir = os.path.join(
            dirname,
            "./" + args.data_dirname + "/" + os.environ["SLURM_JOB_ID"])
        os.makedirs(data_outputdir)
        logoutputpickle = open('./' + data_outputdir + '/output.pickle', 'wb')
        rewardsFile = open('./' + data_outputdir + '/rewards.yaml', 'w+')
    except KeyError:
        print("No SLURM_JOB_ID found")
        logoutputpickle = io.BytesIO()
        rewardsFile = io.StringIO()

    env_parameters = getParameters(args.env_filename)
    agent_parameters = getParameters(args.agent_filename)

    print(env_parameters)
    print(agent_parameters)
    for subAgent in agent_parameters["subAgentList"]:
        subAgent["parameters"]["simulator"] = env_parameters["environment"]
        subAgent["parameters"]["simulator"][
            "fullname"] = "aienvs.FactoryFloor.FactoryFloor.FactoryFloor"

    random.seed(env_parameters['seed'])
    maxSteps = env_parameters['max_steps']
    env = FactoryFloor(env_parameters['environment'])

    logging.info("Starting example MCTS agent")
    logoutput = io.StringIO("episode output log")

    obs = env.reset()

    complexAgent = createAgent(env.action_space, env.observation_space,
                               agent_parameters)

    experiment = Experiment(complexAgent, env, maxSteps, render=False)
    experiment.addListener(JsonLogger(logoutput))
    experiment.addListener(PickleLogger(logoutputpickle))
    rewards = experiment.run()
    #   statistics, confidence_ints = stats.describe(rewards), stats.bayes_mvs(rewards)
    logoutputpickle.close()

    yaml.dump(rewards, rewardsFile)
    rewardsFile.close()

    print("json output:", logoutput.getvalue())
    print("\n\nREWARD STATS: " + str(statistics) + " \nCONFIDENCE INTERVALS " +
          str(confidence_ints))
Ejemplo n.º 15
0
    def __init__(self, agentId, actionspace: Dict, observationspace,
                 parameters: dict):
        """
        @param parameters dict that must contain keys 'otherAgents', 'treeAgent' and 'rolloutAgent'
        'otherAgents' must map to a (possibly empty) list of dict objects for a call to createAgents
        'treeAgent' and 'rolloutAgent' must map to a dict object for a call to createAgent.
        The dict must also contain a 'simulator' key containing a copy of the env parameters,
        so that the agent can create a duplicate environment. The simulator dict must contain
        a key 'fullname' containing the full name of the environment
        for the class loader (se EnvironmentsFactory).
        """
        super().__init__(agentId, actionspace, observationspace, parameters)
        if not ('treeAgent' in parameters and 'rolloutAgent' in parameters):
            raise "parameters does not contain 'treeAgent', 'rolloutAgent':" + str(
                parameters)
        self._parameters = copy.deepcopy(self.DEFAULT_PARAMETERS)
        self._parameters = recursive_update(self._parameters, parameters)

        if 'timeLimit' in self._parameters:
            if 'iterationLimit' in self._parameters:
                raise ValueError(
                    "Cannot have both a time limit and an iteration limit")
            self._limitType = 'time'
        else:
            if 'iterationLimit' not in self._parameters:
                DEFAULT_LIMIT = 1000
                logging.error(
                    "Must have either a time limit or an iteration limit. Using default iteration limit: "
                    + str(DEFAULT_LIMIT))
                self._parameters['iterationLimit'] = DEFAULT_LIMIT
            # number of iterations of the search
            if self._parameters['iterationLimit'] < 1:
                raise ValueError("Iteration limit must be greater than one")
            self._limitType = 'iterations'

        # start the simulator environment
        envparams = self._parameters['simulator']
        e = EnvironmentFactory.createEnvironment(envparams['fullname'],
                                                 envparams)
        self._simulator = ModifiedGymEnv(
            e, DecoratedSpace.create(copy.deepcopy(e.action_space)))

        # diyBonus logic: to refactor -- include in a simulator factory / only for FactoryFloor env
        diyBonus = self._parameters.get("diyBonus")
        if diyBonus is not None:
            self._simulator = DiyFactoryFloorAdapter(self._simulator, diyBonus,
                                                     self.agentId)

        self._treeAgent = createAgent(self._simulator.action_space,
                                      self._simulator.observation_space,
                                      parameters['treeAgent'])

        if 'otherAgents' in parameters:
            rolloutAgentDict = copy.deepcopy(parameters['otherAgents'])
            rolloutAgentList = rolloutAgentDict['subAgentList']
            rolloutAgentList.append(parameters['rolloutAgent'])
            rolloutAgentDict['subAgentList'] = rolloutAgentList
            self._rolloutAgent = createAgent(self._simulator.action_space,
                                             self._simulator.observation_space,
                                             rolloutAgentDict)
            self._otherAgents = createAgent(self._simulator.action_space,
                                            self._simulator.observation_space,
                                            parameters['otherAgents'])
        else:
            self._otherAgents = None
            self._rolloutAgent = createAgent(self._simulator.action_space,
                                             self._simulator.observation_space,
                                             parameters['rolloutAgent'])