Пример #1
0
 def algorithm(self):
     self.routingDay = self.initRoutingDay()
     for pair, saving in self.savings:
         trip1 = self.routingDay.tripContainingRequest(pair[0], True)
         trip2 = self.routingDay.tripContainingRequest(pair[1], True)
         if trip1 and trip2:
             if not trip1.equals(trip2):
                 newTrip = Trip(self.instance)
                 newTrip.concatenateTrips(trip2, trip1, pair)
                 if newTrip.isValid():
                     validChange = True
                     benefit = True
                     for toolID, tool in self.instance.tools.items():
                         if self.inventory[toolID] < 0:
                             benefit = False
                     newInventory = newTrip.inventoryChange()
                     inventory1 = trip1.inventoryChange()
                     inventory2 = trip2.inventoryChange()
                     for toolID, tool in self.instance.tools.items():
                         change = newInventory[toolID] - inventory1[
                             toolID] - inventory2[toolID]
                         if change < 0 and self.inventory[
                                 toolID] + change < 0:
                             validChange = False
                             break
                         if self.inventory[toolID] < 0 and change > 0:
                             benefit = True
                     if validChange and benefit:
                         self.routingDay.addTrip(newTrip)
                         self.routingDay.deleteTrip(trip1)
                         self.routingDay.deleteTrip(trip2)
                         for toolID, tool in self.instance.tools.items():
                             change = newInventory[toolID] - inventory1[
                                 toolID] - inventory2[toolID]
                             self.inventory[
                                 toolID] = self.inventory[toolID] + change