- Timestamp:
- 08/29/18 18:16:05 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2457_ExpertSystem/HeuristicLab.Problems.Instances.QAPLIB/3.3/OneSizeInstanceProvider.cs
r15031 r16096 3 3 using System.Linq; 4 4 using System.Text.RegularExpressions; 5 using HeuristicLab.Common; 5 6 6 7 namespace 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 7 21 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. 29 Integrating Exploratory Landscape Analysis into Metaheuristic Algorithms. 30 Lecture 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 8 40 public override IEnumerable<IDataDescriptor> GetDataDescriptors() { 9 41 var drezner = new DreznerQAPInstanceProvider(); 10 42 foreach (var desc in drezner.GetDataDescriptors()) { 11 43 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); 14 46 } 15 47 // Microarray instances are all greater than 25 dimensions 16 48 var microarray = new MicroarrayQAPInstanceProvider(); 17 49 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); 19 53 } 20 54 var qaplib = new QAPLIBInstanceProvider(); 21 55 foreach (var desc in qaplib.GetDataDescriptors()) { 22 56 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); 25 59 } 26 60 // Taillard's instances are basically from the same distribution 27 61 // to avoid over-representation in the set only the tai27e are taken and reduced to 25 dimension 28 62 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; 32 69 } 33 70 } … … 36 73 var desc = (OneSizeDataDescriptor)descriptor; 37 74 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) { 41 77 return data; 42 78 } … … 46 82 Shuffle(tmp, rand); 47 83 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)) 49 85 throwAway[t] = true; 50 86 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]; 53 89 var k = 0; 54 90 for (var i = 0; i < data.Dimension; i++) { … … 68 104 data.BestKnownAssignment = null; 69 105 data.BestKnownQuality = null; 70 data.Dimension = 25;71 data.Name += "- 25";72 data.Description += " (reduced to 25dimensions)";106 data.Dimension = Dimension; 107 data.Name += "-" + Dimension; 108 data.Description += " (reduced to " + Dimension + " dimensions)"; 73 109 74 110 return data; 75 111 } 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; } }81 112 82 113 private static void Shuffle(int[] p, Random random) {
Note: See TracChangeset
for help on using the changeset viewer.