예제 #1
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateMovePassengerScore(brain):
    global targetMovePassenger

    K = 1 # TODO: mess with this

    passengerScores = []
    for company in brain.companies:
        if company.passengers is None or len(company.passengers) == 0:
            continue

        oppDistScore = 0
        for player in brain.players:
            if player == brain.me:
                continue
            oppDistScore += len(calculatePath(brain.gameMap, player.limo.tilePosition, player.limo.passenger.destination.busStop))
        oppDistScore /= 9

        myDistScore = len(calculatePath(brain.gameMap, brain.me.limo.tilePosition, brain.me.limo.passenger.destination.busStop))

        distScore = K/oppDistScore - K/myDistScore

        for passenger in company.passenger:
            passengerScores.add((passenger.pointsDelivered * distScore, passenger.name))

    passengerScores.sort()
    targetMovePassenger = passengerScores[-1][1]
    return passengerScores[-1][0]
예제 #2
0
    def allPickupCosts (self, me, passengers):
        pickup = [p for p in passengers if (not p in me.passengersDelivered and
                                            p != me.limo.passenger and
                                            p.car is None and
                                            p.lobby is not None and p.destination is not None)]

        # eliminate passengers someone else will get first
        pickup=[p for p in pickup if not self.isOthersPriority(p)]

        passengerCosts=[]
        for passenger in pickup:
            distToPassenger=len(simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, passenger.lobby.busStop))
            distToDest=len(simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, passenger.destination.busStop))
            cost=( distToPassenger + distToDest) / passenger.pointsDelivered
            '''
            for enemy in passenger.enemies:
                if enemy in passenger.destination.passengers:
                    #GFTO
                    print ("enemy at destination for passenger: ", passenger)
                    cost += 20
            '''
            passengerCosts.append((passenger,cost))

        # sort
        passengerCosts=sorted(passengerCosts,key=lambda x:x[1])

        # returns cost
        return [p[1] for p in passengerCosts]
예제 #3
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateRelocateAllPassengersScore(brain):
    K = 1 # TODO: mess with this

    passengerScores = []
    for company in brain.companies:
        if company.passengers is None or len(company.passengers) == 0:
            continue

        oppDistScore = 0
        for player in brain.players:
            if player == brain.me:
                continue
            oppDistScore += len(calculatePath(brain.gameMap, player.limo.tilePosition, player.limo.passenger.destination.busStop))
        oppDistScore /= 9

        myDistScore = len(calculatePath(brain.gameMap, brain.me.limo.tilePosition, brain.me.limo.passenger.destination.busStop))

        distScore = K/oppDistScore - K/myDistScore

        for passenger in company.passenger:
            passengerScores.add((passenger.pointsDelivered * distScore, passenger.name))

    if len(passengerScores) == 0:
        return 0
    return sum(passengerScores) / len(passengerScores)
예제 #4
0
 def calculateScore(self, passenger):
     pathScore = self.scorePath(
         simpleAStar.calculatePath(self.gameMap, self.me.limo.tilePosition, passenger.lobby.busStop)
     )
     pathScore += self.scorePath(
         simpleAStar.calculatePath(self.gameMap, passenger.lobby.busStop, passenger.destination.busStop)
     )
     passenger.score = passenger.pointsDelivered / float(pathScore)
     if self.enemyAtDestination(passenger):
         passenger.score = 0
예제 #5
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateRelocateAllCarsScore(brain):
	K = 1 # TODO: HALP

	if brain.me.limo.passenger is None:
		myDist = len(calculatePath(brain.gameMap, brain.me.limo.tilePosition, brain.me.pickup[0].lobby.busStop))
		oppDist = 0
		for p in brain.players:
			oppDist += len(calculatePath(brain.gameMap, p.limo.tilePosition , brain.me.pickul[0].lobby.busStop))
		oppDist /= 9

		return K/oppDist - K/myDist

	else:
		return 0
예제 #6
0
 def calculatePathPlus1 (self, me, ptDest):
     path = simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, ptDest)
     # add in leaving the bus stop so it has orders while we get the message
     # saying it got there and are deciding what to do next.
     if len(path) > 1:
         path.append(path[-2])
     return path
예제 #7
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateMultDeliveryQuarterSpeedScore(brain):
    K = 0.1 # TODO: mess with this

    dist = len(calculatePath(brain.gameMap, brain.me.pickup[0].lobby.busStop, brain.me.pickup[0].destination.busStop))
    score = brain.me.pickup[0].pointsDelivered

    return K * score / dist
예제 #8
0
 def calculatePathPlus1 (self, me, ptDest):
     path = simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, ptDest)
     # add in leaving the bus stop so it has orders while we get the message
     # saying it got there and are deciding what to do next.
     if len(path) > 1:
         path.append(path[-2])
     return path
예제 #9
0
    def closestStoreCost(self, me, stores):
        storeCosts=[]
        for store in stores:
            distToStore=len(simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, store.busStop))
            distToNextPickup = self.allPickupCosts(me, self.passengers)[0]
            cost = distToStore + distToNextPickup
            storeCosts.append((store,cost))

        # sort
        storeCosts = sorted(storeCosts, key=lambda x:x[1])

        return storeCosts[0][1]
예제 #10
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateStopCarScore(brain):
    global targetStopCar

    K = 1 # TODO: mess with this

    playerScores = []
    for player in brain.players:
        distScore = len(calculatePath(brain.gameMap, player.limo.tilePosition, brain.me.pickup[0].lobby.busStop))
        playerScores.append((K * player.score * player.pickup[0].pointsDelivered / distScore, player.name))

    playerScores.sort()
    targetStopCar = playerScores[-1][1]
    return playerScores[-1][1]
예제 #11
0
파일: powerups.py 프로젝트: dmrd/windward
def _calculateChangeDestinationScore(brain):
    global targetChangeDestination

    K = 1 # TODO: mess with this

    TOO_CLOSE = 9

    passengerScores = []

    for player in brain.players:
        if player == brain.me or player.limo.passenger is None:
            continue

        dist = len(calculatePath(brain.gameMap, player.limo.tilePosition, player.limo.passenger.destination.busStop))

        if dist < TOO_CLOSE:
            passengerScores.append((0, player.limo.passenger.name))
            continue

        passengerScores.append((K * player.limo.passenger.pointsDelivered / dist, player.limo.passenger.name))

    passengerScores.sort()
    targetChangeDestination = passengerScores[-1][1]
    return passengerScores[-1][0]
예제 #12
0
def tripDistance(brain, start, dest):
    """ Return shortest path distance between start and dest """
    return len(simpleAStar.calculatePath(brain.gameMap, start, dest))
예제 #13
0
 def distanceCalc(self, from_pos, to_pos):
     path = simpleAStar.calculatePath(self.gameMap, from_pos, to_pos)
     pathlen = len(path) - 1
     return pathlen
예제 #14
0
 def isOthersPriority(self, passenger):
     for player in self.players:
         if(player.pickup and passenger is player.pickup[0] and player.limo.passenger is not None):
                 if(len(simpleAStar.calculatePath(self.gameMap, self.me.limo.tilePosition, passenger.lobby.busStop))>(len(simpleAStar.calculatePath(self.gameMap, player.limo.tilePosition, passenger.lobby.busStop))-0)):
                     print ("Someone else would get there first", passenger)
                     return True
예제 #15
0
 def distanceFromUs(p):
     toPassenger = len(simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, p.lobby.busStop))
     toDest = len(simpleAStar.calculatePath(self.gameMap, p.lobby.busStop, p.destination.busStop))
     return toPassenger + toDest
예제 #16
0
 def easierForYou(self, passenger, me, otherAi):
     toPassenger = len(simpleAStar.calculatePath(self.gameMap, me.limo.tilePosition, passenger.lobby.busStop))
     otherAiToPassenger = len(simpleAStar.calculatePath(self.gameMap, otherAi.limo.tilePosition, passenger.lobby.busStop))
     return True if toPassenger < otherAiToPassenger else False