Changeset 6760 for branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
- Timestamp:
- 09/14/11 13:59:25 (13 years ago)
- Location:
- branches/PersistenceSpeedUp
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PersistenceSpeedUp
- Property svn:ignore
-
old new 12 12 *.psess 13 13 *.vsp 14 *.docstates
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting
- Property svn:mergeinfo changed
-
branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
r5445 r6760 49 49 50 50 private bool FindBetterInsertionPlace( 51 PotvinEncoding individual, int tour, int city, int length, 51 PotvinEncoding individual, 52 DoubleArray dueTime, DoubleArray readyTime, DoubleArray serviceTime, DoubleArray demand, 53 DoubleValue capacity, DistanceMatrix distMatrix, 54 int tour, int city, int length, 52 55 out int insertionTour, out int insertionPlace) { 53 56 bool insertionFound = false; … … 56 59 57 60 List<int> toBeDeleted = individual.Tours[tour].Cities.GetRange(city, length); 58 double distance = GetLength(individual.Tours[tour]);61 double distance = individual.Tours[tour].GetLength(distMatrix); 59 62 individual.Tours[tour].Cities.RemoveRange(city, length); 60 double removalBenefit = distance - GetLength(individual.Tours[tour]);63 double removalBenefit = distance - individual.Tours[tour].GetLength(distMatrix); 61 64 62 65 int currentTour = 0; … … 64 67 int currentCity = 0; 65 68 while (currentCity <= individual.Tours[currentTour].Cities.Count && !insertionFound) { 66 distance = GetLength(individual.Tours[currentTour]);69 distance = individual.Tours[currentTour].GetLength(distMatrix); 67 70 individual.Tours[currentTour].Cities.InsertRange(currentCity, toBeDeleted); 68 if ( Feasible(individual.Tours[currentTour])) {71 if (individual.Tours[currentTour].Feasible(dueTime, serviceTime, readyTime, demand, capacity, distMatrix)) { 69 72 double lengthIncrease = 70 GetLength(individual.Tours[currentTour]) - distance;73 individual.Tours[currentTour].GetLength(distMatrix) - distance; 71 74 if (removalBenefit > lengthIncrease) { 72 75 insertionTour = currentTour; … … 83 86 } 84 87 85 individual.Tours[tour].Cities.InsertRange(city, toBeDeleted); 88 individual.Tours[tour].Cities.InsertRange(city, toBeDeleted); 86 89 87 90 return insertionFound; … … 89 92 90 93 protected override void Manipulate(IRandom random, PotvinEncoding individual) { 94 BoolValue useDistanceMatrix = UseDistanceMatrixParameter.ActualValue; 95 DoubleMatrix coordinates = CoordinatesParameter.ActualValue; 96 DistanceMatrix distMatrix = VRPUtilities.GetDistanceMatrix(coordinates, DistanceMatrixParameter, useDistanceMatrix); 97 DoubleArray dueTime = DueTimeParameter.ActualValue; 98 DoubleArray readyTime = ReadyTimeParameter.ActualValue; 99 DoubleArray serviceTime = ServiceTimeParameter.ActualValue; 100 DoubleArray demand = DemandParameter.ActualValue; 101 DoubleValue capacity = CapacityParameter.ActualValue; 102 91 103 //only apply to feasible individuals 92 if (Feasible(individual)) { 104 bool feasible = true; 105 106 foreach (Tour tour in individual.Tours) { 107 if (!tour.Feasible(dueTime, serviceTime, readyTime, demand, capacity, distMatrix)) { 108 feasible = false; 109 break; 110 } 111 } 112 113 if (feasible) { 93 114 bool insertionFound; 94 115 int iterations = 0; … … 103 124 while (city <= individual.Tours[tour].Cities.Count - length && !insertionFound) { 104 125 int insertionTour, insertionPlace; 105 if (FindBetterInsertionPlace(individual, tour, city, length, 126 if (FindBetterInsertionPlace(individual, dueTime, readyTime, serviceTime, demand, capacity, distMatrix, 127 tour, city, length, 106 128 out insertionTour, out insertionPlace)) { 107 129 insertionFound = true;
Note: See TracChangeset
for help on using the changeset viewer.