- Timestamp:
- 03/29/11 15:40:01 (14 years ago)
- Location:
- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
r4752 r5867 44 44 : base(original, cloner) { 45 45 } 46 46 47 47 protected override void Manipulate(IRandom random, PotvinEncoding individual) { 48 48 int selectedIndex = SelectRandomTourBiasedByLength(random, individual); 49 Tour route1 = 50 individual.Tours[selectedIndex]; 49 Tour route1 = individual.Tours[selectedIndex]; 51 50 52 for (int customer1Position = 0; customer1Position < route1.Stops.Count; customer1Position++) { 51 bool performed = false; 52 int customer1Position = 0; 53 while (customer1Position < route1.Stops.Count) { 54 performed = false; 55 53 56 foreach (Tour tour in individual.Tours) { 54 57 if (tour != route1) { … … 60 63 tour.Stops[customer2Position] = customer1; 61 64 if (ProblemInstance.Feasible(tour)) { 62 int route , place;65 int routeIdx, place; 63 66 if (FindInsertionPlace(individual, 64 customer2, selectedIndex, out route , out place)) {65 individual.Tours[route].Stops.Insert(place, customer2);66 67 customer2, selectedIndex, out routeIdx, out place)) { 68 individual.Tours[routeIdx].Stops.Insert(place, customer2); 69 route1.Stops.RemoveAt(customer1Position); 67 70 68 71 if (route1.Stops.Count == 0) 69 72 individual.Tours.Remove(route1); 70 73 71 74 //two-level exchange has been performed 72 return; 75 performed = true; 76 break; 73 77 } else { 74 78 tour.Stops[customer2Position] = customer2; … … 79 83 } 80 84 } 85 86 if (performed) 87 break; 81 88 } 89 90 if (!performed) 91 customer1Position++; 82 92 } 83 93 } -
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs
r5202 r5867 85 85 string key = AdditionFrequencyMemoryKeyParameter.Value.Value; 86 86 87 if (memory .ContainsKey(key)) {87 if (memory != null && memory.ContainsKey(key)) { 88 88 ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue> additionFrequency = 89 89 memory[key].Value as ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue>; -
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs
r5202 r5867 101 101 PotvinCustomerRelocationMove move = CustomerRelocationMoveParameter.ActualValue; 102 102 103 PotvinEncoding newSolution = move.Individual as PotvinEncoding;103 PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding; 104 104 Apply(newSolution, move); 105 105 VRPToursParameter.ActualValue = newSolution; … … 125 125 string key = AdditionFrequencyMemoryKeyParameter.Value.Value; 126 126 127 if (!memory.ContainsKey(key)) { 128 memory.Add(new Variable(key, 129 new ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue>())); 127 if (memory != null) { 128 if (!memory.ContainsKey(key)) { 129 memory.Add(new Variable(key, 130 new ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue>())); 131 } 132 ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue> additionFrequency = 133 memory[key].Value as ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue>; 134 135 PotvinCustomerRelocationMoveAttribute attr = new PotvinCustomerRelocationMoveAttribute(0, move.Tour, move.City); 136 if (!additionFrequency.ContainsKey(attr)) 137 additionFrequency[attr] = new IntValue(0); 138 139 additionFrequency[attr].Value++; 130 140 } 131 ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue> additionFrequency =132 memory[key].Value as ItemDictionary<PotvinCustomerRelocationMoveAttribute, IntValue>;133 134 PotvinCustomerRelocationMoveAttribute attr = new PotvinCustomerRelocationMoveAttribute(0, move.Tour, move.City);135 if (!additionFrequency.ContainsKey(attr))136 additionFrequency[attr] = new IntValue(0);137 138 additionFrequency[attr].Value++;139 141 } 140 142 } -
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMultiMoveGenerator.cs
r5127 r5867 29 29 using HeuristicLab.Common; 30 30 using HeuristicLab.Data; 31 using HeuristicLab.Problems.VehicleRouting.Encodings.General; 31 32 32 33 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin { 33 34 [Item("PotvinCustomerRelocationMultiMoveGenerator", "Generates customer relocation moves from a given VRP encoding.")] 34 35 [StorableClass] 35 public sealed class PotvinCustomerRelocationMultiMoveGenerator : PotvinCustomerRelocationMoveGenerator, IMultiMoveGenerator {36 public sealed class PotvinCustomerRelocationMultiMoveGenerator : PotvinCustomerRelocationMoveGenerator, IMultiMoveGenerator, IMultiVRPMoveGenerator { 36 37 public ILookupParameter<IRandom> RandomParameter { 37 38 get { return (ILookupParameter<IRandom>)Parameters["Random"]; } -
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationSingleMoveGenerator.cs
r5127 r5867 35 35 [StorableClass] 36 36 public sealed class PotvinCustomerRelocationSingleMoveGenerator : PotvinCustomerRelocationMoveGenerator, 37 ISingleMoveGenerator , IMultiVRPMoveGenerator{37 ISingleMoveGenerator { 38 38 #region IMultiVRPMoveOperator Members 39 39
Note: See TracChangeset
for help on using the changeset viewer.