Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/22/18 17:15:29 (6 years ago)
Author:
fholzing
Message:

#2864: Adapted PFSP and LOP to the new BasicProblem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PFSP/3.3/FSSPTAILIBInstanceProvider.cs

    r15541 r15639  
    2828using System.Text.RegularExpressions;
    2929
    30 namespace HeuristicLab.Problems.Instances.PFSP
    31 {
    32     public class FSSPTAILIBInstanceProvider : ProblemInstanceProvider<FSSPData>
     30namespace HeuristicLab.Problems.Instances.PFSP {
     31  public class FSSPTAILIBInstanceProvider : ProblemInstanceProvider<FSSPData> {
     32
     33    public override string Name
    3334    {
     35      get { return "FSSPTAI"; }
     36    }
    3437
    35         public override string Name
    36         {
    37             get { return "FSSPTAI"; }
     38    public override string Description
     39    {
     40      get { return "Permutation Flowshop Scheduling Problems (PFSP) as defined by Taillard."; }
     41    }
     42
     43    public override Uri WebLink
     44    {
     45      get { return new Uri("http://mistic.heig-vd.ch/taillard/problemes.dir/ordonnancement.dir/ordonnancement.html"); }
     46    }
     47
     48    public override string ReferencePublication
     49    {
     50      get { return String.Empty; }
     51    }
     52
     53    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
     54      var instanceArchiveName = GetResourceName("FSSPTAI.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 FSSPTAILIBDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
    3860        }
     61      }
     62    }
    3963
    40         public override string Description
    41         {
    42             get { return "Permutation Flowshop Scheduling Problems (PFSP) as defined by Taillard."; }
     64    public override FSSPData LoadData(IDataDescriptor id) {
     65      var descriptor = (FSSPTAILIBDataDescriptor)id;
     66      var instanceArchiveName = GetResourceName("FSSPTAI.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 FSSPTAILIBParser();
     72          parser.Parse(stream);
     73          return Load(parser);
    4374        }
     75      }
     76    }
    4477
    45         public override Uri WebLink
    46         {
    47             get { return new Uri("http://mistic.heig-vd.ch/taillard/problemes.dir/ordonnancement.dir/ordonnancement.html"); }
    48         }
     78    public override bool CanImportData
     79    {
     80      get { return true; }
     81    }
     82    public override FSSPData ImportData(string path) {
     83      var parser = new FSSPTAILIBParser();
     84      parser.Parse(path);
     85      return Load(parser);
     86    }
    4987
    50         public override string ReferencePublication
    51         {
    52             get { return String.Empty; }
    53         }
     88    private FSSPData Load(FSSPTAILIBParser parser) {
     89      var instance = new FSSPData {
     90        Name = parser.Name,
     91        Description = parser.Description,
     92        Jobs = parser.Jobs,
     93        Machines = parser.Machines,
     94        ProcessingTimes = parser.ProcessingTimes,
     95        BestKnownSchedule = parser.BestKnownSchedule,
     96        BestKnownQuality = parser.BestKnownQuality
     97      };
     98      return instance;
     99    }
    54100
    55         public override IEnumerable<IDataDescriptor> GetDataDescriptors()
    56         {
    57             var instanceArchiveName = GetResourceName("FSSPTAI.zip");
    58             if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
     101    public override bool CanExportData
     102    {
     103      get { return false; }
     104    }
    59105
    60             using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read))
    61             {
    62                 foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x))
    63                 {
    64                     yield return new FSSPTAILIBDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
    65                 }
    66             }
    67         }
     106    private string GetDescription() {
     107      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
     108    }
    68109
    69         public override FSSPData LoadData(IDataDescriptor id)
    70         {
    71             var descriptor = (FSSPTAILIBDataDescriptor)id;
    72             var instanceArchiveName = GetResourceName("FSSPTAI.zip");
    73             using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read))
    74             {
    75                 var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
    76 
    77                 using (var stream = entry.Open())
    78                 {
    79                     var parser = new FSSPTAILIBParser();
    80                     parser.Parse(stream);
    81                     return Load(parser);
    82                 }
    83             }
    84         }
    85 
    86         public override bool CanImportData
    87         {
    88             get { return true; }
    89         }
    90         public override FSSPData ImportData(string path)
    91         {
    92             var parser = new FSSPTAILIBParser();
    93             parser.Parse(path);
    94             return Load(parser);
    95         }
    96 
    97         private FSSPData Load(FSSPTAILIBParser parser)
    98         {
    99             var instance = new FSSPData
    100             {
    101                 Name = parser.Name,
    102                 Description = parser.Description,
    103                 Jobs = parser.Jobs,
    104                 Machines = parser.Machines,
    105                 ProcessingTimes = parser.ProcessingTimes,
    106                 BestKnownSchedule = parser.BestKnownSchedule,
    107                 BestKnownQuality = parser.BestKnownQuality
    108             };
    109             return instance;
    110         }
    111 
    112         public override bool CanExportData
    113         {
    114             get { return false; }
    115         }
    116        
    117         private string GetDescription()
    118         {
    119             return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
    120         }
    121 
    122         protected virtual string GetResourceName(string fileName)
    123         {
    124             return Assembly.GetExecutingAssembly().GetManifestResourceNames()
    125               .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
    126         }
     110    protected virtual string GetResourceName(string fileName) {
     111      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
     112        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
    127113    }
     114  }
    128115}
Note: See TracChangeset for help on using the changeset viewer.