Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/17/19 21:40:30 (5 years ago)
Author:
abeham
Message:

#2521: Refactored pTSP to use compositional pattern

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/ProbabilisticTSP.cs

    r17270 r17335  
    2525using HeuristicLab.Common;
    2626using HeuristicLab.Core;
    27 using HeuristicLab.Data;
    2827using HeuristicLab.Encodings.PermutationEncoding;
    2928using HeuristicLab.Optimization;
     
    7069      Parameters.Add(BestKnownSolutionParameter = new OptionalValueParameter<IProbabilisticTSPSolution>("BestKnownSolution", "The best known solution of this pTSP instance."));
    7170
    72       ProbabilisticTSPData = new MatrixPTSPData();
    73       Encoding.Length = ProbabilisticTSPData.Cities;
     71      ProbabilisticTSPData = new ProbabilisticTSPData();
     72      Encoding.Length = ProbabilisticTSPData.TSPData.Cities;
    7473    }
    7574
    7675    protected override void OnEncodingChanged() {
    7776      base.OnEncodingChanged();
    78       Encoding.Length = ProbabilisticTSPData.Cities;
     77      Encoding.Length = ProbabilisticTSPData.TSPData.Cities;
    7978    }
    8079
     
    117116      Description = data.Description;
    118117
    119       if (data.Dimension <= DistanceMatrixSizeLimit) {
    120         ProbabilisticTSPData = new MatrixPTSPData(data.Name, data.GetDistanceMatrix(), data.Probabilities, data.Coordinates) { Description = data.Description };
    121       } else if (data.DistanceMeasure == DistanceMeasure.Direct && data.Distances != null) {
    122         ProbabilisticTSPData = new MatrixPTSPData(data.Name, data.Distances, data.Probabilities, data.Coordinates) { Description = data.Description };
    123       } else {
    124         switch (data.DistanceMeasure) {
    125           case DistanceMeasure.Att:
    126             ProbabilisticTSPData = new AttPTSPData(data.Name, data.Coordinates, data.Probabilities) { Description = data.Description };
    127             break;
    128           case DistanceMeasure.Euclidean:
    129             ProbabilisticTSPData = new EuclideanPTSPData(data.Name, data.Coordinates, data.Probabilities, EuclideanTSPData.DistanceRounding.None) { Description = data.Description };
    130             break;
    131           case DistanceMeasure.RoundedEuclidean:
    132             ProbabilisticTSPData = new EuclideanPTSPData(data.Name, data.Coordinates, data.Probabilities, EuclideanTSPData.DistanceRounding.Midpoint) { Description = data.Description };
    133             break;
    134           case DistanceMeasure.UpperEuclidean:
    135             ProbabilisticTSPData = new EuclideanPTSPData(data.Name, data.Coordinates, data.Probabilities, EuclideanTSPData.DistanceRounding.Ceiling) { Description = data.Description };
    136             break;
    137           case DistanceMeasure.Geo:
    138             ProbabilisticTSPData = new GeoPTSPData(data.Name, data.Coordinates, data.Probabilities) { Description = data.Description };
    139             break;
    140           case DistanceMeasure.Manhattan:
    141             ProbabilisticTSPData = new ManhattanPTSPData(data.Name, data.Coordinates, data.Probabilities) { Description = data.Description };
    142             break;
    143           case DistanceMeasure.Maximum:
    144             ProbabilisticTSPData = new MaximumPTSPData(data.Name, data.Coordinates, data.Probabilities) { Description = data.Description };
    145             break;
    146           default:
    147             throw new System.IO.InvalidDataException("An unknown distance measure is given in the instance!");
    148         }
    149       }
     118      var tspData = TSP.GetDataFromInstance(data);
     119      ProbabilisticTSPData = new ProbabilisticTSPData(tspData, data.Probabilities);
    150120      BestKnownSolution = null;
    151121      BestKnownQuality = double.NaN;
     
    154124        try {
    155125          var tour = new Permutation(PermutationTypes.RelativeUndirected, data.BestKnownTour);
    156           var tourLength = Evaluate(tour, new MersenneTwister(1));
    157           BestKnownSolution = new ProbabilisticTSPSolution(data.Coordinates != null ? new DoubleMatrix(data.Coordinates) : null, new PercentArray(data.Probabilities), tour, new DoubleValue(tourLength));
     126          var tourLength = Evaluate(tour, new MersenneTwister(1));         
     127          BestKnownSolution = ProbabilisticTSPData.GetSolution(tour, tourLength);
    158128          BestKnownQuality = tourLength;
    159129        } catch (InvalidOperationException) {
Note: See TracChangeset for help on using the changeset viewer.