public override T LoadData(IDataDescriptor id) { var descriptor = (TSPLIBDataDescriptor)id; var instanceArchiveName = GetResourceName(FileExtension + @"\.zip"); using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) { var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier); var stream = entry.Open(); var parser = new TSPLIBParser(stream); var instance = LoadInstance(parser, id); LoadQuality(descriptor.BestQuality, instance); if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) { var solutionsArchiveName = GetResourceName(FileExtension + @"\.opt\.tour\.zip"); using (var solutionsZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName), ZipArchiveMode.Read)) { entry = solutionsZipFile.GetEntry(descriptor.SolutionIdentifier); stream = entry.Open(); parser = new TSPLIBParser(stream); LoadSolution(parser, instance); } } return(instance); } }
protected override PTSPData LoadInstance(TSPLIBParser parser, IDataDescriptor descriptor = null) { parser.Parse(); if (parser.FixedEdges != null) { throw new InvalidDataException("TSP instance " + parser.Name + " contains fixed edges which are not supported by HeuristicLab."); } var instance = new PTSPData(); instance.Dimension = parser.Dimension; instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices; instance.Distances = parser.Distances; switch (parser.EdgeWeightType) { case TSPLIBEdgeWeightTypes.ATT: instance.DistanceMeasure = DistanceMeasure.Att; break; case TSPLIBEdgeWeightTypes.CEIL_2D: instance.DistanceMeasure = DistanceMeasure.UpperEuclidean; break; case TSPLIBEdgeWeightTypes.EUC_2D: instance.DistanceMeasure = DistanceMeasure.RoundedEuclidean; break; case TSPLIBEdgeWeightTypes.EUC_3D: throw new InvalidDataException("3D coordinates are not supported."); case TSPLIBEdgeWeightTypes.EXPLICIT: instance.DistanceMeasure = DistanceMeasure.Direct; break; case TSPLIBEdgeWeightTypes.GEO: instance.DistanceMeasure = DistanceMeasure.Geo; break; case TSPLIBEdgeWeightTypes.MAN_2D: instance.DistanceMeasure = DistanceMeasure.Manhattan; break; case TSPLIBEdgeWeightTypes.MAN_3D: throw new InvalidDataException("3D coordinates are not supported."); case TSPLIBEdgeWeightTypes.MAX_2D: instance.DistanceMeasure = DistanceMeasure.Maximum; break; case TSPLIBEdgeWeightTypes.MAX_3D: throw new InvalidDataException("3D coordinates are not supported."); default: throw new InvalidDataException("The given edge weight is not supported by HeuristicLab."); } instance.Name = parser.Name; instance.Description = parser.Comment + Environment.NewLine + Environment.NewLine + GetInstanceDescription(); instance.Probabilities = GetProbabilities(descriptor, instance); return(instance); }
public TSPData LoadData(string tspFile, string tourFile, double?bestQuality) { var data = LoadInstance(new TSPLIBParser(tspFile)); if (!String.IsNullOrEmpty(tourFile)) { var tourParser = new TSPLIBParser(tourFile); LoadSolution(tourParser, data); } if (bestQuality.HasValue) { data.BestKnownQuality = bestQuality.Value; } return(data); }
protected override ATSPData LoadInstance(TSPLIBParser parser) { var instance = new ATSPData(); parser.Parse(); instance.Dimension = parser.Dimension; instance.Coordinates = parser.DisplayVertices != null ? parser.DisplayVertices : parser.Vertices; instance.Distances = parser.Distances; instance.Name = parser.Name; instance.Description = parser.Comment + Environment.NewLine + Environment.NewLine + GetInstanceDescription(); return(instance); }
protected override CVRPData LoadInstance(TSPLIBParser parser, IDataDescriptor descriptor = null) { parser.Parse(); var instance = new CVRPData(); instance.Dimension = parser.Dimension; instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices; instance.Distances = parser.Distances; instance.Capacity = parser.Capacity.Value; instance.Demands = parser.Demands; switch (parser.EdgeWeightType) { case TSPLIBEdgeWeightTypes.ATT: instance.DistanceMeasure = DistanceMeasure.Att; break; case TSPLIBEdgeWeightTypes.CEIL_2D: instance.DistanceMeasure = DistanceMeasure.UpperEuclidean; break; case TSPLIBEdgeWeightTypes.EUC_2D: case TSPLIBEdgeWeightTypes.EUC_3D: instance.DistanceMeasure = DistanceMeasure.RoundedEuclidean; break; case TSPLIBEdgeWeightTypes.EXPLICIT: instance.DistanceMeasure = DistanceMeasure.Direct; break; case TSPLIBEdgeWeightTypes.GEO: instance.DistanceMeasure = DistanceMeasure.Geo; break; case TSPLIBEdgeWeightTypes.MAN_2D: case TSPLIBEdgeWeightTypes.MAN_3D: instance.DistanceMeasure = DistanceMeasure.Manhattan; break; case TSPLIBEdgeWeightTypes.MAX_2D: case TSPLIBEdgeWeightTypes.MAX_3D: instance.DistanceMeasure = DistanceMeasure.Maximum; break; default: throw new InvalidDataException("The given edge weight is not supported by HeuristicLab."); } instance.Name = parser.Name; instance.Description = parser.Comment + Environment.NewLine + Environment.NewLine + GetInstanceDescription(); return(instance); }
protected override void LoadSolution(TSPLIBParser parser, TSPData instance) { parser.Parse(); instance.BestKnownTour = parser.Tour.FirstOrDefault(); }
protected override void LoadSolution(TSPLIBParser parser, CVRPData instance) { parser.Parse(); instance.BestKnownTour = parser.Tour; }
protected abstract void LoadSolution(TSPLIBParser parser, T instance);
protected abstract T LoadInstance(TSPLIBParser parser, IDataDescriptor descriptor = null);
protected abstract T LoadInstance(TSPLIBParser parser);