Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/29/18 18:16:05 (6 years ago)
Author:
abeham
Message:

#2457:

  • Changed calculation of correlation length (using limit introduced Hordijk 1996)
  • Changed RuggednessCalculator (no more a HL item)
  • Added additional, information-analysis-based features for directed walks
  • Added generic DirectedWalk algorithm (as described in thesis)
  • Made OneSizeInstanceProvider parametrizable
  • Adapted program for analyzing problem instance reidentification
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2457_ExpertSystem/HeuristicLab.Problems.Instances.QAPLIB/3.3/OneSizeInstanceProvider.cs

    r15031 r16096  
    33using System.Linq;
    44using System.Text.RegularExpressions;
     5using HeuristicLab.Common;
    56
    67namespace HeuristicLab.Problems.Instances.QAPLIB {
     8  public class OneSize10InstanceProvider : OneSizeInstanceProvider {
     9    public OneSize10InstanceProvider() : base(10) { }
     10  }
     11  public class OneSize25InstanceProvider : OneSizeInstanceProvider {
     12    public OneSize25InstanceProvider() : base(25) { }
     13  }
     14  public class OneSize50InstanceProvider : OneSizeInstanceProvider {
     15    public OneSize50InstanceProvider() : base(50) { }
     16  }
     17  public class OneSize100InstanceProvider : OneSizeInstanceProvider {
     18    public OneSize100InstanceProvider() : base(100) { }
     19  }
     20
    721  public class OneSizeInstanceProvider : ProblemInstanceProvider<QAPData> {
     22    public override string Name { get { return "One Size (n = " + Dimension + ")"; } }
     23    public override string Description { get { return "Instances from various libraries reduced to a dimension of " + Dimension + "."; } }
     24    public override Uri WebLink { get { return null; } }
     25    public override string ReferencePublication {
     26      get {
     27        return
     28@"A. Beham, E. Pitzer, S. Wagner, M. Affenzeller. 2017.
     29Integrating Exploratory Landscape Analysis into Metaheuristic Algorithms.
     30Lecture Notes in Computer Science 10671, Las Palmas de Gran Canaria, Spanien, pp. 473-480";
     31      }
     32    }
     33
     34    public int Dimension { get; private set; }
     35
     36    public OneSizeInstanceProvider(int dimension) {
     37      Dimension = dimension;
     38    }
     39
    840    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
    941      var drezner = new DreznerQAPInstanceProvider();
    1042      foreach (var desc in drezner.GetDataDescriptors()) {
    1143        var dim = int.Parse(Regex.Match(desc.Name, "dre(?<g>\\d+)").Groups["g"].Value);
    12         if (dim < 25) continue;
    13         yield return new OneSizeDataDescriptor(desc.Name + (dim == 25 ? "" : "-25"), desc.Description, drezner, desc);
     44        if (dim < Dimension) continue;
     45        yield return new OneSizeDataDescriptor(desc.Name + (dim == Dimension ? "" : "-" + Dimension), desc.Description, drezner, desc);
    1446      }
    1547      // Microarray instances are all greater than 25 dimensions
    1648      var microarray = new MicroarrayQAPInstanceProvider();
    1749      foreach (var desc in microarray.GetDataDescriptors()) {
    18         yield return new OneSizeDataDescriptor(desc.Name + "-25", desc.Description, microarray, desc);
     50        var instance = microarray.LoadData(desc);
     51        if (instance.Dimension < Dimension) continue;
     52        yield return new OneSizeDataDescriptor(desc.Name + (instance.Dimension == Dimension ? "" : "-" + Dimension), desc.Description, microarray, desc);
    1953      }
    2054      var qaplib = new QAPLIBInstanceProvider();
    2155      foreach (var desc in qaplib.GetDataDescriptors()) {
    2256        var instance = qaplib.LoadData(desc);
    23         if (instance.Dimension < 25) continue;
    24         yield return new OneSizeDataDescriptor(desc.Name + (instance.Dimension == 25 ? "" : "-25"), desc.Description, qaplib, desc);
     57        if (instance.Dimension < Dimension) continue;
     58        yield return new OneSizeDataDescriptor(desc.Name + (instance.Dimension == Dimension ? "" : "-" + Dimension), desc.Description, qaplib, desc);
    2559      }
    2660      // Taillard's instances are basically from the same distribution
    2761      // to avoid over-representation in the set only the tai27e are taken and reduced to 25 dimension
    2862      var taillard = new TaillardQAPInstanceProvider();
    29       foreach (var desc in taillard.GetDataDescriptors()) {
    30         if (!desc.Name.StartsWith("tai27e")) continue;
    31         yield return new OneSizeDataDescriptor(desc.Name + "-25", desc.Description, taillard, desc);
     63      var count = 0;
     64      foreach (var desc in taillard.GetDataDescriptors().OrderBy(x => x.Name, new NaturalStringComparer())) {
     65        var dim = int.Parse(Regex.Match(desc.Name, "tai(?<g>\\d+)e").Groups["g"].Value);
     66        if (dim < Dimension) continue;
     67        yield return new OneSizeDataDescriptor(desc.Name + (dim == Dimension ? "" : "-" + Dimension), desc.Description, taillard, desc);
     68        if (++count == 10) break;
    3269      }
    3370    }
     
    3673      var desc = (OneSizeDataDescriptor)descriptor;
    3774      var data = desc.ActualProvider.LoadData(desc.ActualDescriptor);
    38       data.BestKnownAssignment = null;
    39       data.BestKnownQuality = null;
    40       if (data.Dimension <= 25) {
     75
     76      if (data.Dimension <= Dimension) {
    4177        return data;
    4278      }
     
    4682      Shuffle(tmp, rand);
    4783      var throwAway = new bool[data.Dimension];
    48       foreach (var t in tmp.Take(data.Dimension - 25))
     84      foreach (var t in tmp.Take(data.Dimension - Dimension))
    4985        throwAway[t] = true;
    5086
    51       var weights = new double[25, 25];
    52       var distances = new double[25, 25];
     87      var weights = new double[Dimension, Dimension];
     88      var distances = new double[Dimension, Dimension];
    5389      var k = 0;
    5490      for (var i = 0; i < data.Dimension; i++) {
     
    68104      data.BestKnownAssignment = null;
    69105      data.BestKnownQuality = null;
    70       data.Dimension = 25;
    71       data.Name += "-25";
    72       data.Description += " (reduced to 25 dimensions)";
     106      data.Dimension = Dimension;
     107      data.Name += "-" + Dimension;
     108      data.Description += " (reduced to " + Dimension + " dimensions)";
    73109
    74110      return data;
    75111    }
    76 
    77     public override string Name { get { return "One Size"; } }
    78     public override string Description { get { return string.Empty; } }
    79     public override Uri WebLink { get { return null; } }
    80     public override string ReferencePublication { get { return string.Empty; } }
    81112   
    82113    private static void Shuffle(int[] p, Random random) {
Note: See TracChangeset for help on using the changeset viewer.