Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/24/18 17:16:00 (7 years ago)
Author:
fholzing
Message:

#2864: Implemented a base class as the instance provider of LOPs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPIOInstanceProvider.cs

    r16009 r16013  
    2121
    2222using System;
    23 using System.Collections.Generic;
    24 using System.IO;
    25 using System.IO.Compression;
    26 using System.Linq;
    27 using System.Reflection;
    28 using System.Text.RegularExpressions;
    2923
    3024namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
    31   public class LOPIOInstanceProvider : ProblemInstanceProvider<LOPData> {
     25  public class LOPIOInstanceProvider : LOPInstanceProvider {
    3226
    3327    public override string Name
     
    4539      get { return new Uri("http://www.optsicom.es/lolib/lop/IO.zip"); }
    4640    }
    47 
    48     public override string ReferencePublication
    49     {
    50       get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
    51     }
    52 
    53     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
    54       var instanceArchiveName = GetResourceName("IO.zip");
    55       if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
    56 
    57       using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
    58         foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
    59           yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
    60         }
    61       }
    62     }
    63 
    64     public override LOPData LoadData(IDataDescriptor id) {
    65       var descriptor = (LOPDataDescriptor)id;
    66       var instanceArchiveName = GetResourceName("IO.zip");
    67       using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
    68         var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
    69 
    70         using (var stream = entry.Open()) {
    71           var parser = new LOPParser();
    72           parser.Parse(stream);
    73           return Load(parser);
    74         }
    75       }
    76     }
    77 
    78     public override bool CanImportData
    79     {
    80       get { return true; }
    81     }
    82 
    83     public override LOPData ImportData(string path) {
    84       var parser = new LOPParser();
    85       parser.Parse(path);
    86       return Load(parser);
    87     }
    88 
    89     private LOPData Load(LOPParser parser) {
    90       var instance = new LOPData {
    91         Name = parser.Name,
    92         Description = parser.Description,
    93         Dimension = parser.Dimension,
    94         Matrix = parser.Matrix,
    95         BestKnownPermutation = parser.BestKnownPermutation,
    96         BestKnownQuality = parser.BestKnownQuality
    97       };
    98       return instance;
    99     }
    100 
    101     public override bool CanExportData
    102     {
    103       get { return false; }
    104     }
    105 
    106     private string GetDescription() {
    107       return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
    108     }
    109 
    110     protected virtual string GetResourceName(string fileName) {
    111       return Assembly.GetExecutingAssembly().GetManifestResourceNames()
    112         .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
    113     }
    11441  }
    11542}
Note: See TracChangeset for help on using the changeset viewer.