- Timestamp:
- 08/06/10 16:08:46 (14 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin
- Files:
-
- 5 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs
r4150 r4174 31 31 [Item("PotvinEncoding", "Represents a potvin encoding of VRP solutions.")] 32 32 [StorableClass] 33 class PotvinEncoding : Item, IVRPEncoding {33 public class PotvinEncoding : Item, IVRPEncoding { 34 34 public override Image ItemImage { 35 35 get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Class; } … … 46 46 47 47 foreach (Tour tour in Tours) { 48 cities += tour.C ount;48 cities += tour.Cities.Count; 49 49 } 50 50 … … 55 55 56 56 [Storable] 57 public ItemList<IntValue> Unrouted { get; set; }57 public List<int> Unrouted { get; set; } 58 58 59 59 public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) { … … 61 61 cloner.RegisterClonedObject(this, clone); 62 62 clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours); 63 clone.Unrouted = (ItemList<IntValue>)cloner.Clone(this.Unrouted);63 clone.Unrouted = new List<int>(Unrouted); 64 64 return clone; 65 65 } … … 67 67 public PotvinEncoding() { 68 68 Tours = new ItemList<Tour>(); 69 Unrouted = new ItemList<IntValue>();69 Unrouted = new List<int>(); 70 70 } 71 71 … … 85 85 for (int i = 0; i < route.Count; i++) { 86 86 if (route[i] == 0) { 87 if (tour.C ount > 0) {87 if (tour.Cities.Count > 0) { 88 88 solution.Tours.Add(tour); 89 89 tour = new Tour(); 90 90 } 91 91 } else { 92 tour. Add(new IntValue(route[i]));92 tour.Cities.Add(route[i]); 93 93 } 94 94 } … … 96 96 return solution; 97 97 } 98 99 public bool FindInsertionPlace( 100 DoubleArray dueTimeArray, 101 DoubleArray serviceTimeArray, DoubleArray readyTimeArray, DoubleArray demandArray, DoubleValue capacity, 102 DoubleMatrix coordinates, ILookupParameter<DoubleMatrix> distanceMatrix, BoolValue useDistanceMatrix, 103 int city, int routeToAvoid, out int route, out int place) { 104 route = -1; 105 place = -1; 106 double minDetour = 0; 107 108 for (int tour = 0; tour < Tours.Count; tour++) { 109 if (tour != routeToAvoid) { 110 for (int i = 0; i <= Tours[tour].Cities.Count; i++) { 111 double length = Tours[tour].GetLength(coordinates, distanceMatrix, useDistanceMatrix); 112 113 Tours[tour].Cities.Insert(i, city); 114 115 if (Tours[tour].Feasible(dueTimeArray, serviceTimeArray, readyTimeArray, demandArray, 116 capacity, coordinates, distanceMatrix, useDistanceMatrix)) { 117 double newLength = Tours[tour].GetLength(coordinates, distanceMatrix, useDistanceMatrix); 118 119 double detour = newLength - length; 120 121 if (route <= 0 || detour < minDetour) { 122 route = tour; 123 place = i; 124 minDetour = detour; 125 } 126 } 127 128 Tours[tour].Cities.RemoveAt(i); 129 } 130 } 131 } 132 133 return route >= 0 && place >= 0; 134 } 98 135 } 99 136 }
Note: See TracChangeset
for help on using the changeset viewer.