Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/01/12 15:15:22 (12 years ago)
Author:
abeham
Message:

#1614

  • Fixed plugin dependencies
  • Updated GQAP view
  • Changed instances infrastructure
    • Changed interface types into classes
    • Removed the library specific instance classes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs

    r7482 r7538  
    2828
    2929namespace HeuristicLab.Problems.Instances.TSPLIB {
    30   public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider<ICVRPInstance> {
     30  public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider<CVRPInstance> {
    3131
    3232    public override string Name {
     
    6464    }
    6565
    66     public override ICVRPInstance GetInstance(IInstanceDescriptor id) {
     66    public override CVRPInstance LoadInstance(IInstanceDescriptor id) {
    6767      var descriptor = (TSPLIBInstanceDescriptor)id;
    68       var instance = new TSPLIBCVRPInstance();
    6968      using (var stream = Assembly.GetExecutingAssembly()
    7069        .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
    71         var parser = new TSPLIBParser(stream);
    72         parser.Parse();
    73         instance.Dimension = parser.Dimension;
    74         instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices;
    75         instance.Distances = parser.Distances;
    76         instance.Capacity = parser.Capacity.Value;
    77         instance.Demands = parser.Demands;
    78         switch (parser.EdgeWeightType) {
    79           case TSPLIBEdgeWeightTypes.ATT:
    80             instance.DistanceMeasure = CVRPDistanceMeasure.Att; break;
    81           case TSPLIBEdgeWeightTypes.CEIL_2D:
    82             instance.DistanceMeasure = CVRPDistanceMeasure.UpperEuclidean; break;
    83           case TSPLIBEdgeWeightTypes.EUC_2D:
    84           case TSPLIBEdgeWeightTypes.EUC_3D:
    85             instance.DistanceMeasure = CVRPDistanceMeasure.RoundedEuclidean; break;
    86           case TSPLIBEdgeWeightTypes.EXPLICIT:
    87             instance.DistanceMeasure = CVRPDistanceMeasure.Direct; break;
    88           case TSPLIBEdgeWeightTypes.GEO:
    89             instance.DistanceMeasure = CVRPDistanceMeasure.Geo; break;
    90           case TSPLIBEdgeWeightTypes.MAN_2D:
    91           case TSPLIBEdgeWeightTypes.MAN_3D:
    92             instance.DistanceMeasure = CVRPDistanceMeasure.Manhattan; break;
    93           case TSPLIBEdgeWeightTypes.MAX_2D:
    94           case TSPLIBEdgeWeightTypes.MAX_3D:
    95             instance.DistanceMeasure = CVRPDistanceMeasure.Maximum; break;
    96           default:
    97             throw new InvalidDataException("The given edge weight is not supported by HeuristicLab.");
    98         }
    99 
    100         instance.Name = parser.Name;
    101         instance.Description = parser.Comment
    102           + Environment.NewLine + Environment.NewLine
    103           + GetDescription();
     70        var instance = Load(new TSPLIBParser(stream));
    10471
    10572        if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) {
     
    11178          }
    11279        }
     80        return instance;
    11381      }
     82    }
     83
     84    public override CVRPInstance LoadInstance(string path) {
     85      return Load(new TSPLIBParser(path));
     86    }
     87
     88    public override void SaveInstance(CVRPInstance instance, string path) {
     89      throw new NotSupportedException();
     90    }
     91
     92    private CVRPInstance Load(TSPLIBParser parser) {
     93      parser.Parse();
     94      var instance = new CVRPInstance();
     95      instance.Dimension = parser.Dimension;
     96      instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices;
     97      instance.Distances = parser.Distances;
     98      instance.Capacity = parser.Capacity.Value;
     99      instance.Demands = parser.Demands;
     100      switch (parser.EdgeWeightType) {
     101        case TSPLIBEdgeWeightTypes.ATT:
     102          instance.DistanceMeasure = CVRPDistanceMeasure.Att; break;
     103        case TSPLIBEdgeWeightTypes.CEIL_2D:
     104          instance.DistanceMeasure = CVRPDistanceMeasure.UpperEuclidean; break;
     105        case TSPLIBEdgeWeightTypes.EUC_2D:
     106        case TSPLIBEdgeWeightTypes.EUC_3D:
     107          instance.DistanceMeasure = CVRPDistanceMeasure.RoundedEuclidean; break;
     108        case TSPLIBEdgeWeightTypes.EXPLICIT:
     109          instance.DistanceMeasure = CVRPDistanceMeasure.Direct; break;
     110        case TSPLIBEdgeWeightTypes.GEO:
     111          instance.DistanceMeasure = CVRPDistanceMeasure.Geo; break;
     112        case TSPLIBEdgeWeightTypes.MAN_2D:
     113        case TSPLIBEdgeWeightTypes.MAN_3D:
     114          instance.DistanceMeasure = CVRPDistanceMeasure.Manhattan; break;
     115        case TSPLIBEdgeWeightTypes.MAX_2D:
     116        case TSPLIBEdgeWeightTypes.MAX_3D:
     117          instance.DistanceMeasure = CVRPDistanceMeasure.Maximum; break;
     118        default:
     119          throw new InvalidDataException("The given edge weight is not supported by HeuristicLab.");
     120      }
     121
     122      instance.Name = parser.Name;
     123      instance.Description = parser.Comment
     124        + Environment.NewLine + Environment.NewLine
     125        + GetDescription();
     126
    114127      return instance;
    115128    }
Note: See TracChangeset for help on using the changeset viewer.