Changeset 7842 for branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
- Timestamp:
- 05/16/12 16:28:49 (12 years ago)
- Location:
- branches/HeuristicLab.TimeSeries
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries
- Property svn:mergeinfo changed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
r7615 r7842 44 44 45 45 #region Parameter Properties 46 public ValueParameter<DoubleMatrix> CoordinatesParameter {47 get { return ( ValueParameter<DoubleMatrix>)Parameters["Coordinates"]; }46 public OptionalValueParameter<DoubleMatrix> CoordinatesParameter { 47 get { return (OptionalValueParameter<DoubleMatrix>)Parameters["Coordinates"]; } 48 48 } 49 49 public OptionalValueParameter<DistanceMatrix> DistanceMatrixParameter { … … 110 110 public TravelingSalesmanProblem() 111 111 : base(new TSPRoundedEuclideanPathEvaluator(), new RandomPermutationCreator()) { 112 Parameters.Add(new ValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));112 Parameters.Add(new OptionalValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.")); 113 113 Parameters.Add(new OptionalValueParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 114 114 Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true))); … … 148 148 Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); 149 149 ParameterizeEvaluator(); 150 ParameterizeSolutionCreator(); 150 151 UpdateMoveEvaluators(); 151 152 ParameterizeAnalyzers(); … … 153 154 } 154 155 private void CoordinatesParameter_ValueChanged(object sender, EventArgs e) { 155 Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged); 156 Coordinates.Reset += new EventHandler(Coordinates_Reset); 156 if (Coordinates != null) { 157 Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged); 158 Coordinates.Reset += new EventHandler(Coordinates_Reset); 159 } 157 160 ParameterizeSolutionCreator(); 158 161 ClearDistanceMatrix(); … … 197 200 } 198 201 202 ValueParameter<DoubleMatrix> oldCoordinates = (Parameters["Coordinates"] as ValueParameter<DoubleMatrix>); 203 if (oldCoordinates != null) { 204 Parameters.Remove(oldCoordinates); 205 Parameters.Add(new OptionalValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.", oldCoordinates.Value, oldCoordinates.GetsCollected)); 206 } 207 199 208 if (Operators.Count == 0) InitializeOperators(); 200 209 #endregion … … 204 213 private void RegisterEventHandlers() { 205 214 CoordinatesParameter.ValueChanged += new EventHandler(CoordinatesParameter_ValueChanged); 206 Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged); 207 Coordinates.Reset += new EventHandler(Coordinates_Reset); 215 if (Coordinates != null) { 216 Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged); 217 Coordinates.Reset += new EventHandler(Coordinates_Reset); 218 } 208 219 SolutionCreator.PermutationParameter.ActualNameChanged += new EventHandler(SolutionCreator_PermutationParameter_ActualNameChanged); 209 220 Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); … … 215 226 Operators.Add(new TSPPopulationDiversityAnalyzer()); 216 227 ParameterizeAnalyzers(); 217 Operators.AddRange(ApplicationManager.Manager.GetInstances<IPermutationOperator>().Cast<IOperator>()); 228 var operators = new HashSet<IPermutationOperator>(new IPermutationOperator[] { 229 new OrderCrossover2(), 230 new InversionManipulator(), 231 new StochasticInversionMultiMoveGenerator() 232 }, new TypeEqualityComparer<IPermutationOperator>()); 233 foreach (var op in ApplicationManager.Manager.GetInstances<IPermutationOperator>()) 234 operators.Add(op); 235 Operators.AddRange(operators); 218 236 ParameterizeOperators(); 219 237 UpdateMoveEvaluators(); … … 229 247 } 230 248 private void ParameterizeSolutionCreator() { 231 SolutionCreator.LengthParameter.Value = new IntValue(Coordinates.Rows); 232 SolutionCreator.LengthParameter.Hidden = true; 249 if (Evaluator is ITSPDistanceMatrixEvaluator && DistanceMatrix != null) 250 SolutionCreator.LengthParameter.Value = new IntValue(DistanceMatrix.Rows); 251 else if (Evaluator is ITSPCoordinatesPathEvaluator && Coordinates != null) 252 SolutionCreator.LengthParameter.Value = new IntValue(Coordinates.Rows); 253 else SolutionCreator.LengthParameter.Value = null; 254 SolutionCreator.LengthParameter.Hidden = SolutionCreator.LengthParameter.Value != null; 233 255 SolutionCreator.PermutationTypeParameter.Value = new PermutationType(PermutationTypes.RelativeUndirected); 234 256 SolutionCreator.PermutationTypeParameter.Hidden = true; … … 324 346 public void Load(TSPData data) { 325 347 if (data.Coordinates == null && data.Distances == null) 326 throw new System.IO.InvalidDataException("The given instance does not specify neither coordinatesor distances!");348 throw new System.IO.InvalidDataException("The given instance specifies neither coordinates nor distances!"); 327 349 if (data.Dimension > DistanceMatrixSizeLimit && (data.DistanceMeasure == TSPDistanceMeasure.Att 328 350 || data.DistanceMeasure == TSPDistanceMeasure.Manhattan … … 338 360 if (data.Coordinates != null && data.Coordinates.GetLength(0) > 0) 339 361 Coordinates = new DoubleMatrix(data.Coordinates); 362 else Coordinates = null; 340 363 341 364 TSPEvaluator evaluator; … … 377 400 try { 378 401 EvaluateAndLoadTour(data.BestKnownTour); 379 } catch (InvalidOperationException) { 402 } 403 catch (InvalidOperationException) { 380 404 if (data.BestKnownQuality.HasValue) 381 405 BestKnownQuality = new DoubleValue(data.BestKnownQuality.Value); … … 392 416 393 417 double quality; 394 if (Evaluator is TSPDistanceMatrixEvaluator) {418 if (Evaluator is ITSPDistanceMatrixEvaluator) { 395 419 quality = TSPDistanceMatrixEvaluator.Apply(DistanceMatrix, route); 396 } else if (Evaluator is TSPCoordinatesPathEvaluator) {420 } else if (Evaluator is ITSPCoordinatesPathEvaluator) { 397 421 quality = TSPCoordinatesPathEvaluator.Apply((TSPCoordinatesPathEvaluator)Evaluator, Coordinates, route); 398 422 } else {
Note: See TracChangeset
for help on using the changeset viewer.