Changeset 14677 for branches/OptimizationNetworks/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs
- Timestamp:
- 02/16/17 15:16:55 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/OptimizationNetworks/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs
r14185 r14677 46 46 47 47 protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) { 48 TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));49 eval.InsertionInfo.AddTourInsertionInfo(tourInfo); 48 var cvrpInstance = (IHomogenousCapacitatedProblemInstance)instance; 49 50 50 double originalQuality = eval.Quality; 51 51 52 IHomogenousCapacitatedProblemInstance cvrpInstance = instance as IHomogenousCapacitatedProblemInstance;53 52 DoubleArray demand = instance.Demand; 54 53 55 ITimeWindowedProblemInstance vrptw = instance as ITimeWindowedProblemInstance;54 var vrptw = (ITimeWindowedProblemInstance)instance; 56 55 DoubleArray dueTime = vrptw.DueTime; 57 56 DoubleArray readyTime = vrptw.ReadyTime; … … 67 66 68 67 double capacity = cvrpInstance.Capacity.Value; 69 for (int i = 0; i <= tour.Stops.Count; i++) { 70 int end = 0; 71 if (i < tour.Stops.Count) 72 end = tour.Stops[i]; 73 74 delivered += demand[end]; 75 } 76 77 double spareCapacity = capacity - delivered; 78 68 79 69 double tourStartTime = readyTime[0]; 80 70 time = tourStartTime; 71 72 var tourInfo = new CVRPTWTourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)), cvrpInstance.Capacity.Value, tourStartTime); 73 eval.InsertionInfo.AddTourInsertionInfo(tourInfo); 81 74 82 75 //simulate a tour, start and end at depot … … 90 83 91 84 //drive there 92 double currentDistace = vrptw.GetDistance(start, end, solution); 93 time += currentDistace; 94 distance += currentDistace; 85 double currentDistance = vrptw.GetDistance(start, end, solution); 86 time += currentDistance; 87 distance += currentDistance; 88 delivered += demand[end]; 95 89 96 90 double arrivalTime = time; … … 117 111 time += currentServiceTime; 118 112 119 CVRPTWInsertionInfo stopInfo = new CVRPTWInsertionInfo(start, end, spareCapacity, tourStartTime, arrivalTime, time, spareTime, waitTime);113 var stopInfo = new CVRPTWStopInsertionInfo(start, end, currentDistance, capacity - delivered, arrivalTime, time, spareTime, waitTime); 120 114 tourInfo.AddStopInsertionInfo(stopInfo); 121 115 } … … 130 124 } 131 125 132 ( eval as CVRPEvaluation).Overload += overweight;126 ((CVRPEvaluation)eval).Overload += overweight; 133 127 double tourPenalty = 0; 134 128 double penalty = overweight * cvrpInstance.OverloadPenalty.Value; … … 151 145 protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer, 152 146 out bool feasible) { 153 CVRPTWInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPTWInsertionInfo; 147 var tourInfo = (CVRPTWTourInsertionInfo)tourInsertionInfo; 148 var insertionInfo = (CVRPTWStopInsertionInfo)tourInsertionInfo.GetStopInsertionInfo(index); 154 149 155 150 double costs = 0; 156 151 feasible = tourInsertionInfo.Penalty < double.Epsilon; 157 152 158 ICapacitatedProblemInstance cvrp = instance as ICapacitatedProblemInstance;153 var cvrp = (ICapacitatedProblemInstance)instance; 159 154 double overloadPenalty = cvrp.OverloadPenalty.Value; 160 155 161 ITimeWindowedProblemInstance vrptw = instance as ITimeWindowedProblemInstance;156 var vrptw = (ITimeWindowedProblemInstance)instance; 162 157 DoubleArray dueTime = vrptw.DueTime; 163 158 DoubleArray readyTime = vrptw.ReadyTime; … … 172 167 173 168 double demand = instance.Demand[customer]; 174 if (demand > insertionInfo.SpareCapacity) {169 if (demand > tourInfo.SpareCapacity) { 175 170 feasible = false; 176 if ( insertionInfo.SpareCapacity >= 0)177 costs += (demand - insertionInfo.SpareCapacity) * overloadPenalty;171 if (tourInfo.SpareCapacity >= 0) 172 costs += (demand - tourInfo.SpareCapacity) * overloadPenalty; 178 173 else 179 174 costs += demand * overloadPenalty; … … 184 179 185 180 if (index > 0) 186 time = ( tourInsertionInfo.GetStopInsertionInfo(index - 1) as CVRPTWInsertionInfo).LeaveTime;181 time = ((CVRPTWStopInsertionInfo)tourInsertionInfo.GetStopInsertionInfo(index - 1)).LeaveTime; 187 182 else 188 time = insertionInfo.TourStartTime;183 time = tourInfo.TourStartTime; 189 184 190 185 time += instance.GetDistance(insertionInfo.Start, customer, solution); … … 197 192 time += instance.GetDistance(customer, insertionInfo.End, solution); 198 193 199 double additionalTime = time - ( tourInsertionInfo.GetStopInsertionInfo(index) as CVRPTWInsertionInfo).ArrivalTime;194 double additionalTime = time - ((CVRPTWStopInsertionInfo)tourInsertionInfo.GetStopInsertionInfo(index)).ArrivalTime; 200 195 for (int i = index; i < tourInsertionInfo.GetStopCount(); i++) { 201 CVRPTWInsertionInfo nextStop = tourInsertionInfo.GetStopInsertionInfo(i) as CVRPTWInsertionInfo;196 var nextStop = (CVRPTWStopInsertionInfo)tourInsertionInfo.GetStopInsertionInfo(i); 202 197 203 198 if (additionalTime < 0) { … … 254 249 base.SetResultParameters(tourEvaluation); 255 250 256 TardinessParameter.ActualValue.Value = ( tourEvaluation as CVRPTWEvaluation).Tardiness;257 TravelTimeParameter.ActualValue.Value = ( tourEvaluation as CVRPTWEvaluation).TravelTime;251 TardinessParameter.ActualValue.Value = ((CVRPTWEvaluation)tourEvaluation).Tardiness; 252 TravelTimeParameter.ActualValue.Value = ((CVRPTWEvaluation)tourEvaluation).TravelTime; 258 253 } 259 254
Note: See TracChangeset
for help on using the changeset viewer.