Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs.sln
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs.sln	(revision 16171)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs.sln	(revision 16172)
@@ -75,5 +75,5 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.IGraph-0.8.0-pre", "HeuristicLab.ExtLibs\HeuristicLab.Igraph\0.8.0-pre\HeuristicLab.Igraph-0.8.0-pre\HeuristicLab.IGraph-0.8.0-pre.csproj", "{088D34F2-32EA-43FF-BAA8-22428D5B66BE}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OrTools-6.8.0-pre", "HeuristicLab.ExtLibs\HeuristicLab.OrTools\6.8.0-pre\HeuristicLab.OrTools-6.8.0-pre\HeuristicLab.OrTools-6.8.0-pre.csproj", "{AEC895BC-C519-49D3-9A94-6B1C71AD6671}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OrTools-6.9.0-pre", "HeuristicLab.ExtLibs\HeuristicLab.OrTools\6.9.0-pre\HeuristicLab.OrTools-6.9.0-pre\HeuristicLab.OrTools-6.9.0-pre.csproj", "{AEC895BC-C519-49D3-9A94-6B1C71AD6671}"
 EndProject
 Global
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre.csproj
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre.csproj	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre.csproj	(revision 16172)
@@ -0,0 +1,163 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.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>{AEC895BC-C519-49D3-9A94-6B1C71AD6671}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OrTools</RootNamespace>
+    <AssemblyName>HeuristicLab.OrTools-6.9.0-pre</AssemblyName>
+    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Google.OrTools, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e028b7d783ee8af0, processorArchitecture=AMD64">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\Google.OrTools.dll</HintPath>
+    </Reference>
+    <Reference Include="Google.Protobuf, Version=3.5.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\Google.Protobuf.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </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.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="GLPK-4.65-license.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="glpk_4_65.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Google.OrTools-license.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Google.OrTools.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Google.OrTools.pdb">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Google.OrTools_version.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Google.Protobuf.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="runtime.win-x64.Google.OrTools.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <Import Project="..\..\..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\..\..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
+  </Target>
+  <!-- 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/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Plugin.cs.frame
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Plugin.cs.frame	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Plugin.cs.frame	(revision 16172)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OrTools {
+  [Plugin("HeuristicLab.OrTools", "Provides functionality of Google OR-Tools in HeuristicLab. Requires Windows 64-bit", "6.9.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OrTools-6.9.0-pre.dll", PluginFileType.Assembly)]
+  [PluginFile("Google.OrTools.dll", PluginFileType.Assembly)]
+  [PluginFile("Google.OrTools-license.txt", PluginFileType.License)]
+  [PluginFile("runtime.win-x64.Google.OrTools.dll", PluginFileType.NativeDll)]
+  [PluginFile("Google.OrTools_version.txt", PluginFileType.Data)]
+  [PluginFile("glpk_4_65.dll", PluginFileType.NativeDll)]
+  [PluginFile("GLPK-4.65-license.txt", PluginFileType.License)]
+  public class HeuristicLabOrToolsPlugin : PluginBase {
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs	(revision 16172)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.OrTools")]
+[assembly: AssemblyDescription("Plugin for providing Google OR-Tools functionality in HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2018 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("D7426305-B35E-47AF-8B19-7081C4AB76D3")]
+
+// 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("6.8.0.0")]
+[assembly: AssemblyFileVersion("6.8.0.16138")]
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs.frame	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/Properties/AssemblyInfo.cs.frame	(revision 16172)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.OrTools")]
+[assembly: AssemblyDescription("Plugin for providing Google OR-Tools functionality in HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2018 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("D7426305-B35E-47AF-8B19-7081C4AB76D3")]
+
+// 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("6.8.0.0")]
+[assembly: AssemblyFileVersion("6.8.0.$WCREV$")]
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/packages.config
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/packages.config	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.ExtLibs/HeuristicLab.OrTools/6.9.0-pre/HeuristicLab.OrTools-6.9.0-pre/packages.config	(revision 16172)
@@ -0,0 +1,5 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Microsoft.NETCore.Platforms" version="2.1.0" targetFramework="net461" />
+  <package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
+</packages>
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/HeuristicLab.MathematicalOptimization-3.3.csproj
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/HeuristicLab.MathematicalOptimization-3.3.csproj	(revision 16171)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/HeuristicLab.MathematicalOptimization-3.3.csproj	(revision 16172)
@@ -115,8 +115,7 @@
       <HintPath>..\..\bin\Google.OrTools.dll</HintPath>
     </Reference>
-    <Reference Include="Google.Protobuf, Version=3.5.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+    <Reference Include="HeuristicLab.OrTools-6.9.0-pre, Version=6.8.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\bin\Google.Protobuf.dll</HintPath>
-      <Private>False</Private>
+      <HintPath>..\..\bin\HeuristicLab.OrTools-6.9.0-pre.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
@@ -127,11 +126,48 @@
     <Reference Include="System.Core" />
     <Reference Include="System.Data" />
-  </ItemGroup>
-  <ItemGroup>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="LinearProgramming\Algorithms\BopSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\CoinOrSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\GlopSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\GlpkSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\LinearProgrammingType.cs" />
+    <Compile Include="LinearProgramming\Algorithms\ScipSolver.cs" />
     <Compile Include="LinearProgramming\BasisStatus.cs" />
+    <Compile Include="LinearProgramming\Algorithms\CplexSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\GurobiSolver.cs" />
+    <Compile Include="LinearProgramming\Algorithms\ISolver.cs" />
+    <Compile Include="LinearProgramming\Problems\ILinearProgrammingProblemDefinition.cs" />
+    <Compile Include="LinearProgramming\Algorithms\LinearProgrammingAlgorithm.cs" />
+    <Compile Include="LinearProgramming\Problems\LinearProgrammingProblem.cs" />
     <Compile Include="LinearProgramming\LinearSolverExtensions.cs" />
     <Compile Include="LinearProgramming\LinearSolver.cs" />
+    <Compile Include="LinearProgramming\Problems\LinearProgrammingProblemDefintion.cs" />
     <Compile Include="LinearProgramming\OptimizationProblemType.cs" />
+    <Compile Include="LinearProgramming\Problems\ProblemDefinitionScriptException.cs" />
+    <Compile Include="LinearProgramming\Algorithms\Solver.cs" />
+    <Compile Include="LinearProgramming\Views\LinearProgrammingProblemDefinitionScriptView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LinearProgramming\Views\LinearProgrammingProblemDefinitionScriptView.Designer.cs">
+      <DependentUpon>LinearProgrammingProblemDefinitionScriptView.cs</DependentUpon>
+    </Compile>
     <Compile Include="LinearProgramming\ResultStatus.cs" />
+    <Compile Include="LinearProgramming\Views\LinearProgrammingProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LinearProgramming\Views\LinearProgrammingProblemView.Designer.cs">
+      <DependentUpon>LinearProgrammingProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LinearProgramming\Problems\LinearProgrammingProblemDefinitionScript.cs" />
+    <Compile Include="LinearProgramming\Templates\CompiledLinearProgrammingProblemDefinition.cs" />
+    <Compile Include="LinearProgramming\Templates\ScriptTemplates.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>ScriptTemplates.resx</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <None Include="Plugin.cs.frame" />
@@ -142,5 +178,83 @@
     <None Include="HeuristicLab.snk" />
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.OKB\3.3\HeuristicLab.Clients.OKB-3.3.csproj">
+      <Project>{73857A9C-9706-4B72-8D9C-210B5B6A5691}</Project>
+      <Name>HeuristicLab.Clients.OKB-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.CodeEditor\3.4\HeuristicLab.CodeEditor-3.4.csproj">
+      <Project>{C38691AE-ECB4-489A-A05D-B035554E0168}</Project>
+      <Name>HeuristicLab.CodeEditor-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Operators\3.3\HeuristicLab.Optimization.Operators-3.3.csproj">
+      <Project>{25087811-F74C-4128-BC86-8324271DA13E}</Project>
+      <Name>HeuristicLab.Optimization.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Programmable\3.3\HeuristicLab.Problems.Programmable-3.3.csproj">
+      <Project>{EE07BFF8-B23D-41F5-8AD7-AC9598D7A2C9}</Project>
+      <Name>HeuristicLab.Problems.Programmable-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Scripting.Views\3.3\HeuristicLab.Scripting.Views-3.3.csproj">
+      <Project>{0C2917C8-7AA8-4E18-800A-C4D064F992ED}</Project>
+      <Name>HeuristicLab.Scripting.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Scripting\3.3\HeuristicLab.Scripting-3.3.csproj">
+      <Project>{21977CC3-1757-4B3B-87BD-FF817AAA900F}</Project>
+      <Name>HeuristicLab.Scripting-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="LinearProgramming\Templates\ScriptTemplates.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>ScriptTemplates.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LinearProgramming\Views\LinearProgrammingProblemView.resx">
+      <DependentUpon>LinearProgrammingProblemView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/BopSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/BopSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/BopSolver.cs	(revision 16172)
@@ -0,0 +1,15 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("BOP", "BOP (https://developers.google.com/optimization/reference/bop/bop_solver/) can be used out of the box.")]
+  [StorableClass]
+  public class BopSolver : Solver {
+
+    public BopSolver() {
+      Parameters.Remove(programmingTypeParam);
+    }
+
+    public override OptimizationProblemType OptimizationProblemType => OptimizationProblemType.BOP_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CoinOrSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CoinOrSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CoinOrSolver.cs	(revision 16172)
@@ -0,0 +1,14 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("Clp/Cbc", "Clp (https://projects.coin-or.org/Clp) and Cbc (https://projects.coin-or.org/Cbc) can be used out of the box.")]
+  [StorableClass]
+  public class CoinOrSolver : Solver {
+
+    public override OptimizationProblemType OptimizationProblemType =>
+      LinearProgrammingType == LinearProgrammingType.LinearProgramming
+        ? OptimizationProblemType.CLP_LINEAR_PROGRAMMING
+        : OptimizationProblemType.CBC_MIXED_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CplexSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CplexSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/CplexSolver.cs	(revision 16172)
@@ -0,0 +1,21 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+
+  [Item("CPLEX", "CPLEX (https://www.ibm.com/analytics/cplex-optimizer) must be installed and licenced.")]
+  [StorableClass]
+  public class CplexSolver : Solver {
+
+    public CplexSolver() {
+      Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("cplex1280.dll")));
+    }
+
+    public override OptimizationProblemType OptimizationProblemType =>
+      LinearProgrammingType == LinearProgrammingType.LinearProgramming
+        ? OptimizationProblemType.CPLEX_LINEAR_PROGRAMMING
+        : OptimizationProblemType.CPLEX_MIXED_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlopSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlopSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlopSolver.cs	(revision 16172)
@@ -0,0 +1,19 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("Glop", "Glop (https://developers.google.com/optimization/lp/glop) can be used out of the box.")]
+  [StorableClass]
+  public class GlopSolver : Solver {
+
+    public GlopSolver() {
+      Parameters.Remove(programmingTypeParam);
+      Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType),
+        (EnumValue<LinearProgrammingType>)new EnumValue<LinearProgrammingType>().AsReadOnly()));
+    }
+
+    public override OptimizationProblemType OptimizationProblemType => OptimizationProblemType.GLOP_LINEAR_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlpkSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlpkSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GlpkSolver.cs	(revision 16172)
@@ -0,0 +1,20 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("GLPK", "GLPK (https://www.gnu.org/software/glpk/) can be used out of the box.")]
+  [StorableClass]
+  public class GlpkSolver : Solver {
+
+    public GlpkSolver() {
+      Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("glpk_4_65.dll")));
+    }
+
+    public override OptimizationProblemType OptimizationProblemType =>
+      LinearProgrammingType == LinearProgrammingType.LinearProgramming
+        ? OptimizationProblemType.GLPK_LINEAR_PROGRAMMING
+        : OptimizationProblemType.GLPK_MIXED_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GurobiSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GurobiSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/GurobiSolver.cs	(revision 16172)
@@ -0,0 +1,20 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("Gurobi", "Gurobi (http://www.gurobi.com/) must be installed and licenced.")]
+  [StorableClass]
+  public class GurobiSolver : Solver {
+
+    public GurobiSolver() {
+      Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("gurobi80.dll")));
+    }
+
+    public override OptimizationProblemType OptimizationProblemType =>
+      LinearProgrammingType == LinearProgrammingType.LinearProgramming
+        ? OptimizationProblemType.GUROBI_LINEAR_PROGRAMMING
+        : OptimizationProblemType.GUROBI_MIXED_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ISolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ISolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ISolver.cs	(revision 16172)
@@ -0,0 +1,9 @@
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  public interface ISolver : IParameterizedNamedItem {
+    OptimizationProblemType OptimizationProblemType { get; }
+    string LibraryName { get; set; }
+    LinearProgrammingType LinearProgrammingType { get; set; }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingAlgorithm.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingAlgorithm.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingAlgorithm.cs	(revision 16172)
@@ -0,0 +1,99 @@
+﻿using System;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.MathematicalOptimization.LinearProgramming.Problems;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("Linear Programming Algorithm", "")]
+  [Creatable(CreatableAttribute.Categories.Algorithms, Priority = 162)]
+  [StorableClass]
+  public class LinearProgrammingAlgorithm : BasicAlgorithm {
+
+    [Storable]
+    private readonly IConstrainedValueParameter<ISolver> solverParam;
+
+    [Storable]
+    private readonly IFixedValueParameter<DoubleValue> relativeGapToleranceParam;
+
+    [Storable]
+    private readonly IFixedValueParameter<TimeSpanValue> timeLimitParam;
+
+    public LinearProgrammingAlgorithm() {
+      Parameters.Add(solverParam = new ConstrainedValueParameter<ISolver>(nameof(Solver)));
+      Parameters.Add(relativeGapToleranceParam = new FixedValueParameter<DoubleValue>(nameof(RelativeGapTolerance), new DoubleValue()));
+      Parameters.Add(timeLimitParam = new FixedValueParameter<TimeSpanValue>(nameof(TimeLimit), new TimeSpanValue()));
+
+      Problem = new LinearProgrammingProblem();
+
+      solverParam.ValidValues.Add(new CoinOrSolver());
+      solverParam.ValidValues.Add(new CplexSolver());
+      solverParam.ValidValues.Add(new GlpkSolver());
+      solverParam.ValidValues.Add(new GurobiSolver());
+      solverParam.ValidValues.Add(new ScipSolver());
+      solverParam.ValidValues.Add(new BopSolver());
+      solverParam.ValidValues.Add(new GlopSolver());
+    }
+
+    [StorableConstructor]
+    private LinearProgrammingAlgorithm(bool deserializing)
+      : base(deserializing) { }
+
+    private LinearProgrammingAlgorithm(LinearProgrammingAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+      solverParam = cloner.Clone(original.solverParam);
+      relativeGapToleranceParam = cloner.Clone(original.relativeGapToleranceParam);
+      timeLimitParam = cloner.Clone(original.timeLimitParam);
+    }
+
+    public ISolver Solver {
+      get => solverParam.Value;
+      set => solverParam.Value = value;
+    }
+
+    public new LinearProgrammingProblem Problem {
+      get => (LinearProgrammingProblem)base.Problem;
+      set => base.Problem = value;
+    }
+
+    public override Type ProblemType { get; } = typeof(LinearProgrammingProblem);
+    public double RelativeGapTolerance {
+      get => relativeGapToleranceParam.Value.Value;
+      set => relativeGapToleranceParam.Value.Value = value;
+    }
+
+    public override ResultCollection Results { get; } = new ResultCollection();
+
+    public override bool SupportsPause { get; } = false;
+
+    public TimeSpan TimeLimit {
+      get => timeLimitParam.Value.Value;
+      set => timeLimitParam.Value.Value = value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) => new LinearProgrammingAlgorithm(this, cloner);
+    protected override void Run(CancellationToken cancellationToken) {
+      using (var solver = LinearSolver.CreateSolver(Solver.OptimizationProblemType, Name,
+        Solver.LibraryName ?? string.Empty, s => Problem.ProblemDefinition.BuildModel(s))) {
+        solver.RelativeGapTolerance = RelativeGapTolerance;
+        solver.TimeLimit = TimeLimit;
+
+        solver.Solve();
+
+        Problem.ProblemDefinition.Analyze(solver.Solver, Results);
+        Results.AddOrUpdateResult("Result Status", new EnumValue<ResultStatus>(solver.ResultStatus));
+        Results.AddOrUpdateResult("Best Objective Value", new DoubleValue(solver.ObjectiveValue ?? double.NaN));
+        Results.AddOrUpdateResult("Absolute Gap", new DoubleValue(solver.AbsoluteGap ?? double.NaN));
+        Results.AddOrUpdateResult("Relative Gap", new DoubleValue(solver.RelativeGap ?? double.NaN));
+        Results.AddOrUpdateResult("Number of Constraints", new IntValue(solver.NumberOfConstraints));
+        Results.AddOrUpdateResult("Number of Variables", new IntValue(solver.NumberOfVariables));
+        Results.AddOrUpdateResult("Number of Nodes", new DoubleValue(solver.NumberOfNodes));
+        Results.AddOrUpdateResult("Iterations", new DoubleValue(solver.Iterations));
+      }
+    }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingType.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingType.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/LinearProgrammingType.cs	(revision 16172)
@@ -0,0 +1,6 @@
+﻿namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  public enum LinearProgrammingType {
+    LinearProgramming,
+    MixedIntegerProgramming
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ScipSolver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ScipSolver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/ScipSolver.cs	(revision 16172)
@@ -0,0 +1,21 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+  [Item("SCIP", "SCIP (http://scip.zib.de/) must be installed and licenced.")]
+  [StorableClass]
+  public class ScipSolver : Solver {
+
+    public ScipSolver() {
+      Parameters.Add(libraryNameParam = new FixedValueParameter<StringValue>(nameof(LibraryName), new StringValue("scip.dll")));
+      Parameters.Remove(programmingTypeParam);
+      Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType),
+        (EnumValue<LinearProgrammingType>)new EnumValue<LinearProgrammingType>(LinearProgrammingType.MixedIntegerProgramming).AsReadOnly()));
+    }
+
+    public override OptimizationProblemType OptimizationProblemType =>
+      OptimizationProblemType.SCIP_MIXED_INTEGER_PROGRAMMING;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solver.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solver.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Algorithms/Solver.cs	(revision 16172)
@@ -0,0 +1,47 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Algorithms {
+
+  public class Solver : ParameterizedNamedItem, ISolver {
+
+    [Storable]
+    protected IFixedValueParameter<StringValue> libraryNameParam;
+
+
+    [Storable]
+    protected IFixedValueParameter<EnumValue<LinearProgrammingType>> programmingTypeParam;
+
+    public Solver() {
+      //  Parameters.Add(useMixedIntegerProgrammingParam = new FixedValueParameter<BoolValue>(nameof(UseMixedIntegerProgramming), (BoolValue)new BoolValue(false).AsReadOnly()));
+      Parameters.Add(programmingTypeParam = new FixedValueParameter<EnumValue<LinearProgrammingType>>(nameof(LinearProgrammingType), new EnumValue<LinearProgrammingType>()));
+    }
+
+    [StorableConstructor]
+    protected Solver(bool deserializing)
+      : base(deserializing) { }
+
+    protected Solver(Solver original, Cloner cloner)
+      : base(original, cloner) {
+      libraryNameParam = cloner.Clone(original.libraryNameParam);
+      programmingTypeParam = cloner.Clone(original.programmingTypeParam);
+    }
+
+    public string LibraryName {
+      get => libraryNameParam?.Value.Value;
+      set => libraryNameParam.Value.Value = value;
+    }
+
+    public virtual OptimizationProblemType OptimizationProblemType { get; }
+
+    public LinearProgrammingType LinearProgrammingType {
+      get => programmingTypeParam.Value.Value;
+      set => programmingTypeParam.Value.Value = value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) => new Solver(this, cloner);
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ILinearProgrammingProblemDefinition.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ILinearProgrammingProblemDefinition.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ILinearProgrammingProblemDefinition.cs	(revision 16172)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 Google.OrTools.LinearSolver;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
+  public interface ILinearProgrammingProblemDefinition {
+    void BuildModel(Solver solver);
+    void Analyze(Solver solver, ResultCollection results);
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblem.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblem.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblem.cs	(revision 16172)
@@ -0,0 +1,103 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Drawing;
+using Google.OrTools.LinearSolver;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
+  [Item("Linear Programming Programmable Problem (single-objective)", "Represents a single-objective problem that can be programmed with a script.")]
+  [Creatable(CreatableAttribute.Categories.Problems, Priority = 100)]
+  [StorableClass]
+  public class LinearProgrammingProblem : Problem, IProgrammableItem {
+
+    public new static Image StaticItemImage => VSImageLibrary.Script;
+
+    private FixedValueParameter<LinearProgrammingProblemDefinitionScript> LinearProgrammingProblemScriptParameter => (FixedValueParameter<LinearProgrammingProblemDefinitionScript>)Parameters["ProblemScript"];
+
+    public LinearProgrammingProblemDefinitionScript ProblemScript => LinearProgrammingProblemScriptParameter.Value;
+
+    public ILinearProgrammingProblemDefinition ProblemDefinition => LinearProgrammingProblemScriptParameter.Value;
+
+    private LinearProgrammingProblem(LinearProgrammingProblem original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEvents();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) { return new LinearProgrammingProblem(this, cloner); }
+
+    [StorableConstructor]
+    private LinearProgrammingProblem(bool deserializing) : base(deserializing) { }
+    public LinearProgrammingProblem() {
+      Parameters.Add(new FixedValueParameter<LinearProgrammingProblemDefinitionScript>("ProblemScript", "Defines the problem.", new LinearProgrammingProblemDefinitionScript { Name = Name }) { GetsCollected = false });
+      //Operators.Add(new BestScopeSolutionAnalyzer());
+      RegisterEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
+    private void RegisterEvents() {
+      ProblemScript.ProblemDefinitionChanged += (o, e) => OnProblemDefinitionChanged();
+      ProblemScript.NameChanged += (o, e) => OnProblemScriptNameChanged();
+    }
+
+    private void OnProblemDefinitionChanged() {
+      //Parameters.Remove("Maximization");
+      //Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
+
+      //Encoding = ProblemDefinition.Encoding;
+      OnOperatorsChanged();
+      OnReset();
+    }
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      ProblemScript.Name = Name;
+    }
+    private void OnProblemScriptNameChanged() {
+      Name = ProblemScript.Name;
+    }
+
+    public void BuildModel(Solver solver) => ProblemDefinition.BuildModel(solver);
+
+    //public override bool Maximization {
+    //  get { return Parameters.ContainsKey("ProblemScript") ? ProblemDefinition.Maximization : false; }
+    //}
+
+    //public override double Evaluate(Individual individual, IRandom random) {
+    //  return ProblemDefinition.Evaluate(individual, random);
+    //}
+
+    //public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+    //  ProblemDefinition.Analyze(individuals, qualities, results, random);
+    //}
+
+    //public override IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
+    //  return ProblemDefinition.GetNeighbors(individual, random);
+    //}
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefinitionScript.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefinitionScript.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefinitionScript.cs	(revision 16172)
@@ -0,0 +1,139 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 System.Reflection;
+using Google.OrTools.LinearSolver;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Programmable;
+using HeuristicLab.Scripting;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
+  [Item("Single-objective Problem Definition Script", "Script that defines the parameter vector and evaluates the solution for a programmable problem.")]
+  [StorableClass]
+  public sealed class LinearProgrammingProblemDefinitionScript : Script, ILinearProgrammingProblemDefinition, IStorableContent {
+    protected bool SuppressEvents { get; set; }
+
+    [Storable]
+    private VariableStore variableStore;
+    public VariableStore VariableStore => variableStore;
+
+    [Storable]
+    private bool codeChanged;
+
+    [StorableConstructor]
+    protected LinearProgrammingProblemDefinitionScript(bool deserializing) : base(deserializing) { }
+    protected LinearProgrammingProblemDefinitionScript(LinearProgrammingProblemDefinitionScript original, Cloner cloner)
+      : base(original, cloner) {
+      variableStore = cloner.Clone(original.variableStore);
+      codeChanged = original.codeChanged;
+    }
+
+    public LinearProgrammingProblemDefinitionScript()
+      : base(ScriptTemplates.CompiledLinearProgrammingProblemDefinition) {
+      variableStore = new VariableStore();
+    }
+
+    private readonly object compileLock = new object();
+    private volatile ILinearProgrammingProblemDefinition compiledProblemDefinition;
+    protected ILinearProgrammingProblemDefinition CompiledProblemDefinition {
+      get {
+        // double checked locking pattern
+        if (compiledProblemDefinition == null) {
+          lock (compileLock) {
+            if (compiledProblemDefinition == null) {
+              if (codeChanged) throw new ProblemDefinitionScriptException("The code has been changed, but was not recompiled.");
+              Compile(false);
+            }
+          }
+        }
+        return compiledProblemDefinition;
+      }
+    }
+    public dynamic Instance => compiledProblemDefinition;
+
+    public override Assembly Compile() {
+      return Compile(true);
+    }
+
+    private Assembly Compile(bool fireChanged) {
+      var assembly = base.Compile();
+      var types = assembly.GetTypes();
+      if (!types.Any(x => typeof(CompiledProblemDefinition).IsAssignableFrom(x)))
+        throw new ProblemDefinitionScriptException("The compiled code doesn't contain a problem definition." + Environment.NewLine + "The problem definition must be a subclass of CompiledProblemDefinition.");
+      if (types.Count(x => typeof(CompiledProblemDefinition).IsAssignableFrom(x)) > 1)
+        throw new ProblemDefinitionScriptException("The compiled code contains multiple problem definitions." + Environment.NewLine + "Only one subclass of CompiledProblemDefinition is allowed.");
+
+      CompiledProblemDefinition inst;
+      try {
+        inst = (CompiledProblemDefinition)Activator.CreateInstance(types.Single(x => typeof(CompiledProblemDefinition).IsAssignableFrom(x)));
+      } catch (Exception e) {
+        compiledProblemDefinition = null;
+        throw new ProblemDefinitionScriptException("Instantiating the problem definition failed." + Environment.NewLine + "Check your default constructor.", e);
+      }
+
+      try {
+        inst.vars = new Variables(VariableStore);
+        inst.Initialize();
+      } catch (Exception e) {
+        compiledProblemDefinition = null;
+        throw new ProblemDefinitionScriptException("Initializing the problem definition failed." + Environment.NewLine + "Check your Initialize() method.", e);
+      }
+
+      try {
+        compiledProblemDefinition = (ILinearProgrammingProblemDefinition)inst;
+        if (fireChanged) OnProblemDefinitionChanged();
+      } catch (Exception e) {
+        compiledProblemDefinition = null;
+        throw new ProblemDefinitionScriptException("Using the problem definition in the problem failed." + Environment.NewLine + "Examine this error message carefully (often there is an issue with the defined encoding).", e);
+      }
+
+      codeChanged = false;
+      return assembly;
+    }
+
+    protected override void OnCodeChanged() {
+      base.OnCodeChanged();
+      compiledProblemDefinition = null;
+      codeChanged = true;
+    }
+
+    public event EventHandler ProblemDefinitionChanged;
+    private void OnProblemDefinitionChanged() {
+      var handler = ProblemDefinitionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public string Filename { get; set; }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LinearProgrammingProblemDefinitionScript(this, cloner);
+    }
+
+    public void BuildModel(Solver solver) => CompiledProblemDefinition.BuildModel(solver);
+
+    public void Analyze(Solver solver, ResultCollection results) => CompiledProblemDefinition.Analyze(solver, results);
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefintion.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefintion.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/LinearProgrammingProblemDefintion.cs	(revision 16172)
@@ -0,0 +1,15 @@
+﻿using Google.OrTools.LinearSolver;
+using HeuristicLab.Problems.Programmable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
+  public class LinearProgrammingProblemDefintion : CompiledProblemDefinition {
+
+    public override void Initialize() {
+
+    }
+
+    public void BuildModel(Solver solver) {
+
+    }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ProblemDefinitionScriptException.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ProblemDefinitionScriptException.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Problems/ProblemDefinitionScriptException.cs	(revision 16172)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Runtime.Serialization;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Problems {
+  [Serializable]
+  public class ProblemDefinitionScriptException : Exception {
+    public ProblemDefinitionScriptException() { }
+    public ProblemDefinitionScriptException(string message) : base(message) { }
+    public ProblemDefinitionScriptException(string message, Exception inner) : base(message, inner) { }
+
+    protected ProblemDefinitionScriptException(SerializationInfo info, StreamingContext context)
+      : base(info, context) { }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/CompiledLinearProgrammingProblemDefinition.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/CompiledLinearProgrammingProblemDefinition.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/CompiledLinearProgrammingProblemDefinition.cs	(revision 16172)
@@ -0,0 +1,42 @@
+﻿using Google.OrTools.LinearSolver;
+using HeuristicLab.Data;
+using HeuristicLab.MathematicalOptimization.LinearProgramming.Problems;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.Programmable;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming {
+  public class CompiledLinearProgrammingProblemDefinition : CompiledProblemDefinition, ILinearProgrammingProblemDefinition {
+
+    private Variable x;
+    private Variable y;
+
+    public override void Initialize() {
+      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
+      // Add additional initialization code e.g. private variables that you need for evaluating
+    }
+
+    public void BuildModel(Solver solver) {
+      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
+      // Example model taken from https://developers.google.com/optimization/mip/integer_opt 
+      // Define the decision variables
+      x = solver.MakeIntVar(0, 3.5, "x");
+      y = solver.MakeIntVar(0, double.PositiveInfinity, "y");
+      // Define the constraints
+      solver.Add(x + 7 * y <= 17.5);
+      // Define the objective
+      solver.Maximize(x + 10 * y);
+    }
+
+    public void Analyze(Solver solver, ResultCollection results) {
+      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
+      // Write or update results given the solution variables of the decision variables
+      results.AddOrUpdateResult("x", new DoubleValue(x.SolutionValue()));
+      results.AddOrUpdateResult("y", new DoubleValue(y.SolutionValue()));
+      // The decision variables can also be retrieved from the solver
+      //results.AddOrUpdateResult("x", new DoubleValue(solver.LookupVariableOrNull("x").SolutionValue()));
+      //results.AddOrUpdateResult("y", new DoubleValue(solver.LookupVariableOrNull("y").SolutionValue()));
+    }
+
+    // Implement further classes and methods
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.Designer.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.Designer.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.Designer.cs	(revision 16172)
@@ -0,0 +1,91 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System.CodeDom.Compiler;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Resources;
+using System.Runtime.CompilerServices;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming {
+  /// <summary>
+  ///   A strongly-typed resource class, for looking up localized strings, etc.
+  /// </summary>
+  // This class was auto-generated by the StronglyTypedResourceBuilder
+  // class via a tool like ResGen or Visual Studio.
+  // To add or remove a member, edit your .ResX file then rerun ResGen
+  // with the /str option, or rebuild your VS project.
+  [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+  [DebuggerNonUserCode()]
+  [CompilerGenerated()]
+  internal class ScriptTemplates {
+
+    private static ResourceManager resourceMan;
+
+    private static CultureInfo resourceCulture;
+
+    [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+    internal ScriptTemplates() {
+    }
+
+    /// <summary>
+    ///   Returns the cached ResourceManager instance used by this class.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Advanced)]
+    internal static ResourceManager ResourceManager {
+      get {
+        if (ReferenceEquals(resourceMan, null)) {
+          ResourceManager temp = new ResourceManager("HeuristicLab.MathematicalOptimization.LinearProgramming.Templates.ScriptTemplates" +
+                  "", typeof(ScriptTemplates).Assembly);
+          resourceMan = temp;
+        }
+        return resourceMan;
+      }
+    }
+
+    /// <summary>
+    ///   Overrides the current thread's CurrentUICulture property for all
+    ///   resource lookups using this strongly typed resource class.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Advanced)]
+    internal static CultureInfo Culture {
+      get {
+        return resourceCulture;
+      }
+      set {
+        resourceCulture = value;
+      }
+    }
+
+    /// <summary>
+    ///   Looks up a localized string similar to using System;
+    ///using System.Linq;
+    ///using System.Collections.Generic;
+    ///using HeuristicLab.Common;
+    ///using HeuristicLab.Core;
+    ///using HeuristicLab.Data;
+    ///using HeuristicLab.Encodings.BinaryVectorEncoding;
+    ///using HeuristicLab.Encodings.IntegerVectorEncoding;
+    ///using HeuristicLab.Encodings.RealVectorEncoding;
+    ///using HeuristicLab.Encodings.PermutationEncoding;
+    ///using HeuristicLab.Encodings.LinearLinkageEncoding;
+    ///using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+    ///using HeuristicLab.Optimization;
+    ///using H [rest of string was truncated]&quot;;.
+    /// </summary>
+    internal static string CompiledLinearProgrammingProblemDefinition {
+      get {
+        return ResourceManager.GetString("CompiledLinearProgrammingProblemDefinition", resourceCulture);
+      }
+    }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.resx
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.resx	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Templates/ScriptTemplates.resx	(revision 16172)
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CompiledLinearProgrammingProblemDefinition" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>CompiledLinearProgrammingProblemDefinition.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+  </data>
+</root>
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.Designer.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.Designer.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.Designer.cs	(revision 16172)
@@ -0,0 +1,177 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System.ComponentModel;
+using System.Windows.Forms;
+using HeuristicLab.Scripting.Views;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Views {
+  partial class LinearProgrammingProblemDefinitionScriptView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LinearProgrammingProblemDefinitionScriptView));
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView();
+      this.infoTabControl.SuspendLayout();
+      this.outputTabPage.SuspendLayout();
+      this.errorListTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // compileButton
+      // 
+      this.toolTip.SetToolTip(this.compileButton, "Compile (F6)");
+      // 
+      // infoTabControl
+      // 
+      this.infoTabControl.Size = new System.Drawing.Size(593, 113);
+      // 
+      // outputTabPage
+      // 
+      this.outputTabPage.Size = new System.Drawing.Size(585, 87);
+      // 
+      // outputTextBox
+      // 
+      this.outputTextBox.Size = new System.Drawing.Size(579, 81);
+      // 
+      // errorListTabPage
+      // 
+      this.errorListTabPage.Size = new System.Drawing.Size(621, 86);
+      // 
+      // errorListView
+      // 
+      this.errorListView.Size = new System.Drawing.Size(615, 80);
+      // 
+      // codeEditor
+      // 
+      this.codeEditor.Size = new System.Drawing.Size(593, 429);
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Size = new System.Drawing.Size(593, 546);
+      this.splitContainer1.SplitterDistance = 429;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer2.Location = new System.Drawing.Point(6, 56);
+      this.splitContainer2.Name = "splitContainer2";
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.variableStoreView);
+      this.splitContainer2.Size = new System.Drawing.Size(826, 546);
+      this.splitContainer2.SplitterDistance = 593;
+      this.splitContainer2.TabIndex = 10;
+      // 
+      // variableStoreView
+      // 
+      this.variableStoreView.Caption = "ItemCollection View";
+      this.variableStoreView.Content = null;
+      this.variableStoreView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableStoreView.Location = new System.Drawing.Point(0, 0);
+      this.variableStoreView.Name = "variableStoreView";
+      this.variableStoreView.ReadOnly = false;
+      this.variableStoreView.Size = new System.Drawing.Size(229, 546);
+      this.variableStoreView.TabIndex = 10;
+      // 
+      // ProblemDefinitionScriptView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer2);
+      this.Name = "ProblemDefinitionScriptView";
+      this.Controls.SetChildIndex(this.infoTextLabel, 0);
+      this.Controls.SetChildIndex(this.compileButton, 0);
+      this.Controls.SetChildIndex(this.splitContainer2, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.infoTabControl.ResumeLayout(false);
+      this.outputTabPage.ResumeLayout(false);
+      this.outputTabPage.PerformLayout();
+      this.errorListTabPage.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private SplitContainer splitContainer2;
+    private VariableStoreView variableStoreView;
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemDefinitionScriptView.cs	(revision 16172)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Drawing;
+using HeuristicLab.MainForm;
+using HeuristicLab.MathematicalOptimization.LinearProgramming.Problems;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Scripting.Views;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Views {
+  [View("LinearProgrammingProblemDefinitionScriptView")]
+  [Content(typeof(LinearProgrammingProblemDefinitionScript), IsDefaultView = true)]
+  public partial class LinearProgrammingProblemDefinitionScriptView : ScriptView {
+
+    public new LinearProgrammingProblemDefinitionScript Content {
+      get => (LinearProgrammingProblemDefinitionScript)base.Content;
+      set => base.Content = value;
+    }
+
+    public LinearProgrammingProblemDefinitionScriptView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      variableStoreView.Content = Content?.VariableStore;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      variableStoreView.Enabled = Content != null && !Locked && !ReadOnly;
+    }
+
+    public override bool Compile() {
+      try {
+        base.Compile();
+      } catch (ProblemDefinitionScriptException e) {
+        ErrorHandling.ShowErrorDialog(e);
+        return false;
+      }
+      return true;
+    }
+
+    protected override void Content_CodeChanged(object sender, EventArgs e) {
+      base.Content_CodeChanged(sender, e);
+      UpdateInfoTextLabel("Code changed, compilation necessary!", Color.Red);
+    }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.Designer.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.Designer.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.Designer.cs	(revision 16172)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ComponentModel;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Views {
+  partial class LinearProgrammingProblemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // LinearProgrammingProblemView
+      // 
+      this.Name = "LinearProgrammingProblemView";
+      this.Load += new System.EventHandler(this.LinearProgrammingProblemView_Load);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.cs	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.cs	(revision 16172)
@@ -0,0 +1,80 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.MathematicalOptimization.LinearProgramming.Problems;
+
+namespace HeuristicLab.MathematicalOptimization.LinearProgramming.Views {
+  [View("Linear Programming Problem View")]
+  [Content(typeof(LinearProgrammingProblem), true)]
+  public partial class LinearProgrammingProblemView : ItemView {
+    protected ViewHost ScriptView;
+
+    public new LinearProgrammingProblem Content {
+      get => (LinearProgrammingProblem)base.Content;
+      set => base.Content = value;
+    }
+
+    public LinearProgrammingProblemView() {
+      InitializeComponent();
+      ScriptView = new ViewHost { ViewsLabelVisible = false, Dock = DockStyle.Fill };
+      Controls.Add(ScriptView);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        ScriptView.Content = null;
+      } else {
+        ScriptView.Content = Content.ProblemScript;
+        Caption = Content.Name;
+      }
+    }
+
+    protected override void RegisterContentEvents() {
+      //Content.ProblemDefinitionParameter.ValueChanged += ProblemDefinitionParameterOnValueChanged;
+      Content.NameChanged += ContentOnNameChanged;
+      base.RegisterContentEvents();
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      //Content.ProblemDefinitionParameter.ValueChanged -= ProblemDefinitionParameterOnValueChanged;
+      Content.NameChanged -= ContentOnNameChanged;
+    }
+
+    //private void ProblemDefinitionParameterOnValueChanged(object sender, EventArgs eventArgs) {
+    //  DefinitionView.Content = Content.ProblemDefinitionParameter.Value;
+    //}
+
+    private void ContentOnNameChanged(object sender, EventArgs eventArgs) {
+      Caption = Content.Name;
+    }
+
+    private void LinearProgrammingProblemView_Load(object sender, EventArgs e) {
+
+    }
+  }
+}
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.resx
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.resx	(revision 16172)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/LinearProgramming/Views/LinearProgrammingProblemView.resx	(revision 16172)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/Plugin.cs.frame
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/Plugin.cs.frame	(revision 16171)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.MathematicalOptimization/3.3/Plugin.cs.frame	(revision 16172)
@@ -25,5 +25,12 @@
   [Plugin("HeuristicLab.MathematicalOptimization", "Provides support for mathematical optimization based on Google OR-Tools", "3.3.15.$WCREV$")]
   [PluginFile("HeuristicLab.MathematicalOptimization-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.OrTools", "6.8.0")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Programmable", "3.3")]
+  [PluginDependency("HeuristicLab.Scripting", "3.3")]
+  [PluginDependency("HeuristicLab.OrTools", "6.9")]
   public class HeuristicLabMathematicalOptimizationPlugin : PluginBase {
   }
Index: branches/2931_OR-Tools_LP_MIP/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs
===================================================================
--- branches/2931_OR-Tools_LP_MIP/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 16171)
+++ branches/2931_OR-Tools_LP_MIP/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 16172)
@@ -1,3 +1,4 @@
 ﻿#region License Information
+
 /* HeuristicLab
  * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -18,5 +19,6 @@
  * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
  */
-#endregion
+
+#endregion License Information
 
 using System;
@@ -30,4 +32,5 @@
 
 namespace HeuristicLab.Problems.Programmable {
+
   [Item("ProblemDefinitionScript", "Script that defines the parameter vector and evaluates the solution for a programmable problem.")]
   [StorableClass]
@@ -37,4 +40,5 @@
     [Storable]
     private VariableStore variableStore;
+
     public VariableStore VariableStore {
       get { return variableStore; }
@@ -46,4 +50,5 @@
     [StorableConstructor]
     protected ProblemDefinitionScript(bool deserializing) : base(deserializing) { }
+
     protected ProblemDefinitionScript(ProblemDefinitionScript original, Cloner cloner)
       : base(original, cloner) {
@@ -51,8 +56,10 @@
       codeChanged = original.codeChanged;
     }
+
     protected ProblemDefinitionScript()
       : base() {
       variableStore = new VariableStore();
     }
+
     protected ProblemDefinitionScript(string code)
       : base(code) {
@@ -66,4 +73,5 @@
     private readonly object compileLock = new object();
     private volatile IProblemDefinition compiledProblemDefinition;
+
     protected IProblemDefinition CompiledProblemDefinition {
       get {
@@ -80,4 +88,5 @@
       }
     }
+
     public dynamic Instance {
       get { return compiledProblemDefinition; }
@@ -131,4 +140,5 @@
 
     public event EventHandler ProblemDefinitionChanged;
+
     protected virtual void OnProblemDefinitionChanged() {
       var handler = ProblemDefinitionChanged;
