Changeset 8649


Ignore:
Timestamp:
09/14/12 10:03:04 (9 years ago)
Author:
svonolfe
Message:

Improved the design of the interpreters so code duplication is avoided (#1953)

Location:
trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj

    r8600 r8649  
    142142    <Compile Include="Improver\VRPImprovementOperator.cs" />
    143143    <Compile Include="Interfaces\IVRPLocalSearchManipulator.cs" />
     144    <Compile Include="Interpreters\MDCVRPInterpreter.cs" />
     145    <Compile Include="Interpreters\VRPInterpreter.cs" />
    144146    <Compile Include="Interpreters\MDCVRPTWInterpreter.cs" />
    145147    <Compile Include="Interpreters\PDPTWInterpreter.cs" />
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/CVRPInterpreter.cs

    r8053 r8649  
    2424using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin;
    2525using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
     26using HeuristicLab.Problems.VehicleRouting.Interfaces;
     27using System;
    2628
    2729namespace HeuristicLab.Problems.VehicleRouting.Interpreters {
    28   public class CVRPInterpreter : IVRPDataInterpreter<CVRPData> {
    29     public VRPInstanceDescription Interpret(IVRPData data) {
     30  public class CVRPInterpreter : VRPInterpreter, IVRPDataInterpreter<CVRPData> {
     31    public override Type GetDataType() {
     32      return typeof(CVRPData);
     33    }
     34   
     35    protected override IVRPProblemInstance CreateProblemInstance() {
     36      return new CVRPProblemInstance();
     37    }
     38
     39    protected override void Interpret(IVRPData data, IVRPProblemInstance problemInstance) {
    3040      CVRPData cvrpData = data as CVRPData;
    31 
    32       VRPInstanceDescription result = new VRPInstanceDescription();
    33       result.Name = cvrpData.Name;
    34       result.Description = cvrpData.Description;
    35 
    36       CVRPProblemInstance problem = new CVRPProblemInstance();
     41      CVRPProblemInstance problem = problemInstance as CVRPProblemInstance;
     42     
    3743      if (cvrpData.Coordinates != null)
    3844        problem.Coordinates = new DoubleMatrix(cvrpData.Coordinates);
     
    4753        problem.DistanceMatrix = new DoubleMatrix(cvrpData.GetDistanceMatrix());
    4854      }
    49       result.ProblemInstance = problem;
    50 
    51       result.BestKnownQuality = cvrpData.BestKnownQuality;
    52       if (cvrpData.BestKnownTour != null) {
    53         PotvinEncoding solution = new PotvinEncoding(problem);
    54 
    55         for (int i = 0; i < cvrpData.BestKnownTour.GetLength(0); i++) {
    56           Tour tour = new Tour();
    57           solution.Tours.Add(tour);
    58 
    59           foreach (int stop in cvrpData.BestKnownTour[i]) {
    60             tour.Stops.Add(stop + 1);
    61           }
    62         }
    63 
    64         result.BestKnownSolution = solution;
    65       }
    66 
    67       return result;
    6855    }
    6956  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/CVRPTWInterpreter.cs

    r8053 r8649  
    2424using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin;
    2525using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
     26using HeuristicLab.Problems.VehicleRouting.Interfaces;
     27using System;
    2628
    2729namespace HeuristicLab.Problems.VehicleRouting.Interpreters {
    28   public class CVRPTWInterpreter : IVRPDataInterpreter<CVRPTWData> {
    29     public VRPInstanceDescription Interpret(IVRPData data) {
    30       CVRPTWData cvrpData = data as CVRPTWData;
     30  public class CVRPTWInterpreter: CVRPInterpreter, IVRPDataInterpreter<CVRPTWData> {
     31    public override Type GetDataType() {
     32      return typeof(CVRPTWData);
     33    }
     34   
     35    protected override IVRPProblemInstance CreateProblemInstance() {
     36      return new CVRPTWProblemInstance();
     37    }
    3138
    32       VRPInstanceDescription result = new VRPInstanceDescription();
    33       result.Name = cvrpData.Name;
    34       result.Description = cvrpData.Description;
     39    protected override void Interpret(IVRPData data, IVRPProblemInstance problemInstance) {
     40      base.Interpret(data, problemInstance);
    3541
    36       CVRPTWProblemInstance problem = new CVRPTWProblemInstance();
    37       if (cvrpData.Coordinates != null)
    38         problem.Coordinates = new DoubleMatrix(cvrpData.Coordinates);
    39       if (cvrpData.MaximumVehicles != null)
    40         problem.Vehicles.Value = (int)cvrpData.MaximumVehicles;
    41       else
    42         problem.Vehicles.Value = cvrpData.Dimension - 1;
    43       problem.Capacity.Value = cvrpData.Capacity;
    44       problem.Demand = new DoubleArray(cvrpData.Demands);
    45       if (cvrpData.DistanceMeasure != DistanceMeasure.Euclidean) {
    46         problem.UseDistanceMatrix.Value = true;
    47         problem.DistanceMatrix = new DoubleMatrix(cvrpData.GetDistanceMatrix());
    48       }
    49       problem.ReadyTime = new DoubleArray(cvrpData.ReadyTimes);
    50       problem.ServiceTime = new DoubleArray(cvrpData.ServiceTimes);
    51       problem.DueTime = new DoubleArray(cvrpData.DueTimes);
    52       result.ProblemInstance = problem;
     42      CVRPTWData cvrptwData = data as CVRPTWData;
     43      CVRPTWProblemInstance problem = problemInstance as CVRPTWProblemInstance;
    5344
    54       result.BestKnownQuality = cvrpData.BestKnownQuality;
    55       if (cvrpData.BestKnownTour != null) {
    56         PotvinEncoding solution = new PotvinEncoding(problem);
    57 
    58         for (int i = 0; i < cvrpData.BestKnownTour.GetLength(0); i++) {
    59           Tour tour = new Tour();
    60           solution.Tours.Add(tour);
    61 
    62           foreach (int stop in cvrpData.BestKnownTour[i]) {
    63             tour.Stops.Add(stop + 1);
    64           }
    65         }
    66 
    67         result.BestKnownSolution = solution;
    68       }
    69 
    70       return result;
     45      problem.ReadyTime = new DoubleArray(cvrptwData.ReadyTimes);
     46      problem.ServiceTime = new DoubleArray(cvrptwData.ServiceTimes);
     47      problem.DueTime = new DoubleArray(cvrptwData.DueTimes);
    7148    }
    7249  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/IVRPDataInterpreter.cs

    r8053 r8649  
    2222using HeuristicLab.Problems.Instances;
    2323using HeuristicLab.Problems.VehicleRouting.Interfaces;
     24using System;
    2425
    2526namespace HeuristicLab.Problems.VehicleRouting.Interpreters {
     
    3334
    3435  public interface IVRPDataInterpreter {
     36    Type GetDataType();
    3537    VRPInstanceDescription Interpret(IVRPData data);
    3638  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/MDCVRPTWInterpreter.cs

    r8053 r8649  
    2424using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin;
    2525using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
     26using HeuristicLab.Problems.VehicleRouting.Interfaces;
     27using System;
    2628
    2729namespace HeuristicLab.Problems.VehicleRouting.Interpreters {
    28   public class MDCVRPTWInterpreter : IVRPDataInterpreter<MDCVRPTWData> {
    29     public VRPInstanceDescription Interpret(IVRPData data) {
    30       MDCVRPTWData cvrpData = data as MDCVRPTWData;
     30  public class MDCVRPTWInterpreter : MDCVRPInterpreter, IVRPDataInterpreter<MDCVRPTWData> {
     31    public override Type GetDataType() {
     32      return typeof(MDCVRPTWData);
     33    }
     34   
     35    protected override IVRPProblemInstance CreateProblemInstance() {
     36      return new MDCVRPTWProblemInstance();
     37    }
    3138
    32       VRPInstanceDescription result = new VRPInstanceDescription();
    33       result.Name = cvrpData.Name;
    34       result.Description = cvrpData.Description;
     39    protected override void Interpret(IVRPData data, IVRPProblemInstance problemInstance) {
     40      base.Interpret(data, problemInstance);
    3541
    36       MDCVRPTWProblemInstance problem = new MDCVRPTWProblemInstance();
    37       if (cvrpData.Coordinates != null)
    38         problem.Coordinates = new DoubleMatrix(cvrpData.Coordinates);
    39       if (cvrpData.MaximumVehicles != null)
    40         problem.Vehicles.Value = (int)cvrpData.MaximumVehicles;
    41       else
    42         problem.Vehicles.Value = cvrpData.Dimension - 1;
    43       problem.Capacity = new DoubleArray(cvrpData.Capacity);
    44       problem.Demand = new DoubleArray(cvrpData.Demands);
    45       if (cvrpData.DistanceMeasure != DistanceMeasure.Euclidean) {
    46         problem.UseDistanceMatrix.Value = true;
    47         problem.DistanceMatrix = new DoubleMatrix(cvrpData.GetDistanceMatrix());
    48       }
     42      MDCVRPTWData cvrptwData = data as MDCVRPTWData;
     43      MDCVRPTWProblemInstance problem = problemInstance as MDCVRPTWProblemInstance;
    4944
    50       problem.Depots.Value = cvrpData.Depots;
    51       problem.VehicleDepotAssignment = new IntArray(cvrpData.VehicleDepotAssignment);
    52 
    53       problem.ReadyTime = new DoubleArray(cvrpData.ReadyTimes);
    54       problem.ServiceTime = new DoubleArray(cvrpData.ServiceTimes);
    55       problem.DueTime = new DoubleArray(cvrpData.DueTimes);
    56       result.ProblemInstance = problem;
    57 
    58       result.BestKnownQuality = cvrpData.BestKnownQuality;
    59       if (cvrpData.BestKnownTour != null) {
    60         PotvinEncoding solution = new PotvinEncoding(problem);
    61 
    62         for (int i = 0; i < cvrpData.BestKnownTour.GetLength(0); i++) {
    63           Tour tour = new Tour();
    64           solution.Tours.Add(tour);
    65 
    66           foreach (int stop in cvrpData.BestKnownTour[i]) {
    67             tour.Stops.Add(stop + 1);
    68           }
    69         }
    70 
    71         result.BestKnownSolution = solution;
    72       }
    73 
    74       return result;
     45      problem.ReadyTime = new DoubleArray(cvrptwData.ReadyTimes);
     46      problem.ServiceTime = new DoubleArray(cvrptwData.ServiceTimes);
     47      problem.DueTime = new DoubleArray(cvrptwData.DueTimes);
    7548    }
    7649  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/PDPTWInterpreter.cs

    r8053 r8649  
    2424using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin;
    2525using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
     26using HeuristicLab.Problems.VehicleRouting.Interfaces;
     27using System;
    2628
    2729namespace HeuristicLab.Problems.VehicleRouting.Interpreters {
    28   public class PDPTWInterpreter : IVRPDataInterpreter<PDPTWData> {
    29     public VRPInstanceDescription Interpret(IVRPData data) {
    30       PDPTWData cvrpData = data as PDPTWData;
     30  public class PDPTWInterpreter : CVRPTWInterpreter, IVRPDataInterpreter<PDPTWData> {
     31    public override Type GetDataType() {
     32      return typeof(PDPTWData);
     33    }
     34   
     35    protected override IVRPProblemInstance CreateProblemInstance() {
     36      return new CVRPPDTWProblemInstance();
     37    }
    3138
    32       VRPInstanceDescription result = new VRPInstanceDescription();
    33       result.Name = cvrpData.Name;
    34       result.Description = cvrpData.Description;
     39    protected override void Interpret(IVRPData data, IVRPProblemInstance problemInstance) {
     40      base.Interpret(data, problemInstance);
    3541
    36       CVRPPDTWProblemInstance problem = new CVRPPDTWProblemInstance();
    37       if (cvrpData.Coordinates != null)
    38         problem.Coordinates = new DoubleMatrix(cvrpData.Coordinates);
    39       if (cvrpData.MaximumVehicles != null)
    40         problem.Vehicles.Value = (int)cvrpData.MaximumVehicles;
    41       else
    42         problem.Vehicles.Value = cvrpData.Dimension - 1;
    43       problem.Capacity.Value = cvrpData.Capacity;
    44       problem.Demand = new DoubleArray(cvrpData.Demands);
    45       if (cvrpData.DistanceMeasure != DistanceMeasure.Euclidean) {
    46         problem.UseDistanceMatrix.Value = true;
    47         problem.DistanceMatrix = new DoubleMatrix(cvrpData.GetDistanceMatrix());
    48       }
    49       problem.ReadyTime = new DoubleArray(cvrpData.ReadyTimes);
    50       problem.ServiceTime = new DoubleArray(cvrpData.ServiceTimes);
    51       problem.DueTime = new DoubleArray(cvrpData.DueTimes);
    52       problem.PickupDeliveryLocation = new IntArray(cvrpData.PickupDeliveryLocations);
    53       result.ProblemInstance = problem;
     42      PDPTWData pdpData = data as PDPTWData;
     43      CVRPPDTWProblemInstance problem = problemInstance as CVRPPDTWProblemInstance;
    5444
    55       result.BestKnownQuality = cvrpData.BestKnownQuality;
    56       if (cvrpData.BestKnownTour != null) {
    57         PotvinEncoding solution = new PotvinEncoding(problem);
    58 
    59         for (int i = 0; i < cvrpData.BestKnownTour.GetLength(0); i++) {
    60           Tour tour = new Tour();
    61           solution.Tours.Add(tour);
    62 
    63           foreach (int stop in cvrpData.BestKnownTour[i]) {
    64             tour.Stops.Add(stop + 1);
    65           }
    66         }
    67 
    68         result.BestKnownSolution = solution;
    69       }
    70 
    71       return result;
     45      problem.PickupDeliveryLocation = new IntArray(pdpData.PickupDeliveryLocations);
    7246    }
    7347  }
Note: See TracChangeset for help on using the changeset viewer.