Changeset 6760 for branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.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/Crossovers/PotvinCrossover.cs
r5445 r6760 26 26 using HeuristicLab.Parameters; 27 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 using HeuristicLab.Data; 28 29 29 30 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin { … … 33 34 public ILookupParameter<IRandom> RandomParameter { 34 35 get { return (LookupParameter<IRandom>)Parameters["Random"]; } 36 } 37 38 public IValueParameter<BoolValue> AllowInfeasibleSolutions { 39 get { return (IValueParameter<BoolValue>)Parameters["AllowInfeasibleSolutions"]; } 40 } 41 42 [StorableHook(HookType.AfterDeserialization)] 43 private void AfterDeserialization() { 44 // BackwardsCompatibility3.3 45 #region Backwards compatible code (remove with 3.4) 46 if (!Parameters.ContainsKey("AllowInfeasibleSolutions")) { 47 Parameters.Add(new ValueParameter<BoolValue>("AllowInfeasibleSolutions", "Indicates if infeasible solutions should be allowed.", new BoolValue(false))); 48 } 49 #endregion 35 50 } 36 51 … … 43 58 public PotvinCrossover() { 44 59 Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators.")); 60 Parameters.Add(new ValueParameter<BoolValue>("AllowInfeasibleSolutions", "Indicates if infeasible solutions should be allowed.", new BoolValue(false))); 45 61 } 46 62 47 63 protected abstract PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2); 48 64 49 protected bool FindInsertionPlace(PotvinEncoding individual, int city, out int route, out int place) { 65 protected static bool FindInsertionPlace(PotvinEncoding individual, int city, 66 DoubleArray dueTime, DoubleArray serviceTime, DoubleArray readyTime, DoubleArray demand, 67 DoubleValue capacity, DistanceMatrix distMatrix, bool allowInfeasible, 68 out int route, out int place) { 50 69 return individual.FindInsertionPlace( 51 DueTimeParameter.ActualValue, ServiceTimeParameter.ActualValue, ReadyTimeParameter.ActualValue,52 DemandParameter.ActualValue, CapacityParameter.ActualValue, CoordinatesParameter.ActualValue,53 DistanceMatrixParameter, UseDistanceMatrixParameter.ActualValue,54 city, -1,out route, out place);70 dueTime, serviceTime, readyTime, 71 demand, capacity, distMatrix, 72 city, -1, allowInfeasible, 73 out route, out place); 55 74 } 56 75 … … 68 87 } 69 88 70 protected bool Repair(IRandom random, PotvinEncoding solution, Tour newTour) { 89 protected static bool RouteUnrouted(PotvinEncoding solution, DistanceMatrix distMatrix, 90 DoubleArray dueTime, DoubleArray readyTime, DoubleArray serviceTime, DoubleArray demand, DoubleValue capacity, bool allowInfeasible) { 91 bool success = true; 92 int index = 0; 93 while (index < solution.Unrouted.Count && success) { 94 int unrouted = solution.Unrouted[index]; 95 96 int route, place; 97 if (FindInsertionPlace(solution, unrouted, 98 dueTime, serviceTime, readyTime, demand, capacity, 99 distMatrix, allowInfeasible, 100 out route, out place)) { 101 solution.Tours[route].Cities.Insert(place, unrouted); 102 } else { 103 success = false; 104 } 105 106 index++; 107 } 108 109 for (int i = 0; i < index; i++) 110 solution.Unrouted.RemoveAt(0); 111 112 return success; 113 } 114 115 protected static bool Repair(IRandom random, PotvinEncoding solution, Tour newTour, DistanceMatrix distmatrix, 116 DoubleArray dueTime, DoubleArray readyTime, DoubleArray serviceTime, DoubleArray demand, DoubleValue capacity, 117 bool allowInfeasible) { 71 118 bool success = true; 72 119 … … 104 151 } 105 152 153 if (!allowInfeasible && !newTour.Feasible( 154 dueTime, serviceTime, readyTime, demand, capacity, distmatrix)) 155 return false; 156 106 157 //route unrouted vehicles 107 int index = 0; 108 while (index < solution.Unrouted.Count && success) { 109 int unrouted = solution.Unrouted[index]; 110 111 int route, place; 112 if (FindInsertionPlace(solution, unrouted, out route, out place)) { 113 solution.Tours[route].Cities.Insert(place, unrouted); 114 } else { 115 success = false; 116 } 117 118 index++; 119 } 120 121 for (int i = 0; i < index; i++) 122 solution.Unrouted.RemoveAt(0); 158 success = RouteUnrouted(solution, distmatrix, dueTime, readyTime, serviceTime, demand, capacity, allowInfeasible); 123 159 124 160 return success;
Note: See TracChangeset
for help on using the changeset viewer.