Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/16/12 16:28:49 (12 years ago)
Author:
gkronber
Message:

merged r7609:7840 from trunk into time series branch

Location:
branches/HeuristicLab.TimeSeries
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries

  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs

    r7615 r7842  
    4444
    4545    #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"]; }
    4848    }
    4949    public OptionalValueParameter<DistanceMatrix> DistanceMatrixParameter {
     
    110110    public TravelingSalesmanProblem()
    111111      : 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."));
    113113      Parameters.Add(new OptionalValueParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
    114114      Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true)));
     
    148148      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    149149      ParameterizeEvaluator();
     150      ParameterizeSolutionCreator();
    150151      UpdateMoveEvaluators();
    151152      ParameterizeAnalyzers();
     
    153154    }
    154155    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      }
    157160      ParameterizeSolutionCreator();
    158161      ClearDistanceMatrix();
     
    197200      }
    198201
     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
    199208      if (Operators.Count == 0) InitializeOperators();
    200209      #endregion
     
    204213    private void RegisterEventHandlers() {
    205214      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      }
    208219      SolutionCreator.PermutationParameter.ActualNameChanged += new EventHandler(SolutionCreator_PermutationParameter_ActualNameChanged);
    209220      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
     
    215226      Operators.Add(new TSPPopulationDiversityAnalyzer());
    216227      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);
    218236      ParameterizeOperators();
    219237      UpdateMoveEvaluators();
     
    229247    }
    230248    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;
    233255      SolutionCreator.PermutationTypeParameter.Value = new PermutationType(PermutationTypes.RelativeUndirected);
    234256      SolutionCreator.PermutationTypeParameter.Hidden = true;
     
    324346    public void Load(TSPData data) {
    325347      if (data.Coordinates == null && data.Distances == null)
    326         throw new System.IO.InvalidDataException("The given instance does not specify neither coordinates or distances!");
     348        throw new System.IO.InvalidDataException("The given instance specifies neither coordinates nor distances!");
    327349      if (data.Dimension > DistanceMatrixSizeLimit && (data.DistanceMeasure == TSPDistanceMeasure.Att
    328350        || data.DistanceMeasure == TSPDistanceMeasure.Manhattan
     
    338360      if (data.Coordinates != null && data.Coordinates.GetLength(0) > 0)
    339361        Coordinates = new DoubleMatrix(data.Coordinates);
     362      else Coordinates = null;
    340363
    341364      TSPEvaluator evaluator;
     
    377400        try {
    378401          EvaluateAndLoadTour(data.BestKnownTour);
    379         } catch (InvalidOperationException) {
     402        }
     403        catch (InvalidOperationException) {
    380404          if (data.BestKnownQuality.HasValue)
    381405            BestKnownQuality = new DoubleValue(data.BestKnownQuality.Value);
     
    392416
    393417      double quality;
    394       if (Evaluator is TSPDistanceMatrixEvaluator) {
     418      if (Evaluator is ITSPDistanceMatrixEvaluator) {
    395419        quality = TSPDistanceMatrixEvaluator.Apply(DistanceMatrix, route);
    396       } else if (Evaluator is TSPCoordinatesPathEvaluator) {
     420      } else if (Evaluator is ITSPCoordinatesPathEvaluator) {
    397421        quality = TSPCoordinatesPathEvaluator.Apply((TSPCoordinatesPathEvaluator)Evaluator, Coordinates, route);
    398422      } else {
Note: See TracChangeset for help on using the changeset viewer.