예제 #1
0
    def order(self, observations: Observations, step_index: int)-> Order:
        if observations.last():
            self.qlearn.learn(str(self.previous_state), self.previous_action, observations.reward(), 'terminal')
            QLearningTableStorage().save(self.qlearn, self.agent_name)

            self.previous_action = None
            self.previous_state = None
            self.previous_order = None

            return NoOrder()

        elif observations.first():
            self.location = Location(observations)
            self.smart_actions = SmartActions(self.location)
            self.qlearn = QLearningTable(actions=list(range(len(self.smart_actions.all()))))
            QLearningTableStorage().load(self.qlearn, self.agent_name)
            self.control_group_order = PrepareSCVControlGroupsOrder(self.location)

        if not self.control_group_order.done(observations):
            return self.control_group_order

        elif not self.previous_order or self.previous_order.done(observations):

            current_state = StateBuilder().build_state(self.location, observations)

            if self.previous_action is not None:
                self.qlearn.learn(str(self.previous_state), self.previous_action, 0, str(current_state))

            rl_action = self.qlearn.choose_action(str(current_state))

            self.previous_state = current_state
            self.previous_action = rl_action
            self.previous_order = self.smart_actions.order(rl_action)

        return self.previous_order
예제 #2
0
 def step(self, obs):
     super(SCVControlGroupsAgent, self).step(obs)
     observations = Observations(obs)
     if observations.first():
         self.base_location = Location(observations)
         self.order = PrepareSCVControlGroupsOrder(self.base_location)
     print(observations.control_groups())
     return self.order.execute(observations)
예제 #3
0
 def step(self, obs):
     super(ScoutingAgent, self).step(obs)
     observations = Observations(obs)
     if observations.first():
         base_location = Location(observations)
         self.commander = ScoutingCommander(base_location,
                                            self.infinite_scouting)
     return self.commander.order(observations,
                                 self.steps).execute(observations)
예제 #4
0
 def order(self, observations: Observations, step_index: int) -> Order:
     if observations.first():
         self.current_order = self.current_commander.order(observations)
     elif self.current_order.done(observations):
         if self.current_commander == self.scout_commander:
             self.current_commander = self.production_commander
         elif self.current_commander == self.production_commander:
             self.current_commander = self.army_commander
         elif self.current_commander == self.army_commander:
             self.current_commander = self.scout_commander
         self.current_order = self.current_commander.order(observations)
     #print(self.current_order)
     return self.current_order
예제 #5
0
    def step(self, obs):
        super(ReinforcementMarineAgent, self).step(obs)
        observations = Observations(obs)
        if observations.first():
            self.commander = QLearningCommander(self.name())
        elif observations.last():
            game_results = GameResultsTable(self.name())
            game_info = FinishedGameInformationDetails(self.steps, "unknown")
            game_results.append(observations.reward(),
                                observations.score_cumulative(), game_info)

        return self.commander.order(observations,
                                    self.steps).execute(observations)
예제 #6
0
 def step(self, obs):
     super(BuildOrderAgent, self).step(obs)
     observations = Observations(obs)
     if observations.first():
         base_location = Location(observations)
         self.commander = GameCommander(base_location)
     elif observations.last():
         game_results = GameResultsTable(self.name())
         game_info = FinishedGameInformationDetails(self.steps, "unknown")
         game_results.append(observations.reward(),
                             observations.score_cumulative(), game_info)
     if self.debug:
         time.sleep(0.5)
     return self.commander.order(observations,
                                 self.steps).execute(observations)
예제 #7
0
 def step(self, obs):
     super(HybridAttackReinforcementAgent, self).step(obs)
     observations = Observations(obs)
     if observations.first():
         base_location = Location(observations)
         self.enemy_detector = EnemyDetector()
         self.commander = HybridGameCommander(base_location, self.name(),
                                              self.enemy_detector)
     elif observations.last():
         game_results = GameResultsTable(self.name())
         game_info = FinishedGameInformationDetails(
             self.steps, self.enemy_detector.race())
         game_results.append(observations.reward(),
                             observations.score_cumulative(), game_info)
     return self.commander.order(observations,
                                 self.steps).execute(observations)
예제 #8
0
 def step(self, obs):
     super(SCVHarvesterAgent, self).step(obs)
     observations = Observations(obs)
     if observations.first():
         self.base_location = Location(observations)
         self.control_group_order = PrepareSCVControlGroupsOrder(
             self.base_location)
         self.order_first_refinery = BuildRefinery(self.base_location, 1)
         self.order_second_refinery = BuildRefinery(self.base_location, 2)
         self.fill_refinery_one_order = FillRefineryOnceBuilt(
             self.base_location, 1)
         self.fill_refinery_second_order = FillRefineryOnceBuilt(
             self.base_location, 2)
         self.train_scv_order = BuildSCV(self.base_location)
     if not self.control_group_order.done(observations):
         action = self.control_group_order.execute(observations)
     elif not self.order_first_refinery.done(observations):
         action = self.order_first_refinery.execute(observations)
     elif not self.order_second_refinery.done(observations):
         action = self.order_second_refinery.execute(observations)
     elif self.fill_refinery_one_order.doable(
             observations
     ) and not self.fill_refinery_one_order.done(observations):
         action = self.fill_refinery_one_order.execute(observations)
     elif self.fill_refinery_second_order.doable(
             observations
     ) and not self.fill_refinery_second_order.done(observations):
         action = self.fill_refinery_second_order.execute(observations)
     elif self.train_scv_order.doable(
             observations) and not self.train_scv_order.done(observations):
         action = self.train_scv_order.execute(observations)
     elif self.train_scv_order.doable(
             observations) and self.train_scv_order.done(observations):
         self.train_scv_order = BuildSCV(self.base_location)
         action = self.train_scv_order.execute(observations)
     else:
         action = NoOrder().execute(observations)
     if self.debug:
         time.sleep(0.5)
     return action