Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/DreznerQAPInstanceProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/DreznerQAPInstanceProvider.cs	(revision 8909)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/DreznerQAPInstanceProvider.cs	(revision 8909)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Problems.Instances.QAPLIB {
+  public class DreznerQAPInstanceProvider : QAPLIBInstanceProvider {
+    
+    public override string Name {
+      get { return "Drezner's QAP instances"; }
+    }
+
+    public override string Description {
+      get { return "QAP instances from Zvi Drezner"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://cbeweb-1.fullerton.edu/isds/zdrezner/programs.htm"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"Z. Drezner, P.M. Hahn, E.D. Taillard. 2005.
+Recent Advances for the Quadratic Assignment Problem with Special Emphasis on Instances that are Difficult for Meta-heuristic Methods.
+Annals of Operations Research, 139, pp. 65–94.";
+      }
+    }
+
+    protected override string FileName { get { return "drezner"; } }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj	(revision 8908)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj	(revision 8909)
@@ -103,7 +103,7 @@
   <ItemGroup>
     <Reference Include="ICSharpCode.SharpZipLib">
-		<HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
-		<Private>False</Private>
-	</Reference>
+      <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -111,4 +111,7 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="TaillardQAPInstanceProvider.cs" />
+    <Compile Include="DreznerQAPInstanceProvider.cs" />
+    <Compile Include="MicroarrayQAPInstanceProvider.cs" />
     <Compile Include="QAPLIBParser.cs" />
     <Compile Include="QAPLIBDataDescriptor.cs" />
@@ -117,4 +120,10 @@
     <EmbeddedResource Include="Data\qap.dat.zip" />
     <EmbeddedResource Include="Data\qap.sln.zip" />
+    <EmbeddedResource Include="Data\microarray.dat.zip" />
+    <EmbeddedResource Include="Data\microarray.sln.zip" />
+    <EmbeddedResource Include="Data\drezner.dat.zip" />
+    <EmbeddedResource Include="Data\drezner.sln.zip" />
+    <EmbeddedResource Include="Data\taillard.dat.zip" />
+    <EmbeddedResource Include="Data\taillard.sln.zip" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="Plugin.cs" />
@@ -144,5 +153,5 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -150,5 +159,5 @@
 
 call PreBuildEvent.cmd</PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/MicroarrayQAPInstanceProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/MicroarrayQAPInstanceProvider.cs	(revision 8909)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/MicroarrayQAPInstanceProvider.cs	(revision 8909)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Problems.Instances.QAPLIB {
+  public class MicroarrayQAPInstanceProvider : QAPLIBInstanceProvider {
+    
+    public override string Name {
+      get { return "Microarray QAP"; }
+    }
+
+    public override string Description {
+      get { return "Microarray placement problems (QAPLIB format)"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://www.rahmannlab.de/research/microarray-design"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"S.A. de Carvalho Jr, S. Rahmann. 2006.
+Microarray layout as a quadratic assignment problem.
+D. Huson, O. Kohlbacher, A. Lupas, K. Nieselt, A. Zell (Eds.),
+Proceedings of the German Conference on Bioinformatics, vol. 83, pp. 11-20.
+Gesellschaft für Informatik Bonn, Germany.";
+      }
+    }
+
+    protected override string FileName { get { return "microarray"; } }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs	(revision 8908)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs	(revision 8909)
@@ -167,5 +167,5 @@
     }
 
-    private const string FileName = "qap";
+    protected virtual string FileName { get { return "qap"; } }
 
     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBParser.cs	(revision 8908)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBParser.cs	(revision 8909)
@@ -58,5 +58,5 @@
       Distances = new double[Size, Size];
       Weights = new double[Size, Size];
-      char[] delim = new char[] { ' ' };
+      char[] delim = new char[] { ' ', '\t' };
 
       Weights = ParseMatrix(reader, delim);
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBSolutionParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBSolutionParser.cs	(revision 8908)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBSolutionParser.cs	(revision 8909)
@@ -23,4 +23,5 @@
 using System.Globalization;
 using System.IO;
+using System.Linq;
 
 namespace HeuristicLab.Problems.Instances.QAPLIB {
@@ -81,5 +82,5 @@
       try {
         StreamReader reader = new StreamReader(stream);
-        char[] delim = new char[] { ' ', ',' }; // comma is added for nug30.sln which is the only file that separates the permutation with commas
+        char[] delim = new char[] { ' ', '\t', ',' }; // comma is added for nug30.sln which is the only file that separates the permutation with commas
         string[] firstline = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
         Size = int.Parse(firstline[0]);
@@ -90,9 +91,11 @@
           string valLine = reader.ReadLine();
           string[] vals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
+          int start = 1;
+          if (vals.Any(x => x == "0")) start = 0;
           if (vals.Length == 0) continue;
           for (int j = 0; j < vals.Length; j++) {
             if (valueAsLocation)
-              Assignment[int.Parse(vals[j]) - 1] = read++;
-            else Assignment[read++] = int.Parse(vals[j]) - 1;
+              Assignment[int.Parse(vals[j]) - start] = read++;
+            else Assignment[read++] = int.Parse(vals[j]) - start;
           }
         }
Index: /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/TaillardQAPInstanceProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/TaillardQAPInstanceProvider.cs	(revision 8909)
+++ /trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/TaillardQAPInstanceProvider.cs	(revision 8909)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Problems.Instances.QAPLIB {
+  public class TaillardQAPInstanceProvider : QAPLIBInstanceProvider {
+    
+    public override string Name {
+      get { return "Taillard's QAP instances"; }
+    }
+
+    public override string Description {
+      get { return "Additional QAP instances from Eric Taillard"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://mistic.heig-vd.ch/taillard/problemes.dir/qap.dir/qap.html"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return String.Empty;
+      }
+    }
+
+    protected override string FileName { get { return "taillard"; } }
+  }
+}
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Problems.Instances-3.3/QAPLIBInstanceProviderTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Problems.Instances-3.3/QAPLIBInstanceProviderTest.cs	(revision 8908)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Problems.Instances-3.3/QAPLIBInstanceProviderTest.cs	(revision 8909)
@@ -46,4 +46,55 @@
       Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
     }
+
+    [TestMethod()]
+    public void GetMicroarrayQAPInstanceTest() {
+      var target = new MicroarrayQAPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetDataDescriptors()) {
+        try {
+          target.LoadData(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+
+    [TestMethod()]
+    public void GetDreznerQAPInstanceTest() {
+      var target = new DreznerQAPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetDataDescriptors()) {
+        try {
+          target.LoadData(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+
+    [TestMethod()]
+    public void GetTaillardQAPInstanceTest() {
+      var target = new TaillardQAPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetDataDescriptors()) {
+        try {
+          target.LoadData(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
   }
 }
