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]
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]
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)
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
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
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
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
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]
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]
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]
def tripDistance(brain, start, dest): """ Return shortest path distance between start and dest """ return len(simpleAStar.calculatePath(brain.gameMap, start, dest))
def distanceCalc(self, from_pos, to_pos): path = simpleAStar.calculatePath(self.gameMap, from_pos, to_pos) pathlen = len(path) - 1 return pathlen
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
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
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