Index: /branches/CFSAP/CFSAP.sln
===================================================================
--- /branches/CFSAP/CFSAP.sln	(revision 14757)
+++ /branches/CFSAP/CFSAP.sln	(revision 14757)
@@ -0,0 +1,62 @@
+﻿
+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.Scheduling.CFSAP-3.3", "HeuristicLab.Problems.Scheduling.CFSAP\3.3\HeuristicLab.Problems.Scheduling.CFSAP-3.3.csproj", "{93609034-D1EE-4DC6-A381-E4CDB55E4261}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances-3.3", "HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj", "{3540E29E-4793-49E7-8EE2-FEA7F61C3994}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.CFSAP-3.3", "HeuristicLab.Problems.Instances.CFSAP\3.3\HeuristicLab.Problems.Instances.CFSAP-3.3.csproj", "{20649F62-E17D-447D-B9F5-F5514D977D3C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|x64.Build.0 = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Debug|x86.Build.0 = Debug|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|Any CPU.Build.0 = Release|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|x64.ActiveCfg = Release|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|x64.Build.0 = Release|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|x86.ActiveCfg = Release|Any CPU
+		{93609034-D1EE-4DC6-A381-E4CDB55E4261}.Release|x86.Build.0 = Release|Any CPU
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|x64.ActiveCfg = Debug|x64
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|x64.Build.0 = Debug|x64
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|x86.ActiveCfg = Debug|x86
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Debug|x86.Build.0 = Debug|x86
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|x64.ActiveCfg = Release|x64
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|x64.Build.0 = Release|x64
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|x86.ActiveCfg = Release|x86
+		{3540E29E-4793-49E7-8EE2-FEA7F61C3994}.Release|x86.Build.0 = Release|x86
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|x64.Build.0 = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Debug|x86.Build.0 = Debug|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|x64.ActiveCfg = Release|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|x64.Build.0 = Release|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|x86.ActiveCfg = Release|Any CPU
+		{20649F62-E17D-447D-B9F5-F5514D977D3C}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPDataDescriptor.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPDataDescriptor.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPDataDescriptor.cs	(revision 14757)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.CFSAP {
+  internal class BozejkoCFSAPDataDescriptor : IDataDescriptor {
+    public string Name { get; internal set; }
+    public string Description { get; internal set; }
+
+    internal string InstanceIdentifier { get; set; }
+
+    internal BozejkoCFSAPDataDescriptor(string name, string description, string instanceIdentifier) {
+      this.Name = name;
+      this.Description = description;
+      this.InstanceIdentifier = instanceIdentifier;
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPInstanceProvider.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPInstanceProvider.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPInstanceProvider.cs	(revision 14757)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.Problems.Instances.CFSAP {
+  public class BozejkoCFSAPInstanceProvider : ProblemInstanceProvider<CFSAPData> {
+
+    public override string Name {
+      get { return "Bozejko (random CFSAP)"; }
+    }
+
+    public override string Description {
+      get { return string.Empty; }
+    }
+
+    public override Uri WebLink {
+      get { return null; }
+    }
+
+    public override string ReferencePublication {
+      get { return string.Empty; }
+    }
+
+    public override bool CanImportData {
+      get { return true; }
+    }
+
+    private CFSAPData LoadInstance(Stream stream) {
+      var parser = new BozejkoCFSAPParser();
+      parser.Parse(stream);
+      return new CFSAPData {
+        Jobs = parser.Jobs,
+        MachineNests = 2,
+        ProcessingTimes = parser.ProcessingTimes,
+        SetupTimes = parser.SetupTimes
+      };
+    }
+    public override CFSAPData ImportData(string path) {
+      var instance = LoadInstance(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
+      instance.Name = Path.GetFileName(path);
+      instance.Description = "Imported from " + path + " " + DateTime.Now;
+      return instance;
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      var instanceArchiveName = GetResourceName(@"BozejkoCFSAP\.zip");
+      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
+
+      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
+        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
+          yield return new BozejkoCFSAPDataDescriptor(Path.GetFileNameWithoutExtension(entry),
+                                                      GetInstanceDescription(), entry);
+        }
+      }
+    }
+
+    public override CFSAPData LoadData(IDataDescriptor id) {
+      var descriptor = (BozejkoCFSAPDataDescriptor)id;
+      var instanceArchiveName = GetResourceName(@"BozejkoCFSAP\.zip");
+      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
+        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
+        var instance = LoadInstance(entry.Open());
+        instance.Name = id.Name;
+        instance.Description = id.Description;
+        return instance;
+      }
+    }
+
+    private string GetResourceName(string fileName) {
+      return Assembly.GetExecutingAssembly()
+                     .GetManifestResourceNames()
+                     .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
+    }
+
+    private string GetInstanceDescription() {
+      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
+    }
+
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPParser.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPParser.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/BozejkoCFSAPParser.cs	(revision 14757)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.IO;
+using System.Text;
+
+namespace HeuristicLab.Problems.Instances.CFSAP {
+  public class BozejkoCFSAPParser {
+    public int Jobs { get; private set; }
+    public int[,] ProcessingTimes { get; private set; }
+    public int[,,] SetupTimes { get; private set; }
+
+    public void Parse(Stream stream) {
+      using (var reader = new StreamReader(stream)) {
+        Jobs = GetNextNumber(reader);
+        var seed = GetNextNumber(reader);
+        ProcessingTimes = new int[2, Jobs];
+        SetupTimes = new int[2, Jobs, Jobs];
+
+        for (var m = 0; m < 2; m++) {
+          for (var j = 0; j < Jobs; j++) {
+            ProcessingTimes[m, j] = GetNextNumber(reader);
+          }
+        }
+        for (var m = 0; m < 2; m++) {
+          for (var j = 0; j < Jobs; j++) {
+            for (var i = 0; i < Jobs; i++) {
+              SetupTimes[m, j, i] = GetNextNumber(reader);
+            }
+          }
+        }
+        reader.Close();
+        stream.Close();
+      }
+    }
+
+    private int GetNextNumber(StreamReader reader) {
+      var builder = new StringBuilder();
+      int r = reader.Read();
+      while (r >= 0) {
+        var c = (char)r;
+        if ((c == ' ' || c == '\t' || c == '\r' || c == '\n') && builder.Length > 0)
+          return int.Parse(builder.ToString());
+        if (char.IsNumber(c)) builder.Append(c);
+        r = reader.Read();
+      }
+      return -1;
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/HeuristicLab.Problems.Instances.CFSAP-3.3.csproj
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/HeuristicLab.Problems.Instances.CFSAP-3.3.csproj	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/HeuristicLab.Problems.Instances.CFSAP-3.3.csproj	(revision 14757)
@@ -0,0 +1,102 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.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>{20649F62-E17D-447D-B9F5-F5514D977D3C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Instances.CFSAP</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Instances.CFSAP-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>
+  </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>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.IO.Compression" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BozejkoCFSAPDataDescriptor.cs" />
+    <Compile Include="BozejkoCFSAPInstanceProvider.cs" />
+    <EmbeddedResource Include="Data\BozejkoCFSAP.zip" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="BozejkoCFSAPParser.cs" />
+    <Compile Include="Plugin.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
+      <Project>{3540e29e-4793-49e7-8ee2-fea7f61c3994}</Project>
+      <Name>HeuristicLab.Problems.Instances-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </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>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">
+      set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+      set ProjectDir=$(ProjectDir)
+      set SolutionDir=$(SolutionDir)
+      set Outdir=$(Outdir)
+
+      call PreBuildEvent.cmd
+    </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+      export ProjectDir=$(ProjectDir)
+      export SolutionDir=$(SolutionDir)
+
+      $SolutionDir/PreBuildEvent.sh
+    </PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Plugin.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Plugin.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Plugin.cs.frame	(revision 14757)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.CFSAP {
+  [Plugin("HeuristicLab.Problems.Instances.CFSAP", "Plugin that provides problem instances for the non-permutational cyclic flow shop problem with two machine nests.", "3.3.14.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.Instances.CFSAP-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  public class HeuristicLabProblemsInstancesCFSAPPlugin : PluginBase { }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances.CFSAP/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Reflection;
+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.CFSAP")]
+[assembly: AssemblyDescription("Plugin that provides problem instances for the non-permutational cyclic flow shop problem with two machine nests. The instances are created by W. Bozejko.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) HEAL 2002-2017")]
+[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("20649f62-e17d-447d-b9f5-f5514d977d3c")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.14.$WCREV$")]
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj	(revision 14757)
@@ -0,0 +1,185 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Instances</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Instances-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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </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.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="ProblemInstanceManager.cs" />
+    <Compile Include="IProblemInstanceExporter.cs" />
+    <Compile Include="Types\CFSAPData.cs" />
+    <Compile Include="Types\PTSPData.cs" />
+    <Compile Include="Types\ATSPData.cs" />
+    <Compile Include="Types\JSSPData.cs" />
+    <Compile Include="Types\CTAPData.cs" />
+    <Compile Include="IDataDescriptor.cs" />
+    <Compile Include="Types\DistanceHelper.cs" />
+    <Compile Include="Types\OPData.cs" />
+    <Compile Include="Types\VRP\MDCVRPTWData.cs" />
+    <Compile Include="Types\VRP\MDCVRPData.cs" />
+    <Compile Include="Types\VRP\PDPTWData.cs" />
+    <Compile Include="Types\VRP\CVRPTWData.cs" />
+    <Compile Include="Types\VRP\VRPData.cs" />
+    <Compile Include="Types\VRP\CVRPData.cs" />
+    <Compile Include="Types\GQAPData.cs" />
+    <Compile Include="Types\VRP\IVRPData.cs" />
+    <Compile Include="Types\QAPData.cs" />
+    <Compile Include="Types\TSPData.cs" />
+    <Compile Include="IProblemInstanceConsumer.cs" />
+    <Compile Include="IProblemInstanceProvider.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="ProblemInstanceProvider.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- 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/CFSAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs	(revision 14757)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  public interface IDataDescriptor {
+    string Name { get; }
+    string Description { get; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs	(revision 14757)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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;
+
+namespace HeuristicLab.Problems.Instances {
+  public interface IProblemInstanceConsumer : IContent { }
+
+  public interface IProblemInstanceConsumer<in TData> : IProblemInstanceConsumer {
+    /// <summary>
+    /// Loads the given instance data.
+    /// </summary>
+    /// <exception cref="InvalidDataException">Thrown when the instance cannot be loaded.</exception>
+    /// <param name="data">The data of the instance.</param>
+    void Load(TData data);
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceExporter.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceExporter.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceExporter.cs	(revision 14757)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  public interface IProblemInstanceExporter { }
+
+  public interface IProblemInstanceExporter<TData> : IProblemInstanceExporter {
+    TData Export();
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs	(revision 14757)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.Instances {
+  public interface IProblemInstanceProvider : IContent {
+    string Name { get; }
+    string Description { get; }
+    Uri WebLink { get; }
+    string ReferencePublication { get; }
+  }
+
+  public interface IProblemInstanceProvider<TData> : IProblemInstanceProvider {
+    IEnumerable<IDataDescriptor> GetDataDescriptors();
+    TData LoadData(IDataDescriptor descriptor);
+
+    bool CanImportData { get; }
+    TData ImportData(string path);
+
+    bool CanExportData { get; }
+    void ExportData(TData instance, string path);
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Plugin.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Plugin.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Plugin.cs.frame	(revision 14757)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  [Plugin("HeuristicLab.Problems.Instances", "3.3.14.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.Instances-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  public class HeuristicLabProblemsInstancesPlugin : PluginBase {
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceManager.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceManager.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceManager.cs	(revision 14757)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.Instances {
+  public class ProblemInstanceManager {
+    public static IEnumerable<IProblemInstanceProvider> GetProviders(object item) {
+      var consumerTypes = item.GetType().GetInterfaces()
+        .Where(x => x.IsGenericType
+          && x.GetGenericTypeDefinition() == typeof(IProblemInstanceConsumer<>));
+
+      if (consumerTypes.Any()) {
+        var instanceTypes = consumerTypes
+          .Select(x => x.GetGenericArguments().First())
+          .Select(x => typeof(IProblemInstanceProvider<>).MakeGenericType(x));
+
+        var interfaceTypes = instanceTypes.Where(x => x.GetGenericArguments().First().IsInterface);
+        if (interfaceTypes.Any()) {
+          var concreteTypes = interfaceTypes.SelectMany(x => ApplicationManager.Manager.GetTypes(x.GetGenericArguments().First()));
+
+          if (concreteTypes.Any())
+            instanceTypes = instanceTypes.Union(concreteTypes.Select(x => typeof(IProblemInstanceProvider<>).MakeGenericType(x))).Distinct();
+        }
+
+        foreach (var type in instanceTypes) {
+          foreach (var provider in ApplicationManager.Manager.GetInstances(type))
+            yield return (IProblemInstanceProvider)provider;
+        }
+      }
+    }
+
+    public static IEnumerable<IDataDescriptor> GetDataDescriptors(IProblemInstanceProvider provider) {
+      IEnumerable<IDataDescriptor> descriptors = ((dynamic)provider).GetDataDescriptors();
+      return descriptors;
+    }
+
+    public static void LoadData(IProblemInstanceProvider provider, IDataDescriptor descriptor, IProblemInstanceConsumer consumer) {
+      ((dynamic)consumer).Load(((dynamic)provider).LoadData(descriptor));
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs	(revision 14757)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  public abstract class ProblemInstanceProvider<TData> : IProblemInstanceProvider<TData> {
+    public abstract string Name { get; }
+    public abstract string Description { get; }
+    public abstract Uri WebLink { get; }
+    public abstract string ReferencePublication { get; }
+
+    public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
+
+    public abstract TData LoadData(IDataDescriptor descriptor);
+
+    public virtual bool CanImportData {
+      get { return false; }
+    }
+    public virtual TData ImportData(string path) {
+      throw new NotSupportedException();
+    }
+
+    public virtual bool CanExportData {
+      get { return false; }
+    }
+    public virtual void ExportData(TData instance, string path) {
+      throw new NotSupportedException();
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.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")]
+[assembly: AssemblyDescription("Base plugin for making problem instances available to problems.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2016 HEAL")]
+[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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.14.$WCREV$")]
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs	(revision 14757)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describe instances of the Asymmetric Traveling Salesman Problem (ATSP).
+  /// </summary>
+  public class ATSPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of cities.
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// The distances are given in form of a distance matrix.
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] where each row is one of the cities
+    /// and the colmns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// The coordinates are for display purposes only.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known tour in path-encoding.
+    /// </summary>
+    public int[] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known tour.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CFSAPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CFSAPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CFSAPData.cs	(revision 14757)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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 {
+  public class CFSAPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+    /// <summary>
+    /// The number of jobs.
+    /// </summary>
+    public int Jobs { get; set; }
+    /// <summary>
+    /// The number of machine nests.
+    /// </summary>
+    public int MachineNests { get; set; }
+    /// <summary>
+    /// Each row represents the processing times for all the jobs on a certain machine nest
+    /// </summary>
+    public int[,] ProcessingTimes { get; set; }
+    /// <summary>
+    /// In the first dimension setup times are per machine,
+    /// the second and third dimension represent jobs.
+    /// A set-up from the job to itself might also occur,
+    /// for instance when a cycle is complete and it is the only job at a certain nest
+    /// </summary>
+    public int[,,] SetupTimes { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs	(revision 14757)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Capacitated Task Assignment Problem (CTAP).
+  /// </summary>
+  public class CTAPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number M of processors
+    /// </summary>
+    public int Processors { get; set; }
+    /// <summary>
+    /// The number N of tasks
+    /// </summary>
+    public int Tasks { get; set; }
+    /// <summary>
+    /// An MxN Matrix with M = |Processors| and N = |Tasks|
+    /// </summary>
+    public double[,] ExecutionCosts { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Tasks|
+    /// </summary>
+    public double[,] CommunicationCosts { get; set; }
+    /// <summary>
+    /// An array of length N with N = |Tasks|
+    /// </summary>
+    public double[] MemoryRequirements { get; set; }
+    /// <summary>
+    /// An array of length M with M = |Processors|
+    /// </summary>
+    public double[] MemoryCapacities { get; set; }
+
+    /// <summary>
+    /// Optional! An array of length N with N = |Tasks|
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality value of the <see cref="BestKnownAssignment"/>
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/DistanceHelper.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/DistanceHelper.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/DistanceHelper.cs	(revision 14757)
@@ -0,0 +1,133 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  public enum DistanceMeasure { Direct, Euclidean, RoundedEuclidean, UpperEuclidean, Geo, Manhattan, Maximum, Att };
+
+  public static class DistanceHelper {
+    /// <summary>
+    /// If only the coordinates are given, can calculate the distance matrix.
+    /// </summary>
+    /// <returns>A full distance matrix between all cities.</returns>
+    public static double[,] GetDistanceMatrix(DistanceMeasure distanceMeasure, double[,] coordinates, double[,] distances, int dimension) {
+      if (distances != null) return distances;
+
+      distances = new double[dimension, dimension];
+      for (int i = 0; i < dimension - 1; i++)
+        for (int j = i + 1; j < dimension; j++) {
+          distances[i, j] = GetDistance(i, j, distanceMeasure, coordinates, distances);
+          distances[j, i] = distances[i, j];
+        }
+
+      return distances;
+    }
+
+    public static double GetDistance(DistanceMeasure distanceMeasure, double x1, double y1, double x2, double y2) {
+      switch (distanceMeasure) {
+        case DistanceMeasure.Att:
+          return AttDistance(x1, y1, x2, y2);
+        case DistanceMeasure.Direct:
+          throw new ArgumentException("Direct distance measure requires distance matrix for distance calculation.");
+        case DistanceMeasure.Euclidean:
+          return EuclideanDistance(x1, y1, x2, y2);
+        case DistanceMeasure.Geo:
+          return GeoDistance(x1, y1, x2, y2);
+        case DistanceMeasure.Manhattan:
+          return ManhattanDistance(x1, y1, x2, y2);
+        case DistanceMeasure.Maximum:
+          return MaximumDistance(x1, y1, x2, y2);
+        case DistanceMeasure.RoundedEuclidean:
+          return Math.Round(EuclideanDistance(x1, y1, x2, y2));
+        case DistanceMeasure.UpperEuclidean:
+          return Math.Ceiling(EuclideanDistance(x1, y1, x2, y2));
+        default:
+          throw new InvalidOperationException("Distance measure is not known.");
+      }
+    }
+
+    #region Private Helpers
+    private static double GetDistance(int i, int j, DistanceMeasure distanceMeasure, double[,] coordinates, double[,] distances) {
+      switch (distanceMeasure) {
+        case DistanceMeasure.Att:
+          return AttDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]);
+        case DistanceMeasure.Direct:
+          return distances[i, j];
+        case DistanceMeasure.Euclidean:
+          return EuclideanDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]);
+        case DistanceMeasure.Geo:
+          return GeoDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]);
+        case DistanceMeasure.Manhattan:
+          return ManhattanDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]);
+        case DistanceMeasure.Maximum:
+          return MaximumDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]);
+        case DistanceMeasure.RoundedEuclidean:
+          return Math.Round(EuclideanDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]));
+        case DistanceMeasure.UpperEuclidean:
+          return Math.Ceiling(EuclideanDistance(coordinates[i, 0], coordinates[i, 1], coordinates[j, 0], coordinates[j, 1]));
+        default:
+          throw new InvalidOperationException("Distance measure is not known.");
+      }
+    }
+
+    private static double AttDistance(double x1, double y1, double x2, double y2) {
+      return Math.Ceiling(Math.Sqrt(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) / 10.0));
+    }
+
+    private static double EuclideanDistance(double x1, double y1, double x2, double y2) {
+      return Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+    }
+
+    private const double PI = 3.141592;
+    private const double RADIUS = 6378.388;
+    private static double GeoDistance(double x1, double y1, double x2, double y2) {
+      double latitude1, longitude1, latitude2, longitude2;
+      double q1, q2, q3;
+      double length;
+
+      latitude1 = ConvertToRadian(x1);
+      longitude1 = ConvertToRadian(y1);
+      latitude2 = ConvertToRadian(x2);
+      longitude2 = ConvertToRadian(y2);
+
+      q1 = Math.Cos(longitude1 - longitude2);
+      q2 = Math.Cos(latitude1 - latitude2);
+      q3 = Math.Cos(latitude1 + latitude2);
+
+      length = (int)(RADIUS * Math.Acos(0.5 * ((1.0 + q1) * q2 - (1.0 - q1) * q3)) + 1.0);
+      return (length);
+    }
+
+    private static double ConvertToRadian(double x) {
+      return PI * (Math.Truncate(x) + 5.0 * (x - Math.Truncate(x)) / 3.0) / 180.0;
+    }
+
+    private static double ManhattanDistance(double x1, double y1, double x2, double y2) {
+      return Math.Round(Math.Abs(x1 - x2) + Math.Abs(y1 - y2), MidpointRounding.AwayFromZero);
+    }
+
+    private static double MaximumDistance(double x1, double y1, double x2, double y2) {
+      return Math.Max(Math.Round(Math.Abs(x1 - x2), MidpointRounding.AwayFromZero), Math.Round(Math.Abs(y1 - y2), MidpointRounding.AwayFromZero));
+    }
+    #endregion
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs	(revision 14757)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes an instance of the Generalized Quadratic Assignment Problem (GQAP).
+  /// </summary>
+  public class GQAPData {
+    /// <summary>
+    /// The name of the instance.
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// A description of the instance.
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// |E| = The number of equipments are to be assigned in this instance.
+    /// </summary>
+    public int Equipments { get; set; }
+    /// <summary>
+    /// |L| = The number of locations that are available for the equipments.
+    /// </summary>
+    public int Locations { get; set; }
+    /// <summary>
+    /// Vector of length |E| that describes the space demand for the equipments.
+    /// </summary>
+    public double[] Demands { get; set; }
+    /// <summary>
+    /// Vector of length |L| that describes the space capacity for the locations.
+    /// </summary>
+    public double[] Capacities { get; set; }
+    /// <summary>
+    /// |E|x|E| matrix with the weights (flows) between the equipments. These describe the strength of the respective bonding.
+    /// </summary>
+    public double[,] Weights { get; set; }
+    /// <summary>
+    /// |L|x|L| matrix with the distances between the locations.
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// |E|x|L| matrix that describes the costs of installing equipment x at location y.
+    /// </summary>
+    public double[,] InstallationCosts { get; set; }
+    /// <summary>
+    /// A factor that scales the weights.
+    /// </summary>
+    public double TransportationCosts { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known assignment is a vector of length |E| with numbers ranging from 0 to |L| - 1
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known assignment.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/JSSPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/JSSPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/JSSPData.cs	(revision 14757)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Job Shop Scheduling Problem (JSSP).
+  /// </summary>
+  public class JSSPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of jobs.
+    /// </summary>
+    public int Jobs { get; set; }
+    /// <summary>
+    /// The number of resources.
+    /// </summary>
+    public int Resources { get; set; }
+    /// <summary>
+    /// The first dimension lists the jobs, the second dimension the operations and the value denotes the processing time.
+    /// </summary>
+    public double[,] ProcessingTimes { get; set; }
+    /// <summary>
+    /// The first dimension lists the jobs, the second dimension the operations and the value denotes the resource that is demanded.
+    /// </summary>
+    public int[,] Demands { get; set; }
+    /// <summary>
+    /// Optional! Specifies the due dates for each job.
+    /// </summary>
+    public double[] DueDates { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known schedule.
+    /// The first dimension lists the resources, the second dimension is the order and the value denotes the job
+    /// </summary>
+    public int[,] BestKnownSchedule { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known schedule.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/OPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/OPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/OPData.cs	(revision 14757)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Types {
+  /// <summary>
+  /// Describes instances of the Orienteering Problem (OP).
+  /// </summary>
+  public class OPData : TSPData {
+    /// <summary>
+    /// The maximum distance constraint for a Orienteering solution.
+    /// </summary>
+    public double MaximumDistance { get; set; }
+    /// <summary>
+    /// The scores of the points.
+    /// </summary>
+    public double[] Scores { get; set; }
+    /// <summary>
+    /// The penalty for each visited vertex.
+    /// </summary>
+    public double PointVisitingCosts { get; set; }
+    /// <summary>
+    /// Index of the starting point
+    /// </summary>
+    public int StartingPoint { get; set; }
+    /// <summary>
+    /// Index of the ending point.
+    /// </summary>
+    public int TerminalPoint { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/PTSPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/PTSPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/PTSPData.cs	(revision 14757)
@@ -0,0 +1,12 @@
+﻿
+namespace HeuristicLab.Problems.Instances {
+  /// <summary>
+  /// Describes instances of the Probabilistic Traveling Salesman Problem (PTSP).
+  /// </summary>
+  public class PTSPData : TSPData {
+    /// <summary>
+    /// The probabilities for each of the cities to appear in a route.
+    /// </summary>
+    public double[] Probabilities { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs	(revision 14757)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Quadratic Assignment Problem (QAP).
+  /// </summary>
+  public class QAPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of facilities (and also the number of locations)
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Faciliies|
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Faciliies|
+    /// </summary>
+    public double[,] Weights { get; set; }
+
+    /// <summary>
+    /// Optional! An array of length N with N = |Facilities|
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality value of the <see cref="BestKnownAssignment"/>
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs	(revision 14757)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Traveling Salesman Problem (TSP).
+  /// </summary>
+  public class TSPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of cities.
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// Specifies the distance measure that is to be used.
+    /// </summary>
+    public DistanceMeasure DistanceMeasure { get; set; }
+    /// <summary>
+    /// Optional! The distances are given in form of a distance matrix.
+    /// </summary>
+    /// <remarks>
+    /// Either this property or <see cref="Coordinates"/> needs to be specified.
+    /// </remarks>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] matrix where each row is one of the cities
+    /// and the colmns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// Either this property or <see cref="Distances"/> needs to be specified.
+    /// 
+    /// If no distance matrix is given, the distances have to be calculated by the
+    /// specified distance measure. If a distance matrix is given in addtion to the
+    /// coordinates, the distance matrix takes precedence and the coordinates are
+    /// for display only.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known tour in path-encoding.
+    /// </summary>
+    public int[] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known tour.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+
+    /// <summary>
+    /// If only the coordinates are given, can calculate the distance matrix.
+    /// </summary>
+    /// <returns>A full distance matrix between all cities.</returns>
+    public double[,] GetDistanceMatrix() {
+      return DistanceHelper.GetDistanceMatrix(DistanceMeasure, Coordinates, Distances, Dimension);
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPData.cs	(revision 14757)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Capacitated Vehicle Routing Problem (CVRP).
+  /// </summary>
+  public class CVRPData: VRPData {
+    /// <summary>
+    /// The capacity of the vehicles, which is the same for all (homogeneous fleet).
+    /// </summary>
+    public double Capacity { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPTWData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPTWData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/CVRPTWData.cs	(revision 14757)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Capacitated Vehicle Routing Problem with Time Windows (CVRPTW).
+  /// </summary>
+  public class CVRPTWData: CVRPData {
+    /// <summary>
+    /// The ready times of the customers and the depot
+    /// </summary>
+    public double[] ReadyTimes { get; set; }
+    /// <summary>
+    /// The service times of the customers and the depot
+    /// </summary>
+    public double[] ServiceTimes { get; set; }
+    /// <summary>
+    /// The due times of the customers and the depot
+    /// </summary>
+    public double[] DueTimes { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/IVRPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/IVRPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/IVRPData.cs	(revision 14757)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Interface for VRP data
+  /// </summary>
+  public interface IVRPData {
+    string Name { get; set; }
+    string Description { get; set; }
+    int Dimension { get; set; }
+    double? BestKnownQuality { get; set; }
+    int[][] BestKnownTour { get; set; }
+    int[] BestKnownTourVehicleAssignment { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPData.cs	(revision 14757)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Multi-Depot Capacitated Vehicle Routing Problem (MDCVRP).
+  /// </summary>
+  public class MDCVRPData: VRPData {
+    /// <summary>
+    /// The number of depots
+    /// </summary>
+    public int Depots { get; set; }
+    /// <summary>
+    /// The assignment of the vehicles to the depot.
+    /// </summary>
+    public int[] VehicleDepotAssignment { get; set; }
+    /// <summary>
+    /// The capacity of the vehicles, which is not the same for all (heterogeneous fleet).
+    /// </summary>
+    public double[] Capacity { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPTWData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPTWData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/MDCVRPTWData.cs	(revision 14757)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Multi-Depot Capacitated Vehicle Routing Problem (MDCVRP).
+  /// </summary>
+  public class MDCVRPTWData: MDCVRPData {
+    /// <summary>
+    /// The ready times of the customers and the depot
+    /// </summary>
+    public double[] ReadyTimes { get; set; }
+    /// <summary>
+    /// The service times of the customers and the depot
+    /// </summary>
+    public double[] ServiceTimes { get; set; }
+    /// <summary>
+    /// The due times of the customers and the depot
+    /// </summary>
+    public double[] DueTimes { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/PDPTWData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/PDPTWData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/PDPTWData.cs	(revision 14757)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Pickup and Delivery Problem with Time Windows (PDPTW).
+  /// </summary>
+  public class PDPTWData: CVRPTWData {
+    /// <summary>
+    /// The pickup and delivery locations of the requests
+    /// </summary>
+    public int[] PickupDeliveryLocations { get; set; }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/VRPData.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/VRPData.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Instances/3.3/Types/VRP/VRPData.cs	(revision 14757)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 {
+  /// <summary>
+  /// Describes instances of the Vehicle Routing Problem (VRP).
+  /// </summary>
+  public class VRPData : IVRPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of customers and the depot
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// The distance measure that is used to calculate the distance between
+    ///the coordinates if no <see cref="Distances"/> is given.
+    /// </summary>
+    public DistanceMeasure DistanceMeasure { get; set; }
+    /// <summary>
+    /// Optional! The maximum number of vehicles that can be used.
+    /// </summary>
+    /// <remarks>
+    /// If no number is given, but a maximum is required, it can be assumed that
+    /// the maximum number of vehicles is equal to the number of customers as
+    /// there cannot be more than one vehicle per customer.
+    /// </remarks>
+    public double? MaximumVehicles { get; set; }
+    /// <remarks>
+    /// Either Distances or the <see cref="Coordinates"/> need to be specified along
+    /// with a distance measure.
+    /// </remarks>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] where each row is either the customer
+    /// or the depot and the columns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// Either <see cref="Distances"/> or the Coordinates need to be specified along
+    /// with a distance measure.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+    /// <summary>
+    /// The demand vector that specifies how many goods need to be delivered.
+    /// The vector has to include the depot, but with a demand of 0.
+    /// </summary>
+    public double[] Demands { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known solution as a list of tours in path-encoding.
+    /// </summary>
+    public int[][] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! Specifies the used vehicle for a given tour.
+    /// </summary>
+    public int[] BestKnownTourVehicleAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known solution.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+
+    /// <summary>
+    /// If only the coordinates are given, can calculate the distance matrix.
+    /// </summary>
+    /// <returns>A full distance matrix between all cities.</returns>
+    public double[,] GetDistanceMatrix() {
+      return DistanceHelper.GetDistanceMatrix(DistanceMeasure, Coordinates, Distances, Dimension);
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/CFSAPSequenceOnly.cs
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/CFSAPSequenceOnly.cs	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/CFSAPSequenceOnly.cs	(revision 14757)
@@ -0,0 +1,248 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Instances;
+
+namespace HeuristicLab.Problems.Scheduling.CFSAP {
+  [Item("Cyclic Flow Shop with two machine nests (CFSAP) sequence only", "Non-permutational cyclic flow shop scheduling problem with two machine nests from W. Bozejko.")]
+  [Creatable(CreatableAttribute.Categories.CombinatorialProblems)]
+  [StorableClass]
+  public class CFSAPSequenceOnly : SingleObjectiveBasicProblem<PermutationEncoding>, IProblemInstanceConsumer<CFSAPData> {
+    public override bool Maximization { get { return false; } }
+
+    public IValueParameter<IntMatrix> ProcessingTimesParameter {
+      get { return (IValueParameter<IntMatrix>)Parameters["ProcessingTimes"]; }
+    }
+
+    public IValueParameter<ItemList<IntMatrix>> SetupTimesParameter {
+      get { return (IValueParameter<ItemList<IntMatrix>>)Parameters["SetupTimes"]; }
+    }
+
+    [StorableConstructor]
+    protected CFSAPSequenceOnly(bool deserializing) : base(deserializing) {}
+    protected CFSAPSequenceOnly(CFSAPSequenceOnly original, Cloner cloner)
+      : base(original, cloner) {}
+    public CFSAPSequenceOnly() {
+      Parameters.Add(new ValueParameter<IntMatrix>("ProcessingTimes", "The processing times of each job for each machine nest."));
+      Parameters.Add(new ValueParameter<ItemList<IntMatrix>>("SetupTimes", "The sequence dependent set up times among all jobs for each machine nest."));
+
+      ProcessingTimesParameter.Value = new IntMatrix(new int[,] {
+        { 5, 4, 3, 2, 1 },
+        { 1, 2, 3, 4, 5 }
+      });
+
+      SetupTimesParameter.Value = new ItemList<IntMatrix>(2);
+      SetupTimesParameter.Value.Add(new IntMatrix(new int[,] {
+        { 3, 4, 5, 4, 3 },
+        { 3, 4, 5, 4, 3 },
+        { 3, 4, 5, 4, 3 },
+        { 3, 4, 5, 4, 3 },
+        { 3, 4, 5, 4, 3 },
+      }));
+      SetupTimesParameter.Value.Add(new IntMatrix(new int[,] {
+        { 5, 4, 3, 4, 5 },
+        { 5, 4, 3, 4, 5 },
+        { 5, 4, 3, 4, 5 },
+        { 5, 4, 3, 4, 5 },
+        { 5, 4, 3, 4, 5 },
+      }));
+
+      Encoding.Length = 5;
+
+      Operators.RemoveAll(x => x is SingleObjectiveMoveGenerator);
+      Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
+      Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CFSAPSequenceOnly(this, cloner);
+    }
+
+    public override double Evaluate(Individual individual, IRandom random) {
+      var order = individual.Permutation(Encoding.Name);
+      var N = order.Length;
+      var processingTimes = ProcessingTimesParameter.Value;
+      var setupTimes = SetupTimesParameter.Value;
+
+      int[,,] weights = new int[2, 2 * N, 2 * N];
+      int[,] graph = new int[2, N];
+      int[,] prevPath = new int[2, N + 1];                     //Only for optimal assignment evaluation
+      int[] optimalAssignment = new int[N];                //Only for optimal assignment evaluation
+
+      //Calculate weights in the graph
+      for (int S = 0; S < N; S++) { //Starting point of the arc
+        for (int sM = 0; sM < 2; sM++) {    //Starting point machine
+          int eM = sM == 0 ? 1 : 0;
+          weights[sM, S, S + 1] = 0;
+
+          for (int E = S + 2; E < S + N; E++)
+            weights[sM, S, E] =
+              weights[sM, S, E - 1] +
+              processingTimes[eM, order[(E - 1) % N]] +
+              setupTimes[eM][order[(E - 1) % N], order[E % N]];
+
+          for (int E = S + 1; E < S + N; E++)
+            weights[sM, S, E] += (
+              processingTimes[sM, order[S % N]] +
+              setupTimes[sM][order[S % N], order[(E + 1) % N]]
+            );
+        }
+      }
+
+      //Determine the shortest path in the graph
+      int T = int.MaxValue / 2;
+      for (int S = 0; S < N - 1; S++)      //Start node in graph			    O(N)
+        for (int SM = 0; SM < 2; SM++) {   //Start node machine in graph	O(1)
+          graph[SM, S] = 0;
+          graph[SM == 0 ? 1 : 0, S] = int.MaxValue / 2;
+          prevPath[SM, 0] = -1;
+          for (int E = S + 1; E < N; E++)      //Currently calculated node			    O(N)
+            for (int EM = 0; EM < 2; EM++) {   //Currently calculated node machine	O(1)
+              graph[EM, E] = int.MaxValue / 2;
+              for (int EC = S; EC < E; EC++) { //Nodes connected to node E		      O(N)
+                int newWeight = graph[EM == 0 ? 1 : 0, EC] + weights[EM == 0 ? 1 : 0, EC, E];
+                if (newWeight < graph[EM, E]) {
+                  graph[EM, E] = newWeight;
+                  prevPath[EM, E] = EC;
+                }
+              }
+            }
+
+          int EP = S + N; //End point.
+          int newT = int.MaxValue / 2;
+          for (int EC = S + 1; EC < N; EC++) { //Nodes connected to EP O(N)
+            int newWeight = graph[SM == 0 ? 1 : 0, EC] + weights[SM == 0 ? 1 : 0, EC, EP];
+            if (newWeight < newT) {
+              newT = newWeight;
+              prevPath[SM, S] = EC;
+            }
+          }
+
+          if (newT < T) {
+            T = newT;
+            optimalAssignment = MakeAssignement(S, SM, prevPath, order);
+          }
+        }
+
+      //Omitted solutions
+      for (int machine = 0; machine < 2; machine++) {
+        int[] assignment = Enumerable.Repeat(machine, N).ToArray();
+        int newT = EvaluateAssignement(order, assignment, processingTimes, setupTimes);
+        if (newT < T) { //New best solution has been found
+          T = newT;
+          assignment.CopyTo(optimalAssignment, N);
+        }
+      }
+
+      return T;
+    }
+
+    //Function to evaluate individual with the specified assignment
+    public static int EvaluateAssignement(Permutation order, int[] assignment, IntMatrix processingTimes, ItemList<IntMatrix> setupTimes) {
+      var N = order.Length;
+      int T = 0;
+
+      for (int i = 0; i < N; i++) {
+        int operation = order[i];
+        int machine = assignment[operation];
+        T += processingTimes[machine, operation];
+      }
+
+      for (int machine = 0; machine < 2; machine++) {
+        int first = -1;
+        int last = -1;
+        for (int i = 0; i < N; i++) {
+          int operation = order[i];
+          if (assignment[operation] == machine) {
+            if (first == -1)
+              first = operation;
+            else
+              T += setupTimes[machine][last, operation];
+            last = operation;
+          }
+        }
+        if (last != -1 && first != -1)
+          T += setupTimes[machine][last, first];
+      }
+
+      return T;
+    }
+
+    private int[] MakeAssignement(int start, int startMach, int[,] prevPath, Permutation order) {
+      var N = order.Length;
+      int[] assignment = Enumerable.Repeat(-1, N).ToArray();
+      var inverseOrder = new int[N];
+
+      for (int i = 0; i < N; i++)
+        inverseOrder[order[i]] = i;
+
+      int end = start + N;
+
+      int currMach = startMach;
+      int currNode = start;
+      while (true) {
+        assignment[inverseOrder[currNode]] = currMach;
+        currNode = prevPath[currMach, currNode];
+        currMach = currMach == 0 ? 1 : 0;
+        if (currNode == start)
+          break;
+      }
+
+      currMach = startMach;
+      for (int i = 0; i < N; i++) {
+        if (assignment[inverseOrder[i]] != -1)
+          currMach = currMach == 0 ? 1 : 0;
+        else
+          assignment[inverseOrder[i]] = currMach;
+      }
+
+      return assignment;
+    }
+
+    public void Load(CFSAPData data) {
+      if (data.MachineNests != 2) throw new ArgumentException("Currently only two machine nests are supported.");
+      ProcessingTimesParameter.Value = new IntMatrix(data.ProcessingTimes);
+      var setups = new ItemList<IntMatrix>(data.MachineNests);
+      for (var m = 0; m < data.SetupTimes.GetLength(0); m++) {
+        var setupTimes = new int[data.Jobs, data.Jobs];
+        for (var i = 0; i < data.Jobs; i++)
+        for (var j = 0; j < data.Jobs; j++)
+          setupTimes[i, j] = data.SetupTimes[m, i, j];
+        setups.Add(new IntMatrix(setupTimes));
+      }
+      SetupTimesParameter.Value = setups;
+      Encoding.Length = data.Jobs;
+      Name = data.Name;
+      Description = data.Description;
+    }
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/HeuristicLab.Problems.Scheduling.CFSAP-3.3.csproj
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/HeuristicLab.Problems.Scheduling.CFSAP-3.3.csproj	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/HeuristicLab.Problems.Scheduling.CFSAP-3.3.csproj	(revision 14757)
@@ -0,0 +1,155 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.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>{93609034-D1EE-4DC6-A381-E4CDB55E4261}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Scheduling.CFSAP</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Scheduling.CFSAP-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>
+  </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>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.BinaryVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.PermutationEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="SimSharp-3.0.9, Version=3.0.9.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\SimSharp-3.0.9.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="CFSAPSequenceOnly.cs" />
+    <Compile Include="Plugin.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
+      <Project>{3540e29e-4793-49e7-8ee2-fea7f61c3994}</Project>
+      <Name>HeuristicLab.Problems.Instances-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </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>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">
+      set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+      set ProjectDir=$(ProjectDir)
+      set SolutionDir=$(SolutionDir)
+      set Outdir=$(Outdir)
+
+      call PreBuildEvent.cmd
+    </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+      export ProjectDir=$(ProjectDir)
+      export SolutionDir=$(SolutionDir)
+
+      $SolutionDir/PreBuildEvent.sh
+    </PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Plugin.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Plugin.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Plugin.cs.frame	(revision 14757)
@@ -0,0 +1,43 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Scheduling.CFSAP {
+  [Plugin("HeuristicLab.Problems.Scheduling.CFSAP", "Plugin that implements the non-permutational ﬂow shop scheduling problem with two-machine nests (CFSAP) from W. Bozejko.", "3.3.14.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.Scheduling.CFSAP-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.SimSharp", "3.0.9")]
+  public class HeuristicLabProblemsSchedulingCFSAPPlugin : PluginBase  {
+  }
+}
Index: /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
+++ /branches/CFSAP/HeuristicLab.Problems.Scheduling.CFSAP/3.3/Properties/AssemblyInfo.cs.frame	(revision 14757)
@@ -0,0 +1,58 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Reflection;
+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.Scheduling.CFSAP")]
+[assembly: AssemblyDescription("Plugin that implements the non-permutational ﬂow shop scheduling problem with two-machine nests (CFSAP) from W. Bozejko.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) HEAL 2002-2017")]
+[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("93609034-d1ee-4dc6-a381-e4cdb55e4261")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.14.$WCREV$")]
Index: /branches/CFSAP/PreBuildEvent.cmd
===================================================================
--- /branches/CFSAP/PreBuildEvent.cmd	(revision 14757)
+++ /branches/CFSAP/PreBuildEvent.cmd	(revision 14757)
@@ -0,0 +1,11 @@
+IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.cs.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+IF EXIST "%ProjectDir%\Plugin.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+GOTO Done
+
+:Error_Handling
+ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. 
+exit 0
+
+:Done
Index: /branches/CFSAP/PreBuildEvent.sh
===================================================================
--- /branches/CFSAP/PreBuildEvent.sh	(revision 14757)
+++ /branches/CFSAP/PreBuildEvent.sh	(revision 14757)
@@ -0,0 +1,29 @@
+export AIFile=$ProjectDir/Properties/AssemblyInfo.cs.frame
+export PluginFile=$ProjectDir/Plugin.cs.frame
+
+command_exists () {
+    command -v "$1" 
+}
+
+if command_exists svnwcrev ; then   
+	if [ -f $AIFile ];
+	then
+	  svnwcrev $ProjectDir $AIFile $ProjectDir/Properties/AssemblyInfo.cs
+	fi
+
+	if [ -f $PluginFile ];
+	then
+	  svnwcrev $ProjectDir $PluginFile $ProjectDir/Plugin.cs
+	fi
+else
+	if [ -f $AIFile ];
+	then
+	  sed 's/\$WCREV\$/'0'/g' $AIFile > $ProjectDir/Properties/AssemblyInfo.cs 
+	fi
+
+	if [ -f $PluginFile ];
+	then
+	 sed 's/\$WCREV\$/'0'/g' $PluginFile > $ProjectDir/Plugin.cs
+	fi
+fi
+
