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);
            }
        }
Example #2
0
        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);
        }
Example #4
0
        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);
Example #10
0
 protected abstract T LoadInstance(TSPLIBParser parser);