- Timestamp:
- 09/02/10 16:45:33 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
r4360 r4362 32 32 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 33 using HeuristicLab.PluginInfrastructure; 34 using HeuristicLab.Problems.VehicleRouting.Interfaces; 35 using HeuristicLab.Problems.VehicleRouting.Parsers; 36 using HeuristicLab.Problems.VehicleRouting.ProblemInstances; 34 37 35 38 namespace HeuristicLab.Problems.VehicleRouting { … … 42 45 } 43 46 44 #region ISingleObjectiveProblem Members45 public IParameter BestKnownQualityParameter {46 get { throw new NotImplementedException(); }47 }48 49 public ISingleObjectiveEvaluator Evaluator {50 get { throw new NotImplementedException(); }51 }52 53 #endregion54 55 #region IProblem Members56 public IParameter SolutionCreatorParameter {57 get { throw new NotImplementedException(); }58 }59 60 public ISolutionCreator SolutionCreator {61 get { throw new NotImplementedException(); }62 }63 64 public IParameter EvaluatorParameter {65 get { throw new NotImplementedException(); }66 }67 68 IEvaluator IProblem.Evaluator {69 get { throw new NotImplementedException(); }70 }71 72 public IEnumerable<IOperator> Operators {73 get { throw new NotImplementedException(); }74 }75 #endregion76 77 47 #region Parameter Properties 78 48 public ValueParameter<BoolValue> MaximizationParameter { … … 82 52 get { return MaximizationParameter; } 83 53 } 54 public ValueParameter<IVRPProblemInstance> ProblemInstanceParameter { 55 get { return (ValueParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; } 56 } 57 public OptionalValueParameter<DoubleValue> BestKnownQualityParameter { 58 get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; } 59 } 60 IParameter ISingleObjectiveProblem.BestKnownQualityParameter { 61 get { return BestKnownQualityParameter; } 62 } 63 public IParameter SolutionCreatorParameter { 64 get { 65 if (ProblemInstance != null) 66 return ProblemInstance.SolutionCreatorParameter; 67 else 68 return null; 69 } 70 } 71 public IParameter EvaluatorParameter { 72 get { 73 if (ProblemInstance != null) 74 return ProblemInstance.EvaluatorParameter; 75 else 76 return null; 77 } 78 } 84 79 #endregion 85 80 86 81 #region Properties 87 82 public IVRPProblemInstance ProblemInstance { 83 get { return ProblemInstanceParameter.Value; } 84 set { ProblemInstanceParameter.Value = value; } 85 } 86 87 public ISingleObjectiveEvaluator Evaluator { 88 get { 89 if (ProblemInstance != null) 90 return ProblemInstance.EvaluatorParameter.Value; 91 else 92 return null; 93 } 94 } 95 96 IEvaluator IProblem.Evaluator { 97 get { return this.Evaluator; } 98 } 99 100 public ISolutionCreator SolutionCreator { 101 get { 102 if (ProblemInstance != null) 103 return ProblemInstance.SolutionCreatorParameter.Value; 104 else 105 return null; 106 } 107 } 108 109 public IEnumerable<IOperator> Operators { 110 get { 111 if (ProblemInstance != null) 112 return ProblemInstance.Operators.OrderBy(op => op.Name); 113 else 114 return null; 115 } 116 } 88 117 #endregion 89 90 [Storable]91 private List<IOperator> operators;92 118 93 119 [StorableConstructor] … … 96 122 : base() { 97 123 Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Vehicle Routing Problem is a minimization problem.", new BoolValue(false))); 98 124 Parameters.Add(new ValueParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance")); 125 Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance.")); 126 99 127 InitializeRandomVRPInstance(); 100 128 101 ParameterizeSolutionCreator();102 ParameterizeEvaluator();103 104 InitializeOperators();105 129 AttachEventHandlers(); 130 AttachProblemInstanceEventHandlers(); 106 131 } 107 132 108 133 public override IDeepCloneable Clone(Cloner cloner) { 109 134 VehicleRoutingProblem clone = (VehicleRoutingProblem)base.Clone(cloner); 110 clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();111 135 clone.AttachEventHandlers(); 112 136 return clone; … … 140 164 private void AfterDeserializationHook() { 141 165 AttachEventHandlers(); 166 AttachProblemInstanceEventHandlers(); 142 167 } 143 168 144 169 private void AttachEventHandlers() { 145 146 } 147 private void InitializeOperators() { 148 operators = new List<IOperator>(); 149 ParameterizeAnalyzer(); 150 //operators.AddRange(ApplicationManager.Manager.GetInstances<IVRPOperator>().Cast<IOperator>().OrderBy(op => op.Name)); 151 ParameterizeOperators(); 152 UpdateMoveEvaluators(); 153 InitializeMoveGenerators(); 154 } 155 private void InitializeMoveGenerators() { 156 157 } 158 private void UpdateMoveEvaluators() { 159 ParameterizeOperators(); 160 OnOperatorsChanged(); 161 } 162 private void ParameterizeSolutionCreator() { 163 164 } 165 private void ParameterizeEvaluator() { 166 167 } 168 private void ParameterizeAnalyzer() { 169 170 } 171 private void ParameterizeOperators() { 172 173 } 174 private void ClearDistanceMatrix() { 175 170 ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged); 171 } 172 173 private void AttachProblemInstanceEventHandlers() { 174 if (ProblemInstance != null) { 175 ProblemInstance.SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged); 176 ProblemInstance.EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged); 177 } 178 } 179 180 void ProblemInstanceParameter_ValueChanged(object sender, EventArgs e) { 181 AttachProblemInstanceEventHandlers(); 182 } 183 184 private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) { 185 OnSolutionCreatorChanged(); 186 } 187 private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) { 188 OnEvaluatorChanged(); 176 189 } 177 190 #endregion … … 182 195 183 196 this.Name = parser.ProblemName; 197 CVRPTWProblemInstance problem = new CVRPTWProblemInstance(); 198 199 problem.Coordinates = new DoubleMatrix(parser.Coordinates); 200 problem.Vehicles.Value = parser.Vehicles; 201 problem.Capacity.Value = parser.Capacity; 202 problem.Demand = new DoubleArray(parser.Demands); 203 problem.ReadyTime = new DoubleArray(parser.Readytimes); 204 problem.DueTime = new DoubleArray(parser.Duetimes); 205 problem.ServiceTime = new DoubleArray(parser.Servicetimes); 206 207 this.ProblemInstance = problem; 184 208 185 209 OnReset(); … … 199 223 throw new Exception("Invalid weight type"); 200 224 225 CVRPTWProblemInstance problem = new CVRPTWProblemInstance(); 226 problem.Coordinates = new DoubleMatrix(parser.Vertices); 227 if (parser.Vehicles != -1) 228 problem.Vehicles.Value = parser.Vehicles; 229 else 230 problem.Vehicles.Value = problemSize - 1; 231 problem.Capacity.Value = parser.Capacity; 232 problem.Demand = new DoubleArray(parser.Demands); 233 problem.ReadyTime = new DoubleArray(problemSize); 234 problem.DueTime = new DoubleArray(problemSize); 235 problem.ServiceTime = new DoubleArray(problemSize); 236 237 for (int i = 0; i < problemSize; i++) { 238 problem.ReadyTime[i] = 0; 239 problem.DueTime[i] = int.MaxValue; 240 problem.ServiceTime[i] = 0; 241 } 242 243 if (parser.Distance != -1) { 244 problem.DueTime[0] = parser.Distance; 245 } 246 247 this.ProblemInstance = problem; 248 201 249 OnReset(); 202 250 } … … 209 257 int problemSize = parser.Demands.Length; 210 258 259 CVRPProblemInstance problem = new CVRPProblemInstance(); 260 261 problem.Coordinates = new DoubleMatrix(parser.Vertices); 262 problem.Vehicles.Value = problemSize - 1; 263 problem.Capacity.Value = parser.Capacity; 264 problem.Demand = new DoubleArray(parser.Demands); 265 266 this.ProblemInstance = problem; 267 211 268 OnReset(); 212 269 } … … 215 272 System.Random rand = new System.Random(); 216 273 274 CVRPTWProblemInstance problem = new CVRPTWProblemInstance(); 217 275 int cities = 100; 276 277 problem.Coordinates = new DoubleMatrix(cities + 1, 2); 278 problem.Demand = new DoubleArray(cities + 1); 279 problem.DueTime = new DoubleArray(cities + 1); 280 problem.ReadyTime = new DoubleArray(cities + 1); 281 problem.ServiceTime = new DoubleArray(cities + 1); 282 283 problem.Vehicles.Value = 100; 284 problem.Capacity.Value = 200; 285 286 for (int i = 0; i <= cities; i++) { 287 problem.Coordinates[i, 0] = rand.Next(0, 100); 288 problem.Coordinates[i, 1] = rand.Next(0, 100); 289 290 if (i == 0) { 291 problem.Demand[i] = 0; 292 problem.DueTime[i] = Int16.MaxValue; 293 problem.ReadyTime[i] = 0; 294 problem.ServiceTime[i] = 0; 295 } else { 296 problem.Demand[i] = rand.Next(10, 50); 297 problem.DueTime[i] = rand.Next((int)Math.Ceiling(problem.GetDistance(0, i)), 1200); 298 problem.ReadyTime[i] = problem.DueTime[i] - rand.Next(0, 100); 299 problem.ServiceTime[i] = 90; 300 } 301 } 302 303 this.ProblemInstance = problem; 218 304 } 219 305 }
Note: See TracChangeset
for help on using the changeset viewer.