Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3.csproj
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3.csproj	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3.csproj	(revision 16109)
@@ -0,0 +1,128 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Instances.QAPGenerator.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="TaibQAPInstanceGeneratorDescriptorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TaibQAPInstanceGeneratorDescriptorView.Designer.cs">
+      <DependentUpon>TaibQAPInstanceGeneratorDescriptorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="QAPInstanceGeneratorDescriptorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="QAPInstanceGeneratorDescriptorView.Designer.cs">
+      <DependentUpon>QAPInstanceGeneratorDescriptorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="QAPInstanceGeneratorProviderView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="QAPInstanceGeneratorProviderView.Designer.cs">
+      <DependentUpon>QAPInstanceGeneratorProviderView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances.QAPGenerator\3.3\HeuristicLab.Problems.Instances.QAPGenerator-3.3.csproj">
+      <Project>{181a3267-13c9-4ac9-8cfa-5a5ef355ee76}</Project>
+      <Name>HeuristicLab.Problems.Instances.QAPGenerator-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Plugin.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Plugin.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Plugin.cs	(revision 16109)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  [Plugin("HeuristicLab.Problems.Instances.QAPGenerator.Views", "", "3.3.9.1")]
+  [PluginFile("HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.QuadraticAssignment", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
+  public class Plugin : PluginBase { }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Properties/AssemblyInfo.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/Properties/AssemblyInfo.cs	(revision 16109)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.Instances.QAPGenerator.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("FH-Hagenberg")]
+[assembly: AssemblyProduct("HeuristicLab.Problems.Instances.QAPGenerator.Views")]
+[assembly: AssemblyCopyright("Copyright © FH-Hagenberg 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("dcc208b9-20c9-4cad-9700-68795c617538")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.Designer.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.Designer.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.Designer.cs	(revision 16109)
@@ -0,0 +1,127 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  partial class QAPInstanceGeneratorDescriptorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.sizeLabel = new System.Windows.Forms.Label();
+      this.sizeNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.seedTextBox = new System.Windows.Forms.TextBox();
+      this.seedLabel = new System.Windows.Forms.Label();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.sizeNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(-3, 2);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(30, 13);
+      this.sizeLabel.TabIndex = 0;
+      this.sizeLabel.Text = "Size:";
+      // 
+      // sizeNumericUpDown
+      // 
+      this.sizeNumericUpDown.Location = new System.Drawing.Point(33, 0);
+      this.sizeNumericUpDown.Maximum = new decimal(new int[] {
+            1000,
+            0,
+            0,
+            0});
+      this.sizeNumericUpDown.Name = "sizeNumericUpDown";
+      this.sizeNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.sizeNumericUpDown.TabIndex = 1;
+      this.sizeNumericUpDown.ValueChanged += new System.EventHandler(this.sizeNumericUpDown_ValueChanged);
+      // 
+      // seedTextBox
+      // 
+      this.seedTextBox.Location = new System.Drawing.Point(144, 0);
+      this.seedTextBox.Name = "seedTextBox";
+      this.seedTextBox.Size = new System.Drawing.Size(80, 20);
+      this.seedTextBox.TabIndex = 2;
+      this.seedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.seedTextBox_Validating);
+      this.seedTextBox.Validated += new System.EventHandler(this.seedTextBox_Validated);
+      // 
+      // seedLabel
+      // 
+      this.seedLabel.AutoSize = true;
+      this.seedLabel.Location = new System.Drawing.Point(103, 2);
+      this.seedLabel.Name = "seedLabel";
+      this.seedLabel.Size = new System.Drawing.Size(35, 13);
+      this.seedLabel.TabIndex = 0;
+      this.seedLabel.Text = "Seed:";
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.ContainerControl = this;
+      // 
+      // QAPInstanceGeneratorDescriptorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.seedTextBox);
+      this.Controls.Add(this.sizeNumericUpDown);
+      this.Controls.Add(this.seedLabel);
+      this.Controls.Add(this.sizeLabel);
+      this.Name = "QAPInstanceGeneratorDescriptorView";
+      this.Size = new System.Drawing.Size(229, 19);
+      ((System.ComponentModel.ISupportInitialize)(this.sizeNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Label sizeLabel;
+    protected System.Windows.Forms.NumericUpDown sizeNumericUpDown;
+    protected System.Windows.Forms.TextBox seedTextBox;
+    protected System.Windows.Forms.Label seedLabel;
+    protected System.Windows.Forms.ErrorProvider errorProvider;
+
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorDescriptorView.cs	(revision 16109)
@@ -0,0 +1,111 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.ComponentModel;
+using System.Globalization;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  [View("QAP Instance Generator Descriptor View")]
+  [Content(typeof(QAPInstanceGeneratorDescriptor), IsDefaultView = true)]
+  public partial class QAPInstanceGeneratorDescriptorView : AsynchronousContentView {
+    protected bool SuppressEvents { get; set; }
+
+    public new QAPInstanceGeneratorDescriptor Content {
+      get { return (QAPInstanceGeneratorDescriptor)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public QAPInstanceGeneratorDescriptorView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= ContentOnPropertyChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += ContentOnPropertyChanged;
+    }
+
+    #region Event Handlers (Content)
+    protected virtual void ContentOnPropertyChanged(object sender, PropertyChangedEventArgs eventArgs) {
+      SuppressEvents = true;
+      try {
+        switch (eventArgs.PropertyName) {
+          case "N":
+            sizeNumericUpDown.Value = Content.N;
+            break;
+          case "Seed":
+            seedTextBox.Text = Content.Seed.ToString(CultureInfo.CurrentCulture.NumberFormat);
+            break;
+        }
+      } finally { SuppressEvents = false; }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          sizeNumericUpDown.Value = 0;
+          seedTextBox.Text = string.Empty;
+        } else {
+          sizeNumericUpDown.Value = Content.N;
+          seedTextBox.Text = Content.Seed.ToString(CultureInfo.CurrentCulture.NumberFormat);
+        }
+      } finally { SuppressEvents = false; }
+    }
+
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      sizeNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+      seedTextBox.Enabled = !Locked && !ReadOnly && Content != null;
+    }
+
+    #region Event Handlers (child controls)
+    protected virtual void sizeNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.N = (int)sizeNumericUpDown.Value;
+    }
+
+    protected virtual void seedTextBox_Validating(object sender, CancelEventArgs e) {
+      if (SuppressEvents) return;
+      int seed;
+      e.Cancel = !int.TryParse(seedTextBox.Text, NumberStyles.Integer, CultureInfo.CurrentCulture.NumberFormat, out seed) || seed < 0;
+      if (e.Cancel) errorProvider.SetError(seedTextBox, "The given seed is not valid, enter a positive number smaller than 2^31.");
+      else errorProvider.SetError(seedTextBox, String.Empty);
+    }
+
+    protected virtual void seedTextBox_Validated(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      var seed = int.Parse(seedTextBox.Text);
+      Content.Seed = seed;
+    }
+    #endregion
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.Designer.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.Designer.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.Designer.cs	(revision 16109)
@@ -0,0 +1,118 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  partial class QAPInstanceGeneratorProviderView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.label1 = new System.Windows.Forms.Label();
+      this.descriptorsComboBox = new System.Windows.Forms.ComboBox();
+      this.loadButton = new System.Windows.Forms.Button();
+      this.descriptorViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(32, 3);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(57, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "Generator:";
+      // 
+      // descriptorsComboBox
+      // 
+      this.descriptorsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.descriptorsComboBox.FormattingEnabled = true;
+      this.descriptorsComboBox.Location = new System.Drawing.Point(95, 0);
+      this.descriptorsComboBox.Name = "descriptorsComboBox";
+      this.descriptorsComboBox.Size = new System.Drawing.Size(161, 21);
+      this.descriptorsComboBox.TabIndex = 1;
+      this.descriptorsComboBox.SelectedIndexChanged += new System.EventHandler(this.descriptorsComboBox_SelectedIndexChanged);
+      // 
+      // loadButton
+      // 
+      this.loadButton.Location = new System.Drawing.Point(262, -1);
+      this.loadButton.Name = "loadButton";
+      this.loadButton.Size = new System.Drawing.Size(48, 23);
+      this.loadButton.TabIndex = 2;
+      this.loadButton.Text = "Load";
+      this.loadButton.UseVisualStyleBackColor = true;
+      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
+      // 
+      // descriptorViewHost
+      // 
+      this.descriptorViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptorViewHost.Caption = "View";
+      this.descriptorViewHost.Content = null;
+      this.descriptorViewHost.Enabled = false;
+      this.descriptorViewHost.Location = new System.Drawing.Point(316, 0);
+      this.descriptorViewHost.Name = "descriptorViewHost";
+      this.descriptorViewHost.ReadOnly = false;
+      this.descriptorViewHost.Size = new System.Drawing.Size(546, 21);
+      this.descriptorViewHost.TabIndex = 3;
+      this.descriptorViewHost.ViewsLabelVisible = false;
+      this.descriptorViewHost.ViewType = null;
+      // 
+      // QAPInstanceGeneratorProviderView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.descriptorViewHost);
+      this.Controls.Add(this.loadButton);
+      this.Controls.Add(this.descriptorsComboBox);
+      this.Controls.Add(this.label1);
+      this.Name = "QAPInstanceGeneratorProviderView";
+      this.Size = new System.Drawing.Size(865, 23);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.ComboBox descriptorsComboBox;
+    private System.Windows.Forms.Button loadButton;
+    private MainForm.WindowsForms.ViewHost descriptorViewHost;
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/QAPInstanceGeneratorProviderView.cs	(revision 16109)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.ComponentModel;
+using System.Linq;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.Instances.Views;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  [View("QAP Instance Generators")]
+  [Content(typeof(QAPInstanceGeneratorProvider), IsDefaultView = true)]
+  public sealed partial class QAPInstanceGeneratorProviderView : ProblemInstanceProviderView<QAPData> {
+
+    public new QAPInstanceGeneratorProvider Content {
+      get { return (QAPInstanceGeneratorProvider)base.Content; }
+      set { base.Content = value; }
+    }
+
+    private QAPInstanceGeneratorDescriptor SelectedDescriptor {
+      get { return descriptorsComboBox.SelectedIndex >= 0 ? (QAPInstanceGeneratorDescriptor)descriptorsComboBox.SelectedItem : null; }
+    }
+
+    public QAPInstanceGeneratorProviderView() {
+      InitializeComponent();
+      splitContainer1.Visible = false;
+      descriptorsComboBox.DisplayMember = "Name";
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      DeregisterDescriptorEvents();
+      descriptorsComboBox.Items.Clear();
+      if (Content == null) {
+        descriptorViewHost.Content = null;
+      } else {
+        foreach (var descriptor in Content.GetDataDescriptors()) {
+          descriptorsComboBox.Items.Add(descriptor);
+        }
+        descriptorsComboBox.SelectedIndex = descriptorsComboBox.Items.Count > 0 ? 0 : -1;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      loadButton.Enabled = !ReadOnly && !Locked && Content != null
+        && SelectedDescriptor != null && SelectedDescriptor.IsConfigurationValid
+        && GenericConsumer != null;
+    }
+
+    private void RegisterDescriptorEvents() {
+      if (SelectedDescriptor != null)
+        SelectedDescriptor.PropertyChanged += SelectedDescriptorOnPropertyChanged;
+    }
+
+    private void DeregisterDescriptorEvents() {
+      foreach (var descriptor in descriptorsComboBox.Items.OfType<QAPInstanceGeneratorDescriptor>())
+        descriptor.PropertyChanged -= SelectedDescriptorOnPropertyChanged;
+    }
+
+    private void SelectedDescriptorOnPropertyChanged(object sender, PropertyChangedEventArgs e) {
+      SetEnabledStateOfControls();
+    }
+
+    private void descriptorsComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      DeregisterDescriptorEvents();
+      RegisterDescriptorEvents();
+      descriptorViewHost.Content = (QAPInstanceGeneratorDescriptor)descriptorsComboBox.SelectedItem;
+      SetEnabledStateOfControls();
+    }
+
+    private void loadButton_Click(object sender, EventArgs e) {
+      GenericConsumer.Load(SelectedDescriptor.GetInstance());
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.Designer.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.Designer.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.Designer.cs	(revision 16109)
@@ -0,0 +1,224 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  partial class TaibQAPInstanceGeneratorDescriptorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.globalRadiusLabel = new System.Windows.Forms.Label();
+      this.globalRadiusNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.clusterSizeRadiusLabel = new System.Windows.Forms.Label();
+      this.clusterSizeNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.clusterSizeRadiusSeparatorLabel = new System.Windows.Forms.Label();
+      this.clusterRadiusNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.minMaxFlowExponentLabel = new System.Windows.Forms.Label();
+      this.minFlowExponentNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.minMaxFlowExponentSeparatorLabel = new System.Windows.Forms.Label();
+      this.maxFlowExponentNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      ((System.ComponentModel.ISupportInitialize)(this.sizeNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.globalRadiusNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.clusterSizeNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.clusterRadiusNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.minFlowExponentNumericUpDown)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.maxFlowExponentNumericUpDown)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // globalRadiusLabel
+      // 
+      this.globalRadiusLabel.AutoSize = true;
+      this.globalRadiusLabel.Location = new System.Drawing.Point(230, 2);
+      this.globalRadiusLabel.Name = "globalRadiusLabel";
+      this.globalRadiusLabel.Size = new System.Drawing.Size(71, 13);
+      this.globalRadiusLabel.TabIndex = 0;
+      this.globalRadiusLabel.Text = "Global radius:";
+      // 
+      // globalRadiusNumericUpDown
+      // 
+      this.globalRadiusNumericUpDown.Location = new System.Drawing.Point(307, 0);
+      this.globalRadiusNumericUpDown.Maximum = new decimal(new int[] {
+            100000,
+            0,
+            0,
+            0});
+      this.globalRadiusNumericUpDown.Name = "globalRadiusNumericUpDown";
+      this.globalRadiusNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.globalRadiusNumericUpDown.TabIndex = 1;
+      this.globalRadiusNumericUpDown.ValueChanged += new System.EventHandler(this.globalRadiusNumericUpDown_ValueChanged);
+      // 
+      // clusterSizeRadiusLabel
+      // 
+      this.clusterSizeRadiusLabel.AutoSize = true;
+      this.clusterSizeRadiusLabel.Location = new System.Drawing.Point(379, 2);
+      this.clusterSizeRadiusLabel.Name = "clusterSizeRadiusLabel";
+      this.clusterSizeRadiusLabel.Size = new System.Drawing.Size(132, 13);
+      this.clusterSizeRadiusLabel.TabIndex = 0;
+      this.clusterSizeRadiusLabel.Text = "Max Cluster Size / Radius:";
+      // 
+      // clusterSizeNumericUpDown
+      // 
+      this.clusterSizeNumericUpDown.Location = new System.Drawing.Point(517, 0);
+      this.clusterSizeNumericUpDown.Maximum = new decimal(new int[] {
+            1000,
+            0,
+            0,
+            0});
+      this.clusterSizeNumericUpDown.Name = "clusterSizeNumericUpDown";
+      this.clusterSizeNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.clusterSizeNumericUpDown.TabIndex = 1;
+      this.clusterSizeNumericUpDown.ValueChanged += new System.EventHandler(this.clusterSizeNumericUpDown_ValueChanged);
+      // 
+      // clusterSizeRadiusSeparatorLabel
+      // 
+      this.clusterSizeRadiusSeparatorLabel.AutoSize = true;
+      this.clusterSizeRadiusSeparatorLabel.Location = new System.Drawing.Point(587, 2);
+      this.clusterSizeRadiusSeparatorLabel.Name = "clusterSizeRadiusSeparatorLabel";
+      this.clusterSizeRadiusSeparatorLabel.Size = new System.Drawing.Size(12, 13);
+      this.clusterSizeRadiusSeparatorLabel.TabIndex = 0;
+      this.clusterSizeRadiusSeparatorLabel.Text = "/";
+      // 
+      // clusterRadiusNumericUpDown
+      // 
+      this.clusterRadiusNumericUpDown.Location = new System.Drawing.Point(605, 0);
+      this.clusterRadiusNumericUpDown.Maximum = new decimal(new int[] {
+            100000,
+            0,
+            0,
+            0});
+      this.clusterRadiusNumericUpDown.Name = "clusterRadiusNumericUpDown";
+      this.clusterRadiusNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.clusterRadiusNumericUpDown.TabIndex = 1;
+      this.clusterRadiusNumericUpDown.ValueChanged += new System.EventHandler(this.clusterRadiusNumericUpDown_ValueChanged);
+      // 
+      // minMaxFlowExponentLabel
+      // 
+      this.minMaxFlowExponentLabel.AutoSize = true;
+      this.minMaxFlowExponentLabel.Location = new System.Drawing.Point(675, 2);
+      this.minMaxFlowExponentLabel.Name = "minMaxFlowExponentLabel";
+      this.minMaxFlowExponentLabel.Size = new System.Drawing.Size(131, 13);
+      this.minMaxFlowExponentLabel.TabIndex = 0;
+      this.minMaxFlowExponentLabel.Text = "Min / Max Flow Exponent:";
+      // 
+      // minFlowExponentNumericUpDown
+      // 
+      this.minFlowExponentNumericUpDown.Location = new System.Drawing.Point(812, 0);
+      this.minFlowExponentNumericUpDown.Minimum = new decimal(new int[] {
+            1000,
+            0,
+            0,
+            -2147483648});
+      this.minFlowExponentNumericUpDown.Name = "minFlowExponentNumericUpDown";
+      this.minFlowExponentNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.minFlowExponentNumericUpDown.TabIndex = 1;
+      this.minFlowExponentNumericUpDown.ValueChanged += new System.EventHandler(this.minFlowExponentNumericUpDown_ValueChanged);
+      // 
+      // minMaxFlowExponentSeparatorLabel
+      // 
+      this.minMaxFlowExponentSeparatorLabel.AutoSize = true;
+      this.minMaxFlowExponentSeparatorLabel.Location = new System.Drawing.Point(882, 2);
+      this.minMaxFlowExponentSeparatorLabel.Name = "minMaxFlowExponentSeparatorLabel";
+      this.minMaxFlowExponentSeparatorLabel.Size = new System.Drawing.Size(12, 13);
+      this.minMaxFlowExponentSeparatorLabel.TabIndex = 0;
+      this.minMaxFlowExponentSeparatorLabel.Text = "/";
+      // 
+      // maxFlowExponentNumericUpDown
+      // 
+      this.maxFlowExponentNumericUpDown.Location = new System.Drawing.Point(900, 0);
+      this.maxFlowExponentNumericUpDown.Name = "maxFlowExponentNumericUpDown";
+      this.maxFlowExponentNumericUpDown.Size = new System.Drawing.Size(64, 20);
+      this.maxFlowExponentNumericUpDown.TabIndex = 1;
+      this.maxFlowExponentNumericUpDown.ValueChanged += new System.EventHandler(this.maxFlowExponentNumericUpDown_ValueChanged);
+      // 
+      // TaibQAPInstanceGeneratorDescriptorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.maxFlowExponentNumericUpDown);
+      this.Controls.Add(this.minFlowExponentNumericUpDown);
+      this.Controls.Add(this.clusterRadiusNumericUpDown);
+      this.Controls.Add(this.clusterSizeNumericUpDown);
+      this.Controls.Add(this.globalRadiusNumericUpDown);
+      this.Controls.Add(this.minMaxFlowExponentSeparatorLabel);
+      this.Controls.Add(this.minMaxFlowExponentLabel);
+      this.Controls.Add(this.clusterSizeRadiusSeparatorLabel);
+      this.Controls.Add(this.clusterSizeRadiusLabel);
+      this.Controls.Add(this.globalRadiusLabel);
+      this.Name = "TaibQAPInstanceGeneratorDescriptorView";
+      this.Size = new System.Drawing.Size(971, 19);
+      this.Controls.SetChildIndex(this.sizeLabel, 0);
+      this.Controls.SetChildIndex(this.seedLabel, 0);
+      this.Controls.SetChildIndex(this.globalRadiusLabel, 0);
+      this.Controls.SetChildIndex(this.clusterSizeRadiusLabel, 0);
+      this.Controls.SetChildIndex(this.clusterSizeRadiusSeparatorLabel, 0);
+      this.Controls.SetChildIndex(this.minMaxFlowExponentLabel, 0);
+      this.Controls.SetChildIndex(this.minMaxFlowExponentSeparatorLabel, 0);
+      this.Controls.SetChildIndex(this.sizeNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.globalRadiusNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.clusterSizeNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.clusterRadiusNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.minFlowExponentNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.maxFlowExponentNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.seedTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.sizeNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.globalRadiusNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.clusterSizeNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.clusterRadiusNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.minFlowExponentNumericUpDown)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.maxFlowExponentNumericUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label globalRadiusLabel;
+    private System.Windows.Forms.NumericUpDown globalRadiusNumericUpDown;
+    private System.Windows.Forms.Label clusterSizeRadiusLabel;
+    private System.Windows.Forms.NumericUpDown clusterSizeNumericUpDown;
+    private System.Windows.Forms.Label clusterSizeRadiusSeparatorLabel;
+    private System.Windows.Forms.NumericUpDown clusterRadiusNumericUpDown;
+    private System.Windows.Forms.Label minMaxFlowExponentLabel;
+    private System.Windows.Forms.NumericUpDown minFlowExponentNumericUpDown;
+    private System.Windows.Forms.Label minMaxFlowExponentSeparatorLabel;
+    private System.Windows.Forms.NumericUpDown maxFlowExponentNumericUpDown;
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator.Views/3.3/TaibQAPInstanceGeneratorDescriptorView.cs	(revision 16109)
@@ -0,0 +1,123 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.ComponentModel;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator.Views {
+  [View("Tai-b QAP Instance Generator Descriptor View")]
+  [Content(typeof(TaibQAPInstanceGeneratorDescriptor), IsDefaultView = true)]
+  public partial class TaibQAPInstanceGeneratorDescriptorView : QAPInstanceGeneratorDescriptorView {
+
+    public new TaibQAPInstanceGeneratorDescriptor Content {
+      get { return (TaibQAPInstanceGeneratorDescriptor)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public TaibQAPInstanceGeneratorDescriptorView() {
+      InitializeComponent();
+    }
+
+    #region Event Handlers (Content)
+    protected override void ContentOnPropertyChanged(object sender, PropertyChangedEventArgs eventArgs) {
+      base.ContentOnPropertyChanged(sender, eventArgs);
+      SuppressEvents = true;
+      try {
+        switch (eventArgs.PropertyName) {
+          case "MaxClusterDistance":
+            globalRadiusNumericUpDown.Value = Content.MaxClusterDistance;
+            break;
+          case "MaxClusterSize":
+            clusterSizeNumericUpDown.Value = Content.MaxClusterSize;
+            break;
+          case "MaxClusterRadius":
+            clusterRadiusNumericUpDown.Value = Content.MaxClusterRadius;
+            break;
+          case "MinFlowExponent":
+            minFlowExponentNumericUpDown.Value = Content.MinFlowExponent;
+            break;
+          case "MaxFlowExponent":
+            maxFlowExponentNumericUpDown.Value = Content.MaxFlowExponent;
+            break;
+        }
+      } finally { SuppressEvents = false; }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          globalRadiusNumericUpDown.Value = 0;
+          clusterSizeNumericUpDown.Value = 0;
+          clusterRadiusNumericUpDown.Value = 0;
+          minFlowExponentNumericUpDown.Value = 0;
+          maxFlowExponentNumericUpDown.Value = 0;
+        } else {
+          globalRadiusNumericUpDown.Value = Content.MaxClusterDistance;
+          clusterSizeNumericUpDown.Value = Content.MaxClusterSize;
+          clusterRadiusNumericUpDown.Value = Content.MaxClusterRadius;
+          minFlowExponentNumericUpDown.Value = Content.MinFlowExponent;
+          maxFlowExponentNumericUpDown.Value = Content.MaxFlowExponent;
+        }
+      } finally { SuppressEvents = false; }
+    }
+
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      globalRadiusNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+      clusterSizeNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+      clusterRadiusNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+      minFlowExponentNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+      maxFlowExponentNumericUpDown.Enabled = !Locked && !ReadOnly && Content != null;
+    }
+
+    #region Event Handlers (child controls)
+    protected virtual void globalRadiusNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.MaxClusterDistance = (int)globalRadiusNumericUpDown.Value;
+    }
+
+    protected virtual void clusterSizeNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.MaxClusterSize = (int)clusterSizeNumericUpDown.Value;
+    }
+
+    protected virtual void clusterRadiusNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.MaxClusterRadius = (int)clusterRadiusNumericUpDown.Value;
+    }
+
+    protected virtual void minFlowExponentNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.MinFlowExponent = (int)minFlowExponentNumericUpDown.Value;
+    }
+
+    protected virtual void maxFlowExponentNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      Content.MaxFlowExponent = (int)maxFlowExponentNumericUpDown.Value;
+    }
+    #endregion
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaiaQAPInstanceGeneratorDescriptor.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaiaQAPInstanceGeneratorDescriptor.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaiaQAPInstanceGeneratorDescriptor.cs	(revision 16109)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  public sealed class TaiaQAPInstanceGeneratorDescriptor : QAPInstanceGeneratorDescriptor {
+
+    public override string Name {
+      get { return "Tai-a Instances"; }
+    }
+
+    public override string Description {
+      get { return "Generates uniformly distributed random symmetric QAP instances."; }
+    }
+
+    public TaiaQAPInstanceGeneratorDescriptor() {
+      // default ctor should result in a valid configuration
+      N = 6;
+      Seed = 123456789; // Taillard's default seed
+    }
+
+    public override QAPData GetInstance() {
+      double[,] A, B;
+      TaillardQAPInstanceGenerator.GenerateTaia(N, out A, out B, new Bratley(Seed));
+      return new QAPData {
+        Name = "tai" + N.ToString("00") + "a",
+        Description = "Instance generated with TaillardQAPInstanceGenerator.GenerateTaia",
+        Dimension = N,
+        Weights = B,
+        Distances = A
+      };
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaibQAPInstanceGeneratorDescriptor.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaibQAPInstanceGeneratorDescriptor.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Descriptors/TaibQAPInstanceGeneratorDescriptor.cs	(revision 16109)
@@ -0,0 +1,117 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  public sealed class TaibQAPInstanceGeneratorDescriptor : QAPInstanceGeneratorDescriptor {
+
+    private int maxClusterDistance;
+    public int MaxClusterDistance {
+      get { return maxClusterDistance; }
+      set {
+        if (maxClusterDistance == value) return;
+        maxClusterDistance = value;
+        OnPropertyChanged("MaxClusterDistance");
+      }
+    }
+
+    private int maxClusterSize;
+    public int MaxClusterSize {
+      get { return maxClusterSize; }
+      set {
+        if (maxClusterSize == value) return;
+        maxClusterSize = value;
+        OnPropertyChanged("MaxClusterSize");
+      }
+    }
+
+    private int maxClusterRadius;
+    public int MaxClusterRadius {
+      get { return maxClusterRadius; }
+      set {
+        if (maxClusterRadius == value) return;
+        maxClusterRadius = value;
+        OnPropertyChanged("MaxClusterRadius");
+      }
+    }
+
+    private int minFlowExponent;
+    public int MinFlowExponent {
+      get { return minFlowExponent; }
+      set {
+        if (minFlowExponent == value) return;
+        minFlowExponent = value;
+        OnPropertyChanged("MinFlowExponent");
+      }
+    }
+
+    private int maxFlowExponent;
+    public int MaxFlowExponent {
+      get { return maxFlowExponent; }
+      set {
+        if (maxFlowExponent == value) return;
+        maxFlowExponent = value;
+        OnPropertyChanged("MaxFlowExponent");
+      }
+    }
+
+    public override string Name {
+      get { return "Tai-b Instances"; }
+    }
+
+    public override string Description {
+      get { return "Generates randomly clustered symmetric QAP instances with more real-world like flows."; }
+    }
+
+    public override bool IsConfigurationValid {
+      get {
+        return base.IsConfigurationValid
+          && MaxClusterDistance > 0
+          && MaxClusterRadius > 0
+          && MaxClusterSize > 0
+          && MinFlowExponent < MaxFlowExponent
+          && MaxFlowExponent > 0;
+      }
+    }
+
+    public TaibQAPInstanceGeneratorDescriptor() {
+      // default ctor should result in a valid configuration
+      N = 20;
+      Seed = 123456789;
+      MaxClusterDistance = 1000;
+      MaxClusterRadius = 20;
+      MaxClusterSize = 10;
+      MinFlowExponent = -5;
+      MaxFlowExponent = 3;
+    }
+
+    public override QAPData GetInstance() {
+      double[,] A, B;
+      TaillardQAPInstanceGenerator.GenerateTaib(N, maxClusterDistance, maxClusterSize, maxClusterRadius, minFlowExponent, maxFlowExponent, out A, out B, new Bratley(Seed));
+      return new QAPData {
+        Name = "tai" + N.ToString("00") + "b (" + maxClusterDistance + ", " + maxClusterSize + ", " + maxClusterRadius + ") [" + minFlowExponent + ";" + maxFlowExponent + "]",
+        Description = "Instance generated with TaillardQAPInstanceGenerator.GenerateTaib",
+        Dimension = N,
+        Weights = B,
+        Distances = A
+      };
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Generators/TaillardQAPInstanceGenerator.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Generators/TaillardQAPInstanceGenerator.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Generators/TaillardQAPInstanceGenerator.cs	(revision 16109)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  public static class TaillardQAPInstanceGenerator {
+    /// <summary>
+    /// Generates two random symmetric matrices with independent uniformly distributed elements in the range [0;100[.
+    /// The generated instances are referred to as Tai-a or taiXXa instances published in the literature.
+    /// The instance generator is described in E. Taillard. 1991. Robust Taboo Search for the Quadratic Assignment Problem. Parallel Computing, Vol 17, pp. 443-455.
+    /// </summary>
+    /// <param name="N">The width and height of the matrices to generate, i.e. the size of the problem instance.</param>
+    /// <param name="A">The flow matrix.</param>
+    /// <param name="B">The distance matrix.</param>
+    /// <param name="random">The random number generator to use, in case this is omitted Taillard's default PRNG and seed will be used.</param>
+    public static void GenerateTaia(int N, out double[,] A, out double[,] B, IRandom random = null) {
+      if (random == null) random = new Bratley(123456789);
+      A = new double[N, N];
+      B = new double[N, N];
+      for (var i = 0; i < N - 1; i++) {
+        for (var j = i + 1; j < N; j++) {
+          A[i, j] = Math.Floor(100.0 * random.NextDouble());
+          A[j, i] = A[i, j];
+        }
+      }
+      for (var i = 0; i < N - 1; i++) {
+        for (var j = i + 1; j < N; j++) {
+          B[i, j] = Math.Floor(100.0 * random.NextDouble());
+          B[j, i] = B[i, j];
+        }
+      }
+    }
+
+    /// <summary>
+    /// The generated instances are referred to as Tai-b or taiXXb instances published in the literature.
+    /// The instance generator is described in E. Taillard. 1995. Comparison of iterative searches for the quadratic assignment problem. Location Science, Vol 3, No. 2, pp. 87-105.
+    /// </summary>
+    /// <param name="N">The width and height of the matrices to generate, i.e. the size of the problem instance.</param>
+    /// <param name="maxClusterDistance">The maximum radius of the disc that contains the clusters.</param>
+    /// <param name="maxClusterSize">The maximum size of clustered locations.</param>
+    /// <param name="maxClusterRadius">The maximum radius of the disc that contains the clustered locations.</param>
+    /// <param name="minFlowExponent">The minimum exponent that determines the flows to other facilities.</param>
+    /// <param name="maxFlowExponent">The maximum exponent that determines the flows to other facilities.</param>
+    /// <param name="A">The flow matrix.</param>
+    /// <param name="B">The distance matrix.</param>
+    /// <param name="random">The random number generator to use, in case this is omitted Taillard's default PRNG and seed will be used.</param>
+    public static void GenerateTaib(int N, int maxClusterDistance, int maxClusterSize, int maxClusterRadius, int minFlowExponent, int maxFlowExponent, out double[,] A, out double[,] B, IRandom random = null) {
+      if (random == null) random = new Bratley(123456789);
+      var locations = new double[N, 2];
+      var loc = 0;
+      while (loc < N) {
+        var clusterDirection = random.NextDouble() * 2 * Math.PI;
+        var clusterDistance = random.NextDouble() * maxClusterDistance;
+        var clusterSize = random.Next(1, maxClusterSize);
+        for (var i = 0; i < clusterSize; i++) {
+          var locationDirection = random.NextDouble() * 2 * Math.PI;
+          var locationDistance = random.NextDouble() * maxClusterRadius;
+          locations[loc, 0] = clusterDistance * Math.Cos(clusterDirection) +
+                              locationDistance * Math.Cos(locationDirection);
+          locations[loc, 1] = clusterDistance * Math.Sin(clusterDirection) +
+                              locationDistance * Math.Sin(locationDirection);
+          loc++;
+          if (loc == N) break;
+        }
+      }
+
+      A = new double[N, N];
+      for (var i = 0; i < N - 1; i++) {
+        for (var j = i + 1; j < N; j++) {
+          A[i, j] = Math.Sqrt((locations[i, 0] - locations[j, 0]) * (locations[i, 0] - locations[j, 0])
+                              + (locations[i, 1] - locations[j, 1]) * (locations[i, 1] - locations[j, 1]));
+          A[j, i] = A[i, j];
+        }
+      }
+
+      B = new double[N, N];
+      for (var i = 0; i < N - 1; i++) {
+        for (var j = i + 1; j < N; j++) {
+          B[i, j] = Math.Floor(Math.Pow(10, (maxFlowExponent - minFlowExponent) * random.NextDouble() + minFlowExponent));
+          B[j, i] = B[i, j];
+        }
+      }
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/HeuristicLab.Problems.Instances.QAPGenerator-3.3.csproj
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/HeuristicLab.Problems.Instances.QAPGenerator-3.3.csproj	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/HeuristicLab.Problems.Instances.QAPGenerator-3.3.csproj	(revision 16109)
@@ -0,0 +1,97 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Instances.QAPGenerator</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Instances.QAPGenerator-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Random-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Descriptors\TaiaQAPInstanceGeneratorDescriptor.cs" />
+    <Compile Include="Generators\TaillardQAPInstanceGenerator.cs" />
+    <Compile Include="Descriptors\TaibQAPInstanceGeneratorDescriptor.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="PRNG\BetaDistributedRandom.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="QAPInstanceGeneratorDescriptor.cs" />
+    <Compile Include="QAPInstanceGeneratorProvider.cs" />
+    <Compile Include="PRNG\Bratley.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/BetaDistributedRandom.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/BetaDistributedRandom.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/BetaDistributedRandom.cs	(revision 16109)
@@ -0,0 +1,158 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  [Item("Beta-distributed random number generator", "Creates random numbers that are distributed according to the beta distribution.")]
+  [StorableClass]
+  public sealed class BetaDistributedRandom : Item, IRandom {
+    private double alpha, beta, minimum, maximum;
+
+    [Storable]
+    public double Alpha {
+      get { return alpha; }
+      set { alpha = value; }
+    }
+
+    [Storable]
+    public double Beta {
+      get { return beta; }
+      set { beta = value; }
+    }
+
+    [Storable]
+    public double Minimum {
+      get { return minimum; }
+      set { minimum = value; }
+    }
+
+    [Storable]
+    public double Maximum {
+      get { return maximum; }
+      set { maximum = value; }
+    }
+
+    [Storable]
+    private IRandom uniform;
+
+    [Storable]
+    private IRandom normal;
+
+    [StorableConstructor]
+    private BetaDistributedRandom(bool deserializing) : base(deserializing) { }
+    private BetaDistributedRandom(BetaDistributedRandom original, Cloner cloner)
+      : base(original, cloner) {
+      this.alpha = original.alpha;
+      this.beta = original.beta;
+      this.uniform = cloner.Clone(uniform);
+    }
+    public BetaDistributedRandom() : this(new MersenneTwister(), 5, 5) { }
+    public BetaDistributedRandom(IRandom uniform, double alpha, double beta) : this(uniform, alpha, beta, 0, 1) { }
+    public BetaDistributedRandom(IRandom uniform, double alpha, double beta, double minimum, double maximum) {
+      if (alpha.IsAlmost(0) || beta.IsAlmost(0)) throw new ArgumentException("Alpha or Beta must be greater than 0.");
+      this.uniform = uniform;
+      this.normal = new NormalDistributedRandom(uniform, 0, 1);
+      this.alpha = alpha;
+      this.beta = beta;
+      this.minimum = minimum;
+      this.maximum = maximum;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BetaDistributedRandom(this, cloner);
+    }
+
+    public void Reset() {
+      uniform.Reset();
+    }
+
+    public void Reset(int seed) {
+      uniform.Reset(seed);
+    }
+
+    public int Next() {
+      throw new NotImplementedException();
+    }
+
+    public int Next(int maxVal) {
+      throw new NotImplementedException();
+    }
+
+    public int Next(int minVal, int maxVal) {
+      throw new NotImplementedException();
+    }
+
+    public double NextDouble() {
+      if ((alpha <= 1.0) && (beta <= 1.0)) {
+        // Use Jonk's algorithm
+        while (true) {
+          var x = Math.Pow(uniform.NextDouble(), 1.0 / alpha);
+          var y = Math.Pow(uniform.NextDouble(), 1.0 / beta);
+          if ((x + y) <= 1.0) return minimum + (maximum - minimum) * (x / (x + y));
+        }
+      }
+      var Ga = NextDoubleGammaDistributed(alpha);
+      var Gb = NextDoubleGammaDistributed(beta);
+      return minimum + (maximum - minimum) * (Ga / (Ga + Gb));
+    }
+
+    private double NextDoubleGammaDistributed(double shape) {
+      double u, v, x;
+
+      if (shape.IsAlmost(1.0))
+        return -Math.Log(1.0 - uniform.NextDouble());
+
+      if (shape < 1.0) {
+        while (true) {
+          u = uniform.NextDouble();
+          v = -Math.Log(1.0 - uniform.NextDouble());
+          if (u <= 1.0 - shape) {
+            x = Math.Pow(u, 1.0 / shape);
+            if (x <= v) return x;
+          } else {
+            var y = -Math.Log((1 - u) / shape);
+            x = Math.Pow(1.0 - shape + shape * y, 1.0 / shape);
+            if (x <= (v + y)) return x;
+          }
+        }
+      }
+      // shape > 1.0
+      var b = shape - 1.0 / 3.0;
+      var c = 1.0 / Math.Sqrt(9 * b);
+      for (; ; ) {
+        do {
+          x = normal.NextDouble();
+          v = 1.0 + c * x;
+        } while (v <= 0.0);
+
+        v = v * v * v;
+        u = uniform.NextDouble();
+        if (u < 1.0 - 0.0331 * (x * x) * (x * x)) return (b * v);
+        if (Math.Log(u) < 0.5 * x * x + b * (1.0 - v + Math.Log(v))) return (b * v);
+      }
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/Bratley.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/Bratley.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/PRNG/Bratley.cs	(revision 16109)
@@ -0,0 +1,86 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  // P. Bratley, B.L. Fox, and L.E. Schrage. 1983. A guide to Simulation. Springer, New York.
+  [Item("Bratley PRNG", "Generates random numbers according to the recursive formula X_k = (a * X_(k-1)) mod m with a = 16807, m = 2^31 - 1 and X_0 being the seed.")]
+  [StorableClass]
+  public class Bratley : Item, IRandom {
+    [Storable]
+    private int next;
+    [Storable]
+    private int seed;
+
+    private const int m = int.MaxValue, a = 16807;
+
+    public int Next(int minVal, int maxVal) {
+      return (int)(NextDouble() * (maxVal - minVal)) + minVal;
+    }
+
+    public int Next(int maxVal) {
+      return (int)(NextDouble() * maxVal);
+    }
+
+    public int Next() {
+      next = Advance();
+      return next;
+    }
+
+    public double NextDouble() {
+      return Next() / (double)m;
+    }
+
+    public void Reset(int seed) {
+      this.seed = seed;
+      this.next = seed;
+    }
+
+    public void Reset() {
+      this.next = seed;
+    }
+
+    private int Advance() {
+      return (int)((a * (long)next) % m);
+    }
+
+    [StorableConstructor]
+    private Bratley(bool deserializing) : base(deserializing) { }
+    private Bratley(Bratley original, Cloner cloner)
+      : base(original, cloner) {
+      this.seed = original.seed;
+      this.next = original.next;
+    }
+    public Bratley() {
+      Reset(new System.Random().Next());
+    }
+    public Bratley(int seed) {
+      Reset(seed);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Bratley(this, cloner);
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Plugin.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Plugin.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Plugin.cs	(revision 16109)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  [Plugin("HeuristicLab.Problems.Instances.QAPGenerator", "", "3.3.9.0")]
+  [PluginFile("HeuristicLab.Problems.Instances.QAPGenerator-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  public class Plugin : PluginBase { }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Properties/AssemblyInfo.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/Properties/AssemblyInfo.cs	(revision 16109)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.Instances.QAPGenerator")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("FH-Hagenberg")]
+[assembly: AssemblyProduct("HeuristicLab.Problems.Instances.QAPGenerator")]
+[assembly: AssemblyCopyright("Copyright © FH-Hagenberg 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d5752ebb-f8d7-47f5-91f5-ffcac88adf0b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorDescriptor.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorDescriptor.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorDescriptor.cs	(revision 16109)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.ComponentModel;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  public abstract class QAPInstanceGeneratorDescriptor : IDataDescriptor, IContent, INotifyPropertyChanged {
+
+    public virtual string Name {
+      get { return "Parameterizable QAP Instance"; }
+    }
+
+    public virtual string Description {
+      get { return "Specifies the parameters for a randomly generator QAP instance."; }
+    }
+
+    private int n;
+    public int N {
+      get { return n; }
+      set {
+        if (n == value) return;
+        n = value;
+        OnPropertyChanged("N");
+      }
+    }
+
+    private int seed;
+    public int Seed {
+      get { return seed; }
+      set {
+        if (seed == value) return;
+        seed = value;
+        OnPropertyChanged("Seed");
+      }
+    }
+
+    public virtual bool IsConfigurationValid { get { return n > 2; } }
+
+    public abstract QAPData GetInstance();
+
+    public event PropertyChangedEventHandler PropertyChanged;
+    protected void OnPropertyChanged(string propertyName) {
+      var handler = PropertyChanged;
+      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
+    }
+  }
+}
Index: branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorProvider.cs
===================================================================
--- branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorProvider.cs	(revision 16109)
+++ branches/2738_QAPGenerators/HeuristicLab.Problems.Instances.QAPGenerator/3.3/QAPInstanceGeneratorProvider.cs	(revision 16109)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Problems.Instances.QAPGenerator {
+  public class QAPInstanceGeneratorProvider : ProblemInstanceProvider<QAPData> {
+
+    public override string Name {
+      get { return "QAP Instance Generators"; }
+    }
+
+    public override string Description {
+      get { return "Generates QAP instances according to given parameters."; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://dev.heuristiclab.com"); }
+    }
+
+    public override string ReferencePublication {
+      get { return null; }
+    }
+
+    public override bool CanImportData {
+      get { return false; }
+    }
+
+    public override bool CanExportData {
+      get { return false; }
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return new QAPInstanceGeneratorDescriptor[] { new TaiaQAPInstanceGeneratorDescriptor(), new TaibQAPInstanceGeneratorDescriptor() };
+    }
+
+    public override QAPData LoadData(IDataDescriptor descriptor) {
+      var parameters = (descriptor as QAPInstanceGeneratorDescriptor);
+      if (parameters == null) throw new ArgumentException("descriptor is not of type QAPInstanceGeneratorDescriptor", "descriptor");
+      return parameters.GetInstance();
+    }
+  }
+}
Index: branches/2738_QAPGenerators/QAPGenerators.sln
===================================================================
--- branches/2738_QAPGenerators/QAPGenerators.sln	(revision 16109)
+++ branches/2738_QAPGenerators/QAPGenerators.sln	(revision 16109)
@@ -0,0 +1,28 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.QAPGenerator-3.3", "HeuristicLab.Problems.Instances.QAPGenerator\3.3\HeuristicLab.Problems.Instances.QAPGenerator-3.3.csproj", "{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3", "HeuristicLab.Problems.Instances.QAPGenerator.Views\3.3\HeuristicLab.Problems.Instances.QAPGenerator.Views-3.3.csproj", "{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{181A3267-13C9-4AC9-8CFA-5A5EF355EE76}.Release|Any CPU.Build.0 = Release|Any CPU
+		{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{602A2CA0-9F1B-463A-8C11-94A3CACD18FE}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
