Esempio n. 1
0
    def registerInitialState(self, gameState):
        """
    This method handles the initial setup of the
    agent to populate useful fields (such as what team
    we're on).

    A distanceCalculator instance caches the maze distances
    between each pair of positions, so your agents can use:
    self.distancer.getDistance(p1, p2)

    IMPORTANT: This method may run for at most 15 seconds.
    """
        '''
    Make sure you do not delete the following line. If you would like to
    use Manhattan distances instead of maze distances in order to save
    on initialization time, please take a look at
    CaptureAgent.registerInitialState in captureAgents.py.
    '''
        self.start = gameState.getAgentPosition(self.index)
        self.team = CaptureAgent.getTeam(self, gameState)
        self.food = CaptureAgent.getFood(self, gameState)
        self.foodDefending = CaptureAgent.getFoodYouAreDefending(
            self, gameState)
        self.opponents = CaptureAgent.getOpponents(self, gameState)
        print("Start: ", self.start, "Team: ", self.team, "Food: ", self.food,
              "Food Defending:", self.foodDefending, "Opponent: ",
              self.opponents)
        CaptureAgent.registerInitialState(self, gameState)
        '''
Esempio n. 2
0
 def registerInitialState(self, gameState):
     CaptureAgent.registerInitialState(self, gameState)
     self.myAgents = CaptureAgent.getTeam(self, gameState)
     self.opponentsAgents = CaptureAgent.getOpponents(self, gameState)
     self.myFoods = CaptureAgent.getFood(self, gameState).asList()
     self.opponentsFoods = CaptureAgent.getFoodYouAreDefending(
         self, gameState).asList()
    def getFoodCentroid(self, gameState):
        """ 
    This function searches the friendly team's half and calculates 
    the geometric mean of food items.
    """

        matrix = CaptureAgent.getFoodYouAreDefending(self, gameState)
        #Gets all the food we are currently defending

        food_row = [0] * 16
        food_row = np.array(food_row)
        centroid_row = 0
        food_col = [0] * 16
        food_col = np.array(food_col)
        centroid_col = 0
        num_food = 0
        #Creates an array of 16 rows and columns representing our side

        if (self.red):
            for x in range(16):
                food_col[x] = 0
                for y in range(16):
                    #If the position on our side contains food, add to the column counter
                    if (matrix[x][y] == True):
                        food_col[x] = food_col[x] + 1
                centroid_col += food_col[x] * x
            for y in range(16):
                food_row[y] = 0
                for x in range(16):
                    #If the position on our side contrains foor, add to the row counter
                    if (matrix[x][y] == True):
                        num_food += 1
                        food_row[y] = food_row[y] + 1
                centroid_row += food_row[y] * y
            #Calculate the centroid of the food based on the frequency of the food in rows and columns
            position = int(round(centroid_col / num_food)), int(
                round(centroid_row / num_food))
        else:
            #The same logic, but for blue. Everything else is similar but there are offsets for the blue side.
            for x in range(16):
                food_col[x] = 0
                for y in range(16):
                    if (matrix[x + 16][y] == True):
                        food_col[x] = food_col[x] + 1
                centroid_col += food_col[x] * x
            for y in range(16):
                food_row[y] = 0
                for x in range(16):
                    if (matrix[x + 16][y] == True):
                        num_food += 1
                        food_row[y] = food_row[y] + 1
                centroid_row += food_row[y] * y
            position = int(round(centroid_col / num_food)) + 16, int(
                round(centroid_row / num_food))
        return position
Esempio n. 4
0
	def registerInitialState(self, gameState):
		"""
		This method handles the initial setup of the
		agent to populate useful fields (such as what team
		we're on).
		"""

		CaptureAgent.registerInitialState(self, gameState)
		self.myAgents = CaptureAgent.getTeam(self, gameState)
		self.opAgents = CaptureAgent.getOpponents(self, gameState)
		self.myFoods = CaptureAgent.getFood(self, gameState).asList()
		self.opFoods = CaptureAgent.getFoodYouAreDefending(self, gameState).asList()
    def getFoodCentroid(self, gameState):
        """ 
    This function searches the friendly team's half and calculates 
    the geometric mean of food items.
    """

        matrix = CaptureAgent.getFoodYouAreDefending(self, gameState)

        food_row = [0] * 16
        food_row = np.array(food_row)
        centroid_row = 0
        food_col = [0] * 16
        food_col = np.array(food_col)
        centroid_col = 0
        num_food = 0
        if (self.red):
            for x in range(16):
                food_col[x] = 0
                for y in range(16):
                    if (matrix[x][y] == True):
                        food_col[x] = food_col[x] + 1
                centroid_col += food_col[x] * x
            for y in range(16):
                food_row[y] = 0
                for x in range(16):
                    if (matrix[x][y] == True):
                        num_food += 1
                        food_row[y] = food_row[y] + 1
                centroid_row += food_row[y] * y
            position = int(round(centroid_col / num_food)), int(
                round(centroid_row / num_food))
        else:
            for x in range(16):
                food_col[x] = 0
                for y in range(16):
                    if (matrix[x + 16][y] == True):
                        food_col[x] = food_col[x] + 1
                centroid_col += food_col[x] * x
            for y in range(16):
                food_row[y] = 0
                for x in range(16):
                    if (matrix[x + 16][y] == True):
                        num_food += 1
                        food_row[y] = food_row[y] + 1
                centroid_row += food_row[y] * y
            position = int(round(centroid_col / num_food)) + 16, int(
                round(centroid_row / num_food))
        return position
Esempio n. 6
0
    def get_distances_to_food_factor(self, agent_position, agent_index,
                                     enemy_team):
        if (enemy_team):
            food = CaptureAgent.getFoodYouAreDefending(self.root_agent_object,
                                                       self.node_state)
        else:
            food = CaptureAgent.getFood(self.root_agent_object,
                                        self.node_state)

        distances = []

        blue_capsule = (-1, -1)
        red_capsule = (-1, -1)

        for c in self.node_state.data.capsules:
            if c[0] > self.node_state.data.layout.width / 2:
                blue_capsule = c
            else:
                red_capsule = c

        blue_side = agent_index % 2
        if blue_side:
            our_capsule = red_capsule
        else:
            our_capsule = blue_capsule

        for i in range(0, food.width):
            for j in range(0, food.height):
                if food.data[i][j] or our_capsule == (i, j):
                    distance = CaptureAgent.getMazeDistance(
                        self.root_agent_object, agent_position, (i, j))
                    distances.append(distance)

        if (len(distances) == 0): return 1

        #distance_to_food_factor = sum(distances) / float(len(distances))
        distance_to_food_factor = min(distances)
        if (distance_to_food_factor == 0):
            distance_to_food_factor = 1

        distance_to_food_factor = 1 / distance_to_food_factor
        distance_to_food_factor = distance_to_food_factor * 1

        return distance_to_food_factor
Esempio n. 7
0
	def registerInitialState(self, gameState):
		CaptureAgent.registerInitialState(self, gameState)
		self.init = gameState.getAgentState(self.index).getPosition()
		self.epsilon = 0.0#exploration prob
		self.alpha = 0.1 #learning rate
		self.discountRate = 0.8
		self.dangeFood = []
		self.mode = 1
		self.weights1 = {'closest-food': 2.35219445732408, 'bias': 2.579502234147277, 'closest-capsule': 2.473714473123398}
		self.weights2 = {'closest-food': 1.02910769618005556, 'bias': -6.112936837778204, 'closest-ghosts': -10.11587156566253, 'closest-capsule': 1.257363246901937, 'num-of-walls': -10.4903928122119086, 'time-of-scared-ghosts': 1.6265815562445105, 'reverse': -2.732599631268455}
		self.weights3 = {'bias': -0.1619191782335229, 'closest-ghosts': -18.645334316865307, 'num-of-walls': -10.45335435502801, 'distance-back-to-home': 2.0996715469522775, 'time-of-scared-ghosts': 0.7966612961334337, 'reverse': -2.732599631268455,'closest-capsule': 4.523232232232323}										
		self.weights4 = {'bias': 6.802602309336149, 'distance-back-to-home': 12.7541385540534}
		self.finish = False
		self.myAgents = CaptureAgent.getTeam(self, gameState)
		self.opAgents = CaptureAgent.getOpponents(self, gameState)
		self.myFoods = CaptureAgent.getFood(self, gameState).asList()
		self.opFoods = CaptureAgent.getFoodYouAreDefending(self, gameState).asList()
		self.lostFoods = []
		self.gamescore = 0

		self.midWidth = gameState.data.layout.width / 2
		self.height = gameState.data.layout.height
		self.width = gameState.data.layout.width
		self.midHeight = gameState.data.layout.height / 2