Changeset 10435


Ignore:
Timestamp:
02/04/14 16:21:15 (4 years ago)
Author:
pfleck
Message:

#2152

  • Removed generic argument of VRPInstanceProvider.
  • Removed specific IProblemInstanceConsumer interfaces.
  • Added dynamic lookup of compatible interpreter.
Location:
trunk/sources
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs

    r9456 r10435  
    2323
    2424namespace HeuristicLab.Problems.Instances.VehicleRouting {
    25   public abstract class CordeauFormatInstanceProvider : VRPInstanceProvider<MDCVRPTWData> {
    26     protected override MDCVRPTWData LoadData(Stream stream) {
     25  public abstract class CordeauFormatInstanceProvider : VRPInstanceProvider {
     26    protected override VRPData LoadData(Stream stream) {
    2727      return LoadInstance(new CordeauParser(stream));
    2828    }
     
    3131      get { return true; }
    3232    }
    33     public override MDCVRPTWData ImportData(string path) {
     33    public override VRPData ImportData(string path) {
    3434      return LoadInstance(new CordeauParser(path));
    3535    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/GoldenFormat/GoldenFormatInstanceProvider.cs

    r9456 r10435  
    2424
    2525namespace HeuristicLab.Problems.Instances.VehicleRouting {
    26   public abstract class GoldenFormatInstanceProvider : VRPInstanceProvider<CVRPTWData> {
    27     protected override CVRPTWData LoadData(Stream stream) {
     26  public abstract class GoldenFormatInstanceProvider : VRPInstanceProvider {
     27    protected override VRPData LoadData(Stream stream) {
    2828      return LoadInstance(new GoldenParser(stream));
    2929    }
     
    3232      get { return true; }
    3333    }
    34     public override CVRPTWData ImportData(string path) {
     34    public override VRPData ImportData(string path) {
    3535      return LoadInstance(new GoldenParser(path));
    3636    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimFormatInstanceProvider.cs

    r9456 r10435  
    2323
    2424namespace HeuristicLab.Problems.Instances.VehicleRouting {
    25   public abstract class LiLimFormatInstanceProvider : VRPInstanceProvider<PDPTWData> {
    26     protected override PDPTWData LoadData(Stream stream) {
     25  public abstract class LiLimFormatInstanceProvider : VRPInstanceProvider {
     26    protected override VRPData LoadData(Stream stream) {
    2727      return LoadInstance(new LiLimParser(stream));
    2828    }
     
    3131      get { return true; }
    3232    }
    33     public override PDPTWData ImportData(string path) {
     33    public override VRPData ImportData(string path) {
    3434      return LoadInstance(new LiLimParser(path));
    3535    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/SolomonFormatInstanceProvider.cs

    r9456 r10435  
    2323
    2424namespace HeuristicLab.Problems.Instances.VehicleRouting {
    25   public abstract class SolomonFormatInstanceProvider : VRPInstanceProvider<CVRPTWData> {
    26     protected override CVRPTWData LoadData(Stream stream) {
     25  public abstract class SolomonFormatInstanceProvider : VRPInstanceProvider {
     26    protected override VRPData LoadData(Stream stream) {
    2727      return LoadInstance(new SolomonParser(stream));
    2828    }
     
    3131      get { return true; }
    3232    }
    33     public override CVRPTWData ImportData(string path) {
     33    public override VRPData ImportData(string path) {
    3434      return LoadInstance(new SolomonParser(path));
    3535    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/TSPLibFormat/TSPLibFormatInstanceProvider.cs

    r9456 r10435  
    2525
    2626namespace HeuristicLab.Problems.Instances.VehicleRouting {
    27   public abstract class TSPLibFormatInstanceProvider : VRPInstanceProvider<CVRPData> {
    28     protected override CVRPData LoadData(Stream stream) {
     27  public abstract class TSPLibFormatInstanceProvider : VRPInstanceProvider {
     28    protected override VRPData LoadData(Stream stream) {
    2929      return LoadInstance(new TSPLIBParser(stream));
    3030    }
     
    3333      get { return true; }
    3434    }
    35     public override CVRPData ImportData(string path) {
     35    public override VRPData ImportData(string path) {
    3636      return LoadInstance(new TSPLIBParser(path));
    3737    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/TaillardFormat/TaillardFormatInstanceProvider.cs

    r9456 r10435  
    2323
    2424namespace HeuristicLab.Problems.Instances.VehicleRouting {
    25   public abstract class TaillardFormatInstanceProvider : VRPInstanceProvider<CVRPData> {
    26     protected override CVRPData LoadData(Stream stream) {
     25  public abstract class TaillardFormatInstanceProvider : VRPInstanceProvider {
     26    protected override VRPData LoadData(Stream stream) {
    2727      return LoadInstance(new TaillardParser(stream));
    2828    }
     
    3131      get { return true; }
    3232    }
    33     public override CVRPData ImportData(string path) {
     33    public override VRPData ImportData(string path) {
    3434      return LoadInstance(new TaillardParser(path));
    3535    }
  • trunk/sources/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs

    r9456 r10435  
    2929
    3030namespace HeuristicLab.Problems.Instances.VehicleRouting {
    31   public abstract class VRPInstanceProvider<T> : ProblemInstanceProvider<T>, IVRPInstanceProvider where T : IVRPData {
     31  public abstract class VRPInstanceProvider : ProblemInstanceProvider<VRPData>, IVRPInstanceProvider {
    3232    protected abstract string FileName { get; }
    3333
     
    5252    }
    5353
    54     public override T LoadData(IDataDescriptor id) {
     54    public override VRPData LoadData(IDataDescriptor id) {
    5555      var descriptor = (VRPDataDescriptor)id;
    5656      var instanceArchiveName = GetResourceName(FileName + @"\.zip");
     
    7676    }
    7777
    78     private static void LoadSolution(Stream stream, T instance) {
     78    private static void LoadSolution(Stream stream, VRPData instance) {
    7979      List<List<int>> routes = new List<List<int>>();
    8080
     
    9999    }
    100100
    101     public static void LoadSolution(string path, T instance) {
     101    public static void LoadSolution(string path, VRPData instance) {
    102102      using (FileStream stream = new FileStream(path, FileMode.Open)) {
    103103        LoadSolution(stream, instance);
     
    105105    }
    106106
    107     protected abstract T LoadData(Stream stream);
     107    protected abstract VRPData LoadData(Stream stream);
    108108
    109109    public IVRPData Import(string vrpFile, string tourFile) {
     
    116116
    117117    public void Export(IVRPData instance, string path) {
    118       ExportData((T)instance, path);
     118      ExportData((VRPData)instance, path);
    119119    }
    120120
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs

    r10363 r10435  
    3939
    4040namespace HeuristicLab.Problems.VehicleRouting {
    41   public interface IVRPInstanceConsumer :
    42     IProblemInstanceConsumer<CVRPData>, IProblemInstanceConsumer<CVRPTWData>,
    43     IProblemInstanceConsumer<MDCVRPData>, IProblemInstanceConsumer<MDCVRPTWData>,
    44     IProblemInstanceConsumer<PDPTWData> {
    45   }
    46 
    4741  [Item("Vehicle Routing Problem", "Represents a Vehicle Routing Problem.")]
    4842  [Creatable("Problems")]
    4943  [StorableClass]
    50   public sealed class VehicleRoutingProblem : Problem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent, IVRPInstanceConsumer {
     44  public sealed class VehicleRoutingProblem : Problem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent, IProblemInstanceConsumer<VRPData> {
    5145    public string Filename { get; set; }
    5246
     
    390384      }
    391385    }
    392 
    393     public void Load(CVRPData data) {
    394       Load(data, new CVRPInterpreter());
    395     }
    396 
    397     public void Load(CVRPTWData data) {
    398       Load(data, new CVRPTWInterpreter());
    399     }
    400 
    401     public void Load(MDCVRPData data) {
    402       Load(data, new MDCVRPInterpreter());
    403     }
    404 
    405     public void Load(MDCVRPTWData data) {
    406       Load(data, new MDCVRPTWInterpreter());
    407     }
    408 
    409     public void Load(PDPTWData data) {
    410       Load(data, new PDPTWInterpreter());
     386    #endregion
     387
     388    #region IProblemInstanceConsumer<VRPData> Members
     389
     390    public void Load(VRPData data) {
     391      Type interpreterType = typeof(IVRPDataInterpreter<>).MakeGenericType(data.GetType());
     392      var interpreters = ApplicationManager.Manager.GetInstances(interpreterType);
     393      IVRPDataInterpreter interpreter = null;
     394      foreach (object i in interpreters) {
     395        var parentInterfaces = i.GetType().BaseType.GetInterfaces();
     396        var interfaces = i.GetType().GetInterfaces().Except(parentInterfaces);
     397        var interpreterInterface = interfaces.First(j => typeof(IVRPDataInterpreter).IsAssignableFrom(j));
     398        var interpreterDataType = interpreterInterface.GetGenericArguments()[0];
     399        if (interpreterDataType == data.GetType()) {
     400          interpreter = i as IVRPDataInterpreter;
     401          break;
     402        }
     403      }
     404
     405      if (interpreter == null)
     406        throw new ArgumentException("No interpreter found for the VRP type");
     407      Load(data, interpreter);
    411408    }
    412409
Note: See TracChangeset for help on using the changeset viewer.