Changeset 11277


Ignore:
Timestamp:
08/12/14 14:36:35 (5 years ago)
Author:
pfleck
Message:

#2208 implemented InstanceConsumer of TSPData for OrienteeringProblem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringProblem.cs

    r11275 r11277  
    4040  public class OrienteeringProblem
    4141    : SingleObjectiveHeuristicOptimizationProblem<IOrienteeringEvaluator, IIntegerVectorCreator>,
    42     IStorableContent, IProblemInstanceConsumer<CVRPData>, IProblemInstanceConsumer<OPData> {
     42    IStorableContent, IProblemInstanceConsumer<OPData>, IProblemInstanceConsumer<TSPData>, IProblemInstanceConsumer<CVRPData> {
    4343
    4444    public string Filename { get; set; }
     
    334334    }
    335335
    336     public void Load(CVRPData data) {
    337       if (data.Coordinates == null)
    338         throw new InvalidDataException("The given instance specifies no coordinates!");
    339       if (data.Coordinates.GetLength(1) != 2)
     336    public void Load(OPData data) {
     337      if (data.Coordinates == null && data.Distances == null)
     338        throw new InvalidDataException("The given instance specifies no coordinates or distance matrix!");
     339      if (data.Coordinates != null && data.Coordinates.GetLength(1) != 2)
    340340        throw new InvalidDataException("The coordinates of the given instance are not in the right format, there need to be one row for each customer and two columns for the x and y coordinates.");
    341341
     
    347347      Description = data.Description;
    348348
    349       Coordinates = new DoubleMatrix(data.Coordinates);
     349      Coordinates = data.Coordinates != null ? new DoubleMatrix(data.Coordinates) : null;
     350      if (data.Distances != null)
     351        DistanceMatrix = new DistanceMatrix(data.Distances);
     352      else
     353        DistanceMatrix = new DistanceMatrix(data.GetDistanceMatrix());
     354
     355      StartingPoint = new IntValue(data.StartingPoint);
     356      TerminusPoint = new IntValue(data.TerminusPoint);
     357
     358      MaximumDistance = new DoubleValue(data.MaximumDistance);
     359      Scores = new DoubleArray(data.Scores);
     360    }
     361
     362    public void Load(TSPData data) {
     363      if (data.Coordinates == null && data.Distances == null)
     364        throw new InvalidDataException("The given instance specifies no coordinates or distance matrix!");
     365      if (data.Coordinates != null && data.Coordinates.GetLength(1) != 2)
     366        throw new InvalidDataException("The coordinates of the given instance are not in the right format, there need to be one row for each customer and two columns for the x and y coordinates.");
     367
     368      // Clear old solutions
     369      BestKnownQuality = null;
     370      BestKnownSolution = null;
     371
     372      Name = data.Name;
     373      Description = data.Description;
     374
     375      Coordinates = data.Coordinates != null ? new DoubleMatrix(data.Coordinates) : null;
     376      if (data.Distances != null)
     377        DistanceMatrix = new DistanceMatrix(data.Distances);
     378      else
     379        DistanceMatrix = new DistanceMatrix(data.GetDistanceMatrix());
     380
     381      StartingPoint = new IntValue(0); // First city is interpreted as start point
     382      TerminusPoint = new IntValue(data.Dimension - 1); // Last city is interpreted als end point
     383
     384      MaximumDistance = new DoubleValue(DistanceMatrix[0, data.Dimension - 1] * 10.0); // distance from start to end first to last city is interpreted as maximum distance
     385      Scores = new DoubleArray(Enumerable.Repeat(1.0, data.Dimension).ToArray()); // all scores are 1
     386    }
     387
     388    public void Load(CVRPData data) {
     389      if (data.Coordinates == null && data.Distances == null)
     390        throw new InvalidDataException("The given instance specifies no coordinates or distance matrix!");
     391      if (data.Coordinates != null && data.Coordinates.GetLength(1) != 2)
     392        throw new InvalidDataException("The coordinates of the given instance are not in the right format, there need to be one row for each customer and two columns for the x and y coordinates.");
     393
     394      // Clear old solutions
     395      BestKnownQuality = null;
     396      BestKnownSolution = null;
     397
     398      Name = data.Name;
     399      Description = data.Description;
     400
     401      Coordinates = data.Coordinates != null ? new DoubleMatrix(data.Coordinates) : null;
    350402      DistanceMatrix = data.Distances != null
    351403        ? new DistanceMatrix(data.Distances)
     
    360412      OnReset();
    361413    }
    362 
    363     public void Load(OPData data) {
    364       if (data.Coordinates == null)
    365         throw new InvalidDataException("The given instance specifies no coordinates!");
    366       if (data.Coordinates.GetLength(1) != 2)
    367         throw new InvalidDataException("The coordinates of the given instance are not in the right format, there need to be one row for each customer and two columns for the x and y coordinates.");
    368 
    369       // Clear old solutions
    370       BestKnownQuality = null;
    371       BestKnownSolution = null;
    372 
    373       Name = data.Name;
    374       Description = data.Description;
    375 
    376       Coordinates = new DoubleMatrix(data.Coordinates);
    377       if (data.Distances != null)
    378         DistanceMatrix = new DistanceMatrix(data.Distances);
    379       else
    380         data.GetDistanceMatrix();
    381 
    382       StartingPoint = new IntValue(data.StartingPoint);
    383       TerminusPoint = new IntValue(data.TerminusPoint);
    384 
    385       MaximumDistance = new DoubleValue(data.MaximumDistance);
    386       Scores = new DoubleArray(data.Scores);
    387     }
    388414  }
    389415}
Note: See TracChangeset for help on using the changeset viewer.