Changeset 7538 for branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs
- Timestamp:
- 03/01/12 15:15:22 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs
r7482 r7538 28 28 29 29 namespace HeuristicLab.Problems.Instances.TSPLIB { 30 public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider< ICVRPInstance> {30 public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider<CVRPInstance> { 31 31 32 32 public override string Name { … … 64 64 } 65 65 66 public override ICVRPInstance GetInstance(IInstanceDescriptor id) {66 public override CVRPInstance LoadInstance(IInstanceDescriptor id) { 67 67 var descriptor = (TSPLIBInstanceDescriptor)id; 68 var instance = new TSPLIBCVRPInstance();69 68 using (var stream = Assembly.GetExecutingAssembly() 70 69 .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)); 104 71 105 72 if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) { … … 111 78 } 112 79 } 80 return instance; 113 81 } 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 114 127 return instance; 115 128 }
Note: See TracChangeset
for help on using the changeset viewer.