[coinor-cgl] 10/14: New upstream version 0.59.9+repack1
Anton Gladky
gladk at moszumanska.debian.org
Mon Jun 5 14:44:08 UTC 2017
This is an automated email from the git hooks/post-receive script.
gladk pushed a commit to branch experimental
in repository coinor-cgl.
commit 201493bb1c61f78c3c63a1c876d84aac57004dfe
Author: Anton Gladky <gladk at debian.org>
Date: Mon Jun 5 16:37:46 2017 +0200
New upstream version 0.59.9+repack1
---
MSVisualStudio/v10/Cgl.sln | 76 -
MSVisualStudio/v10/CglUnitTest/CglUnitTest.vcxproj | 239 ---
MSVisualStudio/v10/libCgl/libCgl.vcxproj | 528 -------
MSVisualStudio/v9/Cgl.sln | 83 -
MSVisualStudio/v9/CglUnitTest/CglUnitTest.vcproj | 399 -----
MSVisualStudio/v9/libCgl/libCgl.vcproj | 1402 -----------------
Makefile.am | 4 +-
Makefile.in | 103 +-
configure | 258 +++-
configure.ac | 6 +-
src/CglAllDifferent/Makefile.in | 5 +
src/CglClique/CglClique.cpp | 72 +-
src/CglClique/CglClique.hpp | 6 +-
src/CglClique/CglCliqueHelper.cpp | 8 +-
src/CglClique/Makefile.in | 5 +
src/CglCutGenerator.cpp | 2 +-
src/CglDuplicateRow/CglDuplicateRow.cpp | 14 +-
src/CglDuplicateRow/CglDuplicateRow.hpp | 2 +-
src/CglDuplicateRow/Makefile.in | 5 +
src/CglFlowCover/CglFlowCover.cpp | 39 +-
src/CglFlowCover/CglFlowCover.hpp | 14 +-
src/CglFlowCover/Makefile.in | 5 +
src/CglGMI/CglGMI.cpp | 146 +-
src/CglGMI/Makefile.in | 5 +
src/CglGomory/CglGomory.cpp | 194 ++-
src/CglGomory/CglGomoryTest.cpp | 2 +-
src/CglGomory/Makefile.in | 5 +
src/CglKnapsackCover/CglKnapsackCover.cpp | 399 ++---
src/CglKnapsackCover/CglKnapsackCover.hpp | 15 +-
src/CglKnapsackCover/CglKnapsackCoverTest.cpp | 2 +-
src/CglKnapsackCover/Makefile.in | 5 +
src/CglLandP/CglLandP.cpp | 2 +-
src/CglLandP/CglLandP.hpp | 2 +-
src/CglLandP/CglLandPMessages.cpp | 2 +-
src/CglLandP/CglLandPMessages.hpp | 2 +-
src/CglLandP/CglLandPSimplex.cpp | 2 +-
src/CglLandP/CglLandPSimplex.hpp | 2 +-
src/CglLandP/CglLandPTabRow.cpp | 2 +-
src/CglLandP/CglLandPTabRow.hpp | 2 +-
src/CglLandP/CglLandPTest.cpp | 2 +-
src/CglLandP/CglLandPUtils.cpp | 2 +-
src/CglLandP/CglLandPUtils.hpp | 2 +-
src/CglLandP/CglLandPValidator.cpp | 32 +-
src/CglLandP/CglLandPValidator.hpp | 9 +-
src/CglLandP/Makefile.in | 5 +
src/CglLiftAndProject/Makefile.in | 5 +
src/CglMessage.cpp | 4 +-
src/CglMessage.hpp | 2 +-
src/CglMixedIntegerRounding/Makefile.in | 5 +
.../CglMixedIntegerRounding2.cpp | 96 +-
src/CglMixedIntegerRounding2/Makefile.in | 5 +
src/CglOddHole/CglOddHole.cpp | 2 +-
src/CglOddHole/CglOddHole.hpp | 2 +-
src/CglOddHole/CglOddHoleTest.cpp | 2 +-
src/CglOddHole/Makefile.in | 5 +
src/CglParam.hpp | 2 +-
src/CglPreProcess/CglPreProcess.cpp | 1585 ++++++++++++++++++--
src/CglPreProcess/CglPreProcess.hpp | 2 +
src/CglPreProcess/Makefile.in | 5 +
src/CglProbing/CglProbing.cpp | 366 ++++-
src/CglProbing/CglProbing.hpp | 36 +-
src/CglProbing/CglProbingTest.cpp | 2 +-
src/CglProbing/Makefile.in | 5 +
src/CglRedSplit/CglRedSplit.cpp | 2 +-
src/CglRedSplit/CglRedSplit.hpp | 2 +-
src/CglRedSplit/CglRedSplitParam.cpp | 2 +-
src/CglRedSplit/CglRedSplitParam.hpp | 2 +-
src/CglRedSplit/CglRedSplitTest.cpp | 2 +-
src/CglRedSplit/Makefile.in | 5 +
src/CglRedSplit2/Makefile.in | 5 +
src/CglResidualCapacity/Makefile.in | 5 +
src/CglSimpleRounding/CglSimpleRounding.cpp | 2 +-
src/CglSimpleRounding/CglSimpleRounding.hpp | 2 +-
src/CglSimpleRounding/CglSimpleRoundingTest.cpp | 2 +-
src/CglSimpleRounding/Makefile.in | 5 +
src/CglStored.cpp | 2 +-
src/CglStored.hpp | 2 +-
src/CglTreeInfo.cpp | 104 +-
src/CglTreeInfo.hpp | 20 +-
src/CglTwomir/CglTwomir.cpp | 2 +-
src/CglTwomir/CglTwomir.hpp | 2 +-
src/CglTwomir/CglTwomirTest.cpp | 2 +-
src/CglTwomir/Makefile.am | 2 +-
src/CglTwomir/Makefile.in | 5 +
src/CglZeroHalf/Cgl012cut.cpp | 4 +-
src/CglZeroHalf/Cgl012cut.hpp | 2 +-
src/CglZeroHalf/CglZeroHalf.cpp | 21 +-
src/CglZeroHalf/CglZeroHalf.hpp | 2 +-
src/CglZeroHalf/CglZeroHalfTest.cpp | 2 +-
src/CglZeroHalf/Makefile.am | 2 +-
src/CglZeroHalf/Makefile.in | 5 +
src/Makefile.am | 2 +-
src/Makefile.in | 5 +
src/config_cgl_default.h | 4 +-
test/Makefile.am | 2 +-
test/Makefile.in | 5 +
test/unitTest.cpp | 2 +-
97 files changed, 2992 insertions(+), 3490 deletions(-)
diff --git a/MSVisualStudio/v10/Cgl.sln b/MSVisualStudio/v10/Cgl.sln
deleted file mode 100644
index cb69af8..0000000
--- a/MSVisualStudio/v10/Cgl.sln
+++ /dev/null
@@ -1,76 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCgl", "libCgl\libCgl.vcxproj", "{DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CglUnitTest", "CglUnitTest\CglUnitTest.vcxproj", "{2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v10\libOsi\libOsi.vcxproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libClp", "..\..\..\Clp\MSVisualStudio\v10\libClp\libClp.vcxproj", "{4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiClp", "..\..\..\Clp\MSVisualStudio\v10\libOsiClp\libOsiClp.vcxproj", "{02D45875-A8CF-41B9-990B-3699C0ECFE10}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|Win32.ActiveCfg = Debug|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|Win32.Build.0 = Debug|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|x64.ActiveCfg = Debug|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|x64.Build.0 = Debug|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|Win32.ActiveCfg = Release|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|Win32.Build.0 = Release|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|x64.ActiveCfg = Release|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|x64.Build.0 = Release|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|Win32.ActiveCfg = Debug|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|Win32.Build.0 = Debug|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|x64.ActiveCfg = Debug|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|x64.Build.0 = Debug|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|Win32.ActiveCfg = Release|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|Win32.Build.0 = Release|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|x64.ActiveCfg = Release|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|x64.Build.0 = Release|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|Win32.ActiveCfg = Debug|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|Win32.Build.0 = Debug|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|x64.ActiveCfg = Debug|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|x64.Build.0 = Debug|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|Win32.ActiveCfg = Release|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|Win32.Build.0 = Release|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|x64.ActiveCfg = Release|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|x64.Build.0 = Release|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|Win32.ActiveCfg = Debug|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|Win32.Build.0 = Debug|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|x64.ActiveCfg = Debug|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|x64.Build.0 = Debug|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|Win32.ActiveCfg = Release|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|Win32.Build.0 = Release|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|x64.ActiveCfg = Release|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/MSVisualStudio/v10/CglUnitTest/CglUnitTest.vcxproj b/MSVisualStudio/v10/CglUnitTest/CglUnitTest.vcxproj
deleted file mode 100644
index 05243ad..0000000
--- a/MSVisualStudio/v10/CglUnitTest/CglUnitTest.vcxproj
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}</ProjectGuid>
- <RootNamespace>CglUnitTest</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\. [...]
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR="..\\..\\..\\..\\Data\\Sample";TESTDIR="..\\..\\..\\test\\CglTestData";%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
- <AdditionalDependencies>libCoinUtils.lib;libOsi.lib;libClp.lib;libOsiClp.lib;libCgl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\. [...]
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR="..\\..\\..\\..\\Data\\Sample";TESTDIR="..\\..\\..\\test\\CglTestData";%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
- <AdditionalDependencies>libCoinUtils.lib;libOsi.lib;libClp.lib;libOsiClp.lib;libCgl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\. [...]
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR="..\\..\\..\\..\\Data\\Sample";TESTDIR="..\\..\\..\\test\\CglTestData";%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
- <AdditionalDependencies>libCoinUtils.lib;libOsi.lib;libClp.lib;libOsiClp.lib;libCgl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\. [...]
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR="..\\..\\..\\..\\Data\\Sample";TESTDIR="..\\..\\..\\test\\CglTestData";%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
- <AdditionalDependencies>libCoinUtils.lib;libOsi.lib;libClp.lib;libOsiClp.lib;libCgl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\src\CglClique\CglCliqueTest.cpp" />
- <ClCompile Include="..\..\..\src\CglFlowCover\CglFlowCoverTest.cpp" />
- <ClCompile Include="..\..\..\src\CglGomory\CglGomoryTest.cpp" />
- <ClCompile Include="..\..\..\src\CglKnapsackCover\CglKnapsackCoverTest.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPTest.cpp" />
- <ClCompile Include="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2Test.cpp" />
- <ClCompile Include="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRoundingTest.cpp" />
- <ClCompile Include="..\..\..\src\CglOddHole\CglOddHoleTest.cpp" />
- <ClCompile Include="..\..\..\src\CglProbing\CglProbingTest.cpp" />
- <ClCompile Include="..\..\..\src\CglRedSplit\CglRedSplitTest.cpp" />
- <ClCompile Include="..\..\..\src\CglResidualCapacity\CglResidualCapacityTest.cpp" />
- <ClCompile Include="..\..\..\src\CglSimpleRounding\CglSimpleRoundingTest.cpp" />
- <ClCompile Include="..\..\..\src\CglTwomir\CglTwomirTest.cpp" />
- <ClCompile Include="..\..\..\test\unitTest.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\..\Clp\MSVisualStudio\v10\libClp\libClp.vcxproj">
- <Project>{4f8f7d1c-3a9e-444d-8ee9-77f33fa05994}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- <ProjectReference Include="..\..\..\..\Clp\MSVisualStudio\v10\libOsiClp\libOsiClp.vcxproj">
- <Project>{02d45875-a8cf-41b9-990b-3699c0ecfe10}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- <ProjectReference Include="..\..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj">
- <Project>{c4867f15-438d-4ff8-8388-62fbaaa9786c}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- <Private>true</Private>
- <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
- </ProjectReference>
- <ProjectReference Include="..\..\..\..\Osi\MSVisualStudio\v10\libOsi\libOsi.vcxproj">
- <Project>{7d98e2cb-876e-4f75-9f71-77d3fe87e149}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- <ProjectReference Include="..\libCgl\libCgl.vcxproj">
- <Project>{dbea3904-f0b8-408a-9e1a-6497febe8c42}</Project>
- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/MSVisualStudio/v10/libCgl/libCgl.vcxproj b/MSVisualStudio/v10/libCgl/libCgl.vcxproj
deleted file mode 100644
index c782066..0000000
--- a/MSVisualStudio/v10/libCgl/libCgl.vcxproj
+++ /dev/null
@@ -1,528 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}</ProjectGuid>
- <RootNamespace>libCgl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Common.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Debug.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Common.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Release.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Common.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Debug.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Common.props" />
- <Import Project="..\..\..\..\BuildTools\MSVisualStudio\v10\Release.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\src\CglDuplicateRow;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglFlowCover;..\..\..\src\CglClique;..\..\..\src\CglOddHole;..\..\..\src\CglKnapsackCover;..\..\..\src\CglGomory;..\..\..\src\CglPreProcess;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglProbing;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Clp\src\OsiClp;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\. [...]
- <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <RuntimeTypeInfo>true</RuntimeTypeInfo>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\src\CglDuplicateRow;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglFlowCover;..\..\..\src\CglClique;..\..\..\src\CglOddHole;..\..\..\src\CglKnapsackCover;..\..\..\src\CglGomory;..\..\..\src\CglPreProcess;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglProbing;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Clp\src\OsiClp;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\. [...]
- <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\src\CglDuplicateRow;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglFlowCover;..\..\..\src\CglClique;..\..\..\src\CglOddHole;..\..\..\src\CglKnapsackCover;..\..\..\src\CglGomory;..\..\..\src\CglPreProcess;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglProbing;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Clp\src\OsiClp;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\. [...]
- <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\src\CglDuplicateRow;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglFlowCover;..\..\..\src\CglClique;..\..\..\src\CglOddHole;..\..\..\src\CglKnapsackCover;..\..\..\src\CglGomory;..\..\..\src\CglPreProcess;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglProbing;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Clp\src\OsiClp;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\. [...]
- <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeTypeInfo>true</RuntimeTypeInfo>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\src\CglAllDifferent\CglAllDifferent.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglClique\CglClique.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglClique\CglCliqueHelper.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglCutGenerator.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglDuplicateRow\CglDuplicateRow.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglFlowCover\CglFlowCover.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglGMI\CglGMI.cpp" />
- <ClCompile Include="..\..\..\src\CglGMI\CglGMIParam.cpp" />
- <ClCompile Include="..\..\..\src\CglGomory\CglGomory.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglKnapsackCover\CglKnapsackCover.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglLandP\CglLandP.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPMessages.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPSimplex.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPTabRow.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPUtils.cpp" />
- <ClCompile Include="..\..\..\src\CglLandP\CglLandPValidator.cpp" />
- <ClCompile Include="..\..\..\src\CglLiftAndProject\CglLiftAndProject.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglMessage.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRounding.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglOddHole\CglOddHole.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglParam.cpp" />
- <ClCompile Include="..\..\..\src\CglPreProcess\CglPreProcess.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglProbing\CglProbing.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglRedSplit2\CglRedSplit2.cpp" />
- <ClCompile Include="..\..\..\src\CglRedSplit2\CglRedSplit2Param.cpp" />
- <ClCompile Include="..\..\..\src\CglRedSplit2\CglRedSplit2Test.cpp" />
- <ClCompile Include="..\..\..\src\CglRedSplit\CglRedSplit.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglRedSplit\CglRedSplitParam.cpp" />
- <ClCompile Include="..\..\..\src\CglResidualCapacity\CglResidualCapacity.cpp" />
- <ClCompile Include="..\..\..\src\CglResidualCapacity\CglResidualCapacityTest.cpp" />
- <ClCompile Include="..\..\..\src\CglSimpleRounding\CglSimpleRounding.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglStored.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglTreeInfo.cpp" />
- <ClCompile Include="..\..\..\src\CglTwomir\CglTwomir.cpp">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\CglZeroHalf\Cgl012cut.cpp" />
- <ClCompile Include="..\..\..\src\CglZeroHalf\CglZeroHalf.cpp" />
- <ClCompile Include="..\..\..\src\CglZeroHalf\CglZeroHalfTest.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\src\CglAllDifferent\CglAllDifferent.hpp" />
- <ClInclude Include="..\..\..\src\CglClique\CglClique.hpp" />
- <ClInclude Include="..\..\..\src\CglConfig.h" />
- <ClInclude Include="..\..\..\src\CglCutGenerator.hpp" />
- <ClInclude Include="..\..\..\src\CglDuplicateRow\CglDuplicateRow.hpp" />
- <ClInclude Include="..\..\..\src\CglFlowCover\CglFlowCover.hpp" />
- <ClInclude Include="..\..\..\src\CglGMI\CglGMI.hpp" />
- <ClInclude Include="..\..\..\src\CglGMI\CglGMIParam.hpp" />
- <ClInclude Include="..\..\..\src\CglGomory\CglGomory.hpp" />
- <ClInclude Include="..\..\..\src\CglKnapsackCover\CglKnapsackCover.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandP.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandPMessages.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandPSimplex.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandPTabRow.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandPUtils.hpp" />
- <ClInclude Include="..\..\..\src\CglLandP\CglLandPValidator.hpp" />
- <ClInclude Include="..\..\..\src\CglLiftAndProject\CglLiftAndProject.hpp" />
- <ClInclude Include="..\..\..\src\CglMessage.hpp" />
- <ClInclude Include="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRounding.hpp" />
- <ClInclude Include="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2.hpp" />
- <ClInclude Include="..\..\..\src\CglOddHole\CglOddHole.hpp" />
- <ClInclude Include="..\..\..\src\CglParam.hpp" />
- <ClInclude Include="..\..\..\src\CglPreProcess\CglPreProcess.hpp" />
- <ClInclude Include="..\..\..\src\CglProbing\CglProbing.hpp" />
- <ClInclude Include="..\..\..\src\CglRedSplit2\CglRedSplit2.hpp" />
- <ClInclude Include="..\..\..\src\CglRedSplit2\CglRedSplit2Param.hpp" />
- <ClInclude Include="..\..\..\src\CglRedSplit\CglRedSplit.hpp" />
- <ClInclude Include="..\..\..\src\CglRedSplit\CglRedSplitParam.hpp" />
- <ClInclude Include="..\..\..\src\CglResidualCapacity\CglResidualCapacity.hpp" />
- <ClInclude Include="..\..\..\src\CglSimpleRounding\CglSimpleRounding.hpp" />
- <ClInclude Include="..\..\..\src\CglStored.hpp" />
- <ClInclude Include="..\..\..\src\CglTreeInfo.hpp" />
- <ClInclude Include="..\..\..\src\CglTwomir\CglTwomir.hpp" />
- <ClInclude Include="..\..\..\src\CglZeroHalf\Cgl012cut.hpp" />
- <ClInclude Include="..\..\..\src\CglZeroHalf\CglZeroHalf.hpp" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/MSVisualStudio/v9/Cgl.sln b/MSVisualStudio/v9/Cgl.sln
deleted file mode 100644
index 6081a5b..0000000
--- a/MSVisualStudio/v9/Cgl.sln
+++ /dev/null
@@ -1,83 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCgl", "libCgl\libCgl.vcproj", "{DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CglUnitTest", "CglUnitTest\CglUnitTest.vcproj", "{2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}"
- ProjectSection(ProjectDependencies) = postProject
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42} = {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}
- {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C}
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994} = {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}
- {02D45875-A8CF-41B9-990B-3699C0ECFE10} = {02D45875-A8CF-41B9-990B-3699C0ECFE10}
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v9\libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v9\libOsi\libOsi.vcproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libClp", "..\..\..\Clp\MSVisualStudio\v9\libClp\libClp.vcproj", "{4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiClp", "..\..\..\Clp\MSVisualStudio\v9\libOsiClp\libOsiClp.vcproj", "{02D45875-A8CF-41B9-990B-3699C0ECFE10}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|Win32.ActiveCfg = Debug|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|Win32.Build.0 = Debug|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|x64.ActiveCfg = Debug|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Debug|x64.Build.0 = Debug|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|Win32.ActiveCfg = Release|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|Win32.Build.0 = Release|Win32
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|x64.ActiveCfg = Release|x64
- {DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}.Release|x64.Build.0 = Release|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|Win32.ActiveCfg = Debug|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|Win32.Build.0 = Debug|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|x64.ActiveCfg = Debug|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Debug|x64.Build.0 = Debug|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|Win32.ActiveCfg = Release|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|Win32.Build.0 = Release|Win32
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|x64.ActiveCfg = Release|x64
- {2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}.Release|x64.Build.0 = Release|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64
- {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64
- {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|Win32.ActiveCfg = Debug|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|Win32.Build.0 = Debug|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|x64.ActiveCfg = Debug|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Debug|x64.Build.0 = Debug|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|Win32.ActiveCfg = Release|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|Win32.Build.0 = Release|Win32
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|x64.ActiveCfg = Release|x64
- {4F8F7D1C-3A9E-444D-8EE9-77F33FA05994}.Release|x64.Build.0 = Release|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|Win32.ActiveCfg = Debug|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|Win32.Build.0 = Debug|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|x64.ActiveCfg = Debug|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Debug|x64.Build.0 = Debug|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|Win32.ActiveCfg = Release|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|Win32.Build.0 = Release|Win32
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|x64.ActiveCfg = Release|x64
- {02D45875-A8CF-41B9-990B-3699C0ECFE10}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/MSVisualStudio/v9/CglUnitTest/CglUnitTest.vcproj b/MSVisualStudio/v9/CglUnitTest/CglUnitTest.vcproj
deleted file mode 100644
index 7975735..0000000
--- a/MSVisualStudio/v9/CglUnitTest/CglUnitTest.vcproj
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="CglUnitTest"
- ProjectGUID="{2775A6EA-AAC5-4A94-BCDF-CE353DCCA7BE}"
- RootNamespace="CglUnitTest"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\ [...]
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR=\"..\\..\\..\\..\\Data\\Sample\";TESTDIR=\"..\\..\\..\\test\\CglTestData\""
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\ [...]
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR=\"..\\..\\..\\..\\Data\\Sample\";TESTDIR=\"..\\..\\..\\test\\CglTestData\""
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\ [...]
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR=\"..\\..\\..\\..\\Data\\Sample\";TESTDIR=\"..\\..\\..\\test\\CglTestData\""
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglLandP;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\src\CglSimpleRounding;..\..\..\src\CglTwomir;..\..\..\src;..\..\..\..\Osi\src\Osi;..\..\ [...]
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;COIN_HAS_OSICLP;SAMPLEDIR=\"..\\..\\..\\..\\Data\\Sample\";TESTDIR=\"..\\..\\..\\test\\CglTestData\""
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\src\CglClique\CglCliqueTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglFlowCover\CglFlowCoverTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGomory\CglGomoryTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglKnapsackCover\CglKnapsackCoverTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2Test.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRoundingTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglOddHole\CglOddHoleTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglProbing\CglProbingTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit\CglRedSplitTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglResidualCapacity\CglResidualCapacityTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglSimpleRounding\CglSimpleRoundingTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglTwomir\CglTwomirTest.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\test\unitTest.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/MSVisualStudio/v9/libCgl/libCgl.vcproj b/MSVisualStudio/v9/libCgl/libCgl.vcproj
deleted file mode 100644
index b61847f..0000000
--- a/MSVisualStudio/v9/libCgl/libCgl.vcproj
+++ /dev/null
@@ -1,1402 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="libCgl"
- ProjectGUID="{DBEA3904-F0B8-408A-9E1A-6497FEBE8C42}"
- RootNamespace="libCgl"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\src;..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi [...]
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\src;..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi [...]
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\src;..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi [...]
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\src;..\..\..\src\CglClique;..\..\..\src\CglDuplicateRow;..\..\..\src\CglFlowCover;..\..\..\src\CglGomory;..\..\..\src\CglKnapsackCover;..\..\..\src\CglMixedIntegerRounding;..\..\..\src\CglMixedIntegerRounding2;..\..\..\src\CglOddHole;..\..\..\src\CglPreProcess;..\..\..\src\CglProbing;..\..\..\src\CglRedSplit;..\..\..\src\CglResidualCapacity;..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi [...]
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\..\src\CglZeroHalf\Cgl012cut.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglAllDifferent\CglAllDifferent.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglClique\CglClique.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglClique\CglCliqueHelper.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglCutGenerator.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglDuplicateRow\CglDuplicateRow.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglFlowCover\CglFlowCover.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglGMI\CglGMI.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGMI\CglGMIParam.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGomory\CglGomory.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglKnapsackCover\CglKnapsackCover.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandP.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPMessages.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPSimplex.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPTabRow.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPUtils.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPValidator.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLiftAndProject\CglLiftAndProject.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglMessage.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRounding.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglOddHole\CglOddHole.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglParam.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglPreProcess\CglPreProcess.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglProbing\CglProbing.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit\CglRedSplit.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit2\CglRedSplit2.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit2\CglRedSplit2Param.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit\CglRedSplitParam.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglResidualCapacity\CglResidualCapacity.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglSimpleRounding\CglSimpleRounding.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglStored.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglTreeInfo.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglTwomir\CglTwomir.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\CglZeroHalf\CglZeroHalf.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\..\src\CglZeroHalf\Cgl012cut.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglAllDifferent\CglAllDifferent.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglClique\CglClique.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglConfig.h"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglCutGenerator.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglDuplicateRow\CglDuplicateRow.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglFlowCover\CglFlowCover.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGMI\CglGMI.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGMI\CglGMIParam.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglGomory\CglGomory.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglKnapsackCover\CglKnapsackCover.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandP.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPMessages.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPSimplex.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPTabRow.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPUtils.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLandP\CglLandPValidator.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglLiftAndProject\CglLiftAndProject.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglMessage.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding\CglMixedIntegerRounding.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglMixedIntegerRounding2\CglMixedIntegerRounding2.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglOddHole\CglOddHole.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglParam.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglPreProcess\CglPreProcess.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglProbing\CglProbing.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit\CglRedSplit.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit2\CglRedSplit2.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit2\CglRedSplit2Param.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglRedSplit\CglRedSplitParam.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglResidualCapacity\CglResidualCapacity.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglSimpleRounding\CglSimpleRounding.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglStored.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglTreeInfo.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglTwomir\CglTwomir.hpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\CglZeroHalf\CglZeroHalf.hpp"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Makefile.am b/Makefile.am
index fb07656..1e80a5d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: Makefile.am 1051 2011-10-13 20:36:00Z stefan $
+## $Id: Makefile.am 1256 2015-02-07 19:56:21Z tkr $
# Author: Andreas Waechter IBM 2006-04-13
@@ -74,7 +74,7 @@ addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Cgl
install-data-hook:
@$(mkdir_p) "$(addlibsdir)"
if COIN_HAS_PKGCONFIG
- PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ \
+ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \
$(PKG_CONFIG) --libs cgl > $(addlibsdir)/cgl_addlibs.txt
else
if COIN_CXX_IS_CL
diff --git a/Makefile.in b/Makefile.in
index 1fb70d4..42ef658 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -153,6 +153,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -333,6 +337,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
@@ -389,8 +394,10 @@ CLEANFILES =
# Files that are generated and should be cleaned with make distclean
DISTCLEANFILES = $(am__append_3) $(VPATH_DISTCLEANFILES)
-DocFiles = README AUTHORS LICENSE
+DocFiles = README AUTHORS LICENSE
DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME)
+COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE at TRUE
+COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE at TRUE
all: all-recursive
.SUFFIXES:
@@ -878,7 +885,7 @@ uninstall-local: uninstall-doc
install-data-hook:
@$(mkdir_p) "$(addlibsdir)"
- at COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ \
+ at COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \
@COIN_HAS_PKGCONFIG_TRUE@ $(PKG_CONFIG) --libs cgl > $(addlibsdir)/cgl_addlibs.txt
@COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libCgl.lib @CGLLIB_LIBS_INSTALLED@" > $(addlibsdir)/cgl_addlibs.txt
@COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L at abs_lib_dir@ -lCgl @CGLLIB_LIBS_INSTALLED@ > $(addlibsdir)/cgl_addlibs.txt
@@ -886,12 +893,100 @@ install-data-hook:
uninstall-hook:
rm -f $(addlibsdir)/cgl_addlibs.txt
-install-doc: $(DocFiles)
+doxygen-docs:
+ if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \
+ if test -d "doxydoc/"; then \
+ doxygen doxydoc/doxygen.conf;\
+ fi;\
+ fi
+
+pdf-doxygen-docs: doxygen-docs
+ if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \
+ if test -d "doxydoc/latex"; then \
+ if test "$(COIN_HAS_LATEX)" = TRUE; then \
+ cd doxydoc/latex;\
+ $(MAKE) pdf;\
+ cd -;\
+ fi;\
+ fi;\
+ fi
+
+clean-doxygen-docs:
+ if test -d "doxydoc/"; then \
+ cd doxydoc ;\
+ rm -rf html latex *.log *.tag;\
+ fi
+
+install-doxygen-docs: doxygen-docs
+ if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \
+ if test -d "doxydoc/"; then \
+ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \
+ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\
+ if test -f "doxydoc/latex/refman.pdf"; then \
+ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\
+ fi;\
+ if test -d "doxydoc/html"; then \
+ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \
+ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\
+ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\
+ fi;\
+ fi;\
+ fi
+
+uninstall-doxygen-docs:
+ if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \
+ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \
+ fi
+ if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \
+ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \
+ fi
+
+all-doxygen-docs:
+ for dir in $(subdirs) ; do \
+ do_project=true;\
+ for proj in $(COIN_SKIP_DOXYGEN); do\
+ if test $$dir = $$proj; then\
+ do_project=false;\
+ fi;\
+ done;\
+ if test -r $$dir/doxydoc & $$do_project = true; then \
+ (cd $$dir ; $(MAKE) doxygen-docs) \
+ fi ; \
+ done ;
+
+clean-all-doxygen-docs:
+ for dir in $(subdirs) ; do \
+ if test -r $$dir/doxydoc ; then \
+ (cd $$dir ; $(MAKE) clean-doxygen-docs) \
+ fi ; \
+ done ;
+
+install-all-doxygen-docs: all-doxygen-docs
+ for dir in $(subdirs) ; do \
+ do_project=true;\
+ for proj in $(COIN_SKIP_DOXYGEN); do\
+ if test $$dir = $$proj; then\
+ do_project=false;\
+ fi;\
+ done;\
+ if test -r $$dir/doxydoc & $$do_project = true; then \
+ (cd $$dir ; $(MAKE) install-doxygen-docs) \
+ fi ; \
+ done ;
+
+uninstall-all-doxygen-docs:
+ for dir in $(subdirs) ; do \
+ if test -r $$dir/doxydoc ; then \
+ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \
+ fi ; \
+ done ;
+
+install-doc: $(DocFiles)
test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)"
for file in $(DocFiles); do \
if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \
if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \
- done
+ done
uninstall-doc:
for file in $(DocFiles); do \
diff --git a/configure b/configure
index 2ce33a2..d75c1e0 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for Cgl 0.58.9.
+# Generated by GNU Autoconf 2.59 for Cgl 0.59.9.
#
# Report bugs to <cgl at list.coin-or.org>.
#
@@ -429,8 +429,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='Cgl'
PACKAGE_TARNAME='cgl'
-PACKAGE_VERSION='0.58.9'
-PACKAGE_STRING='Cgl 0.58.9'
+PACKAGE_VERSION='0.59.9'
+PACKAGE_STRING='Cgl 0.59.9'
PACKAGE_BUGREPORT='cgl at list.coin-or.org'
ac_unique_file="src/CglMessage.hpp"
@@ -472,7 +472,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion CGL_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc [...]
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion CGL_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc [...]
ac_subst_files=''
# Initialize some variables set by options.
@@ -1005,7 +1005,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Cgl 0.58.9 to adapt to many kinds of systems.
+\`configure' configures Cgl 0.59.9 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1071,7 +1071,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Cgl 0.58.9:";;
+ short | recursive ) echo "Configuration of Cgl 0.59.9:";;
esac
cat <<\_ACEOF
@@ -1094,6 +1094,9 @@ Optional Features:
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-dependency-linking
+ disable linking library dependencies into shared
+ libraries
--disable-pkg-config disable use of pkg-config (if available)
--disable-interpackage-dependencies
disables deduction of Makefile dependencies from
@@ -1275,7 +1278,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-Cgl configure 0.58.9
+Cgl configure 0.59.9
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1295,7 +1298,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Cgl $as_me 0.58.9, which was
+It was created by Cgl $as_me 0.59.9, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1821,7 +1824,7 @@ _ACEOF
# Capture libtool library version, if given.
- coin_libversion=9:9:8
+ coin_libversion=10:9:9
@@ -2062,7 +2065,7 @@ fi
comps="xlc gcc pgcc icc cc"
fi
;;
- *-*-darwin*) comps="clang gcc" ;;
+ *-*-darwin*) comps="clang gcc cc" ;;
*-linux-gnu*) comps="gcc cc pgcc icc xlc" ;;
*-linux-*) comps="xlc gcc cc pgcc icc" ;;
*) comps="xlc_r xlc cc gcc pgcc icc" ;;
@@ -3219,7 +3222,7 @@ case $build in
fi ;;
*-*-solaris*)
comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;;
- *-darwin*) comps="g++ c++ CC" ;;
+ *-darwin*) comps="clang++ g++ c++ CC" ;;
*-linux-gnu*)
comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;;
*) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;;
@@ -3656,7 +3659,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
coin_cxx_is_cl=false
# It seems that we need to cleanup something here for the Windows
case "$CXX" in
- clang* ) ;;
+ clang* | */clang*) ;;
cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*)
sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh
mv confdefs.hh confdefs.h
@@ -4056,7 +4059,7 @@ echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;}
CXX="$MPICXX"
fi
-# correct the LD variable in a build with MS or intel compiler
+# correct the LD variable in a build with MS or Intel-windows compiler
case "$CXX" in
clang* ) ;;
cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*)
@@ -4089,31 +4092,30 @@ echo "$as_me: error: Shared libraries are disabled by user, but this is not feas
fi
enable_shared=yes;
else
- # On Cygwin and AIX, building DLLs doesn't work
case $build in
*-cygwin* | *-mingw*)
coin_disable_shared=yes
if test x"$enable_shared" = xyes; then
case "$CC" in
clang* )
- { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5
-echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&2;}
+ { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5
+echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;}
;;
cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*)
- { echo "$as_me:$LINENO: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&5
-echo "$as_me: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&6;}
+ { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5
+echo "$as_me: Building of DLLs not supported in this configuration." >&6;}
;;
*gcc*)
- if test x"$enable_dependency_linking" = xyes; then
+ if test x"$enable_dependency_linking" = xyes; then
coin_disable_shared=no
else
- { echo "$as_me:$LINENO: WARNING: To build shared libraries with gcc on CYGWIN or MSys, use --enable-dependency-linking" >&5
-echo "$as_me: WARNING: To build shared libraries with gcc on CYGWIN or MSys, use --enable-dependency-linking" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5
+echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;}
fi
;;
*)
- { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5
-echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&2;}
+ { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5
+echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;}
;;
esac
fi
@@ -4122,8 +4124,8 @@ echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >
coin_disable_shared=yes
platform=AIX
if test x"$enable_shared" = xyes; then
- { echo "$as_me:$LINENO: WARNING: Shared objects are not supported. I'm disabling your choice." >&5
-echo "$as_me: WARNING: Shared objects are not supported. I'm disabling your choice." >&2;}
+ { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5
+echo "$as_me: WARNING: Shared objects are not supported." >&2;}
fi
;;
esac
@@ -4544,7 +4546,7 @@ fi
# Define the identity of the package.
PACKAGE='cgl'
- VERSION='0.58.9'
+ VERSION='0.59.9'
cat >>confdefs.h <<_ACEOF
@@ -5840,7 +5842,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5843 "configure"' > conftest.$ac_ext
+ echo '#line 5845 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -6974,7 +6976,7 @@ fi
# Provide some information about the compiler.
-echo "$as_me:6977:" \
+echo "$as_me:6979:" \
"checking for Fortran 77 compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
@@ -8041,11 +8043,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8044: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8046: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8048: \$? = $ac_status" >&5
+ echo "$as_me:8050: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -8309,11 +8311,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8312: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8314: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8316: \$? = $ac_status" >&5
+ echo "$as_me:8318: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -8413,11 +8415,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8416: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8418: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8420: \$? = $ac_status" >&5
+ echo "$as_me:8422: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -10758,7 +10760,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10761 "configure"
+#line 10763 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10858,7 +10860,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10861 "configure"
+#line 10863 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13202,11 +13204,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13205: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:13207: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:13209: \$? = $ac_status" >&5
+ echo "$as_me:13211: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -13306,11 +13308,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13309: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:13311: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:13313: \$? = $ac_status" >&5
+ echo "$as_me:13315: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -14876,11 +14878,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14879: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14881: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14883: \$? = $ac_status" >&5
+ echo "$as_me:14885: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -14980,11 +14982,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14983: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14985: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14987: \$? = $ac_status" >&5
+ echo "$as_me:14989: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17187,11 +17189,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17190: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17192: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17194: \$? = $ac_status" >&5
+ echo "$as_me:17196: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -17455,11 +17457,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17458: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17460: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17462: \$? = $ac_status" >&5
+ echo "$as_me:17464: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -17559,11 +17561,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17562: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17564: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17566: \$? = $ac_status" >&5
+ echo "$as_me:17568: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -20251,7 +20253,6 @@ echo "$as_me: Build is \"$build\"." >&6;}
case $build in
*-mingw*)
CYGPATH_W=echo
- mydos2unix=
;;
esac
@@ -20449,13 +20450,37 @@ if test "${enable_dependency_linking+set}" = set; then
enableval="$enable_dependency_linking"
dependency_linking="$enableval"
else
- dependency_linking=no
+ dependency_linking=auto
fi;
-# ToDo
-# For now, don't use the -no-undefined flag, since the Makefiles are
-# not yet set up that way. But we need to fix this, when we want
-# to comile DLLs under Windows.
+if test "$dependency_linking" = auto; then
+ # On Cygwin and AIX, building DLLs doesn't work
+ dependency_linking=no
+ if test x"$coin_disable_shared" = xno; then
+ case $build in
+ *-cygwin* | *-mingw*)
+ case "$CC" in
+ clang* )
+ dependency_linking=yes
+ ;;
+ cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*)
+ dependency_linking=no
+ ;;
+ *gcc*)
+ dependency_linking=yes
+ ;;
+ *)
+ dependency_linking=yes
+ ;;
+ esac
+ ;;
+ *)
+ dependency_linking=yes
+ ;;
+ esac
+ fi
+fi
+
if test "$dependency_linking" = yes ;
then
LT_LDFLAGS="-no-undefined"
@@ -26670,6 +26695,42 @@ else
echo "${ECHO_T}no" >&6
fi
+# Extract the first word of "latex", so it can be a program name with args.
+set dummy latex; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_coin_have_latex+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$coin_have_latex"; then
+ ac_cv_prog_coin_have_latex="$coin_have_latex" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_coin_have_latex="yes"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no"
+fi
+fi
+coin_have_latex=$ac_cv_prog_coin_have_latex
+if test -n "$coin_have_latex"; then
+ echo "$as_me:$LINENO: result: $coin_have_latex" >&5
+echo "${ECHO_T}$coin_have_latex" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
# Look for the dot tool from the graphviz package, unless the user has
# disabled it.
@@ -26734,6 +26795,26 @@ coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag
coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log
+
+if test $coin_have_doxygen = yes; then
+ COIN_HAS_DOXYGEN_TRUE=
+ COIN_HAS_DOXYGEN_FALSE='#'
+else
+ COIN_HAS_DOXYGEN_TRUE='#'
+ COIN_HAS_DOXYGEN_FALSE=
+fi
+
+
+
+if test $coin_have_latex = yes; then
+ COIN_HAS_LATEX_TRUE=
+ COIN_HAS_LATEX_FALSE='#'
+else
+ COIN_HAS_LATEX_TRUE='#'
+ COIN_HAS_LATEX_FALSE=
+fi
+
+
# Process the list of project names and massage them into possible doxygen
# doc'n directories. Prefer 1) classic external, source processed using
# a project-specific doxygen.conf, we use the tag file; 2) classic
@@ -26753,32 +26834,28 @@ for proj in $tmp ; do
echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6
doxytag=${lc_proj}_doxy.tag
doxyfound=no
- for chkProj in $coin_subdirs ; do
- if test "$chkProj" = "$proj" ; then
- # proj will be configured, hence doxydoc present in build tree
- doxysrcdir="${srcdir}/${proj}"
- # AC_MSG_NOTICE([Considering $doxysrcdir (base)])
- if test -d "$doxysrcdir" ; then
- # with a doxydoc directory?
- doxydir="$doxysrcdir/doxydoc"
- # AC_MSG_NOTICE([Considering $doxydir (base)])
- # AC_MSG_NOTICE([Subdirs: $coin_subdirs)])
- if test -d "$doxydir" ; then
- # use tag file; don't process source
- eval doxydir="`pwd`/${proj}/doxydoc"
- coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html"
- echo "$as_me:$LINENO: result: $doxydir (tag)" >&5
+ # proj will be configured, hence doxydoc present in build tree
+ doxysrcdir="${srcdir}/../${proj}"
+ # AC_MSG_NOTICE([Considering $doxysrcdir (base)])
+ if test -d "$doxysrcdir" ; then
+ # with a doxydoc directory?
+ doxydir="$doxysrcdir/doxydoc"
+ # AC_MSG_NOTICE([Considering $doxydir (base)])
+ # AC_MSG_NOTICE([Subdirs: $coin_subdirs)])
+ if test -d "$doxydir" ; then
+ # use tag file; don't process source
+ doxydir="../${proj}/doxydoc"
+ coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html"
+ echo "$as_me:$LINENO: result: $doxydir (tag)" >&5
echo "${ECHO_T}$doxydir (tag)" >&6
- coin_doxy_excludes="$coin_doxy_excludes */${proj}"
- else
- # will process the source -- nothing further to be done here
- echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5
+ coin_doxy_excludes="$coin_doxy_excludes */${proj}"
+ else
+ # will process the source -- nothing further to be done here
+ echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5
echo "${ECHO_T}$doxysrcdir (src)" >&6
- fi
- doxyfound=yes
- fi
fi
- done
+ doxyfound=yes
+ fi
# Not built, fall back to installed tag file
if test $doxyfound = no ; then
eval doxydir="${datadir}/coin/doc/${proj}/doxydoc"
@@ -27196,6 +27273,20 @@ echo "$as_me: error: conditional \"COIN_HAS_OSIDYLP\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
@@ -27467,7 +27558,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
-This file was extended by Cgl $as_me 0.58.9, which was
+This file was extended by Cgl $as_me 0.59.9, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -27530,7 +27621,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-Cgl config.status 0.58.9
+Cgl config.status 0.59.9
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
@@ -27966,9 +28057,14 @@ s, at COIN_HAS_OSIDYLP_FALSE@,$COIN_HAS_OSIDYLP_FALSE,;t t
s, at CGL_SUBDIRS@,$CGL_SUBDIRS,;t t
s, at CGL_SUBLIBS@,$CGL_SUBLIBS,;t t
s, at coin_have_doxygen@,$coin_have_doxygen,;t t
+s, at coin_have_latex@,$coin_have_latex,;t t
s, at coin_doxy_usedot@,$coin_doxy_usedot,;t t
s, at coin_doxy_tagname@,$coin_doxy_tagname,;t t
s, at coin_doxy_logname@,$coin_doxy_logname,;t t
+s, at COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t
+s, at COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t
+s, at COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t
+s, at COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t
s, at coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t
s, at coin_doxy_excludes@,$coin_doxy_excludes,;t t
s, at LIBEXT@,$LIBEXT,;t t
diff --git a/configure.ac b/configure.ac
index 0b242dd..5dc1aba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: configure.ac 1213 2014-08-28 01:53:45Z tkr $
+## $Id: configure.ac 1359 2016-02-22 19:20:13Z tkr $
# Author: Andreas Waechter IBM 2006-04-13
@@ -12,7 +12,7 @@
AC_PREREQ(2.59)
-AC_INIT([Cgl],[0.58.9],[cgl at list.coin-or.org])
+AC_INIT([Cgl],[0.59.9],[cgl at list.coin-or.org])
AC_COPYRIGHT([
Copyright 2006 International Business Machines and others.
@@ -41,7 +41,7 @@ AC_CANONICAL_BUILD
# the source root directory contains definition of where to find those
# externals. The following macro ensures that those externals are
# retrieved by svn if they are not there yet.
-AC_COIN_PROJECTDIR_INIT(Cgl,9:9:8)
+AC_COIN_PROJECTDIR_INIT(Cgl,10:9:9)
# Check if user wants to produce debugging code
AC_COIN_DEBUG_COMPILE(Cgl)
diff --git a/src/CglAllDifferent/Makefile.in b/src/CglAllDifferent/Makefile.in
index c110827..1964e7b 100644
--- a/src/CglAllDifferent/Makefile.in
+++ b/src/CglAllDifferent/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglClique/CglClique.cpp b/src/CglClique/CglClique.cpp
index c928c68..5d2b1f1 100644
--- a/src/CglClique/CglClique.cpp
+++ b/src/CglClique/CglClique.cpp
@@ -1,4 +1,4 @@
-// $Id: CglClique.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglClique.cpp 1330 2016-01-26 19:35:16Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -28,6 +28,7 @@ CglClique::CglClique(bool setPacking, bool justOriginalRows) :
sp_row_ind(0),
node_node(0),
petol(-1.0),
+ maxNumber_(5000),
do_row_clique(true),
do_star_clique(true),
scl_next_node_rule(SCL_MAX_XJ_MAX_DEG),
@@ -58,6 +59,7 @@ CglClique::CglClique(const CglClique& rhs)
sp_row_ind(rhs.sp_row_ind),
node_node(rhs.node_node),
petol(rhs.petol),
+ maxNumber_(rhs.maxNumber_),
do_row_clique(rhs.do_row_clique),
do_star_clique(rhs.do_star_clique),
scl_next_node_rule(rhs.scl_next_node_rule),
@@ -109,7 +111,15 @@ CglClique::generateCuts(const OsiSolverInterface& si, OsiCuts & cs,
// Just original rows
if (justOriginalRows_&&info.inTree)
sp_numrows = CoinMin(info.formulation_rows,sp_numrows);
-
+
+#ifndef MAX_CGLCLIQUE_ROWS
+#define MAX_CGLCLIQUE_ROWS 100000
+#endif
+ if (sp_numrows > MAX_CGLCLIQUE_ROWS) {
+ //printf("sp_numrows is %d\n",sp_numrows);
+ deleteSetPackingSubMatrix();
+ return; // too many
+ }
createSetPackingSubMatrix(si);
fgraph.edgenum = createNodeNode();
@@ -843,6 +853,9 @@ CglFakeClique::assignSolver(OsiSolverInterface * fakeSolver)
if (probing_)
probing_->refreshSolver(fakeSolver_);
}
+#ifdef COIN_HAS_CLP
+#include "OsiClpSolverInterface.hpp"
+#endif
// Generate cuts
void
CglFakeClique::generateCuts(const OsiSolverInterface& si, OsiCuts & cs,
@@ -851,14 +864,59 @@ CglFakeClique::generateCuts(const OsiSolverInterface& si, OsiCuts & cs,
if (fakeSolver_) {
assert (si.getNumCols()==fakeSolver_->getNumCols());
fakeSolver_->setColLower(si.getColLower());
- fakeSolver_->setColSolution(si.getColSolution());
+ const double * solution = si.getColSolution();
+ fakeSolver_->setColSolution(solution);
fakeSolver_->setColUpper(si.getColUpper());
+ // get and set branch and bound cutoff
+ double cutoff;
+ si.getDblParam(OsiDualObjectiveLimit,cutoff);
+ fakeSolver_->setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX);
+#ifdef COIN_HAS_CLP
+ OsiClpSolverInterface * clpSolver
+ = dynamic_cast<OsiClpSolverInterface *> (fakeSolver_);
+ if (clpSolver) {
+ // fix up fake solver
+ const ClpSimplex * siSimplex = clpSolver->getModelPtr();
+ // need to set djs
+ memcpy(siSimplex->primalColumnSolution(),
+ si.getReducedCost(),si.getNumCols()*sizeof(double));
+ fakeSolver_->setDblParam(OsiDualObjectiveLimit,cutoff);
+ }
+#endif
+ const CoinPackedMatrix * matrixByRow = si.getMatrixByRow();
+ const double * elementByRow = matrixByRow->getElements();
+ const int * column = matrixByRow->getIndices();
+ const CoinBigIndex * rowStart = matrixByRow->getVectorStarts();
+ const int * rowLength = matrixByRow->getVectorLengths();
+ const double * rowUpper = si.getRowUpper();
+ const double * rowLower = si.getRowLower();
+
+ // Scan all rows looking for possibles
+ int numberRows = si.getNumRows();
+ double tolerance = 1.0e-3;
+ for (int iRow=0;iRow<numberRows;iRow++) {
+ CoinBigIndex start = rowStart[iRow];
+ CoinBigIndex end = start + rowLength[iRow];
+ double upRhs = rowUpper[iRow];
+ double loRhs = rowLower[iRow];
+ double sum = 0.0;
+ for (CoinBigIndex j=start;j<end;j++) {
+ int iColumn=column[j];
+ double value = elementByRow[j];
+ sum += solution[iColumn]*value;
+ }
+ if (sum<loRhs-tolerance||sum>upRhs+tolerance) {
+ // add as cut
+ OsiRowCut rc;
+ rc.setLb(loRhs);
+ rc.setUb(upRhs);
+ rc.setRow(end-start,column+start,elementByRow+start,false);
+ CoinAbsFltEq equal(1.0e-12);
+ cs.insertIfNotDuplicate(rc,equal);
+ }
+ }
CglClique::generateCuts(*fakeSolver_,cs,info);
if (probing_) {
- // get and set branch and bound cutoff
- double cutoff;
- si.getDblParam(OsiDualObjectiveLimit,cutoff);
- fakeSolver_->setDblParam(OsiDualObjectiveLimit,cutoff);
probing_->generateCuts(*fakeSolver_,cs,info);
}
} else {
diff --git a/src/CglClique/CglClique.hpp b/src/CglClique/CglClique.hpp
index 7bab1df..288052d 100644
--- a/src/CglClique/CglClique.hpp
+++ b/src/CglClique/CglClique.hpp
@@ -1,4 +1,4 @@
-// $Id: CglClique.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglClique.hpp 1330 2016-01-26 19:35:16Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -86,6 +86,8 @@ public:
void setMinViolation(double minviol) { petol = minviol; }
double getMinViolation() const { return petol; }
+ /// Maximum number of binaries for looking at all
+ inline void setMaxNumber(int value) { maxNumber_ = value; }
private:
@@ -157,6 +159,8 @@ protected:
/** The primal tolerance in the solverinterface. */
double petol;
+ /// Maximum number of binaries for looking at all
+ int maxNumber_;
/** data for the star clique algorithm */
diff --git a/src/CglClique/CglCliqueHelper.cpp b/src/CglClique/CglCliqueHelper.cpp
index 2b13a8c..f010c69 100644
--- a/src/CglClique/CglCliqueHelper.cpp
+++ b/src/CglClique/CglCliqueHelper.cpp
@@ -1,4 +1,4 @@
-// $Id: CglCliqueHelper.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglCliqueHelper.cpp 1330 2016-01-26 19:35:16Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -31,7 +31,7 @@ CglClique::selectFractionalBinaries(const OsiSolverInterface& si)
if (si.isBinary(i))
n++;
}
- if (n<5000)
+ if (n<maxNumber_)
lclPetol=-1.0e-5;
}
const double* x = si.getColSolution();
@@ -90,7 +90,11 @@ void
CglClique::selectRowCliques(const OsiSolverInterface& si,int numOriginalRows)
{
const int numrows = si.getNumRows();
+#ifndef INTEL_COMPILER
std::vector<int> clique(numrows, 1);
+#else
+ std::vector<int> clique(numrows);
+#endif
int i, j, k;
diff --git a/src/CglClique/Makefile.in b/src/CglClique/Makefile.in
index f7794b6..e4cfbf4 100644
--- a/src/CglClique/Makefile.in
+++ b/src/CglClique/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglCutGenerator.cpp b/src/CglCutGenerator.cpp
index f9b5181..07fbb25 100644
--- a/src/CglCutGenerator.cpp
+++ b/src/CglCutGenerator.cpp
@@ -1,4 +1,4 @@
-// $Id: CglCutGenerator.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglCutGenerator.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglDuplicateRow/CglDuplicateRow.cpp b/src/CglDuplicateRow/CglDuplicateRow.cpp
index ea31e7b..8634570 100644
--- a/src/CglDuplicateRow/CglDuplicateRow.cpp
+++ b/src/CglDuplicateRow/CglDuplicateRow.cpp
@@ -1,4 +1,4 @@
-// $Id: CglDuplicateRow.cpp 1200 2014-03-07 16:54:42Z forrest $
+// $Id: CglDuplicateRow.cpp 1287 2015-04-15 15:02:39Z forrest $
// Copyright (C) 2004, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -38,7 +38,7 @@ void CglDuplicateRow::generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
return;
}
if ((mode_&3)!=0) {
- generateCuts12(si,cs,info);
+ // bug generateCuts12(si,cs,info);
} else if ((mode_&4)!=0) {
generateCuts4(si,cs,info);
} else {
@@ -202,7 +202,7 @@ void CglDuplicateRow::generateCuts12(const OsiSolverInterface & si, OsiCuts & cs
for (int j=last;j<i;j++) {
int jColumn = which[j];
// skip if already fixed
- if (!colUpper2[jColumn])
+ if (!colUpper2[jColumn]||columnLower[jColumn])
continue;
int nGeJ=0;
int nEqualJ=0;
@@ -223,7 +223,7 @@ void CglDuplicateRow::generateCuts12(const OsiSolverInterface & si, OsiCuts & cs
for (int k=j+1;k<i;k++) {
int kColumn = which[k];
// skip if already fixed
- if (!colUpper2[kColumn])
+ if (!colUpper2[kColumn]||columnLower[kColumn])
continue;
int nK=columnLength[kColumn];
double objValueK = objective[kColumn]*direction;
@@ -804,7 +804,7 @@ void CglDuplicateRow::generateCuts12(const OsiSolverInterface & si, OsiCuts & cs
} else {
// found
#ifndef COIN_DEVELOP
- if (logLevel_>1)
+ if (logLevel_>1)
#endif
printf("***Make %d %d %d >=2 and take out rows %d %d %d\n",
columnB1,column0,column1,
@@ -3040,11 +3040,15 @@ void CglDuplicateRow::generateCuts8(const OsiSolverInterface & si, OsiCuts & cs,
}
}
}
+ delete[] whichP;
int * dups = new int [2*numberCliques];
int * fixed = new int[CoinMax(numberIntegers,numberCliques)];
memset(fixed,0,numberIntegers*sizeof(int));
outDupsEtc(numberIntegers, numberCliques, dups,
cliqueStart, cliqueType, entry, fixed, printit ? 2 : 1);
+ delete[] cliqueStart;
+ delete[] entry;
+ delete[] cliqueType;
int nFixed=0;
CoinPackedVector ubs;
for (int i=0;i<numberColumns;i++) {
diff --git a/src/CglDuplicateRow/CglDuplicateRow.hpp b/src/CglDuplicateRow/CglDuplicateRow.hpp
index 5460963..b40f969 100644
--- a/src/CglDuplicateRow/CglDuplicateRow.hpp
+++ b/src/CglDuplicateRow/CglDuplicateRow.hpp
@@ -1,4 +1,4 @@
-// $Id: CglDuplicateRow.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglDuplicateRow.hpp 1119 2013-04-06 20:24:18Z stefan $
// Copyright (C) 2004, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglDuplicateRow/Makefile.in b/src/CglDuplicateRow/Makefile.in
index 21f8641..5132b87 100644
--- a/src/CglDuplicateRow/Makefile.in
+++ b/src/CglDuplicateRow/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglFlowCover/CglFlowCover.cpp b/src/CglFlowCover/CglFlowCover.cpp
index b473013..1078d60 100644
--- a/src/CglFlowCover/CglFlowCover.cpp
+++ b/src/CglFlowCover/CglFlowCover.cpp
@@ -1,4 +1,4 @@
-// $Id: CglFlowCover.cpp 1207 2014-07-13 09:21:59Z forrest $
+// $Id: CglFlowCover.cpp 1346 2016-02-09 16:14:47Z forrest $
//-----------------------------------------------------------------------------
// name: Cgl Lifted Simple Generalized Flow Cover Cut Generator
// author: Yan Xu email: yan.xu at sas.com
@@ -25,7 +25,6 @@
// added #define to get rid of warnings (so uncomment if =true)
//#define CGLFLOW_DEBUG2
static bool CGLFLOW_DEBUG=false;
-static bool doLift=true;
#include <iomanip>
//-------------------------------------------------------------------
// Overloaded operator<< for printing VUB and VLB.
@@ -36,6 +35,9 @@ std::ostream& operator<<( std::ostream& os, const CglFlowVUB &v )
return os;
}
+// Initialize static memeber
+int CglFlowCover::numFlowCuts_ = 0;
+
//-------------------------------------------------------------------
// Determine row types. Find the VUBS and VLBS.
//-------------------------------------------------------------------
@@ -226,9 +228,11 @@ CglFlowCover::flowPreprocess(const OsiSolverInterface& si)
void CglFlowCover::generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
const CglTreeInfo info)
{
+ static int count=0;
if (getMaxNumCuts() <= 0) return;
if (getNumFlowCuts() >= getMaxNumCuts()) return;
+ ++count;
#if 0
bool preInit = false;
@@ -346,7 +350,6 @@ CglFlowCover::CglFlowCover()
:
CglCutGenerator(),
maxNumCuts_(2000),
- numFlowCuts_(0),
EPSILON_(1.0e-6),
UNDEFINED_(-1),
INFTY_(1.0e30),
@@ -370,7 +373,6 @@ CglFlowCover::CglFlowCover (const CglFlowCover & source)
:
CglCutGenerator(source),
maxNumCuts_(source.maxNumCuts_),
- numFlowCuts_(source.numFlowCuts_),
EPSILON_(source.EPSILON_),
UNDEFINED_(source.UNDEFINED_),
INFTY_(source.INFTY_),
@@ -380,6 +382,7 @@ CglFlowCover::CglFlowCover (const CglFlowCover & source)
numCols_(source.numCols_),
doneInitPre_(source.doneInitPre_)
{
+ setNumFlowCuts(source.numFlowCuts_);
if (numCols_ > 0) {
vubs_ = new CglFlowVUB [numCols_];
vlbs_ = new CglFlowVLB [numCols_];
@@ -418,13 +421,14 @@ CglFlowCover::operator=(const CglFlowCover& rhs)
if (this != &rhs) {
CglCutGenerator::operator=(rhs);
maxNumCuts_ = rhs.maxNumCuts_;
- numFlowCuts_ = rhs.numFlowCuts_;
EPSILON_ = rhs.EPSILON_;
UNDEFINED_ = rhs.UNDEFINED_;
INFTY_ = rhs.INFTY_;
TOLERANCE_ = rhs.TOLERANCE_;
numRows_ = rhs.numRows_;
numCols_ = rhs.numCols_;
+ // numFlowCuts_ = rhs.numFlowCuts_;
+ setNumFlowCuts(rhs.numFlowCuts_);
doneInitPre_ = rhs.doneInitPre_;
if (numCols_ > 0) {
vubs_ = new CglFlowVUB [numCols_];
@@ -481,16 +485,28 @@ CglFlowCover::generateOneFlowCut( const OsiSolverInterface & si,
CglFlowVLB VLB;
CglFlowVUB VUB;
+ static int count=0;
+ ++count;
CGLFLOW_DEBUG=false;
- doLift=true;
+ bool doLift=true;
// Get integer types
const char * columnType = si.getColType ();
for (i = 0; i < rowLen; ++i) {
if ( xlp[ind[i]] - floor(xlp[ind[i]]) > EPSILON_ && ceil(xlp[ind[i]]) - xlp[ind[i]] > EPSILON_ )
break;
}
+ if (i != rowLen) {
+ for (int j = 0; j < rowLen; ++j) {
+ if ( fabs(coef[j])<=EPSILON_) {
+ doLift = false;
+ break;
+ }
+ }
+ } else {
+ doLift = false;
+ }
- if (i == rowLen) {
+ if (!doLift) {
delete [] sign;
delete [] up;
delete [] x;
@@ -549,7 +565,7 @@ CglFlowCover::generateOneFlowCut( const OsiSolverInterface & si,
if ( columnType[ind[i]]==1 ) { // Binary variable
value = coef[i];
- if (value > EPSILON_)
+ if (value > 0.0)
sign[i] = CGLFLOW_COL_BINPOS;
else {
sign[i] = CGLFLOW_COL_BINNEG;
@@ -561,7 +577,7 @@ CglFlowCover::generateOneFlowCut( const OsiSolverInterface & si,
}
else {
value = coef[i];
- if (value > EPSILON_)
+ if (value > 0.0)
sign[i] = CGLFLOW_COL_CONTPOS;
else {
sign[i] = CGLFLOW_COL_CONTNEG;
@@ -1175,7 +1191,8 @@ CglFlowCover::generateOneFlowCut( const OsiSolverInterface & si,
#endif
cutLen = j;
// Skip if no elements ? - bug somewhere
- assert (cutLen);
+ if (cutLen == 0)
+ return false;
// Recheck the violation.
violation = 0.0;
@@ -1258,7 +1275,7 @@ CglFlowCover::determineOneRowType(const OsiSolverInterface& si,
return CGLFLOW_ROW_UNDEFINED;
if (sense == 'R')
return CGLFLOW_ROW_UNINTERSTED; // Could be fixed
-
+
CglFlowRowType rowType = CGLFLOW_ROW_UNDEFINED;
// Get integer types
const char * columnType = si.getColType ();
diff --git a/src/CglFlowCover/CglFlowCover.hpp b/src/CglFlowCover/CglFlowCover.hpp
index f85c1d4..eea070f 100644
--- a/src/CglFlowCover/CglFlowCover.hpp
+++ b/src/CglFlowCover/CglFlowCover.hpp
@@ -1,4 +1,4 @@
-// $Id: CglFlowCover.hpp 1194 2014-02-14 10:53:22Z forrest $
+// $Id: CglFlowCover.hpp 1119 2013-04-06 20:24:18Z stefan $
//-----------------------------------------------------------------------------
// name: Cgl Lifted Simple Generalized Flow Cover Cut Generator
// author: Yan Xu email: yan.xu at sas.com
@@ -182,9 +182,9 @@ public:
/**@name Functions to query and set the number of cuts have been
generated. */
//@{
- inline int getNumFlowCuts() { return numFlowCuts_; }
- inline void setNumFlowCuts(int fc) { numFlowCuts_ = fc; }
- inline void incNumFlowCuts(int fc = 1) { numFlowCuts_ += fc; }
+ static int getNumFlowCuts() { return numFlowCuts_; }
+ static void setNumFlowCuts(int fc) { numFlowCuts_ = fc; }
+ static void incNumFlowCuts(int fc = 1) { numFlowCuts_ += fc; }
//@}
//-------------------------------------------------------------------------
@@ -331,10 +331,8 @@ private:
//------------------------------------------------------------------------
// Private member data
- /** The maximum number of flow cuts to be generated. Default is 2000. */
+ /** The maximum number of flow cuts to be generated. Default is 1000. */
int maxNumCuts_;
- /** The number flow cuts found.*/
- int numFlowCuts_;
/** Tolerance used for numerical purpose. */
double EPSILON_;
/** The variable upper bound of a flow is not indentified yet.*/
@@ -349,6 +347,8 @@ private:
int numRows_;
/** The number columns of the problem.*/
int numCols_;
+ /** The number flow cuts found.*/
+ static int numFlowCuts_;
/** Indicate whether initial flow preprecessing has been done. */
bool doneInitPre_;
/** The array of CglFlowVUBs. */
diff --git a/src/CglFlowCover/Makefile.in b/src/CglFlowCover/Makefile.in
index 9649b0f..bddbd7c 100644
--- a/src/CglFlowCover/Makefile.in
+++ b/src/CglFlowCover/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglGMI/CglGMI.cpp b/src/CglGMI/CglGMI.cpp
index cbaf316..3a5f374 100644
--- a/src/CglGMI/CglGMI.cpp
+++ b/src/CglGMI/CglGMI.cpp
@@ -26,6 +26,7 @@
#include "CoinFactorization.hpp"
#include "CglGMI.hpp"
#include "CoinFinite.hpp"
+#include "CoinRational.hpp"
//-------------------------------------------------------------------
// Generate GMI cuts
@@ -889,9 +890,10 @@ bool CglGMI::scaleCutIntegral(double* cutElem, int* cutIndex, int cutNz,
long maxdnom = 1000;
long numerator = 0, denominator = 0;
// Initialize gcd and lcm
- if (nearestRational(cutRhs, maxdelta, maxdnom, numerator, denominator)) {
- gcd = labs(numerator);
- lcm = denominator;
+ CoinRational r = CoinRational(cutRhs, maxdelta, maxdnom);
+ if (r.getNumerator() != 0){
+ gcd = labs(r.getNumerator());
+ lcm = r.getDenominator();
}
else{
#if defined GMI_TRACE_CLEAN
@@ -903,9 +905,10 @@ bool CglGMI::scaleCutIntegral(double* cutElem, int* cutIndex, int cutNz,
if (solver->isContinuous(cutIndex[i]) && !param.getINTEGRAL_SCALE_CONT()) {
continue;
}
- if(nearestRational(cutElem[i], maxdelta, maxdnom, numerator, denominator)) {
- gcd = computeGcd(gcd,labs(numerator));
- lcm *= denominator/(computeGcd(lcm,denominator));
+ CoinRational r = CoinRational(cutElem[i], maxdelta, maxdnom);
+ if (r.getNumerator() != 0){
+ gcd = computeGcd(gcd, r.getNumerator());
+ lcm *= r.getDenominator()/(computeGcd(lcm,r.getDenominator()));
}
else{
#if defined GMI_TRACE_CLEAN
@@ -930,137 +933,6 @@ bool CglGMI::scaleCutIntegral(double* cutElem, int* cutIndex, int cutNz,
} /* scaleCutIntegral */
/************************************************************************/
-/* arguments:
- * val = double precision value that must be converted
- * maxdelta = max allowed difference between val and the rational computed
- * maxdnom = max allowed denominator
- * numerator = the numerator will be stored here if successful
- * denominator = the denominator will be stored here if successful
- * returns true if successful, false if not.
- *
- * This function is based on SCIPrealToRational() from SCIP, scip at zib.de.
- * The copyright of SCIP and of this function belongs to ZIB.
- * We explicitly obtained the rights to license this function under GPL
- * from ZIB. More information can be obtained from the authors.
- *
- * Copyright (C) 2012 Konrad-Zuse-Zentrum
- * fuer Informationstechnik Berlin
- */
-bool CglGMI::nearestRational(double val, double maxdelta, long maxdnom,
- long& numerator, long& denominator)
-{
-
- /// Denominators that should be tried for the integral scaling phase.
- /// These values are taken from SCIP.
- static const double simplednoms[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
- 8.0, 9.0, 11.0, 12.0, 13.0, 14.0,
- 15.0, 16.0, 17.0, 18.0, 19.0, 25.0,
- -1.0};
-
- double a, b;
- double g0, g1, gx;
- double h0, h1, hx;
- double delta0, delta1;
- double epsilon;
- int i;
-
- /* try the simple denominators first: each value of the simplednoms table
- * multiplied by powers of 10 is tried as denominator
- */
- for (i = 0; simplednoms[i] > 0.0; ++i) {
- double num, dnom;
- double ratval0, ratval1;
- double diff;
-
- /* try powers of 10 (including 10^0) */
- dnom = simplednoms[i];
- while (dnom <= maxdnom) {
- num = floor(val * dnom);
- ratval0 = num/dnom;
- ratval1 = (num+1.0)/dnom;
- diff = fabs(val - ratval0);
- if (diff < maxdelta) {
- numerator = (long)num;
- denominator = (long)dnom;
- return true;
- }
- diff = fabs(val - ratval1);
- if (diff < maxdelta) {
- numerator = (long)(num+1.0);
- denominator = (long)dnom;
- return true;
- }
- dnom *= 10.0;
- }
- }
-
- /* the simple denominators didn't work: calculate rational
- * representation with arbitrary denominator */
- epsilon = maxdelta/2.0;
-
- b = val;
- a = floor(b + epsilon);
- g0 = a;
- h0 = 1.0;
- g1 = 1.0;
- h1 = 0.0;
- delta0 = val - g0/h0;
- delta1 = (delta0 < 0.0 ? val - (g0-1.0)/h0 : val - (g0+1.0)/h0);
-
- while ((fabs(delta0) > maxdelta) && (fabs(delta1) > maxdelta)) {
- if ((b-a) < epsilon || h0 < 0 || h1 < 0)
- return false;
-
- b = 1.0 / (b - a);
- a = floor(b + epsilon);
-
- if (a < 0.0)
- return false;
- gx = g0;
- hx = h0;
-
- g0 = a * g0 + g1;
- h0 = a * h0 + h1;
-
- g1 = gx;
- h1 = hx;
-
- if (h0 > maxdnom)
- return false;
-
- delta0 = val - g0/h0;
- delta1 = (delta0 < 0.0 ? val - (g0-1.0)/h0 : val - (g0+1.0)/h0);
- }
-
- if (fabs(g0) > (LONG_MAX >> 4) || h0 > (LONG_MAX >> 4))
- return false;
-
- if (h0 > 0.5)
- return false;
-
- if (delta0 < -maxdelta) {
- if (fabs(delta1) > maxdelta)
- return false;
- numerator = (long)(g0 - 1.0);
- denominator = (long)h0;
- }
- else if (delta0 > maxdelta) {
- if (fabs(delta1) > maxdelta)
- return false;
- numerator = (long)(g0 + 1.0);
- denominator = (long)h0;
- }
- else{
- numerator = (long)g0;
- denominator = (long)h0;
- }
- if ((denominator < 1) ||
- (fabs(val - (double)(numerator)/(double)(denominator)) > maxdelta))
- return false;
- return true;
-} /* nearestRational */
-
-/************************************************************************/
long CglGMI::computeGcd(long a, long b) {
// This is the standard Euclidean algorithm for gcd
long remainder = 1;
diff --git a/src/CglGMI/Makefile.in b/src/CglGMI/Makefile.in
index c0255bf..981b0ec 100644
--- a/src/CglGMI/Makefile.in
+++ b/src/CglGMI/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglGomory/CglGomory.cpp b/src/CglGomory/CglGomory.cpp
index 7f06e60..a6e9bde 100644
--- a/src/CglGomory/CglGomory.cpp
+++ b/src/CglGomory/CglGomory.cpp
@@ -9,9 +9,9 @@
#include <cassert>
#include <iostream>
//#define CGL_DEBUG 1
-//#ifdef NDEBUG
+#ifdef NDEBUG
//#undef NDEBUG
-//#endif
+#endif
#include "CoinPragma.hpp"
#include "CoinHelperFunctions.hpp"
#include "CoinPackedVector.hpp"
@@ -72,10 +72,10 @@ void CglGomory::generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
intVar[i] = 2; // other
} else {
// negative bounds - I am not sure works
- intVar[i] = 0;
+ intVar[i] = 3;
}
} else {
- intVar[i] = 0;
+ intVar[i] = 4;
}
} else {
intVar[i]=0;
@@ -345,7 +345,7 @@ void CglGomory::generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
inline double above_integer(double value) {
double value2=floor(value);
double value3=floor(value+0.5);
- if (fabs(value3-value)<1.0e-7*(fabs(value3)+1.0))
+ if (fabs(value3-value)<1.0e-9*(fabs(value3)+1.0))
return 0.0;
return value-value2;
}
@@ -555,10 +555,14 @@ CglGomory::generateCuts(
#else
double relaxation = factorization.conditionNumber();
#endif
+ // if very small be a bit more careful
+ if (relaxation<1.0e-10)
+ relaxation=1.0/sqrt(relaxation);
#ifdef COIN_DEVELOP_z
if (relaxation>1.0e49)
printf("condition %g\n",relaxation);
#endif
+ //printf("condition %g %g\n",relaxation,conditionNumberMultiplier_);
relaxation *= conditionNumberMultiplier_;
double bounds[2]={-COIN_DBL_MAX,0.0};
int iColumn,iRow;
@@ -829,14 +833,14 @@ CglGomory::generateCuts(
}
assert (nn==1);
array.clear();
- work.checkClear();
+ //work.checkClear();
}
#endif
array.clear();
assert(intVar[iColumn]&&reducedValue<1.0-away&&reducedValue>away);
{
#ifdef CGL_DEBUG
- cutVector.checkClear();
+ //cutVector.checkClear();
#endif
// get row of tableau
double one =1.0;
@@ -879,6 +883,8 @@ CglGomory::generateCuts(
// adjustment to rhs
double rhs=0.0;
int number=0;
+ // number of terms (so includes modifications and cancellations)
+ int numberCoefficients=0;
#ifdef CGL_DEBUG_GOMORY
if (!gomory_try)
printf("start for basic column %d\n",iColumn);
@@ -951,6 +957,7 @@ CglGomory::generateCuts(
}
if (fabs(coefficient)>= COIN_INDEXED_TINY_ELEMENT) {
cutElement[j] = coefficient;
+ numberCoefficients++;
cutIndex[number++]=j;
// If too many - break from loop
if (number>limit)
@@ -1015,7 +1022,11 @@ CglGomory::generateCuts(
k<rowStart[iRow]+rowLength[iRow];k++) {
int jColumn=column[k];
double value=rowElements[k];
+ double oldValue=cutElement[jColumn];
cutVector.quickAdd(jColumn,-coefficient*value);
+ numberCoefficients++;
+ if (!intVar[jColumn]&&!oldValue)
+ numberNonInteger++;
}
}
}
@@ -1025,18 +1036,30 @@ CglGomory::generateCuts(
double sum=0.0;
rhs = - rhs;
int n = cutVector.getNumElements();
+ // If too many - just clear vector and skip
+ if (n>limit) {
+ cutVector.clear();
+ continue;
+ }
#if MORE_GOMORY_CUTS==1||MORE_GOMORY_CUTS==3
double violation2=violation;
#endif
number=0;
+ numberNonInteger=0;
+ double sumCoefficients=0.0;
for (j=0;j<n;j++) {
int jColumn =cutIndex[j];
double value=-cutElement[jColumn];
+ sumCoefficients += fabs(value);
+ if (fabs(colsol[jColumn])>10.0)
+ sumCoefficients += 2.0*fabs(value);
cutElement[jColumn]=0.0;
if (fabs(value)>1.0e-8) {
sum+=value*colsol[jColumn];
packed[number]=value;
cutIndex[number++]=jColumn;
+ if (!intVar[jColumn])
+ numberNonInteger++;
} else {
#define LARGE_BOUND 1.0e20
// small - adjust rhs if rhs reasonable
@@ -1057,6 +1080,8 @@ CglGomory::generateCuts(
sum+=value*colsol[jColumn];
packed[number]=value;
cutIndex[number++]=jColumn;
+ if (!intVar[jColumn])
+ numberNonInteger++;
}
}
}
@@ -1100,6 +1125,7 @@ CglGomory::generateCuts(
}
#endif
#endif
+ bool cleanedCut=numberNonInteger>0;
if (!numberNonInteger&&number) {
#ifdef CGL_DEBUG
assert (sizeof(Rational)==sizeof(double));
@@ -1135,6 +1161,7 @@ CglGomory::generateCuts(
}
if (lcm>0&&numberNonSmall) {
double multiplier = lcm;
+ cleanedCut=true;
int nOverflow = 0;
for (j=0; j<number+1;j++) {
double value = fabs(packed[j]);
@@ -1219,11 +1246,33 @@ CglGomory::generateCuts(
CoinFillN(cutElement,number+1,0.0);
} else {
// relax rhs a tiny bit
+ //#define CGL_GOMORY_OLD_RELAX
+#ifndef CGL_GOMORY_OLD_RELAX
+#if 0
+ double rhs2=rhs;
+ rhs2 += 1.0e-8;
+ // relax if lots of elements for mixed gomory
+ if (number>=20) {
+ rhs2 += 1.0e-7*(static_cast<double> (number/20));
+ }
+#endif
+ rhs += 1.0e-7;
+ if (numberCoefficients>=10||true) {
+ rhs += 1.0e-7*sumCoefficients+1.0e-8*numberCoefficients;
+ }
+#if 0
+ if (numberCoefficients>number*3)
+ printf("old rhs %.18g new %.18g - n,nNon,nC,sumC %d,%d,%d %g\n",
+ rhs2,rhs,number,numberNonInteger,numberCoefficients,
+ sumCoefficients);
+#endif
+#else
rhs += 1.0e-8;
// relax if lots of elements for mixed gomory
if (number>=20) {
rhs += 1.0e-7*(static_cast<double> (number/20));
}
+#endif
}
// Take off tiny elements
// for first pass reject
@@ -1240,6 +1289,8 @@ CglGomory::generateCuts(
if (value<CGL_GOMORY_TINY_ELEMENT) {
int iColumn = cutIndex[i];
if (colUpper[iColumn]-colLower[iColumn]<LARGE_BOUND) {
+ if (intVar[iColumn])
+ numberNonInteger--;
// weaken cut
if (packed[i]>0.0)
rhs -= value*colLower[iColumn];
@@ -1254,6 +1305,7 @@ CglGomory::generateCuts(
} else {
int iColumn = cutIndex[i];
if (colUpper[iColumn]!=colLower[iColumn]||globalCuts) {
+ value=fabs(value);
largest=CoinMax(largest,value);
smallest=CoinMin(smallest,value);
cutIndex[number]=cutIndex[i];
@@ -1261,10 +1313,13 @@ CglGomory::generateCuts(
} else {
// fixed so subtract out
rhs -= packed[i]*colLower[iColumn];
+ if (intVar[iColumn])
+ numberNonInteger--;
}
}
}
- if (largest>1.0e10*smallest||(number>20&&smallest<number*1.0e-6)) {
+ if (largest>1.0e10*smallest||(number>20&&smallest<number*1.0e-6)||
+ numberNonInteger<-10) {
number=limit+1; //reject
numberNonInteger=1;
} else if (largest>1.0e9*smallest) {
@@ -1275,12 +1330,85 @@ CglGomory::generateCuts(
#if MORE_GOMORY_CUTS==1||MORE_GOMORY_CUTS==3
accurate=false;
#endif
+ } else {
+#define TRY7 2
+#define PRINT_NUMBER 0
+#if PRINT_NUMBER
+ if (number==PRINT_NUMBER) {
+ printf("==========\n<= %.18g ",rhs);
+ for (int i=0;i<PRINT_NUMBER;i++)
+ printf("%.18g ",packed[i]);
+ printf("\n");
+ }
+#endif
+ if (number>limit)
+ continue;
+#if TRY7==1
+ // Just scale
+ double multiplier = 1.0/sqrt(largest*smallest);
+ for (int i=0;i<number;i++)
+ packed[i] *= multiplier;
+ rhs *= multiplier;
+ if (number==PRINT_NUMBER) {
+ printf("multiplier %g %g %g\n",
+ multiplier,smallest,largest);
+ }
+#elif TRY7==2
+ // Look at ratio
+ double scaleFactor=fabs(rhs);
+ for (int i=0;i<number;i++) {
+ double value=packed[i];
+ double ratio = fabs(rhs/value);
+ double nearest=floor(ratio+0.5);
+ if (fabs(ratio-nearest)<1.0e-6 && nearest >= 1.0) {
+ int iColumn=cutIndex[i];
+ if (intVar[iColumn]) {
+ if (colLower[iColumn]>=0.0) {
+ if (value>0.0) {
+ // better if smaller
+ if (ratio>nearest) {
+ packed[i]=scaleFactor/nearest;
+ }
+ } else {
+ // better if larger
+ if (ratio<nearest) {
+ packed[i]=-scaleFactor/nearest;
+ }
+ }
+ //if (value!=packed[i])
+ //printf("column %d rhs %.18g element %g ratio %.18g - new element %.18g\n",
+ // iColumn,rhs,value,ratio,packed[i]);
+ //assert (fabs(value-packed[i])<1.0e-4);
+ } else {
+ //printf("column %d rhs %g element %g ratio %.18g - bounds %g,%g\n",
+ // iColumn,rhs,value,ratio,colLower[iColumn],colUpper[iColumn]);
+ }
+ }
+ }
+ }
+#endif
+#if PRINT_NUMBER
+ if (number==PRINT_NUMBER) {
+ printf("after %.18g ",rhs);
+ for (int i=0;i<PRINT_NUMBER;i++)
+ printf("%.18g ",packed[i]);
+ printf("\n");
+ }
+#endif
}
}
if (number<limit||!numberNonInteger) {
bounds[1]=rhs;
if (number>50&&numberNonInteger)
bounds[1] = rhs+tolerance6+1.0e-8*fabs(rhs); // weaken
+#if GOMORY_RELAX_NUMBER
+ else if (number>GOMORY_RELAX_NUMBER&&numberNonInteger>1)
+ bounds[1] = rhs+tolerance6+1.0e-8*fabs(rhs); // weaken
+#endif
+ // if close to integer - round up
+ double nearest=floor(bounds[1]+0.5);
+ if (bounds[1]<nearest&&bounds[1]>nearest-1.0e-4)
+ bounds[1]=nearest;
double test = CoinMin(largestFactor*largestFactorMultiplier_,
relaxation);
if (number>5&&numberNonInteger&&test>1.0e-20) {
@@ -1297,10 +1425,58 @@ CglGomory::generateCuts(
#else
{
#endif
+ // tidy
+ if (!cleanedCut) {
+ double range=0.0;
+ for (int k=0;k<number;k++) {
+ int iColumn=cutIndex[k];
+ double thisRange=CoinMin(colUpper[iColumn]-colLower[iColumn],1000.0);
+ range += thisRange;
+ }
+ // see if close to integer
+ bool close=fabs(bounds[1]-floor(bounds[1]+0.5))*range<1.0e-6;
+ if (close) {
+ for (int k=0;k<number;k++) {
+ if(fabs(packed[k]-floor(packed[k]+0.5))*range>1.0e-6) {
+ close=false;
+ break;
+ }
+ }
+ if (close) {
+#ifdef PRINT_MORE
+ bool printIt=false;
+ for (int k=0;k<number;k++) {
+ if(fabs(packed[k]-floor(packed[k]+0.5))>1.0e-12) {
+ printIt=true;
+ break;
+ }
+ }
+ if (printIt) {
+ printf("yy %.18g >= ",bounds[1]);
+ for (int k=0;k<number;k++) {
+ printf("(%d,%.18g) ",cutIndex[k],packed[k]);
+ }
+ printf("\n");
+ }
+#endif
+ bounds[1]=floor(bounds[1]+0.5);
+ for (int k=0;k<number;k++) {
+ packed[k]=floor(packed[k]+0.5);
+ }
+ }
+ }
+ }
OsiRowCut rc;
rc.setRow(number,cutIndex,packed,false);
rc.setLb(bounds[0]);
- rc.setUb(bounds[1]);
+ rc.setUb(bounds[1]);
+#ifdef CGL_DEBUG
+ if (debugger) {
+ assert(!debugger->invalidCut(rc));
+ if(debugger->invalidCut(rc))
+ abort();
+ }
+#endif
#if MORE_GOMORY_CUTS<2
nTotalEls -= number;
cs.insert(rc);
diff --git a/src/CglGomory/CglGomoryTest.cpp b/src/CglGomory/CglGomoryTest.cpp
index 5cf11b9..c47db05 100644
--- a/src/CglGomory/CglGomoryTest.cpp
+++ b/src/CglGomory/CglGomoryTest.cpp
@@ -1488,7 +1488,7 @@ CglGomoryUnitTest(
double lpRelaxAfter=siP->getObjValue();
std::cout<<"LP value with cuts: "<<lpRelaxAfter<<std::endl;
//assert( eq(lpRelaxAfter, 2592.1908295194507) );
- assert( lpRelaxAfter> 2550.0 );
+ assert( lpRelaxAfter> 2545.0 );
assert( lpRelaxBefore < lpRelaxAfter );
assert(lpRelaxAfter < 3089.1);
diff --git a/src/CglGomory/Makefile.in b/src/CglGomory/Makefile.in
index 6126cdc..cdb2919 100644
--- a/src/CglGomory/Makefile.in
+++ b/src/CglGomory/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglKnapsackCover/CglKnapsackCover.cpp b/src/CglKnapsackCover/CglKnapsackCover.cpp
index e78e462..c11db75 100644
--- a/src/CglKnapsackCover/CglKnapsackCover.cpp
+++ b/src/CglKnapsackCover/CglKnapsackCover.cpp
@@ -1,4 +1,4 @@
-// $Id: CglKnapsackCover.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglKnapsackCover.cpp 1357 2016-02-22 14:43:10Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -111,6 +111,14 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
vlbRow[k]=-10; // fixed
}
}
+ // tolerance for tight rows
+ double tightTolerance = 1.0e-5;
+ if (!info.inTree) {
+ if (!info.pass)
+ tightTolerance = 1.0e4;
+ else
+ tightTolerance = 1.0e-1;
+ }
int rowIndex;
int numberVub=0;
@@ -199,12 +207,12 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
effectiveUpper[rowIndex] = upRhs;
effectiveLower[rowIndex] = loRhs;
bool possible = false;
- if (fabs(sum-upRhs)<1.0e-5) {
+ if (fabs(sum-upRhs)<tightTolerance) {
possible=true;
} else {
effectiveUpper[rowIndex]=COIN_DBL_MAX;
}
- if (fabs(sum-loRhs)<1.0e-5) {
+ if (fabs(sum-loRhs)<tightTolerance) {
possible=true;
} else {
effectiveLower[rowIndex]=-COIN_DBL_MAX;
@@ -271,7 +279,7 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
rowIndex = toCheck[ii];
if (rowIndex < 0 || rowIndex >= nRows)
continue;
- if (vub[rowIndex]==-2)
+ if (vub[rowIndex]==-2)
continue;
whichRow_=ii;
@@ -348,48 +356,62 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
double thisCoefficient=thisElement[i];
int replace = 0;
if (vubRow[iColumn]>=0) {
- iRow = vubRow[iColumn];
- if (vub[iRow]==iColumn&&iRow!=rowIndex) {
- vubCoefficient = vubValue[iRow];
+ int jRow = vubRow[iColumn];
+ if (vub[jRow]==iColumn&&jRow!=rowIndex) {
+ double vbCoefficient = vubValue[jRow];
// break it out - may be able to do better
if (dSign*thisCoefficient>0.0) {
// we want valid lower bound on continuous
- if (effectiveLower[iRow]>-1.0e20&&vubCoefficient>0.0)
+ if (effectiveLower[jRow]>-1.0e20&&vbCoefficient>0.0) {
replace=-1;
- else if (effectiveUpper[iRow]<1.0e20&&vubCoefficient<0.0)
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ } else if (effectiveUpper[jRow]<1.0e20&&vbCoefficient<0.0) {
replace=1;
- // q assert (replace!=-1);
- // q assert (replace!=1);
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ }
} else {
// we want valid upper bound on continuous
- if (effectiveLower[iRow]>-1.0e20&&vubCoefficient<0.0)
+ if (effectiveLower[jRow]>-1.0e20&&vbCoefficient<0.0) {
replace=-1;
- else if (effectiveUpper[iRow]<1.0e20&&vubCoefficient>0.0)
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ } else if (effectiveUpper[jRow]<1.0e20&&vbCoefficient>0.0) {
replace=1;
- //assert (replace!=-1);
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ }
}
}
}
if (vlbRow[iColumn]>=0) {
- iRow = vlbRow[iColumn];
- if (vub[iRow]==iColumn&&iRow!=rowIndex) {
- vubCoefficient = vlbValue[iRow];
+ int jRow = vlbRow[iColumn];
+ if (vub[jRow]==iColumn&&jRow!=rowIndex) {
+ double vbCoefficient = vlbValue[jRow];
// break it out - may be able to do better
if (dSign*thisCoefficient>0.0) {
// we want valid lower bound on continuous
- if (effectiveLower[iRow]>-1.0e20&&vubCoefficient>0.0)
+ if (effectiveLower[jRow]>-1.0e20&&vbCoefficient>0.0) {
replace=-1;
- else if (effectiveUpper[iRow]<1.0e20&&vubCoefficient<0.0)
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ } else if (effectiveUpper[jRow]<1.0e20&&vbCoefficient<0.0) {
replace=1;
- //assert (replace!=1);
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ }
} else {
// we want valid upper bound on continuous
- if (effectiveLower[iRow]>-1.0e20&&vubCoefficient<0.0)
+ if (effectiveLower[jRow]>-1.0e20&&vbCoefficient<0.0) {
replace=-1;
- else if (effectiveUpper[iRow]<1.0e20&&vubCoefficient>0.0)
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ } else if (effectiveUpper[jRow]<1.0e20&&vbCoefficient>0.0) {
replace=1;
- //q assert (replace!=-1);
- //assert (replace!=1);
+ iRow=jRow;
+ vubCoefficient = vbCoefficient;
+ }
}
}
}
@@ -447,6 +469,10 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
continue; // no good
}
}
+#ifdef CGL_DEBUG
+ for (int i=0;i<nCols;i++)
+ assert (!complement[i]);
+#endif
if (!deriveAKnapsack(si, cs, krow, rowType[itry], b, complement,
xstar, rowIndex,
length,thisColumnIndex,thisElement)) {
@@ -690,14 +716,14 @@ void CglKnapsackCover::generateCuts(const OsiSolverInterface& si, OsiCuts& cs,
// Reset xstar and complement to their initialized values for the next
// go-around
int k;
- if (fabs(b-rowUpper[rowIndex]) > epsilon_) {
+ // could get == if (fabs(b-rowUpper[rowIndex]) > epsilon_) {
for(k=0; k<krow.getNumElements(); k++) {
if (complement[krow.getIndices()[k]]){
xstar[krow.getIndices()[k]]= 1.0-xstar[krow.getIndices()[k]];
complement[krow.getIndices()[k]]=0;
}
}
- }
+ //}
krow.setVector(0,NULL,NULL);
#ifdef CGL_DEBUG
int nnow = cs.sizeRowCuts();
@@ -818,6 +844,9 @@ CglKnapsackCover::liftAndUncomplementAndAdd(
}
if (goodCut) {
+ //int extendedCut = gubifyCut(cut);
+ //if (extendedCut)
+ //printf("XX extended cut\n");
// Uncomplement the complemented variables in the cut
int k;
//if (fabs(b-rowub)> epsilon_) {
@@ -889,7 +918,11 @@ CglKnapsackCover::deriveAKnapsack(
double & b,
int * complement,
double * xstar,
- int /*rowIndex*/,
+ int
+#ifdef PRINT_DEBUG
+ rowIndex
+#endif
+ ,
int numberElements,
const int * index,
const double * element)
@@ -897,7 +930,7 @@ CglKnapsackCover::deriveAKnapsack(
// Fix to https://projects.coin-or.org/Cbc/ticket/30
{
- // On investiagtion looks as if it can happen without being a bug
+ // On investigation looks as if it can happen without being a bug
if (numberElements==0) return 0;
}
@@ -1020,7 +1053,7 @@ CglKnapsackCover::deriveAKnapsack(
#ifdef PRINT_DEBUG
printf("*** Doubleton Row is ");
- for(i=0; i<2; i++){
+ for(int i=0; i<2; i++){
int iColumn = indices[i];
sum += elements[i]*xstar[iColumn];
printf("%d (coeff = %g, value = %g} ",indices[i],
@@ -1083,7 +1116,7 @@ CglKnapsackCover::deriveAKnapsack(
if (krow.getElements()[i]> b){
fixedBnd.insert(krow.getIndices()[i],complement[krow.getIndices()[i]]);
#ifdef PRINT_DEBUG
- printf("Variable %i being fixed to %i due to row %i.\n",
+ printf("Variable %i being fixed to %i due to row %d.\n",
krow.getIndices()[i],complement[krow.getIndices()[i]],rowIndex);
#endif
fixed = 1;
@@ -1150,7 +1183,11 @@ CglKnapsackCover::deriveAKnapsack(
int
CglKnapsackCover::findLPMostViolatedMinCover(
int nCols,
- int /*row*/,
+ int
+#ifdef PRINT_DEBUG
+ row
+#endif
+ ,
CoinPackedVector & krow,
double & b,
double * xstar,
@@ -1362,7 +1399,11 @@ Lp relax of most violated minimal cover: row %i has cover of size %i.\n",
int
CglKnapsackCover::findExactMostViolatedMinCover(
int nCols,
- int /*row*/,
+ int
+#ifdef PRINT_DEBUG
+ row
+#endif
+ ,
CoinPackedVector & krow,
double b,
double * xstar,
@@ -1535,7 +1576,11 @@ CglKnapsackCover::findExactMostViolatedMinCover(
//-------------------------------------------------------------------
int
CglKnapsackCover::findPseudoJohnAndEllisCover(
- int /*row*/,
+ int
+#ifdef PRINT_DEBUG
+ row
+#endif
+ ,
CoinPackedVector & krow,
double & b,
double * xstar,
@@ -1782,7 +1827,11 @@ CglKnapsackCover::findPseudoJohnAndEllisCover(
//-------------------------------------------------------------------
int
CglKnapsackCover::findJohnAndEllisCover(
- int /*row*/,
+ int
+#ifdef PRINT_DEBUG
+ row
+#endif
+ ,
CoinPackedVector & krow,
double & b,
double * xstar,
@@ -2028,7 +2077,11 @@ CglKnapsackCover::findJohnAndEllisCover(
//-------------------------------------------------------------------
int
CglKnapsackCover::findGreedyCover(
- int /*row*/,
+ int
+#ifdef PRINT_DEBUG
+ row
+#endif
+ ,
CoinPackedVector & krow,
double & b,
double * xstar,
@@ -2854,84 +2907,7 @@ CglKnapsackCover::liftUpDownAndUncomplementAndAdd(
cutRhs, sum);
#endif
-#ifdef GUBCOVER
- if (numberCliques_) {
- int n = cut.getNumElements();
- const int * ind3;
- const double * els3;
- ind3 = cut.getIndices();
- els3 = cut.getElements();
- const CoinPackedMatrix * matrixByRow = solver_->getMatrixByRow();
- const double * elementByRow = matrixByRow->getElements();
- const int * column = matrixByRow->getIndices();
- const CoinBigIndex * rowStart = matrixByRow->getVectorStarts();
- const int * rowLength = matrixByRow->getVectorLengths();
- int numberColumns = solver_->getNumCols();
- double * els = elements_;
- double * els2 = els+numberColumns;
- for (i=0;i<n;i++)
- els[ind3[i]]=els3[i];
- for (i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
- int iColumn = column[i];
- els2[iColumn]=elementByRow[i];
- }
-#if CGL_DEBUG
- bool found=false;
-#endif
- for (i=0;i<n;i++) {
- int iColumn = ind3[i];
- // complement doesn't seem to work?
- if (!complement_[iColumn]) {
- if (oneFixStart_[iColumn]>=0) {
- for (int j=oneFixStart_[iColumn];j<zeroFixStart_[iColumn];j++) {
- int iClique = whichClique_[j];
- for (int k=cliqueStart_[iClique];k<cliqueStart_[iClique+1];k++) {
- int jColumn = sequenceInCliqueEntry(cliqueEntry_[k]);
- if (!els[jColumn]&&els2[jColumn]) {
- assert (jColumn!=iColumn);
- if (!complement_[jColumn]&&oneFixesInCliqueEntry(cliqueEntry_[k])) {
- //if (els2[iColumn]<0.0||els2[jColumn]<0.0)
- //printf("true els %g (c%d) and %g (c%d)\n",
- // els2[iColumn],complement_[iColumn],
- // els2[jColumn],complement_[jColumn]);
- if (fabs(els2[jColumn])>=fabs(els2[iColumn])) {
-#if CGL_DEBUG
- if (!found) {
- found=true;
- printf("Good cut can be improved");
- for (i=0;i<n;i++)
- printf("(%d,%g) ",ind3[i],els3[i]);
- printf("<= %g\n",b);
- }
- printf("can add! %d %d\n",iColumn,jColumn);
-#endif
- els[jColumn]=els[iColumn];
- cut.insert(jColumn,els[jColumn]);
- // recompute as may have changed
- ind3 = cut.getIndices();
- }
- }
- }
- }
- }
- }
- }
- }
- // zero out
- n = cut.getNumElements();
- ind3 = cut.getIndices();
- for (i=0;i<n;i++)
- els[ind3[i]]=0.0;
- for (i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
- int iColumn = column[i];
- els2[iColumn]=0.0;
- }
- for (i=0;i<numberColumns;i++) {
- assert (!els[i]);
- assert (!els2[i]);
- }
- }
-#endif
+ gubifyCut(cut);
// de-complement
int k;
const int s = cut.getNumElements();
@@ -3128,80 +3104,7 @@ CglKnapsackCover::seqLiftAndUncomplementAndAdd(
printf("The cutRhs = %g, and the alpha_j*xstar_j sum is %g\n\n", cutRhs, sum);
#endif
-#ifdef GUBCOVER
- if (numberCliques_) {
- int n = cut.getNumElements();
- const int * ind3;
- const double * els3;
- ind3 = cut.getIndices();
- els3 = cut.getElements();
- const CoinPackedMatrix * matrixByRow = solver_->getMatrixByRow();
- const double * elementByRow = matrixByRow->getElements();
- const int * column = matrixByRow->getIndices();
- const CoinBigIndex * rowStart = matrixByRow->getVectorStarts();
- const int * rowLength = matrixByRow->getVectorLengths();
- int numberColumns = solver_->getNumCols();
- double * els = elements_;
- double * els2 = els+numberColumns;
- for (i=0;i<n;i++)
- els[ind3[i]]=els3[i];
- for (i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
- int iColumn = column[i];
- els2[iColumn]=elementByRow[i];
- }
-#if CGL_DEBUG
- bool found=false;
-#endif
- for (i=0;i<n;i++) {
- int iColumn = ind3[i];
- // complement doesn't seem to work?
- if (!complement_[iColumn]) {
- if (oneFixStart_[iColumn]>=0) {
- for (int j=oneFixStart_[iColumn];j<zeroFixStart_[iColumn];j++) {
- int iClique = whichClique_[j];
- for (int k=cliqueStart_[iClique];k<cliqueStart_[iClique+1];k++) {
- int jColumn = sequenceInCliqueEntry(cliqueEntry_[k]);
- if (!els[jColumn]&&els2[jColumn]) {
- assert (jColumn!=iColumn);
- if (!complement_[jColumn]&&oneFixesInCliqueEntry(cliqueEntry_[k])) {
- //if (els2[iColumn]<0.0||els2[jColumn]<0.0)
- //printf("true els %g (c%d) and %g (c%d)\n",
- // els2[iColumn],complement_[iColumn],
- // els2[jColumn],complement_[jColumn]);
- if (fabs(els2[jColumn])>=fabs(els2[iColumn])) {
-#if CGL_DEBUG
- if (!found) {
- found=true;
- printf("Good cut can be improved");
- for (i=0;i<n;i++)
- printf("(%d,%g) ",ind3[i],els3[i]);
- printf("<= %g\n",b);
- }
- printf("can add! %d %d\n",iColumn,jColumn);
-#endif
- els[jColumn]=els[iColumn];
- cut.insert(jColumn,els[jColumn]);
- // recompute as may have changed
- ind3 = cut.getIndices();
- }
- }
- }
- }
- }
- }
- }
- }
- // zero out
- n = cut.getNumElements();
- ind3 = cut.getIndices();
- for (i=0;i<n;i++)
- els[ind3[i]]=0.0;
- for (i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
- int iColumn = column[i];
- els2[iColumn]=0.0;
- }
- }
-#endif
+ gubifyCut(cut);
int k;
const int s = cut.getNumElements();
const int * indices = cut.getIndices();
@@ -3285,7 +3188,7 @@ CglKnapsackCover::liftCoverCut(
// Define lambda to be the "cover excess".
// By definition, lambda > 0. If this is not the case, something's screwy. Exit gracefully.
double lambda = sum-b;
- if (lambda < epsilon_) {
+ if (lambda < epsilon2_) {
#ifdef PRINT_DEBUG
printf("lambda < epsilon....aborting. \n");
std::cout << "lambda " << lambda << " epsilon " << epsilon_ << std::endl;
@@ -3425,7 +3328,14 @@ CglKnapsackCover::liftCoverCut(
// complement doesn't seem to work?
if (!complement_[iColumn]) {
if (oneFixStart_[iColumn]>=0) {
+ /* I (JJF) don't think this is valid for more than one clique
+ Best would be to choose largest set of additions - but that means code
+ and I don't really understand existing code
+ */
+ bool skipClique=false;
for (int j=oneFixStart_[iColumn];j<zeroFixStart_[iColumn];j++) {
+ if (skipClique)
+ break;
int iClique = whichClique_[j];
for (int k=cliqueStart_[iClique];k<cliqueStart_[iClique+1];k++) {
int jColumn = sequenceInCliqueEntry(cliqueEntry_[k]);
@@ -3437,6 +3347,7 @@ CglKnapsackCover::liftCoverCut(
// els2[iColumn],complement_[iColumn],
// els2[jColumn],complement_[jColumn]);
if (fabs(els2[jColumn])>=fabs(els2[iColumn])) {
+ skipClique=true;
#if CGL_DEBUG
if (!found) {
found=true;
@@ -3481,6 +3392,106 @@ CglKnapsackCover::liftCoverCut(
#endif
return goodCut;
}
+// For testing gub stuff
+int
+CglKnapsackCover::gubifyCut(CoinPackedVector & cut)
+{
+ int goodCut=0;
+#ifdef GUBCOVER
+ if (numberCliques_) {
+ int n = cut.getNumElements();
+ const int * ind3;
+ const double * els3;
+ ind3 = cut.getIndices();
+ els3 = cut.getElements();
+ const CoinPackedMatrix * matrixByRow = solver_->getMatrixByRow();
+ const double * elementByRow = matrixByRow->getElements();
+ const int * column = matrixByRow->getIndices();
+ const CoinBigIndex * rowStart = matrixByRow->getVectorStarts();
+ const int * rowLength = matrixByRow->getVectorLengths();
+ int numberColumns = solver_->getNumCols();
+ double * els = elements_;
+ double * els2 = els+numberColumns;
+ bool good = true;
+ for (int i=0;i<n;i++) {
+ int iColumn = ind3[i];
+ // complement doesn't seem to work?
+ if (!complement_[iColumn]) {
+ els[iColumn]=els3[i];
+ } else {
+ good=false;
+ break;
+ }
+ }
+ for (int i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
+ int iColumn = column[i];
+ els2[iColumn]=elementByRow[i];
+ }
+ if (good) {
+#if CGL_DEBUG
+ bool found=false;
+#endif
+ for (int i=0;i<n;i++) {
+ int iColumn = ind3[i];
+ if (oneFixStart_[iColumn]>=0) {
+ /* I (JJF) don't think this is valid for more than one clique
+ Best would be to choose largest set of additions - but that means code
+ and I don't really understand existing code
+ */
+ bool skipClique=false;
+ for (int j=oneFixStart_[iColumn];j<zeroFixStart_[iColumn];j++) {
+ if (skipClique)
+ break;
+ int iClique = whichClique_[j];
+ for (int k=cliqueStart_[iClique];k<cliqueStart_[iClique+1];k++) {
+ int jColumn = sequenceInCliqueEntry(cliqueEntry_[k]);
+ if (!els[jColumn]&&els2[jColumn]) {
+ assert (jColumn!=iColumn);
+ if (!complement_[jColumn]&&oneFixesInCliqueEntry(cliqueEntry_[k])) {
+ //if (els2[iColumn]<0.0||els2[jColumn]<0.0)
+ //printf("true els %g (c%d) and %g (c%d)\n",
+ // els2[iColumn],complement_[iColumn],
+ // els2[jColumn],complement_[jColumn]);
+ if (fabs(els2[jColumn])>=fabs(els2[iColumn])) {
+ skipClique=true;
+#if CGL_DEBUG
+ if (!found) {
+ found=true;
+ printf("Good cut can be improved");
+ for (int i=0;i<n;i++)
+ printf("(%d,%g) ",ind3[i],els3[i]);
+ //printf("<= %g\n",b);
+ }
+ printf("can add! %d %d\n",iColumn,jColumn);
+#endif
+ goodCut=1;
+#if 1
+ els[jColumn]=els[iColumn];
+ cut.insert(jColumn,els[jColumn]);
+ // recompute as may have changed
+ ind3 = cut.getIndices();
+#endif
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // zero out
+ n = cut.getNumElements();
+ ind3 = cut.getIndices();
+ for (int i=0;i<n;i++)
+ els[ind3[i]]=0.0;
+ for (int i=rowStart[whichRow_];i<rowStart[whichRow_]+rowLength[whichRow_];i++) {
+ int iColumn = column[i];
+ els2[iColumn]=0.0;
+ }
+ }
+#endif
+ return goodCut;
+}
//-------------------------------------------------------------------
// A goto-less implementation of the Horowitz-Sahni exact solution
@@ -3669,12 +3680,12 @@ CglKnapsackCover::CglKnapsackCover (const CglKnapsackCover & source) :
numberCliques_=source.numberCliques_;
numberColumns_=source.numberColumns_;
if (numberCliques_) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
CoinMemcpyN(source.cliqueType_,numberCliques_,cliqueType_);
cliqueStart_ = new int [numberCliques_+1];
CoinMemcpyN(source.cliqueStart_,(numberCliques_+1),cliqueStart_);
int n = cliqueStart_[numberCliques_];
- cliqueEntry_ = new cliqueEntry [n];
+ cliqueEntry_ = new CliqueEntry [n];
CoinMemcpyN(source.cliqueEntry_,n,cliqueEntry_);
oneFixStart_ = new int [numberColumns_];
CoinMemcpyN(source.oneFixStart_,numberColumns_,oneFixStart_);
@@ -3748,12 +3759,12 @@ CglKnapsackCover::operator=(const CglKnapsackCover& rhs)
numberCliques_=rhs.numberCliques_;
numberColumns_=rhs.numberColumns_;
if (numberCliques_) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
CoinMemcpyN(rhs.cliqueType_,numberCliques_,cliqueType_);
cliqueStart_ = new int [numberCliques_+1];
CoinMemcpyN(rhs.cliqueStart_,(numberCliques_+1),cliqueStart_);
int n = cliqueStart_[numberCliques_];
- cliqueEntry_ = new cliqueEntry [n];
+ cliqueEntry_ = new CliqueEntry [n];
CoinMemcpyN(rhs.cliqueEntry_,n,cliqueEntry_);
oneFixStart_ = new int [numberColumns_];
CoinMemcpyN(rhs.oneFixStart_,numberColumns_,oneFixStart_);
@@ -3983,9 +3994,9 @@ CglKnapsackCover::createCliques( OsiSolverInterface & si,
}
}
if (numberCliques_>0) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
cliqueStart_ = new int [numberCliques_+1];
- cliqueEntry_ = new cliqueEntry [numberEntries];
+ cliqueEntry_ = new CliqueEntry [numberEntries];
oneFixStart_ = new int [numberColumns_];
zeroFixStart_ = new int [numberColumns_];
endFixStart_ = new int [numberColumns_];
diff --git a/src/CglKnapsackCover/CglKnapsackCover.hpp b/src/CglKnapsackCover/CglKnapsackCover.hpp
index 1ccd517..b0e81d6 100644
--- a/src/CglKnapsackCover/CglKnapsackCover.hpp
+++ b/src/CglKnapsackCover/CglKnapsackCover.hpp
@@ -1,4 +1,4 @@
-// $Id: CglKnapsackCover.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglKnapsackCover.hpp 1201 2014-03-07 17:24:04Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -226,7 +226,9 @@ void liftUpDownAndUncomplementAndAdd(
double const *ww,
double & z,
int * x);
-
+ /// For testing gub stuff
+ int gubifyCut(CoinPackedVector & cut);
+public:
/** Creates cliques for use by probing.
Only cliques >= minimumSize and < maximumSize created
Can also try and extend cliques as a result of probing (root node).
@@ -234,6 +236,7 @@ void liftUpDownAndUncomplementAndAdd(
*/
int createCliques( OsiSolverInterface & si,
int minimumSize=2, int maximumSize=100, bool extendCliques=false);
+private:
/// Delete all clique information
void deleteCliques();
//@}
@@ -267,12 +270,12 @@ void liftUpDownAndUncomplementAndAdd(
/// Clique type
typedef struct {
unsigned int equality:1; // nonzero if clique is ==
- } cliqueType;
- cliqueType * cliqueType_;
+ } CliqueType;
+ CliqueType * cliqueType_;
/// Start of each clique
int * cliqueStart_;
/// Entries for clique
- cliqueEntry * cliqueEntry_;
+ CliqueEntry * cliqueEntry_;
/** Start of oneFixes cliques for a column in matrix or -1 if not
in any clique */
int * oneFixStart_;
@@ -289,7 +292,7 @@ void liftUpDownAndUncomplementAndAdd(
So first clique mentioned in row is always 0. If no entries for row
then no cliques. If sequence > numberColumns then not in clique.
*/
- //cliqueEntry * cliqueRow_;
+ //CliqueEntry * cliqueRow_;
/// cliqueRow_ starts for each row
//int * cliqueRowStart_;
//@}
diff --git a/src/CglKnapsackCover/CglKnapsackCoverTest.cpp b/src/CglKnapsackCover/CglKnapsackCoverTest.cpp
index 69ae19a..a9e02c4 100644
--- a/src/CglKnapsackCover/CglKnapsackCoverTest.cpp
+++ b/src/CglKnapsackCover/CglKnapsackCoverTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglKnapsackCoverTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglKnapsackCoverTest.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglKnapsackCover/Makefile.in b/src/CglKnapsackCover/Makefile.in
index 51fc63a..0ca5285 100644
--- a/src/CglKnapsackCover/Makefile.in
+++ b/src/CglKnapsackCover/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglLandP/CglLandP.cpp b/src/CglLandP/CglLandP.cpp
index be32a4e..1b8db05 100644
--- a/src/CglLandP/CglLandP.cpp
+++ b/src/CglLandP/CglLandP.cpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 07/21/05
//
-// $Id: CglLandP.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandP.cpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandP.hpp b/src/CglLandP/CglLandP.hpp
index 2bc27b3..64447e7 100644
--- a/src/CglLandP/CglLandP.hpp
+++ b/src/CglLandP/CglLandP.hpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 07/21/05
//
-// $Id: CglLandP.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandP.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPMessages.cpp b/src/CglLandP/CglLandPMessages.cpp
index 5fbeac6..8505a0c 100644
--- a/src/CglLandP/CglLandPMessages.cpp
+++ b/src/CglLandP/CglLandPMessages.cpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 21/07/05
//
-// $Id: CglLandPMessages.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPMessages.cpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPMessages.hpp b/src/CglLandP/CglLandPMessages.hpp
index be2c7c9..aab24c4 100644
--- a/src/CglLandP/CglLandPMessages.hpp
+++ b/src/CglLandP/CglLandPMessages.hpp
@@ -4,7 +4,7 @@
// CNRS, Aix-Marseille Universites
// Date: 02/23/08
//
-// $Id: CglLandPMessages.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPMessages.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPSimplex.cpp b/src/CglLandP/CglLandPSimplex.cpp
index 79a7e8d..9b5c0bb 100644
--- a/src/CglLandP/CglLandPSimplex.cpp
+++ b/src/CglLandP/CglLandPSimplex.cpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 21/07/05
//
-// $Id: CglLandPSimplex.cpp 1152 2013-10-29 14:52:29Z forrest $
+// $Id: CglLandPSimplex.cpp 1153 2013-10-29 14:54:34Z forrest $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPSimplex.hpp b/src/CglLandP/CglLandPSimplex.hpp
index 02c0cd3..e572c43 100644
--- a/src/CglLandP/CglLandPSimplex.hpp
+++ b/src/CglLandP/CglLandPSimplex.hpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 21/07/05
//
-// $Id: CglLandPSimplex.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPSimplex.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPTabRow.cpp b/src/CglLandP/CglLandPTabRow.cpp
index 5ff0443..2a12277 100644
--- a/src/CglLandP/CglLandPTabRow.cpp
+++ b/src/CglLandP/CglLandPTabRow.cpp
@@ -4,7 +4,7 @@
// CNRS, Aix-Marseille Universites
// Date: 02/23/08
//
-// $Id: CglLandPTabRow.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPTabRow.cpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPTabRow.hpp b/src/CglLandP/CglLandPTabRow.hpp
index bbac155..88ef4c2 100644
--- a/src/CglLandP/CglLandPTabRow.hpp
+++ b/src/CglLandP/CglLandPTabRow.hpp
@@ -4,7 +4,7 @@
// CNRS, Aix-Marseille Universites
// Date: 02/23/08
//
-// $Id: CglLandPTabRow.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPTabRow.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPTest.cpp b/src/CglLandP/CglLandPTest.cpp
index 18603cd..5c87bf8 100644
--- a/src/CglLandP/CglLandPTest.cpp
+++ b/src/CglLandP/CglLandPTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglLandPTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPTest.cpp 1122 2013-04-06 20:39:53Z stefan $
// Copyright (C) 2000-2009, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglLandP/CglLandPUtils.cpp b/src/CglLandP/CglLandPUtils.cpp
index 07b4737..b5a2306 100644
--- a/src/CglLandP/CglLandPUtils.cpp
+++ b/src/CglLandP/CglLandPUtils.cpp
@@ -4,7 +4,7 @@
// CNRS, Aix-Marseille Universites
// Date: 02/23/08
//
-// $Id: CglLandPUtils.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPUtils.cpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPUtils.hpp b/src/CglLandP/CglLandPUtils.hpp
index 79af174..5317f38 100644
--- a/src/CglLandP/CglLandPUtils.hpp
+++ b/src/CglLandP/CglLandPUtils.hpp
@@ -4,7 +4,7 @@
// CNRS, Aix-Marseille Universites
// Date: 02/23/08
//
-// $Id: CglLandPUtils.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPUtils.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
diff --git a/src/CglLandP/CglLandPValidator.cpp b/src/CglLandP/CglLandPValidator.cpp
index ce729cb..939fbf8 100644
--- a/src/CglLandP/CglLandPValidator.cpp
+++ b/src/CglLandP/CglLandPValidator.cpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 11/22/05
//
-// $Id: CglLandPValidator.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPValidator.cpp 1302 2015-08-14 15:48:32Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
@@ -23,8 +23,16 @@
namespace LAP
{
-std::vector<std::string> Validator::rejections_;
+const char* Validator::rejections_[DummyEnd] =
+{
+ "Cut was accepted.",
+ "Violation of the cut is too small.",
+ "There is a small coefficient we can not get rid off.",
+ "Dynamic of coefficient is too important.",
+ "Cut is too dense.",
+ "Cleaned cut is empty."
+};
/** Clean an OsiCut
\return 1 if min violation is too small
@@ -304,24 +312,6 @@ Validator::Validator(double maxFillIn,
scale_(scale),
rhsScale_(rhsScale),
numRejected_(DummyEnd,0)
-{
- fillRejectionReasons();
-}
-
-
-void
-Validator::fillRejectionReasons()
-{
- if (rejections_.size() == 0)
- {
- rejections_.resize(DummyEnd) ;
- rejections_[NoneAccepted] = "Cut was accepted";
- rejections_[SmallViolation] = "Violation of the cut is too small ";
- rejections_[SmallCoefficient] = "There is a small coefficient we can not get rid off.";
- rejections_[BigDynamic] = "Dynamic of coefficinet is too important. ";
- rejections_[DenseCut] = "Cut is too dense.";
- rejections_[EmptyCut] = "Cleaned cut is empty";
- }
-}
+{ }
} /* Ends namespace LAP.*/
diff --git a/src/CglLandP/CglLandPValidator.hpp b/src/CglLandP/CglLandPValidator.hpp
index 13d1a69..b9e363d 100644
--- a/src/CglLandP/CglLandPValidator.hpp
+++ b/src/CglLandP/CglLandPValidator.hpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 11/22/05
//
-// $Id: CglLandPValidator.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglLandPValidator.hpp 1302 2015-08-14 15:48:32Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//---------------------------------------------------------------------------
@@ -93,11 +93,11 @@ public:
}
/** @} */
- const std::string& failureString(RejectionsReasons code) const
+ const char* failureString(RejectionsReasons code) const
{
return rejections_[static_cast<int> (code)];
}
- const std::string& failureString(int code) const
+ const char* failureString(int code) const
{
return rejections_[ code];
}
@@ -110,7 +110,6 @@ public:
return numRejected_[ code];
}
private:
- static void fillRejectionReasons();
/** max percentage of given formulation fillIn should be accepted for cut fillin.*/
double maxFillIn_;
/** max ratio between smallest and biggest coefficient */
@@ -122,7 +121,7 @@ private:
/** Scale of right-hand-side.*/
double rhsScale_;
/** Strings explaining reason for rejections */
- static std::vector<std::string> rejections_;
+ static const char* rejections_[DummyEnd];
/** Number of cut rejected for each of the reasons.*/
std::vector<int> numRejected_;
};
diff --git a/src/CglLandP/Makefile.in b/src/CglLandP/Makefile.in
index ddb4e82..9654b1d 100644
--- a/src/CglLandP/Makefile.in
+++ b/src/CglLandP/Makefile.in
@@ -152,6 +152,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -332,6 +336,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglLiftAndProject/Makefile.in b/src/CglLiftAndProject/Makefile.in
index 471e01f..ae9d0fe 100644
--- a/src/CglLiftAndProject/Makefile.in
+++ b/src/CglLiftAndProject/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglMessage.cpp b/src/CglMessage.cpp
index ad1259e..3e45884 100644
--- a/src/CglMessage.cpp
+++ b/src/CglMessage.cpp
@@ -1,4 +1,4 @@
-// $Id: CglMessage.cpp 1113 2013-04-06 13:28:20Z stefan $
+// $Id: CglMessage.cpp 1230 2014-11-18 11:10:45Z forrest $
// Copyright (C) 2005, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -20,7 +20,7 @@ static Cgl_message us_english[]=
{CGL_FIXED,2,1,"%d variables fixed"},
{CGL_PROCESS_STATS,3,1,"%d fixed, %d tightened bounds, %d strengthened rows, %d substitutions"},
{CGL_SLACKS,8,1,"%d inequality constraints converted to equality constraints"},
- {CGL_PROCESS_STATS2,4,1,"processed model has %d rows, %d columns (%d integer) and %d elements"},
+ {CGL_PROCESS_STATS2,4,1,"processed model has %d rows, %d columns (%d integer (%d of which binary)) and %d elements"},
{CGL_PROCESS_SOS1,5,1,"%d SOS with %d members"},
{CGL_PROCESS_SOS2,6,2,"%d SOS (%d members out of %d) with %d overlaps - too much overlap or too many others"},
{CGL_UNBOUNDED,7,1,"Continuous relaxation is unbounded!"},
diff --git a/src/CglMessage.hpp b/src/CglMessage.hpp
index abebe2c..5f080e8 100644
--- a/src/CglMessage.hpp
+++ b/src/CglMessage.hpp
@@ -1,4 +1,4 @@
-// $Id: CglMessage.hpp 1113 2013-04-06 13:28:20Z stefan $
+// $Id: CglMessage.hpp 1105 2013-03-19 12:43:52Z forrest $
// Copyright (C) 2005, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglMixedIntegerRounding/Makefile.in b/src/CglMixedIntegerRounding/Makefile.in
index 1e69040..618a7f1 100644
--- a/src/CglMixedIntegerRounding/Makefile.in
+++ b/src/CglMixedIntegerRounding/Makefile.in
@@ -136,6 +136,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -316,6 +320,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglMixedIntegerRounding2/CglMixedIntegerRounding2.cpp b/src/CglMixedIntegerRounding2/CglMixedIntegerRounding2.cpp
index 920896a..177b0a3 100644
--- a/src/CglMixedIntegerRounding2/CglMixedIntegerRounding2.cpp
+++ b/src/CglMixedIntegerRounding2/CglMixedIntegerRounding2.cpp
@@ -19,7 +19,11 @@
#include "CoinPackedVector.hpp"
#include "CglMixedIntegerRounding2.hpp"
-
+//#define CGL_DEBUG2 2
+#if CGL_DEBUG2
+static int xxxxxx=0;
+static int yyyyyy=1687;
+#endif
//-----------------------------------------------------------------------------
// Generate Mixed Integer Rounding inequality
//-------------------------------------------------------------------
@@ -838,10 +842,31 @@ CglMixedIntegerRounding2::generateMirCuts(
// if a cut was found, insert it into cs
if (hasCut) {
+ // look at cut to see if unstable
+ const CoinPackedVector & row = cMirCut.row();
+ int n=row.getNumElements();
+ const double * elements = row.getElements();
+ double largest = 0.0;
+ double smallest = COIN_DBL_MAX;
+ for (int i=0;i<n;i++) {
+ double value = fabs(elements[i]);
+ largest=CoinMax(largest,value);
+ smallest=CoinMin(smallest,value);
+ }
+ if (largest>1.0e8*smallest||largest>1.0e7||smallest<1.0e-5) {
+#if CGL_DEBUG2
+ printf("Unstable Mixed cut %g <= ",cMirCut.lb());
+ const int * columns = row.getIndices();
+ for (int i=0;i<n;i++)
+ printf("(%d,%g) ",columns[i],elements[i]);
+ printf("<= %g\n",cMirCut.ub());
+#endif
+ } else {
#if CGL_DEBUG
- std::cout << "MIR cut generated " << std::endl;
+ std::cout << "MIR cut generated " << std::endl;
#endif
- cs.insert(cMirCut);
+ cs.insert(cMirCut);
+ }
}
}
@@ -1080,7 +1105,14 @@ CglMixedIntegerRounding2::boundSubstitution(
continue;
}
- if (fabs(coefCol) < EPSILON_) continue;
+ if (fabs(coefCol) < EPSILON_) {
+ // relax as far as possible
+ if (coefCol<0.0)
+ rhsMixedKnapsack -= coefCol*colUpperBound[indCol];
+ else
+ rhsMixedKnapsack -= coefCol*colLowerBound[indCol];
+ continue;
+ }
// set the coefficients of the integer variables
if ( (indCol < numCols_) && (integerType_[indCol]) ) {
// Copy the integer variable to the vector mixedKnapsack
@@ -1430,21 +1462,30 @@ CglMixedIntegerRounding2::cMirSeparation(
double cutRHS = rhsBestCut;
double violation = 0.0;
double normCut = 0.0;
- //double smallest=COIN_DBL_MAX;
+#if CGL_DEBUG2
+ double smallest=COIN_DBL_MAX;
+#endif
double largest=0.0;
// Also weaken by small coefficients
for ( j = 0; j < cutLen; ++j) {
int column = cutInd[j];
double value = cutCoef[column];
- //smallest=CoinMin(smallest,fabs(value));
+#if CGL_DEBUG2
+ smallest=CoinMin(smallest,fabs(value));
+ normCut += value * value;
+#endif
largest=CoinMax(largest,fabs(value));
- //normCut += value * value;
}
- //normCut=sqrt(normCut);
- //printf("smallest %g largest %g norm %g\n",
- // smallest,largest,normCut);
double testValue=CoinMax(1.0e-6*largest,1.0e-12);
- //normCut=0.0;
+#if CGL_DEBUG2
+ normCut=sqrt(normCut);
+ printf("smallest %g largest %g norm %g - %d elements - rhs %g - %d\n",
+ smallest,largest,normCut,cutLen,cutRHS,xxxxxx);
+ xxxxxx++;
+ if (xxxxxx==yyyyyy)
+ printf("trouble\n");
+ normCut=0.0;
+#endif
int n=0;
for ( j = 0; j < cutLen; ++j) {
int column = cutInd[j];
@@ -1453,15 +1494,44 @@ CglMixedIntegerRounding2::cMirSeparation(
violation += value * xlp[column];
normCut += value * value;
cutInd[n++]=column;
+#if CGL_DEBUG2
+ printf("taking %d %g\n",column,value);
+#endif
} else if (value) {
cutCoef[column]=0.0;
// Weaken
if (value>0.0) {
+#if CGL_DEBUG2
+ printf("not taking %d %g - lb %g - rhs -> %g\n",column,value,
+ colLowerBound[column],
+ cutRHS - value*colLowerBound[column]);
+#endif
// Allow for at lower bound
- cutRHS -= value*colLowerBound[column];
+ double modification = value*colLowerBound[column];
+ if (colLowerBound[column]>0.0) {
+#if CGL_DEBUG2
+ printf("weakening modification from %g to zero\n",
+ modification);
+#endif
+ modification=0.0;
+ }
+ cutRHS -= modification;
} else {
+#if CGL_DEBUG2
+ printf("not taking %d %g - ub %g - rhs -> %g\n",column,value,
+ colUpperBound[column],
+ cutRHS - value*colUpperBound[column]);
+#endif
// Allow for at upper bound
- cutRHS -= value*colUpperBound[column];
+ double modification = value*colUpperBound[column];
+ if (colUpperBound[column]<0.0) {
+#if CGL_DEBUG2
+ printf("weakening modification from %g to zero\n",
+ modification);
+#endif
+ modification=0.0;
+ }
+ cutRHS -= modification;
}
}
}
diff --git a/src/CglMixedIntegerRounding2/Makefile.in b/src/CglMixedIntegerRounding2/Makefile.in
index fa04ebc..0a80fff 100644
--- a/src/CglMixedIntegerRounding2/Makefile.in
+++ b/src/CglMixedIntegerRounding2/Makefile.in
@@ -136,6 +136,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -316,6 +320,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglOddHole/CglOddHole.cpp b/src/CglOddHole/CglOddHole.cpp
index de6d60b..c550a0d 100644
--- a/src/CglOddHole/CglOddHole.cpp
+++ b/src/CglOddHole/CglOddHole.cpp
@@ -1,4 +1,4 @@
-// $Id: CglOddHole.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglOddHole.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglOddHole/CglOddHole.hpp b/src/CglOddHole/CglOddHole.hpp
index 4ee6795..3b80caa 100644
--- a/src/CglOddHole/CglOddHole.hpp
+++ b/src/CglOddHole/CglOddHole.hpp
@@ -1,4 +1,4 @@
-// $Id: CglOddHole.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglOddHole.hpp 1119 2013-04-06 20:24:18Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglOddHole/CglOddHoleTest.cpp b/src/CglOddHole/CglOddHoleTest.cpp
index a0e5b85..dc198df 100644
--- a/src/CglOddHole/CglOddHoleTest.cpp
+++ b/src/CglOddHole/CglOddHoleTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglOddHoleTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglOddHoleTest.cpp 1122 2013-04-06 20:39:53Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglOddHole/Makefile.in b/src/CglOddHole/Makefile.in
index c84b5e9..5d38324 100644
--- a/src/CglOddHole/Makefile.in
+++ b/src/CglOddHole/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglParam.hpp b/src/CglParam.hpp
index 56d73ac..4463ef5 100644
--- a/src/CglParam.hpp
+++ b/src/CglParam.hpp
@@ -5,7 +5,7 @@
// email: fmargot at andrew.cmu.edu
// Date: 11/24/06
//
-// $Id: CglParam.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglParam.hpp 1122 2013-04-06 20:39:53Z stefan $
//
// This code is licensed under the terms of the Eclipse Public License (EPL).
//-----------------------------------------------------------------------------
diff --git a/src/CglPreProcess/CglPreProcess.cpp b/src/CglPreProcess/CglPreProcess.cpp
index 7dce0ff..c6b9eb2 100644
--- a/src/CglPreProcess/CglPreProcess.cpp
+++ b/src/CglPreProcess/CglPreProcess.cpp
@@ -19,6 +19,7 @@
#include "CglCutGenerator.hpp"
#include "CoinTime.hpp"
#include "CoinSort.hpp"
+#include "CoinDenseFactorization.hpp"
#include "CoinBuild.hpp"
#include "CoinHelperFunctions.hpp"
#include "CoinWarmStartBasis.hpp"
@@ -26,6 +27,7 @@
#include "CglProbing.hpp"
#include "CglDuplicateRow.hpp"
#include "CglClique.hpp"
+//#define PRINT_DEBUG 1
//#define COIN_DEVELOP 1
#ifdef COIN_DEVELOP
static int whichMps=0;
@@ -256,7 +258,7 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
}
}
}
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("Current number of integers is %d\n",currentNumber);
#endif
// now look at continuous
@@ -321,14 +323,18 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
bool equality=false;
int nC=0;
int xxxx=0;
+#if CBC_USEFUL_PRINTING
bool badCount=false;
+#endif
for (CoinBigIndex j=start;j<end;j++) {
int iRow = row[j];
if (count[iRow]>1) {
singletonRow=false;
//printf("col %d row%d element %g - row count %d\n",iColumn,iRow,element[j],count[iRow]);
+#if CBC_USEFUL_PRINTING
if (count[iRow]==999999)
badCount=true;
+#endif
if (element[j]==1.0) {
if ((xxxx&1)==0)
xxxx |= 1;
@@ -373,9 +379,11 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
}
}
}
+#if CBC_USEFUL_PRINTING
if (!model->isInteger(iColumn)&&false)
printf("%d has %d rows with >1 - state network %s interaction %s\n",iColumn,nC,xxxx>3 ? "bad" : "good",
badCount ? "too much" : "ok");
+#endif
// If not good here then mark rows
if (!thisGood) {
for (CoinBigIndex j=start;j<end;j++) {
@@ -800,9 +808,11 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
size[iRow]++;
}
}
+#if CBC_USEFUL_PRINTING
for (i=0;i<nRowB;i++)
if (size[i]<2)
printf("%d entries in row %d\n",size[i],i);
+#endif
}
for (i=0;i<nColB;i++)
whichCol[i]=i;
@@ -987,7 +997,9 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
goodInteger=true;
}
if (goodInteger) {
+#if CBC_USEFUL_PRINTING
printf("Block %d can be integer\n",iBlock);
+#endif
for (i=0;i<nCol;i++) {
if (columnBlock[i]==iBlock) {
int iBack = back[i];
@@ -1014,12 +1026,12 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
}
numberIntegers=numberNonZero;
if (allGood&&numberObj) {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
int numberPossible = 0;
#endif
for (iColumn=0;iColumn<numberColumns;iColumn++) {
if (upper[iColumn]>lower[iColumn]&&objective[iColumn]&&!model->isInteger(iColumn)) {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
numberPossible++;
#endif
if (upper[iColumn]<=lower[iColumn]+10) {
@@ -1028,16 +1040,16 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
}
}
}
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("ZZZZYY CglPreProcess analysis says all (%d) continuous with costs could be made integer - %d were\n",numberPossible,numberIntegers-numberNonZero);
#endif
}
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (numberZero)
printf("ZZZZYY %d continuous with zero cost were made integer\n",numberZero);
#endif
numberIntegers += numberZero;
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (numberEq||numberEqI)
printf("ZZZZYY %d rows made equality from continuous, %d from integer\n",numberEq,numberEqI);
#endif
@@ -1049,10 +1061,12 @@ static int makeIntegers2(OsiSolverInterface * model,int mode)
delete [] count;
return (totalNumberIntegers);
}
-//#define CGL_WRITEMPS
+//#define CGL_WRITEMPS 1
#ifdef CGL_WRITEMPS
+#if CGL_WRITEMPS>1
extern double * debugSolution;
extern int debugNumberColumns;
+#endif
static int mpsNumber=0;
static void writeDebugMps(const OsiSolverInterface * solver,
const char * where,
@@ -1061,8 +1075,10 @@ static void writeDebugMps(const OsiSolverInterface * solver,
mpsNumber++;
char name[20];
sprintf(name,"presolve%2.2d.mps",mpsNumber);
- printf("saving %s from %s\n",name,where);
+ printf("saving %s from %s - %d row, %d columns\n",
+ name,where,solver->getNumRows(),solver->getNumCols());
solver->writeMpsNative(name,NULL,NULL,0,1,0);
+#if CGL_WRITEMPS>1
if (pinfo&&debugSolution) {
int n = solver->getNumCols();
if (n<debugNumberColumns) {
@@ -1099,6 +1115,7 @@ static void writeDebugMps(const OsiSolverInterface * solver,
newSolver->getObjValue());
delete newSolver;
}
+#endif
}
#else
#define writeDebugMps(x,y,z)
@@ -1108,15 +1125,23 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
int makeEquality, int numberPasses,
int tuning)
{
-#if 0
+#ifdef CGL_WRITEMPS
bool rcdActive = true ;
std::string modelName ;
model.getStrParam(OsiProbName,modelName) ;
+ writeDebugMps(&model,"IPP:preProcessNonDefault",0) ;
std::cout
<< " Attempting to activate row cut debugger for "
<< modelName << " ... " ;
- writeDebugMps(&model,"IPP:preProcessNonDefault",0) ;
- model.activateRowCutDebugger(modelName.c_str()) ;
+ if (!appData_) {
+ model.activateRowCutDebugger(modelName.c_str()) ;
+ } else {
+ // see if passed in
+ double * solution = CoinCopyOfArray(reinterpret_cast<double *>(appData_),
+ model.getNumCols());
+ model.activateRowCutDebugger(solution);
+ delete [] solution;
+ }
if (model.getRowCutDebugger())
std::cout << "on optimal path." << std::endl ;
else if (model.getRowCutDebuggerAlways())
@@ -1132,6 +1157,11 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
}
# endif
originalModel_ = & model;
+ if (tuning>=1000000) {
+ numberPasses=tuning/1000000;
+ tuning %= 1000000;
+ //minimumLength = tuning;
+ }
numberSolvers_ = numberPasses;
model_ = new OsiSolverInterface * [numberSolvers_];
modifiedModel_ = new OsiSolverInterface * [numberSolvers_];
@@ -1141,8 +1171,6 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
modifiedModel_[i]=NULL;
presolve_[i]=NULL;
}
- // Put presolve option on
- tuning |= 8;
// clear original
delete [] originalColumn_;
delete [] originalRow_;
@@ -1165,14 +1193,16 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
else if (numberPasses<=2)
numberModifiedPasses=2; // fairly lightweight preprocessing
if (tuning>=10000) {
- numberModifiedPasses=(tuning-10000)/10000;
+ numberModifiedPasses=tuning/10000;
tuning %= 10000;
//minimumLength = tuning;
}
+ if ((tuning&1)!=0)
+ options_ |= 16; // heavy stuff
//bool heavyProbing = (tuning&1)!=0;
int makeIntegers = (tuning&6)>>1;
// See if we want to do initial presolve
- int doInitialPresolve = (tuning&8)>>3;
+ int doInitialPresolve = 1;
if (numberSolvers_<2)
doInitialPresolve=0;
// We want to add columns
@@ -1329,7 +1359,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
if (nBadObj*10<nGoodObj) {
justOnesWithObj=true;
makeEquality=3;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("trying SOS as all costs there\n");
#endif
}
@@ -1940,12 +1970,12 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
if (move) {
// can move objective
numberMoved++;
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (rhs)
printf("ZZZ on col %d move %g offset %g\n",
jColumn,move,move*rhs);
#endif
- offset += move*rhs;
+ offset -= move*rhs;
for (CoinBigIndex j=rowStart[iRow];j<rowStart[iRow]+rowLength[iRow];j++) {
int iColumn = column[j];
if (iColumn!=jColumn) {
@@ -1960,7 +1990,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
}
}
}
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (numberMoved)
printf("ZZZ %d costs moved\n",numberMoved);
#endif
@@ -2058,14 +2088,49 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
}
OsiSolverInterface * returnModel=NULL;
int numberChanges;
- if ((tuning&128)!=0) {
- // take out cliques
- OsiSolverInterface * newSolver=cliqueIt(*startModel2,0.0001);
+ if ((tuning&(128+1))!=0) {
+ OsiSolverInterface * newSolver=NULL;
+ if ((tuning&2048)!=0) {
+ CglProbing generator1;
+ generator1.setUsingObjective(false);
+ generator1.setMaxPass(1);
+ generator1.setMaxPassRoot(1);
+ generator1.setMaxLook(100);
+ generator1.setRowCuts(3);
+ generator1.setMaxElements(300);
+ generator1.setMaxProbeRoot(startModel2->getNumCols());
+ CoinThreadRandom randomGenerator;
+ CglTreeProbingInfo info(startModel2);
+ info.level = 0;
+ info.formulation_rows = startModel2->getNumRows();
+ info.inTree = false;
+ info.options = !numberProhibited_ ? 0 : 2;
+ info.randomNumberGenerator=&randomGenerator;
+ info.pass=4;
+ generator1.setMode(8);
+ OsiCuts cs;
+ generator1.generateCutsAndModify(*startModel2,cs,&info);
+ OsiSolverInterface * temp = generator1.cliqueModel(startModel2,2);
+ OsiSolverInterface * temp2 = cliqueIt(*temp,0.0001);
+ delete temp;
+ if (temp2) {
+ if (temp2->getNumRows()<startModel2->getNumRows()) {
+ delete newSolver;
+ newSolver = temp2;
+ } else {
+ delete temp2;
+ }
+ }
+ } else {
+ // take out cliques
+ newSolver=cliqueIt(*startModel2,0.0001);
+ }
if (newSolver) {
if (startModel2 == modifiedModel_[0])
modifiedModel_[0]=newSolver;
delete startModel2;
startModel2=newSolver;
+ newSolver->setHintParam(OsiDoDualInInitial, true, OsiHintTry);
newSolver->initialSolve();
assert (newSolver->isProvenOptimal());
//printf("new size %d rows, %d columns\n",
@@ -2108,7 +2173,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
if (!startModel2->isProvenOptimal()) {
if (!startModel2->isProvenDualInfeasible()) {
handler_->message(CGL_INFEASIBLE,messages_)<< CoinMessageEol ;
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
startModel2->writeMps("infeas");
#endif
} else {
@@ -2139,7 +2204,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
tuning &= ~USECGLCLIQUE;
if ((options_&4)!=0)
allPlusOnes=false;
- if (allPlusOnes||(tuning&USECGLCLIQUE)!=0) {
+ if ((allPlusOnes&&(options_&8)==0)||(tuning&USECGLCLIQUE)!=0) {
#if 1
// put at beginning
int nAdd= ((tuning&(64+USECGLCLIQUE))==64+USECGLCLIQUE&&allPlusOnes) ? 2 : 1;
@@ -2158,7 +2223,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
cliqueGen->setMinViolation(-3.0);
generator_[0]=cliqueGen;
}
- if (allPlusOnes) {
+ if ((allPlusOnes||(tuning&256)!=0)&&(options_&4)==0) {
CglDuplicateRow * dupCuts =new CglDuplicateRow(oldModel);
if ((tuning&256)!=0)
dupCuts->setMaximumDominated(numberColumns);
@@ -2235,12 +2300,14 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
integer2 = valueB;
}
}
+#if CBC_USEFUL_PRINTING
if (debug&&0) {
printf("%d %d elements%selement %g and %d %d elements%selement %g <= %g\n",
iColumn1,columnLength[iColumn1],integer1 ? " (integer) " : " ",value1,
iColumn2,columnLength[iColumn2],integer2 ? " (integer) " : " ",value2,
upper);
}
+#endif
if (debug>0) {
if (value1>0.0&&objective[iColumn1]*direction<0.0) {
// will push as high as possible so make ==
@@ -2357,11 +2424,20 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
// maybe we can fix some
int numberFixed =
reducedCostFix(*presolvedModel);
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (numberFixed)
printf("%d variables fixed on reduced cost\n",numberFixed);
#endif
+#if CGL_WRITEMPS
+ const OsiRowCutDebugger *debugger = presolvedModel->getRowCutDebugger();
+ if (debugger)
+ printf("Contains optimal before modified\n") ;
+#endif
OsiSolverInterface * newModel = modified(presolvedModel,constraints,numberChanges,iPass-doInitialPresolve,numberModifiedPasses);
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(newModel->getRowCutDebugger());
+#endif
returnModel=newModel;
if (!newModel) {
break;
@@ -2370,7 +2446,7 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
oldModel=newModel;
writeDebugMps(newModel,"ordinary3",NULL);
if (!numberChanges&&!numberFixed) {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("exiting after pass %d of %d\n",iPass,numberSolvers_);
#endif
numberSolvers_=iPass+1;
@@ -2378,10 +2454,19 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
}
}
}
+#if CGL_WRITEMPS
+ const OsiRowCutDebugger *debugger = returnModel->getRowCutDebugger();
+ if (debugger)
+ printf("Contains optimal before tighten\n") ;
+#endif
if (returnModel) {
if (returnModel->getNumRows()) {
// tighten bounds
int infeas = tightenPrimalBounds(*returnModel);
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
if (infeas) {
delete returnModel;
for (int iPass=0;iPass<numberSolvers_;iPass++) {
@@ -2610,13 +2695,36 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
delete [] mark;
delete [] sosRow;
}
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
if (returnModel) {
if (makeIntegers)
makeIntegers2(returnModel,makeIntegers);
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
+ numberIntegers=0;
+ int numberBinary=0;
+ int numberColumns=returnModel->getNumCols();
+ for (int i=0;i<numberColumns;i++) {
+ if (returnModel->isInteger(i)) {
+ numberIntegers++;
+ if (returnModel->isBinary(i)) {
+ numberBinary++;
+ }
+ }
+ }
handler_->message(CGL_PROCESS_STATS2,messages_)
- <<returnModel->getNumRows()<<returnModel->getNumCols()
- <<numberIntegers<<returnModel->getNumElements()
+ <<returnModel->getNumRows()<<numberColumns
+ <<numberIntegers<<numberBinary<<returnModel->getNumElements()
<<CoinMessageEol;
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
// If can make some cuts then do so
if (rowType_) {
int numberRows = returnModel->getNumRows();
@@ -2656,6 +2764,10 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
}
}
}
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
#if 0
if (returnModel) {
int numberColumns = returnModel->getNumCols();
@@ -2812,6 +2924,11 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface & model,
//exit(2);
}
#endif
+ writeDebugMps(returnModel,"returnModel",NULL);
+#if CGL_WRITEMPS
+ if (debugger)
+ assert(returnModel->getRowCutDebugger());
+#endif
return returnModel;
}
@@ -3284,7 +3401,7 @@ CglPreProcess::tightenPrimalBounds(OsiSolverInterface & model,double factor)
}
}
if (rhsAdjust) {
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("FFor column %d bounds %g, %g on row %d bounds %g, %g coefficient was changed from %g to %g with rhs adjustment of %g\n",
iColumn,colLower[iColumn],colUpper[iColumn],
iRow,rowLower[iRow],rowUpper[iRow],
@@ -3294,7 +3411,7 @@ CglPreProcess::tightenPrimalBounds(OsiSolverInterface & model,double factor)
model.setRowLower(iRow,rowLower[iRow]-rhsAdjust);
if (rowUpper[iRow]<1.0e20)
model.setRowUpper(iRow,rowUpper[iRow]-rhsAdjust);
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("FFor column %d bounds %g, %g on row %d bounds %g, %g coefficient was changed from %g to %g with rhs adjustment of %g\n",
iColumn,colLower[iColumn],colUpper[iColumn],
iRow,rowLower[iRow],rowUpper[iRow],
@@ -3302,10 +3419,10 @@ CglPreProcess::tightenPrimalBounds(OsiSolverInterface & model,double factor)
#endif
}
element[j]=newValue;
- handler_->message(CGL_ELEMENTS_CHANGED2,messages_)
+ handler_->message(CGL_ELEMENTS_CHANGED2,messages_)
<<iRow<<iColumn<<value<<newValue
<<CoinMessageEol;
-#ifdef CGL_DEBUG
+#if CGL_WRITEMPS
const OsiRowCutDebugger * debugger = model.getRowCutDebugger();
if (debugger&&debugger->numberColumns()==numberColumns) {
const double * optimal = debugger->optimalSolution();
@@ -3362,6 +3479,8 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
saveHint2,saveStrength2);
OsiSolverInterface * clonedCopy=NULL;
double saveObjectiveValue = modelIn.getObjValue();
+ // Make sure cutoff is ignored
+ modelIn.setDblParam(OsiDualObjectiveLimit,1.0e50);
if (!modelIn.isProvenOptimal()) {
CoinWarmStartBasis *slack =
dynamic_cast<CoinWarmStartBasis *>(modelIn.getEmptyWarmStart()) ;
@@ -3424,7 +3543,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
model->setColLower(iColumn,value2);
model->setColUpper(iColumn,value2);
} else {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("NPASS=%d, ipass %d var %d values %g %g %g\n",
numberSolvers_,iPass,iColumn,model->getColLower()[iColumn],
value,model->getColUpper()[iColumn]);
@@ -3469,7 +3588,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
model->setColSolution(solution);
delete [] solution;
}
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
{
int numberColumns = model->getNumCols();
int numberRows = model->getNumRows();
@@ -3513,15 +3632,19 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
if(rowActivity[i]<rowLower[i]) {
if (rowActivity[i]<rowLower[i]-1000.0*primalTolerance) {
feasible=false;
+#if CBC_USEFUL_PRINTING
printf("Bad row %d %g <= %g <= %g\n",
i,rowLower[i],rowActivity[i],rowUpper[i]);
+#endif
}
rowActivity[i]=rowLower[i];
} else if(rowActivity[i]>rowUpper[i]) {
if (rowActivity[i]>rowUpper[i]+1000.0*primalTolerance) {
feasible=false;
+#if CBC_USEFUL_PRINTING
printf("Bad row %d %g <= %g <= %g\n",
i,rowLower[i],rowActivity[i],rowUpper[i]);
+#endif
}
rowActivity[i]=rowUpper[i];
}
@@ -3544,10 +3667,18 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
model->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry);
}
}
+ model->setHintParam(OsiDoDualInInitial, true, OsiHintTry);
model->initialSolve();
numberIterationsPost_ += model->getIterationCount();
if (!model->isProvenOptimal()) {
-#ifdef COIN_DEVELOP
+ // try without basis
+ CoinWarmStartBasis * basis = dynamic_cast<CoinWarmStartBasis *> (model->getEmptyWarmStart());
+ model->setWarmStart(basis);
+ delete basis;
+ model->initialSolve();
+ }
+ if (!model->isProvenOptimal()) {
+#if COIN_DEVELOP
whichMps++;
sprintf(nameMps,"bad2_%d",whichMps);
model->writeMps(nameMps);
@@ -3626,7 +3757,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
double value = solutionM[iColumn];
value = CoinMax(value,columnLower[iColumn]);
value = CoinMin(value,columnUpper[iColumn]);
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf ("assuming %d fixed to solution of %g (was %g) - bounds %g %g, old bounds and sol %g %g\n",
jColumn,value,solutionM2[jColumn],columnLower2[jColumn],columnUpper2[jColumn],
columnLower[iColumn],columnUpper[iColumn]);
@@ -3634,7 +3765,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
modelM2->setColUpper(jColumn,value);
}
} else {
-#if 0
+#if CBC_USEFUL_PRINTING
if (columnUpper2[jColumn]>columnLower2[jColumn]&&!modelM2->isInteger(jColumn)) {
double value = solutionM[iColumn];
value = CoinMax(value,columnLower[iColumn]);
@@ -3696,7 +3827,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
model->setColLower(iColumn,value2);
model->setColUpper(iColumn,value2);
} else {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("NPASS=%d, ipass end var %d values %g %g %g\n",
numberSolvers_,iColumn,model->getColLower()[iColumn],
value,model->getColUpper()[iColumn]);
@@ -3759,7 +3890,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
for (j=columnStart[iColumn];
j<columnStart[iColumn]+columnLength[iColumn];j++) {
int iRow=row[j];
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
if (rowLower[iRow]>-1.0e20&&rowUpper[iRow]<1.0e20)
printf("odd row with both bounds %d %g %g - element %g\n",
iRow,rowLower[iRow],rowUpper[iRow],element[j]);
@@ -3802,7 +3933,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
rowActivity[iRow] += movement*element[j];
}
} else {
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
printf("Unable to move %d\n",iColumn);
#endif
}
@@ -3866,7 +3997,7 @@ CglPreProcess::postProcess(OsiSolverInterface & modelIn
double testObj = 1.0e-8*CoinMax(fabs(saveObjectiveValue),
fabs(objectiveValue))+1.0e-4;
if (!originalModel_->isProvenOptimal()) {
-#ifdef COIN_DEVELOP
+#if COIN_DEVELOP
whichMps++;
sprintf(nameMps,"bad3_%d",whichMps);
originalModel_->writeMps(nameMps);
@@ -3916,6 +4047,31 @@ static int gcd(int a, int b)
}
return b;
}
+#define CGL_PREPROCESS_DENSE_CODE
+#define F77_FUNC(x,y) x##_
+/* Type of Fortran integer translated into C */
+#ifndef ipfint
+//typedef ipfint FORTRAN_INTEGER_TYPE ;
+typedef int ipfint;
+typedef const int cipfint;
+#endif
+//#define COIN_HAS_LAPACK
+//#include "CoinFactorization.hpp"
+#ifdef CGL_PREPROCESS_DENSE_CODE
+// using simple lapack interface
+extern "C"
+{
+ /** LAPACK Fortran subroutine DGETRF. */
+ void F77_FUNC(dgetrf,DGETRF)(ipfint * m, ipfint *n,
+ double *A, ipfint *ldA,
+ ipfint * ipiv, ipfint *info);
+ /** LAPACK Fortran subroutine DGETRS. */
+ void F77_FUNC(dgetrs,DGETRS)(char *trans, cipfint *n,
+ cipfint *nrhs, const double *A, cipfint *ldA,
+ cipfint * ipiv, double *B, cipfint *ldB, ipfint *info,
+ int trans_len);
+}
+#endif
/* Return model with useful modifications.
If constraints true then adds any x+y=1 or x-y=0 constraints
If NULL infeasible
@@ -3937,6 +4093,10 @@ CglPreProcess::modified(OsiSolverInterface * model,
if (newModel->isBinary(iColumn))
number01Integers++;
}
+#if CBC_USEFUL_PRINTING>0
+ printf("At beginning of modified %d rows and %d columns (pass %d - doing %d minor passes)\n",
+ numberRows,numberColumns,iBigPass,numberPasses);
+#endif
OsiRowCut ** whichCut = new OsiRowCut * [numberRows+1];
memset(whichCut, 0, (numberRows+1)*sizeof(OsiRowCut *));
numberChanges=0;
@@ -3959,10 +4119,935 @@ CglPreProcess::modified(OsiSolverInterface * model,
break;
}
}
-#endif
+#endif
bool feasible=true;
int firstGenerator=0;
int lastGenerator=numberCutGenerators_;
+ bool useSolution=getCutoff()<1.0e20;
+#if 1
+ // Do triple stuff
+ if (iBigPass==0) {
+ // Row copy
+ CoinPackedMatrix matrixByRow(*newModel->getMatrixByRow());
+ const double * elementByRow = matrixByRow.getElements();
+ const int * column = matrixByRow.getIndices();
+ const CoinBigIndex * rowStart = matrixByRow.getVectorStarts();
+ const int * rowLength = matrixByRow.getVectorLengths();
+
+ // Column copy
+ CoinPackedMatrix matrixByCol(*newModel->getMatrixByCol());
+ //const double * element = matrixByCol.getElements();
+ const int * row = matrixByCol.getIndices();
+ const CoinBigIndex * columnStart = matrixByCol.getVectorStarts();
+ const int * columnLength = matrixByCol.getVectorLengths();
+
+ const double * rowLower = newModel->getRowLower();
+ const double * rowUpper = newModel->getRowUpper();
+ const double * columnLower = newModel->getColLower();
+ const double * columnUpper = newModel->getColUpper();
+#define TRIPLE_ROWS 4
+#define TRIPLE_COLS 3
+ // just allow TRIPLE_ROWS rows
+ double el[TRIPLE_COLS][2*TRIPLE_ROWS];
+ double rhs[2*TRIPLE_ROWS],lower[TRIPLE_ROWS],upper[TRIPLE_ROWS];
+ double modifiedRhs[2*TRIPLE_ROWS],scaleFactor[2*TRIPLE_ROWS];
+ memset(modifiedRhs,0,sizeof(modifiedRhs));
+ memset(scaleFactor,0,sizeof(scaleFactor));
+ int rowNumber[2*TRIPLE_ROWS];
+ double colLower[TRIPLE_COLS],colUpper[TRIPLE_COLS];
+#if CBC_USEFUL_PRINTING>0
+ int binary[TRIPLE_COLS];
+ int colNumber[TRIPLE_COLS];
+#endif
+ unsigned char result[2*TRIPLE_ROWS][2*TRIPLE_ROWS];
+ int rowType[2*TRIPLE_ROWS];
+#define MAX_ELS 20
+#define MAX_LOOK_ROWS 40
+#define MAX_LOOK_COLS 32 // for more go to long
+ unsigned int bitMask[MAX_LOOK_ROWS];
+ int * which = new int [2*numberColumns+3*numberRows+
+ MAX_LOOK_ROWS+MAX_LOOK_COLS];
+ int * marked = which+MAX_LOOK_COLS;
+ int * whichRow = marked+numberColumns;
+ int * markRow = whichRow+MAX_LOOK_ROWS;
+ int * backwardRow = markRow+numberRows;
+ int * backwardColumn = backwardRow+numberRows;
+ int * rowTypeAll = backwardColumn+numberColumns;
+ memset(marked,0,numberColumns*sizeof(int));
+ memset(markRow,0,numberRows*sizeof(int));
+ for (int iRow=0;iRow<numberRows;iRow++) {
+ int type=0;
+ if (rowLower[iRow]!=rowUpper[iRow]) {
+ if (rowLower[iRow]>-1.0e30) {
+ if (rowUpper[iRow]<1.0e30) {
+ type=2;
+ } else {
+ type=1;
+ }
+ } else {
+ if (rowUpper[iRow]<1.0e30) {
+ type=2;
+ } else {
+ type=0;
+ }
+ }
+ } else {
+ type=3;
+ }
+ if (rowType_&&rowType_[iRow])
+ type=0; // not allowed if may be cut
+ rowTypeAll[iRow]=type;
+ }
+ // clean model
+ for (int iColumn=0;iColumn<numberColumns;iColumn++) {
+ if (newModel->isInteger(iColumn)) {
+ double lower = columnLower[iColumn];
+ double upper = columnUpper[iColumn];
+ double saveLower=lower;
+ double saveUpper=upper;
+ if (lower!=ceil(lower)) {
+ if (fabs(lower-floor(lower+0.5))<1.0e-6)
+ lower = floor(lower+0.5);
+ else
+ lower = ceil(lower);
+ newModel->setColLower(iColumn,lower);
+ }
+ if (upper!=floor(upper)) {
+ if (fabs(upper-floor(upper+0.5))<1.0e-6)
+ upper = floor(upper+0.5);
+ else
+ upper = floor(upper);
+ newModel->setColUpper(iColumn,upper);
+ }
+ if (lower>upper) {
+ char generalPrint[100];
+ sprintf(generalPrint,"%d input bounds %g %g",
+ iColumn,saveLower,saveUpper);
+ handler_->message(CGL_GENERAL, messages_)
+ << generalPrint
+ << CoinMessageEol;
+ handler_->message(CGL_INFEASIBLE,messages_)
+ <<CoinMessageEol;
+ feasible=false;
+ }
+ if (lower<0.0) {
+ // take out for now
+ for (CoinBigIndex j=columnStart[iColumn];
+ j<columnStart[iColumn]+columnLength[iColumn];j++) {
+ int iRow = row[j];
+ rowTypeAll[iRow]=0;
+ }
+ }
+ }
+ }
+#if CBC_USEFUL_PRINTING>0
+ int nFreed=0;
+#endif
+ for (int iColumn=0;iColumn<numberColumns;iColumn++) {
+ if (!feasible)
+ break;
+ if (newModel->isInteger(iColumn) && columnLength[iColumn]<=MAX_ELS
+ && columnLength[iColumn]>1&&columnLower[iColumn]==0.0&&
+ columnUpper[iColumn]==1.0) {
+ int nMarked=0;
+ backwardColumn[iColumn]=0;
+ marked[iColumn]=1;
+ which[nMarked++]=iColumn;
+ int nMarkRow = 0;
+ for (CoinBigIndex j=columnStart[iColumn];
+ j<columnStart[iColumn]+columnLength[iColumn];j++) {
+ int iRow = row[j];
+ markRow[iRow]=nMarkRow+1;
+ backwardRow[iRow]=nMarkRow;
+ bitMask[nMarkRow]=0;
+ if (!rowTypeAll[iRow]) {
+ // no good
+ bitMask[nMarkRow] = 0xffffffff;
+ }
+ whichRow[nMarkRow++]=iRow;
+ }
+ for (CoinBigIndex j=columnStart[iColumn];
+ j<columnStart[iColumn]+columnLength[iColumn];j++) {
+ int iRow = row[j];
+ if (rowLength[iRow]<=3) {
+ for (CoinBigIndex k=rowStart[iRow];
+ k<rowStart[iRow]+rowLength[iRow];k++) {
+ int kColumn = column[k];
+ if (!marked[kColumn]) {
+ int iMask = backwardRow[iRow];
+ if (nMarked==MAX_LOOK_COLS) {
+ // say row no good
+ bitMask[iMask] = 0xffffffff;
+ continue;
+ } else if (bitMask[iMask] == 0xffffffff) {
+ continue;
+ }
+ backwardColumn[kColumn]=nMarked;
+ marked[kColumn]=nMarked+1;
+ which[nMarked++]=kColumn;
+ }
+ int iMask = backwardRow[iRow];
+ int iShift = backwardColumn[kColumn];
+ bitMask[iMask] |= (1<<iShift);
+ }
+ }
+ }
+ // See if any match
+ for (int iLook = 0;iLook<nMarkRow-1;iLook++) {
+ unsigned int mask = bitMask[iLook];
+ if (mask&&mask!=0xffffffff&&markRow) {
+ int nMatch=0;
+ // count bits
+ int nBits=0;
+ for (int i=0;i<nMarked;i++) {
+ if ((mask&1)!=0)
+ nBits++;
+ mask = mask>>1;
+ }
+ mask=bitMask[iLook];
+ for (int jLook=iLook+1;jLook<nMarkRow;jLook++) {
+ if (bitMask[jLook]==mask)
+ nMatch++;
+ }
+ if (nMatch) {
+#if CBC_USEFUL_PRINTING>0
+ printf("For column %d %d matches on size %d\n",
+ iColumn,nMatch,nBits);
+ if (nMatch>1) {
+ printf("WHAT NOW\n");
+ }
+#endif
+ // Pad out here
+ int jColumn1=-1,jColumn2=-1;
+ int iRow1=whichRow[iLook];
+ int iRow2=-1;
+ for (int jLook=iLook+1;jLook<nMarkRow;jLook++) {
+ if (bitMask[jLook]==mask) {
+ iRow2=whichRow[jLook];
+ break;
+ }
+ }
+ rowNumber[0]=iRow1;
+ rowNumber[1]=iRow2;
+ colLower[0]=0.0;
+ colUpper[0]=1.0;
+#if CBC_USEFUL_PRINTING>0
+ binary[0]=1;
+ int nCol=nBits;
+#endif
+ assert (rowLength[iRow1]<=3);
+ int nRow=2;
+ for (int j=0;j<2;j++) {
+ int iRow=rowNumber[j];
+ lower[j]=rowLower[iRow];
+ upper[j]=rowUpper[iRow];
+ for (CoinBigIndex k=rowStart[iRow];
+ k<rowStart[iRow]+rowLength[iRow];k++) {
+ int kColumn = column[k];
+ if (kColumn==iColumn) {
+ el[0][j]=elementByRow[k];
+ } else if (kColumn==jColumn1) {
+ el[1][j]=elementByRow[k];
+ } else if (kColumn==jColumn2) {
+ el[2][j]=elementByRow[k];
+ } else if (jColumn1<0) {
+ jColumn1=kColumn;
+ el[1][j]=elementByRow[k];
+ colLower[1]=columnLower[kColumn];
+ colUpper[1]=columnUpper[kColumn];
+#if CBC_USEFUL_PRINTING>0
+ binary[1]=0;
+ if (!colLower[1]&&colUpper[1]==1.0&&newModel->isInteger(kColumn))
+ binary[1]=1;
+#endif
+ } else if (jColumn2<0) {
+ jColumn2=kColumn;
+ el[2][j]=elementByRow[k];
+ colLower[2]=columnLower[kColumn];
+ colUpper[2]=columnUpper[kColumn];
+#if CBC_USEFUL_PRINTING>0
+ binary[2]=0;
+ if (!colLower[2]&&colUpper[2]==1.0&&newModel->isInteger(kColumn))
+ binary[2]=1;
+#endif
+ } else {
+ abort();
+ }
+ }
+ }
+ if (jColumn1<0) {
+#if CBC_USEFUL_PRINTING>0
+ printf("**Why jColumn1 negative\n");
+#endif
+ continue;
+ }
+#if CBC_USEFUL_PRINTING>0
+ colNumber[0]=iColumn;
+ colNumber[1]=jColumn1;
+ colNumber[2]=jColumn2;
+#endif
+ // do something
+ assert (columnLower[iColumn]==0.0);
+ assert (columnUpper[iColumn]==1.0);
+ if (nBits==2) {
+#if CBC_USEFUL_PRINTING>0
+ printf("iColumn %d %g %g binary\n",iColumn,colLower[0],
+ colUpper[0]);
+ printf("jColumn1 %d %g %g %s\n",jColumn1,colLower[1],
+ colUpper[1],newModel->isInteger(jColumn1)
+ ? "integer" : "continuous");
+ for (int i=0;i<2;i++) {
+ printf("%d row %d %g <= %g*x0%s%g*x1 <= %g\n",
+ i,rowNumber[i],lower[i],el[0][i],
+ el[1][i]>0.0 ? " +" : " -",fabs(el[1][i]),upper[i]);
+ }
+#endif
+ double lower1[2],upper1[2];
+ lower1[0]=lower1[1]=colLower[1];
+ upper1[0]=upper1[1]=colUpper[1];
+ double l,u;
+ // binary at 0
+ l=lower[0];
+ u=upper[0];
+ if (el[1][0]>0.0) {
+ lower1[0]=CoinMax(lower1[0],l/el[1][0]);
+ upper1[0]=CoinMin(upper1[0],u/el[1][0]);
+ } else {
+ lower1[0]=CoinMax(lower1[0],u/el[1][0]);
+ upper1[0]=CoinMin(upper1[0],l/el[1][0]);
+ }
+ l=lower[1];
+ u=upper[1];
+ if (el[1][1]>0.0) {
+ lower1[0]=CoinMax(lower1[0],l/el[1][1]);
+ upper1[0]=CoinMin(upper1[0],u/el[1][1]);
+ } else {
+ lower1[0]=CoinMax(lower1[0],u/el[1][1]);
+ upper1[0]=CoinMin(upper1[0],l/el[1][1]);
+ }
+ l=lower[0]-el[0][0];
+ u=upper[0]-el[0][0];
+ if (el[1][0]>0.0) {
+ lower1[1]=CoinMax(lower1[1],l/el[1][0]);
+ upper1[1]=CoinMin(upper1[1],u/el[1][0]);
+ } else {
+ lower1[1]=CoinMax(lower1[1],u/el[1][0]);
+ upper1[1]=CoinMin(upper1[1],l/el[1][0]);
+ }
+ l=lower[1]-el[0][1];
+ u=upper[1]-el[0][1];
+ if (el[1][1]>0.0) {
+ lower1[1]=CoinMax(lower1[1],l/el[1][1]);
+ upper1[1]=CoinMin(upper1[1],u/el[1][1]);
+ } else {
+ lower1[1]=CoinMax(lower1[1],u/el[1][1]);
+ upper1[1]=CoinMin(upper1[1],l/el[1][1]);
+ }
+ if (CoinMin(lower1[0],lower1[1])>colLower[1]) {
+#if CBC_USEFUL_PRINTING>0
+ printf("for jColumn1 0-bounds %g,%g 1-bounds %g,%g\n",
+ lower1[0],upper1[0],lower1[1],upper1[1]);
+#endif
+ double value = CoinMin(lower1[0],lower1[1]);
+ if (newModel->isInteger(jColumn1))
+ value = ceil(value-1.0e-5);
+#if CBC_USEFUL_PRINTING>0
+ printf("increasing lb on %d from %g to %g\n",
+ jColumn1,colLower[1],value);
+#endif
+ colLower[1]=value;
+ newModel->setColLower(jColumn1,value);
+ }
+ if (CoinMax(upper1[0],upper1[1])<colUpper[1]) {
+#if CBC_USEFUL_PRINTING>0
+ printf("for jColumn1 0-bounds %g,%g 1-bounds %g,%g\n",
+ lower1[0],upper1[0],lower1[1],upper1[1]);
+#endif
+ double value = CoinMax(upper1[0],upper1[1]);
+ if (newModel->isInteger(jColumn1))
+ value = floor(value+1.0e-5);
+#if CBC_USEFUL_PRINTING>0
+ printf("decreasing ub on %d from %g to %g\n",
+ jColumn1,colUpper[1],value);
+#endif
+ colUpper[1]=value;
+ newModel->setColUpper(jColumn1,value);
+ }
+ if (lower1[0]>colUpper[1] || upper1[0]<colLower[1]) {
+#if CBC_USEFUL_PRINTING>0
+ printf("for jColumn1 0-bounds %g,%g 1-bounds %g,%g\n",
+ lower1[0],upper1[0],lower1[1],upper1[1]);
+ printf("fixing %d to 1\n",iColumn);
+#endif
+ colLower[0]=1.0;
+ newModel->setColLower(iColumn,1.0);
+ nMarkRow=0; // stop looking
+ }
+ if (lower1[1]>colUpper[1] || upper1[1]<colLower[1]) {
+#if CBC_USEFUL_PRINTING>0
+ printf("for jColumn1 0-bounds %g,%g 1-bounds %g,%g\n",
+ lower1[0],upper1[0],lower1[1],upper1[1]);
+ printf("fixing %d to 0\n",iColumn);
+#endif
+ colUpper[0]=0.0;
+ newModel->setColLower(iColumn,0.0);
+ nMarkRow=0; // stop looking
+ }
+ if (colLower[0]>colUpper[0]||
+ colLower[1]>colUpper[1]+1.0e-6) {
+#if CBC_USEFUL_PRINTING>0
+ printf("** infeasible\n");
+#endif
+ feasible = false;
+ }
+ } else {
+#if CBC_USEFUL_PRINTING>0
+ printf("iColumn %d %g %g binary\n",iColumn,colLower[0],
+ colUpper[0]);
+ printf("jColumn1 %d %g %g %s\n",jColumn1,colLower[1],
+ colUpper[1],newModel->isInteger(jColumn1)
+ ? "integer" : "continuous");
+ printf("jColumn2 %d %g %g %s\n",jColumn2,colLower[2],
+ colUpper[2],newModel->isInteger(jColumn2)
+ ? "integer" : "continuous");
+ for (int i=0;i<2;i++) {
+ printf("%d row %d %g <= %g*x0%s%g*x1%s%g*x2 <= %g\n",
+ i,rowNumber[i],lower[i],el[0][i],
+ el[1][i]>0.0 ? " +" : " -",fabs(el[1][i]),
+ el[2][i]>0.0 ? " +" : " -",fabs(el[2][i]),upper[i]);
+ }
+#endif
+ // Find other doubleton rows
+ for (CoinBigIndex j1=columnStart[jColumn1];
+ j1<columnStart[jColumn1]+columnLength[jColumn1];j1++) {
+ int iRow = row[j1];
+ if (rowLength[iRow]==2 && rowTypeAll[iRow]) {
+ CoinBigIndex start=rowStart[iRow];
+ bool good=false;
+ if (jColumn1==column[start]&&jColumn2==column[start+1]) {
+ good=true;
+ el[1][nRow]=elementByRow[start];
+ el[2][nRow]=elementByRow[start+1];
+ } else if (jColumn1==column[start+1]&&jColumn2==column[start]) {
+ good=true;
+ el[1][nRow]=elementByRow[start+1];
+ el[2][nRow]=elementByRow[start];
+ }
+ if (good) {
+ rowNumber[nRow]=iRow;
+ lower[nRow]=rowLower[iRow];
+ upper[nRow]=rowUpper[iRow];
+ el[0][nRow]=0.0;
+#if CBC_USEFUL_PRINTING>0
+ printf("%d row %d %g <= %g*x0%s%g*x1%s%g*x2 <= %g\n",
+ nRow,iRow,lower[nRow],el[0][nRow],
+ el[1][nRow]>0.0 ? " +" : " -",fabs(el[1][nRow]),
+ el[2][nRow]>0.0 ? " +" : " -",fabs(el[2][nRow]),upper[nRow]);
+#endif
+ nRow++;
+ if (nRow==TRIPLE_ROWS)
+ break;
+ }
+ }
+ }
+ }
+ // Now put in <= form
+ int nLook = nRow;
+ // types 1 <=, -1 >= 2 first ==, -2 second ==, 3 <= from range, -3 >= from range
+ for (int i=0;i<nRow;i++) {
+ rowType[i]=1;
+ if (lower[i]<-1.0e20) {
+ rhs[i]=upper[i];
+ } else if (upper[i]>1.0e20) {
+ rowType[i]=-1;
+ rhs[i]=-lower[i];
+ for (int j=0;j<nBits;j++)
+ el[j][i]=-el[j][i];
+ } else if (lower[i]==upper[i]) {
+ rhs[i]=upper[i];
+ rowType[i]=2;
+ rowType[nLook]=-2;
+ rowNumber[nLook]=rowNumber[i];
+ rhs[nLook]=-upper[i];
+ for (int j=0;j<nBits;j++)
+ el[j][nLook]=-el[j][i];
+ nLook++;
+ } else {
+ rhs[i]=upper[i];
+ rowType[i]=3;
+ rowType[nLook]=-3;
+ rowNumber[nLook]=rowNumber[i];
+ rhs[nLook]=-lower[i];
+ for (int j=0;j<nBits;j++)
+ el[j][nLook]=-el[j][i];
+ nLook++;
+ }
+ }
+ // scale
+ for (int i=0;i<nRow;i++) {
+ double largest=0.0;
+ double smallest=COIN_DBL_MAX;
+ for (int k=1;k<nBits;k++) {
+ double value = fabs(el[k][i]);
+ if (value) {
+ largest=CoinMax(largest,value);
+ smallest=CoinMin(smallest,value);
+ }
+ }
+ scaleFactor[i]=1.0/sqrt(largest*smallest);
+ }
+ // Look at all possible combinations
+ // For now just look at first
+ // also ignore bounds (should subtract out lbs from rhs)
+ assert (nBits<=3);
+ memset(result,0,sizeof(result));
+ // bottom 4 bits for 0, next 4 for 1
+ // 0 not stronger, 1 ==, 2 stronger (els)
+ // 0 not stronger, 4 ==, 8 stronger (rhs)
+ for (int j=0;j<2;j++) {
+ for (int k=0;k<nLook;k++)
+ modifiedRhs[k]=scaleFactor[k]*(rhs[k]-j*el[0][k]);
+ for (int k1=0;k1<nLook;k1++) {
+ for (int k2=0;k2<nLook;k2++) {
+ if (k1!=k2 && rowNumber[k1]!=rowNumber[k2]) {
+ int stronger=8;
+ if (modifiedRhs[k1]>modifiedRhs[k2]+1.0e-7) {
+ stronger=0;
+ } else if (modifiedRhs[k1]>modifiedRhs[k2]-1.0e-7) {
+ stronger=4;
+ }
+ if (stronger) {
+ int strongerEl=2;
+ for (int k3=1;k3<nBits;k3++) {
+ if (scaleFactor[k1]*el[k3][k1]<scaleFactor[k2]*el[k3][k2]-1.0e-9) {
+ stronger=0;
+ break;
+ } else if (scaleFactor[k1]*el[k3][k1]<scaleFactor[k2]*el[k3][k2]+1.0e-9) {
+ strongerEl=1;
+ }
+ }
+ if (stronger) {
+ stronger |= strongerEl;
+ }
+ result[k1][k2] |= static_cast<unsigned char>(stronger <<(4*j));
+ }
+ }
+ }
+ }
+ }
+ int dropped=-1;
+ for (int k1=0;k1<nLook;k1++) {
+ for (int k2=0;k2<nLook;k2++) {
+ if (k1!=k2 && rowNumber[k1]!=rowNumber[k2]) {
+ int state0 = result[k1][k2]&15;
+ int state1 = result[k1][k2]>>4;
+ if (state0&&state1) {
+ if (state0==5) {
+ if (state1==5) {
+ // same
+ if (abs(rowType[k1])==1)
+ dropped=k1;
+ else
+ dropped=k2;
+#if CBC_USEFUL_PRINTING>0
+ printf("ZZZsame ");
+#endif
+ } else if (state1==9) {
+ // drop second
+ dropped=k2;
+#if CBC_USEFUL_PRINTING>0
+ printf("ZZZfirst ");
+#endif
+ } else {
+#if CBC_USEFUL_PRINTING>0
+ printf("ZZYY ");
+#endif
+ }
+ } else if (state0==9) {
+ // drop second
+ dropped=k2;
+#if CBC_USEFUL_PRINTING>0
+ printf("ZZZsecond ");
+#endif
+ } else {
+#if CBC_USEFUL_PRINTING>0
+ printf("ZZYY ");
+#endif
+ }
+#if CBC_USEFUL_PRINTING>0
+ printf("row %d (%d) and row %d (%d) status at 0 is %d status at 1 is %d\n",
+ k1,rowNumber[k1],k2,rowNumber[k2],
+ state0,state1);
+#endif
+ if (dropped>=0)
+ break;
+ }
+ }
+ }
+ if (dropped>=0)
+ break;
+ }
+ if (dropped>=0) {
+ int iRow=rowNumber[dropped];
+ // Think if ranged or ==
+ if (rowLower[iRow]<-1.0e30||rowUpper[iRow]>1.0e30) {
+ newModel->setRowLower(iRow,-COIN_DBL_MAX);
+ newModel->setRowUpper(iRow,COIN_DBL_MAX);
+#if CBC_USEFUL_PRINTING>0
+ nFreed++;
+#endif
+ } else {
+#if CBC_USEFUL_PRINTING>0
+ printf("XXXYYY - shouldn't drop ranged/equality row????\n");
+#endif
+ }
+ }
+ // stop rest
+ for (int jLook=iLook;jLook<nMarkRow;jLook++) {
+ if (bitMask[jLook]==mask)
+ bitMask[jLook]=0;
+ }
+ }
+ }
+ }
+ for (int i=0;i<nMarked;i++) {
+ marked[which[i]]=0;
+ }
+ for (int i=0;i<nMarkRow;i++) {
+ markRow[whichRow[i]]=0;
+ }
+ }
+ }
+#if CBC_USEFUL_PRINTING>0
+ if(nFreed)
+ printf("%d rows freed up\n",nFreed);
+#endif
+ delete [] which;
+ }
+#endif
+#if 0
+ // Do domination stuff
+ if (iBigPass==0) {
+ // Row copy
+ CoinPackedMatrix matrixByRow(*newModel->getMatrixByRow());
+ const double * elementByRow = matrixByRow.getElements();
+ const int * column = matrixByRow.getIndices();
+ const CoinBigIndex * rowStart = matrixByRow.getVectorStarts();
+ const int * rowLength = matrixByRow.getVectorLengths();
+
+ // Column copy
+ CoinPackedMatrix matrixByCol(*newModel->getMatrixByCol());
+ //const double * element = matrixByCol.getElements();
+ const int * row = matrixByCol.getIndices();
+ const CoinBigIndex * columnStart = matrixByCol.getVectorStarts();
+ const int * columnLength = matrixByCol.getVectorLengths();
+
+ const double * rowLower = newModel->getRowLower();
+ const double * rowUpper = newModel->getRowUpper();
+ const double * columnLower = newModel->getColLower();
+ const double * columnUpper = newModel->getColUpper();
+ // get sizes for canonical form (overestimate if free columns)
+ int nRows=numberRows;
+ CoinBigIndex nEls=matrixByRow.getNumElements();
+ for (int iRow=0;iRow<numberRows;iRow++) {
+ if (rowLower[iRow]>-1.0e30&&rowUpper[iRow]<1.0e30) {
+ nRows++;
+ nEls += rowLength[iRow];
+ }
+ }
+ int * rowNumber = new int[3*nRows+numberColumns];
+ int * rowBinary = rowNumber+nRows;
+ int * rowPos = rowBinary+nRows;
+ int * whichColumn = rowPos+nRows;
+ double * elementByRow2 = new double [nEls+numberColumns+nRows];
+ double * columnValue = elementByRow2+nEls;
+ double * rhs = columnValue+numberColumns;
+ int * column2 = new int [nEls];
+ CoinBigIndex * rowStart2 = new CoinBigIndex[nRows+1];
+ char * marked = new char [numberColumns+nRows];
+ char * markedRow = marked + numberColumns;
+ for (int iColumn=0;iColumn<numberColumns;iColumn++) {
+ columnValue[iColumn]=0.0;
+ if (columnLower[iColumn]<-1.0e10&&columnUpper[iColumn]>1.0e10) {
+ marked[iColumn]=-1;
+ } else if (fabs(columnUpper[iColumn])<fabs(columnLower[iColumn])) {
+ // flip
+ marked[iColumn]=2;
+ columnValue[iColumn]=-columnUpper[iColumn];
+ if (newModel->isInteger(iColumn) &&
+ columnUpper[iColumn]==columnLower[iColumn]+1)
+ marked[iColumn]=3;
+ } else {
+ marked[iColumn]=0;
+ columnValue[iColumn]=columnLower[iColumn];
+ if (newModel->isInteger(iColumn) &&
+ columnUpper[iColumn]==columnLower[iColumn]+1)
+ marked[iColumn]=1;
+ }
+ }
+ nRows=0;
+ nEls=0;
+ rowStart2[0]=0;
+ for (int iRow=0;iRow<numberRows;iRow++) {
+ CoinBigIndex start = rowStart[iRow];
+ CoinBigIndex end = start + rowLength[iRow];
+ for (int iTry=0;iTry<2;iTry++) {
+ double multiplier;
+ double rhsValue;
+ if (!iTry) {
+ multiplier=1.0;
+ rhsValue = rowUpper[iRow];
+ } else {
+ multiplier=-1.0;
+ rhsValue = -rowLower[iRow];
+ }
+ if (rhsValue<1.0e30) {
+ char typeRow=iTry;
+ int nPos=0;
+ int nInt=0;
+ double largest=0.0;
+ double smallest=COIN_DBL_MAX;
+ for (CoinBigIndex k=start;k<end;k++) {
+ int kColumn = column[k];
+ int type = marked[kColumn];
+ double value = multiplier*elementByRow[k];
+ if (type<0) {
+ nEls=rowStart2[nRows];
+ typeRow=-1;;
+ break;
+ } else if ((type&2)!=0) {
+ value = -value;
+ }
+ if ((type&1)!=0)
+ nInt++;
+ rhsValue -= value*columnValue[kColumn];
+ elementByRow2[nEls]=value;
+ if (value>0.0)
+ nPos++;
+ largest=CoinMax(fabs(value),largest);
+ smallest=CoinMin(fabs(value),smallest);
+ column2[nEls++]=kColumn;
+ }
+ if (typeRow>=0 && smallest*1.0e7>largest) {
+ double scale = sqrt(largest*smallest);
+ if (fabs(rhsValue)>1.0e6*scale||
+ (rhsValue&&fabs(rhsValue)<1.0e-6*scale)) {
+ scale=0.0;
+ } else if (rhsValue) {
+ scale=1.0/fabs(rhsValue);
+ }
+ if (scale) {
+ rhs[nRows]=scale*rhsValue;
+ for (CoinBigIndex k=rowStart2[nRows];k<nEls;k++)
+ elementByRow2[k] *= scale;
+ rowPos[nRows]=nPos;
+ markedRow[nRows]=typeRow;
+ rowBinary[nRows]=nInt;
+ rowNumber[nRows++]=iRow;
+ rowStart2[nRows]=nEls;
+ } else {
+ nEls=rowStart2[nRows];
+ }
+ }
+ }
+ }
+ }
+ memset(columnValue,0,numberColumns*sizeof(double));
+ double tolerance = 1.0e-9;
+ for (int iRow=0;iRow<nRows;iRow++) {
+ CoinBigIndex start = rowStart2[iRow];
+ CoinBigIndex end = rowStart2[iRow+1];
+ int n=0;
+ int nInt=rowBinary[iRow];
+ for (CoinBigIndex k=start;k<end;k++) {
+ int kColumn = column2[k];
+ double value = elementByRow2[k];
+ columnValue[kColumn]=value;
+ whichColumn[n++]=kColumn;
+ }
+ double rhsValue=rhs[iRow];
+ int nPos=rowPos[iRow];
+ int nNeg=n-nPos;
+ // initially only short integer rows
+ if (n>3)
+ nInt=0;
+ // for first try ignore integers!
+ nInt=0;
+ if (nInt) {
+ } else {
+ for (int jRow=iRow+1;jRow<nRows;jRow++) {
+ CoinBigIndex start2 = rowStart2[jRow];
+ CoinBigIndex end2 = rowStart2[jRow+1];
+ int n2=end2-start2;
+ int nPos2=rowPos[jRow];
+ int nNeg2=n2-nPos2;
+ int nInt2=rowBinary[jRow];
+ double rhsValue2=rhs[jRow];
+ // initially only short integer rows
+ if (n2>3)
+ nInt2=0;
+ // for first try ignore integers!
+ nInt2=0;
+ if (nInt2) {
+ } else {
+ // continuous tests
+ // -1 iRow may be stronger, +1 jRow may be stronger, 0 continue, 2 == els
+ int way=2;
+ if (rhsValue>rhsValue2+tolerance)
+ way=1;
+ else if (rhsValue2>rhsValue+tolerance)
+ way=-1;
+ if (nNeg2>nNeg) {
+ // iRow can be stronger
+ if (nPos2>nPos || way == 1)
+ way=0;
+ else
+ way=-1;
+ } else if (nNeg2==nNeg) {
+ // iRow can be either way
+ if (nPos2>nPos) {
+ if (way!=-1)
+ way=1;
+ else
+ way=0;
+ } else if (nPos2<nPos) {
+ if (way!=1)
+ way=-1;
+ else
+ way=0;
+ }
+ } else {
+ // jRow can be stronger
+ if (nPos2<nPos || way==-1)
+ way=0;
+ else
+ way=1;
+ }
+ int nHitPos=0;
+ int nHitNeg=0;
+ if (way==-1) {
+ // iRow may be stronger
+ for (CoinBigIndex k2=start2;k2<end2;k2++) {
+ int kColumn = column2[k2];
+ double value = elementByRow2[k2];
+ double valueI=columnValue[kColumn];
+ if (value>valueI+1.0e-12) {
+ way=0;
+ break;
+ } else {
+ if (valueI<0.0)
+ nHitNeg++;
+ }
+ }
+ if (nHitNeg<nNeg2)
+ way=0;
+ } else if (way==1) {
+ // jRow may be stronger
+ for (CoinBigIndex k2=start2;k2<end2;k2++) {
+ int kColumn = column2[k2];
+ double value = elementByRow2[k2];
+ double valueI=columnValue[kColumn];
+ if (value<valueI-1.0e-12) {
+ way=0;
+ break;
+ } else {
+ if (valueI>0.0)
+ nHitPos++;
+ }
+ }
+ if (nHitPos<nPos)
+ way=0;
+ } else if (way==2) {
+ // same number and rhs - could go either way
+ CoinBigIndex k2;
+ for (k2=start2;k2<end2;k2++) {
+ int kColumn = column2[k2];
+ double value = elementByRow2[k2];
+ if (value<columnValue[kColumn]-1.0e-12) {
+ way=-1;
+ break;
+ } else if (value>columnValue[kColumn]+1.0e-12) {
+ way=1;
+ break;
+ }
+ }
+ k2++;
+ if (way==1) {
+ for (;k2<end2;k2++) {
+ int kColumn = column2[k2];
+ double value = elementByRow2[k2];
+ double valueI=columnValue[kColumn];
+ if (value<valueI-1.0e-12) {
+ way=0;
+ break;
+ } else {
+ if (valueI>0.0)
+ nHitPos++;
+ }
+ }
+ if (nHitPos<nPos)
+ way=0;
+ } else if (way==-1) {
+ for (;k2<end2;k2++) {
+ int kColumn = column2[k2];
+ double value = elementByRow2[k2];
+ double valueI=columnValue[kColumn];
+ if (value>valueI+1.0e-12) {
+ way=0;
+ break;
+ } else {
+ if (valueI<0.0)
+ nHitNeg++;
+ }
+ }
+ if (nHitNeg<nNeg2)
+ way=0;
+ }
+ }
+#if CBC_USEFUL_PRINTING
+ if (way) {
+ int iRowX=rowNumber[iRow];
+ int jRowX=rowNumber[jRow];
+ CoinBigIndex startI = rowStart[iRowX];
+ CoinBigIndex endI = startI + rowLength[iRowX];
+ CoinBigIndex startJ = rowStart[jRowX];
+ CoinBigIndex endJ = startJ + rowLength[jRowX];
+ printf("way %d for row %d (%d - %d els) and %d (%d - %d els)\n",
+ way,iRow,iRowX,endI-startI,jRow,jRowX,endJ-startJ);
+ printf("%g <= ",rowLower[iRowX]);
+ if (endI-startI<100&&endJ-startJ<10) {
+ for (CoinBigIndex k=startI;k<endI;k++)
+ printf("(%d,%g) ",column[k],elementByRow[k]);
+ } else {
+ printf("something ");
+ }
+ printf("<= %g\n",rowUpper[iRowX]);
+ printf("%g <= ",rowLower[jRowX]);
+ if (endI-startI<100&&endJ-startJ<10) {
+ for (CoinBigIndex k=startJ;k<endJ;k++)
+ printf("(%d,%g) ",column[k],elementByRow[k]);
+ } else {
+ printf("something ");
+ }
+ printf("<= %g\n",rowUpper[jRowX]);
+ }
+#endif
+ }
+ }
+ }
+ for (int j=0;j<n;j++) {
+ int kColumn = whichColumn[j];
+ columnValue[kColumn]=0.0;
+ }
+ }
+ delete [] rowNumber;
+ delete [] elementByRow2;
+ delete [] column2;
+ delete [] rowStart2;
+ delete [] marked;
+ }
+#endif
+ bool noStrengthening = false;
for (int iPass=0;iPass<numberPasses;iPass++) {
// Statistics
int numberFixed=0;
@@ -3971,6 +5056,31 @@ CglPreProcess::modified(OsiSolverInterface * model,
info.pass = iPass;
info.options=0;
int numberChangedThisPass=0;
+#if 1
+ // look at cliques every time
+ if ((options_&32)!=0) {
+ OsiSolverInterface * temp=cliqueIt(*newModel,0.0001);
+ if (temp) {
+#if CBC_USEFUL_PRINTING
+ printf("bigpass %d pass %d after cliques %d rows, before %d\n",
+ iBigPass,iPass,temp->getNumRows(),newModel->getNumRows());
+#endif
+ if (temp->getNumRows()<newModel->getNumRows()) {
+ numberChangedThisPass += newModel->getNumRows()-temp->getNumRows();
+ delete newModel;
+ newModel = temp;
+ numberRows = newModel->getNumRows();
+ } else {
+ delete temp;
+ }
+ } else {
+#if CBC_USEFUL_PRINTING
+ printf("bigpass %d pass %d no more cliques %d rows\n",
+ iBigPass,iPass,newModel->getNumRows());
+#endif
+ }
+ }
+#endif
/*
needResolve solution is stale
rebuilt constraint system deleted and recreated (implies initialSolve)
@@ -3994,15 +5104,56 @@ CglPreProcess::modified(OsiSolverInterface * model,
// skip duplicate rows except once
dupRow = dynamic_cast<CglDuplicateRow *> (generator_[iGenerator]);
cliqueGen = dynamic_cast<CglClique *> (generator_[iGenerator]);
- if ((dupRow||cliqueGen)&&(iPass/*||iBigPass*/))
+ if (cliqueGen&&iPass)
+ continue;
+ if (dupRow&&(iPass||iBigPass))
continue;
probingCut = dynamic_cast<CglProbing *> (generator_[iGenerator]);
+#if CBC_USEFUL_PRINTING>0
+ double time1 = CoinCpuTime();
+#endif
if (!probingCut) {
generator_[iGenerator]->generateCuts(*newModel,cs,info);
} else {
info.options=64;
- probingCut->setMode(4);
+ probingCut->setMode(useSolution ? 4 : 4|64);
+ int saveMaxElements = probingCut->getMaxElementsRoot();
+ int saveMaxProbe = probingCut->getMaxProbeRoot();
+ int saveMaxLook = probingCut->getMaxLookRoot();
+ if (!iBigPass&&!iPass&&(options_&(16|64))!=0) {
+ noStrengthening = true;
+ numberPasses=1;
+ probingCut->setMaxProbeRoot(CoinMax(saveMaxProbe,1000));
+ probingCut->setMaxElementsRoot(CoinMax(saveMaxElements,2000));
+ probingCut->setMaxLookRoot(CoinMax(saveMaxLook,
+ CoinMin(numberColumns,numberRows))/2);
+ options_ &= ~16;
+ } else if (iPass||(options_&64)==0) {
+ // cut back
+ probingCut->setMaxElementsRoot(probingCut->getMaxElements());
+ probingCut->setMaxProbeRoot(probingCut->getMaxProbe());
+ probingCut->setMaxLookRoot(probingCut->getMaxLook());
+ }
probingCut->generateCutsAndModify(*newModel,cs,&info);
+ probingCut->setMaxElementsRoot(saveMaxElements);
+ probingCut->setMaxProbeRoot(saveMaxProbe);
+ probingCut->setMaxLookRoot(saveMaxLook);
+ if (!iPass&&(!cs.sizeColCuts()||iBigPass>2))
+ options_ &= ~64; // switch off heavy
+ }
+#if CBC_USEFUL_PRINTING>0
+ printf("Generator %d took %g seconds\n",
+ iGenerator,CoinCpuTime()-time1);
+ printf("After probing1 %d row cuts and %d column cuts\n",
+ cs.sizeRowCuts(),cs.sizeColCuts());
+#endif
+ if (cs.sizeColCuts()&&iPass<numberPasses-100&&!iBigPass) {
+ // delete all row cuts for now????
+ int n=cs.sizeRowCuts();
+ for (int i=n-1;i>=0;i--)
+ cs.eraseRowCut(i);
+ for (int i=0;i<numberRows;i++)
+ whichCut[i]=0;
}
#if 1 //def CLIQUE_ANALYSIS
if (probingCut) {
@@ -4025,7 +5176,9 @@ CglPreProcess::modified(OsiSolverInterface * model,
}
if (cliqueGen&&cs.sizeRowCuts()) {
int n = cs.sizeRowCuts();
+#if CBC_USEFUL_PRINTING
printf("%d clique cuts\n",n);
+#endif
OsiSolverInterface * copySolver = newModel->clone();
numberRows=copySolver->getNumRows();
copySolver->applyCuts(cs);
@@ -4039,6 +5192,10 @@ CglPreProcess::modified(OsiSolverInterface * model,
dupCuts.setMode(8);
OsiCuts cs2;
dupCuts.generateCuts(*copySolver,cs2,info);
+#if CBC_USEFUL_PRINTING>0
+ printf("After probing dupCuts %d row cuts and %d column cuts\n",
+ cs2.sizeRowCuts(),cs2.sizeColCuts());
+#endif
// -1 not used, -2 delete, -3 not clique
const int * duplicate = dupCuts.duplicate();
// -1 not used, >=0 earliest row affected
@@ -4070,11 +5227,15 @@ CglPreProcess::modified(OsiSolverInterface * model,
n -= nOther;
int newNumberRows = numberRows-numberDrop+n;
bool special = (cliqueGen->getMinViolation()==-3.0);
+#if CBC_USEFUL_PRINTING
printf("could drop %d rows - current nrows %d other %d - new nrows %d\n",
numberDrop,numberRows,nOther,newNumberRows);
+#endif
if (n<=numberDrop||special) {
+#if CBC_USEFUL_PRINTING
printf("Dropping rows current nrows %d - new nrows %d\n",
numberRows,newNumberRows);
+#endif
if (newNumberRows>numberRows) {
// need new array
delete [] whichCut;
@@ -4116,7 +5277,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
//OsiRowCut & thisCut = cs.rowCut(i);
//thisCut.print();
//}
- }
+ }
} else {
#ifdef HEAVY_PROBING
// special probing
@@ -4129,17 +5290,31 @@ CglPreProcess::modified(OsiSolverInterface * model,
generator1.setMaxLook(100);
generator1.setRowCuts(3);
if (heavyProbing) {
- generator1.setMaxElements(300);
+ generator1.setMaxElements(400);
+ //generator1.setMaxLook(10000);
generator1.setMaxProbeRoot(model->getNumCols());
}
// out for now - think about cliques
if(!generator1.snapshot(*newModel,NULL,false)) {
- generator1.createCliques(*newModel,2,1000,true);
+ generator1.createCliques(*newModel,2,1000);
// To get special stuff
info.pass=4;
CoinZeroN(whichCut,numberRows);
- generator1.setMode(4);
+ generator1.setMode(16+4);
generator1.generateCutsAndModify(*newModel,cs,&info);
+#if CBC_USEFUL_PRINTING>0
+ printf("After probing clique stuff %d row cuts and %d column cuts\n",
+ cs.sizeRowCuts(),cs.sizeColCuts());
+#endif
+ // can we extend cliques?
+ // make fake model
+ OsiSolverInterface * fakeModel = generator1.cliqueModel(newModel,1);
+ // if above added rows then take out duplicates
+ OsiSolverInterface * fakeModel2 = cliqueIt(*fakeModel,0.0);
+ delete fakeModel;
+ //delete fakeModel2;
+ delete newModel;
+ newModel=fakeModel2;
#ifdef CLIQUE_ANALYSIS
printf("special probing\n");
info.analyze(*newModel);
@@ -4172,7 +5347,8 @@ CglPreProcess::modified(OsiSolverInterface * model,
Deleting all rows and rebuilding invalidates everything, initialSolve will
be required.
*/
- needResolve = true ;
+ if (useSolution)
+ needResolve = true ;
rebuilt = true ;
// Easier to recreate entire matrix
const CoinPackedMatrix * rowCopy = newModel->getMatrixByRow();
@@ -4188,12 +5364,52 @@ CglPreProcess::modified(OsiSolverInterface * model,
for (iRow=0;iRow<numberRows;iRow++) {
keepRow[iRow]=0;
OsiRowCut * thisCut = whichCut[iRow];
- whichCut[iRow]=NULL;
+ //whichCut[iRow]=NULL;
if (rowLower[iRow]>-1.0e20||rowUpper[iRow]<1.0e20) {
#if 0
if (thisCut) {
- printf("Cut on row %d\n",iRow);
- thisCut->print();
+ double * allColumns = new double[numberColumns];
+ int which[]={0,8,11,19,21,29,30,38,42,61,77,90,104,105,7,37};
+ memset(allColumns,0,numberColumns*sizeof(double));
+ for (int k=0;k<sizeof(which)/sizeof(int);k++) {
+ allColumns[which[k]]=1.0;
+ }
+ double lb = thisCut->lb();
+ double ub = thisCut->ub();
+ CoinPackedVector row = thisCut->row();
+ printf("Cut on row %d - %g <= ",iRow,lb);
+ bool feas1=true;
+ double sum1=0.0;
+ for (int k = 0; k < row.getNumElements(); ++k) {
+ CoinBigIndex j = row.getIndices()[k];
+ double value = row.getElements()[k];
+ printf("(%d,%g) ",j,value);
+ sum1 += value*allColumns[j];
+ }
+ if (sum1<lb-1.0e-3||sum1>ub+1.0e-3) {
+ printf(" ******** ");
+ feas1 = false;
+ }
+ printf("<= %g\n",ub);
+ printf("Old row %g <= ",rowLower[iRow]);
+ bool feas2=true;
+ double sum2=0.0;
+ int start=rowStart[iRow];
+ int end = start + rowLength[iRow];
+ for (int k = start; k < end; ++k) {
+ CoinBigIndex j = column[k];
+ double value = rowElements[k];
+ printf("(%d,%g) ",j,value);
+ sum2 += value*allColumns[j];
+ }
+ if (sum2<rowLower[iRow]-1.0e-3||sum2>rowUpper[iRow]+1.0e-3) {
+ printf(" ******** ");
+ feas2 = false;
+ }
+ printf("<= %g\n",rowUpper[iRow]);
+ if (feas1 && !feas2)
+ abort();
+ delete [] allColumns;
}
#endif
if (!thisCut) {
@@ -4292,9 +5508,9 @@ CglPreProcess::modified(OsiSolverInterface * model,
int interesting=0;
double saveLo=lo;
double saveUp=up;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
double nearestLo0=lo;
- double nearestLo1=lo;
+ double nearestLo1=lo;
#endif
double nearestUp0=up;
double nearestUp1=up;
@@ -4305,7 +5521,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
double exact = lo/multiple;
if (fabs(exact-floor(exact+0.5))>1.0e-4) {
interesting +=1;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
nearestLo0 = ceil(exact)*multiple;
#endif
}
@@ -4314,7 +5530,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
exact = lo/multiple;
if (fabs(exact-floor(exact+0.5))>1.0e-4) {
interesting +=2;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
nearestLo1 = ceil(exact)*multiple;
#endif
}
@@ -4336,7 +5552,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
}
}
if (interesting) {
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("Row %d interesting %d lo,up %g,%g singleton %d value %g bounds %g,%g - gcd %g\n",iRow,interesting,saveLo,saveUp,kInt,singletonValue,
columnLower[kInt],columnUpper[kInt],multiple);
printf("Orig lo,up %g,%g %d\n",rowLower[iRow],rowUpper[iRow],end-start);
@@ -4349,13 +5565,13 @@ CglPreProcess::modified(OsiSolverInterface * model,
printf("\n");
#endif
if(columnLower[kInt]) {
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\n"); //think
#endif
interesting=0;
}
newValue = singletonValue;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
double newLoRhs = rowLower[iRow];
double newUpRhs = rowUpper[iRow];
if ((interesting&3)!=0) {
@@ -4364,24 +5580,24 @@ CglPreProcess::modified(OsiSolverInterface * model,
}
#endif
if (saveLo==saveUp&&((interesting&5)==5||(interesting&10)==10)) {
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("INFEAS? ");
#endif
interesting=0; //ninfeas++;
}
if ((interesting&12)) {
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
double value2 = newValue;
newUpRhs = nearestUp0;
#endif
newValue = nearestUp0-nearestUp1;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
if (newValue!=value2) {
printf("??? old newvalue %g ",newValue);
}
#endif
}
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("guess is new lo %g, new up %g, new value %g\n",
newLoRhs,newUpRhs,newValue);
#endif
@@ -4393,7 +5609,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
if (!smallestSum&&interesting==2&&!saveLo&&saveUp>1.0e20) {
newValue = multiple*floor(exact);
newValue *= multiplier;
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("New coefficient for %d will be %g\n",kInt,newValue);
#endif
} else {
@@ -4425,7 +5641,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
rowLower[iRow],rowUpper[iRow]);
} else {
// strengthened to zero!
-#ifdef CLP_INVESTIGATE
+#if CBC_USEFUL_PRINTING>1
printf("CglPreProcess - element strenthened to zero!\n");
#endif
int * cols = CoinCopyOfArray(column+start,length);
@@ -4472,8 +5688,13 @@ CglPreProcess::modified(OsiSolverInterface * model,
}
if (n1!=nFree)
good=false;
+ if (noStrengthening && n > n1) {
+ good=false;
+ //printf("Skipping row %d strengthened row has %d (%d)\n",
+ // iRow,n,n1);
+ }
if (good) {
-#if 0
+#if PRINT_DEBUG >1
printf("Original row %.8d %g <= ",iRow,rowLower[iRow]);
for ( i=0;i<n1;i++)
printf("%g * x%d ",rowElements[start+i],column[start+i]);
@@ -4510,6 +5731,27 @@ CglPreProcess::modified(OsiSolverInterface * model,
}
}
}
+ // Get rid of all whichCut not in cs
+ std::sort(whichCut,whichCut+numberRows);
+ int nCuts=cs.sizeRowCuts();
+ OsiRowCut ** tempCuts = new OsiRowCut * [nCuts+1];
+ for (int i=0;i<nCuts;i++)
+ tempCuts[i]=cs.rowCutPtr(i);
+ std::sort(tempCuts,tempCuts+nCuts);
+ tempCuts[nCuts]=CoinMax(whichCut[numberRows-1],tempCuts[nCuts-1])+1;
+ int iCut=0;
+ void * cut = tempCuts[0];
+ for (int i=0;i<numberRows;i++) {
+ OsiRowCut * thisCut = whichCut[i];
+ if (!thisCut)
+ continue;
+ while (cut<thisCut)
+ cut = tempCuts[++iCut];
+ if (cut>thisCut)
+ delete thisCut;
+ whichCut[i]=NULL;
+ }
+ delete [] tempCuts;
if (rowType_) {
assert (numberRowType_==numberRows);
int numberRowType_=0;
@@ -4538,6 +5780,10 @@ CglPreProcess::modified(OsiSolverInterface * model,
newModel->deleteRows(numberRows,del);
newModel->addRows(build);
numberRows = newModel->getNumRows();
+#if CBC_USEFUL_PRINTING>0
+ printf("After build %d rows and %d columns (%d rows strengthened)\n",
+ numberRows,newModel->getNumCols(),numberStrengthened);
+#endif
if (basis) {
assert (numberRows==basis->getNumArtificial());
newModel->setWarmStart(basis);
@@ -4575,7 +5821,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
// we could look harder for infeasibilities
assert (info.numberVariables()==numberColumns);
int number01 = info.numberIntegers();
- const cliqueEntry * entry = info.fixEntries();
+ const CliqueEntry * entry = info.fixEntries();
const int * toZero = info.toZero();
const int * toOne = info.toOne();
const int * which = info.integerVariable();
@@ -4750,7 +5996,7 @@ CglPreProcess::modified(OsiSolverInterface * model,
/*
Nontrivial bound changes will invalidate current solution.
*/
- if (thisCut->effectiveness() > 1.0) {
+ if (thisCut->effectiveness() > 1.0 && useSolution) {
needResolve = true ;
}
const CoinPackedVector & lbs = thisCut->lbs() ;
@@ -4826,7 +6072,15 @@ CglPreProcess::modified(OsiSolverInterface * model,
//dynamic_cast<CoinWarmStartBasis *>(newModel->getEmptyWarmStart()) ;
//newModel->setWarmStart(slack);
//delete slack ;
+ bool saveHint;
+ OsiHintStrength saveStrength;
+ newModel->getHintParam(OsiDoPresolveInInitial,saveHint,saveStrength);
+ // Do presolves
+ if ((numberFixed+numberTwo)*4>numberColumns)
+ newModel->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry);
+ newModel->setHintParam(OsiDoDualInInitial,true,OsiHintTry);
newModel->initialSolve() ;
+ newModel->setHintParam(OsiDoPresolveInInitial,saveHint,saveStrength);
} else {
newModel->resolve() ;
}
@@ -4852,9 +6106,10 @@ CglPreProcess::modified(OsiSolverInterface * model,
break;
numberChanges += numberChangedThisPass;
if (iPass<numberPasses-1) {
- if ((!numberFixed&&numberChangedThisPass<1000*(numberRows+numberColumns))||iPass==numberPasses-2) {
+ int multiplier = (numberPasses>10) ? numberRows+1000 : 1;
+ if ((!numberFixed&&numberChangedThisPass*multiplier<numberRows+numberColumns)||iPass==numberPasses-2) {
// do special probing at end - but not if very last pass
- if (iBigPass<numberSolvers_-1) {
+ if (iBigPass<numberSolvers_-1 && numberPasses > 4) {
firstGenerator=-1;
lastGenerator=0;
}
@@ -5293,7 +6548,7 @@ CglPreProcess::update(const OsiPresolve * pinfo,
if (rowType_) {
const int * original = pinfo->originalRows();
int numberRows = solver->getNumRows();
-#ifdef COIN_DEVELOP
+#if CBC_USEFUL_PRINTING>1
int nMarked1=0;
for (int i=0;i<pinfo->getNumRows();i++) {
if (rowType_[i])
@@ -5377,7 +6632,9 @@ CglPreProcess::someFixed(OsiSolverInterface & model,
numberToFix = static_cast<int> ((numberColumns-numberContinuous) *(1.0-fractionToKeep));
numberToFix = CoinMax(numberToFix,numberThrow);
numberToFix = CoinMin(number,numberToFix);
+#if CBC_USEFUL_PRINTING
printf("%d columns fixed\n",numberToFix);
+#endif
for (i=0;i<numberToFix;i++) {
int iColumn = sort[i];
double value = solution[iColumn];
@@ -5748,7 +7005,7 @@ CglPreProcess::cliqueIt(OsiSolverInterface & model,
const double *rowLower = model.getRowLower() ;
const double *rowUpper = model.getRowUpper() ;
int numberRows = model.getNumRows() ;
- //int numberColumns = model.getNumCols() ;
+ int numberColumns = model.getNumCols() ;
// Column copy of matrix
//const double * element = model.getMatrixByCol()->getElements();
//const int * row = model.getMatrixByCol()->getIndices();
@@ -5760,51 +7017,143 @@ CglPreProcess::cliqueIt(OsiSolverInterface & model,
const int * column = matrixByRow.getIndices();
const CoinBigIndex * rowStart = matrixByRow.getVectorStarts();
const int * rowLength = matrixByRow.getVectorLengths();
- char * type = new char [numberRows];
- int numberElements=0;
+ char * type = new char [numberRows+3*numberColumns];
+ char * numberInColumn = type+numberRows;
+ char * negativeInColumn = numberInColumn+numberColumns;
+ char * positiveInColumn = negativeInColumn+numberColumns;
+ memset(numberInColumn,0,3*numberColumns);
+ // First pass to mark columns
int numberCliques=0;
+ //int numberOddCliques=0;
for (int i=0;i<numberRows;i++) {
type[i]=-1;
- if (rowUpper[i]!=1.0||
- (rowLower[i]>0.0&&rowLower[i]!=1.0))
- continue;
- bool possible = true;
- CoinBigIndex start = rowStart[i];
- CoinBigIndex end = start + rowLength[i];
- int n=0;
- for (CoinBigIndex j=start;j<end;j++) {
- int iColumn = column[j];
- if (upper[iColumn]==1.0&&lower[iColumn]==0.0&&
- model.isInteger(iColumn)&&elementByRow[j]==1.0) {
- n++;
- } else {
+ double rupper=rowUpper[i];
+ double rlower=rowLower[i];
+ if (rupper==1.0&&(rlower<=0.0||rlower==1.0)) {
+ bool possible = true;
+ CoinBigIndex start = rowStart[i];
+ CoinBigIndex end = start + rowLength[i];
+ int n=0;
+ for (CoinBigIndex j=start;j<end;j++) {
+ int iColumn = column[j];
+ if (upper[iColumn]==1.0&&lower[iColumn]==0.0&&
+ model.isInteger(iColumn)&&elementByRow[j]==1.0) {
+ n++;
+ } else {
+ possible=false;
+ break;
+ }
+ }
+ if (n>1000)
possible=false;
- break;
+ if (possible) {
+ for (CoinBigIndex j=start;j<end;j++) {
+ int iColumn = column[j];
+ if (numberInColumn[iColumn]<100)
+ numberInColumn[iColumn]++;
+ }
+ numberCliques++;
+ if (rowLower[i]>0.0)
+ type[i]=1;
+ else
+ type[i]=0;
}
- }
- // temp fix to get working faster for client
- if (rowLower[i]>0.0||n!=2)
- possible=false;
- if (possible) {
- numberElements+=n;
- numberCliques++;
- if (rowLower[i]>0.0)
- type[i]=1;
+ } else if ((rupper==0.0||rlower==0.0)&&rowLength[i]==2) {
+ int multiplier;
+ if (rupper==0.0&&rlower<-1.0e20)
+ multiplier=1;
+ else if (rlower==0.0&&rupper>1.0e20)
+ multiplier=-1;
else
- type[i]=0;
+ multiplier=0;
+ if (multiplier) {
+ CoinBigIndex start = rowStart[i];
+ if (fabs(elementByRow[start])==1.0&&
+ fabs(elementByRow[start+1])==1.0) {
+ if (elementByRow[start]*elementByRow[start+1]==-1.0) {
+ int iPColumn,iNColumn;
+ if (multiplier*elementByRow[start]==1.0) {
+ iPColumn = column[start];
+ iNColumn = column[start+1];
+ } else {
+ iNColumn = column[start];
+ iPColumn = column[start+1];
+ }
+ if (upper[iPColumn]==1.0&&lower[iPColumn]==0.0&&
+ model.isInteger(iPColumn)&&
+ upper[iNColumn]==1.0&&lower[iNColumn]==0.0&&
+ model.isInteger(iNColumn)) {
+ type[i]=-2;
+ if (positiveInColumn[iPColumn]<100)
+ positiveInColumn[iPColumn]++;
+ if (negativeInColumn[iNColumn]<100)
+ negativeInColumn[iNColumn]++;
+ }
+ }
+ }
+ }
+ }
+ }
+#if CBC_USEFUL_PRINTING>0
+ // look at odd cliques
+ int nOdd=0;
+ for (int iColumn=0;iColumn<numberColumns;iColumn++) {
+ if (!numberInColumn[iColumn]&&negativeInColumn[iColumn]>1) {
+ nOdd++;
+ }
+ }
+ if (nOdd)
+ printf("%d possible odd cliques?\n",nOdd);
+#endif
+ double numberElements=0;
+ if (numberCliques>CoinMax(1,static_cast<int>(cliquesNeeded*numberRows))) {
+ numberCliques=0;
+ for (int i=0;i<numberRows;i++) {
+ if (type[i]>=0) {
+ bool possible = true;
+ int n=0;
+ CoinBigIndex start = rowStart[i];
+ CoinBigIndex end = start + rowLength[i];
+ for (CoinBigIndex j=start;j<end;j++) {
+ int iColumn = column[j];
+ if (numberInColumn[iColumn]<2) {
+ possible=false;
+ break;
+ } else {
+ n++;
+ }
+ }
+ if (possible) {
+ numberElements+=n*(n-1);
+ numberCliques++;
+ } else {
+ type[i]=-1;
+ }
+ }
}
}
OsiSolverInterface * newSolver = NULL;
if (numberCliques>CoinMax(1,static_cast<int>(cliquesNeeded*numberRows))) {
+ if (numberElements<5.0e7&&numberElements<numberCliques*100) {
+#if CBC_USEFUL_PRINTING>0
+ printf("%d cliques needing 2 * %g ints\n",
+ numberCliques,numberElements);
+#endif
#ifdef BRON_TIMES
- double time1 = CoinCpuTime();
+ double time1 = CoinCpuTime();
#endif
- CglBK bk(model,type,numberElements);
- bk.bronKerbosch();
- newSolver = bk.newSolver(model);
+ CglBK bk(model,type,static_cast<int>(numberElements));
+ bk.bronKerbosch();
+ newSolver = bk.newSolver(model);
#ifdef BRON_TIMES
- printf("Time %g - bron called %d times\n",CoinCpuTime()-time1,numberTimesX);
+ printf("Time %g - bron called %d times\n",CoinCpuTime()-time1,numberTimesX);
+#endif
+ } else {
+#if CBC_USEFUL_PRINTING>0
+ printf("*** %d cliques needing 2 * %g ints\n",
+ numberCliques,numberElements);
#endif
+ }
}
delete [] type;
return newSolver;
@@ -5854,6 +7203,7 @@ CglBK::CglBK(const OsiSolverInterface & model, const char * rowType,
originalRow_ = new int [numberElements];
dominated_ = new int [numberRows_];
CoinZeroN(dominated_,numberRows_);
+ //int inputNumber=numberElements;
numberElements=0;
numberPossible_=0;
rowType_=rowType;
@@ -5940,6 +7290,7 @@ CglBK::CglBK(const OsiSolverInterface & model, const char * rowType,
int iRow = row[j];
if (rowType[iRow]>=0&&!dominated_[iRow]) {
assert(element[j]==1.0);
+#if 0
CoinBigIndex r=rowStart[iRow];
assert (rowLength[iRow]==2);
int kColumn = column[r];
@@ -5947,6 +7298,16 @@ CglBK::CglBK(const OsiSolverInterface & model, const char * rowType,
kColumn=column[r+1];
originalRow_[numberElements]=iRow;
otherColumn_[numberElements++]=kColumn;
+#else
+ for (CoinBigIndex r=rowStart[iRow];r<rowStart[iRow]+rowLength[iRow];r++) {
+ int kColumn = column[r];
+ if (kColumn!=iColumn) {
+ originalRow_[numberElements]=iRow;
+ otherColumn_[numberElements++]=kColumn;
+ }
+ }
+
+#endif
}
}
if (numberElements>start_[iColumn]) {
@@ -5954,6 +7315,7 @@ CglBK::CglBK(const OsiSolverInterface & model, const char * rowType,
}
}
}
+ //printf("input number %d, computed number %d\n",inputNumber,numberElements);
start_[numberColumns_]=numberElements;
numberCandidates_=numberPossible_;
numberIn_=0;
@@ -6062,7 +7424,12 @@ CglBK::bronKerbosch()
int jColumn = otherColumn_[j];
if (mark_[jColumn]) {
int iRow=originalRow_[j];
- dominated_[iRow]++;
+ /* only get rid of <= cliques
+ can we find dominating clique??
+ should really look further if dominating clique also ==
+ or could make that == */
+ if (rowType_[iRow]==0)
+ dominated_[iRow]++;
}
}
}
@@ -6208,8 +7575,10 @@ CglBK::newSolver(const OsiSolverInterface & model)
}
}
int nAdd=cliqueMatrix_->getNumRows();
+#if CBC_USEFUL_PRINTING>0
printf ("%d rows can be deleted with %d new cliques\n",
nDelete,nAdd);
+#endif
OsiSolverInterface * newSolver = NULL;
if (nDelete>nAdd) {
@@ -6227,6 +7596,12 @@ CglBK::newSolver(const OsiSolverInterface & model)
//const int * rowLength = cliqueMatrix_->getVectorLengths();
assert (cliqueMatrix_->getNumElements()==rowStart[nAdd]);
newSolver->addRows(nAdd,rowStart,column,elementByRow,lower,upper);
+#if PRINT_DEBUG
+ for (int i=0;i<nAdd;i++) {
+ if (rowStart[i+1]-rowStart[i]>10)
+ printf("Clique %d has %d entries\n",i,rowStart[i+1]-rowStart[i]);
+ }
+#endif
delete [] lower;
delete [] upper;
}
diff --git a/src/CglPreProcess/CglPreProcess.hpp b/src/CglPreProcess/CglPreProcess.hpp
index 58c6e4f..65c04ca 100644
--- a/src/CglPreProcess/CglPreProcess.hpp
+++ b/src/CglPreProcess/CglPreProcess.hpp
@@ -347,6 +347,8 @@ private:
2 - don't do probing
4 - don't do duplicate rows
8 - don't do cliques
+ 16 - some heavy probing options
+ 64 - very heavy probing
*/
int options_;
/** Row types (may be NULL)
diff --git a/src/CglPreProcess/Makefile.in b/src/CglPreProcess/Makefile.in
index 1f4e4da..fc93dd5 100644
--- a/src/CglPreProcess/Makefile.in
+++ b/src/CglPreProcess/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglProbing/CglProbing.cpp b/src/CglProbing/CglProbing.cpp
index 59c1932..e569995 100644
--- a/src/CglProbing/CglProbing.cpp
+++ b/src/CglProbing/CglProbing.cpp
@@ -1,5 +1,4 @@
-// $Id: CglProbing.cpp 1202 2014-03-17 13:58:06Z forrest $
-
+// $Id: CglProbing.cpp 1321 2016-01-02 09:46:06Z forrest $
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -1336,11 +1335,12 @@ int CglProbing::generateCutsAndModify(const OsiSolverInterface & si,
}
int saveMode = mode_;
bool rowCliques=false;
- if (!mode_) {
+ if (!(mode_&15)) {
if (info->pass!=4||info->inTree) {
mode_=1;
} else {
saveMode=1; // make sure do just once
+ mode_=0;
rowCliques=true;
}
}
@@ -1651,7 +1651,6 @@ int CglProbing::gutsOfGenerateCuts(const OsiSolverInterface & si,
if (fabs(cutoff)>1.0e30)
assert (cutoff>1.0e30);
int mode=mode_;
-
int nCols=si.getNumCols();
// get integer variables
@@ -1867,7 +1866,7 @@ int CglProbing::gutsOfGenerateCuts(const OsiSolverInterface & si,
if (info->strengthenRow&&!info->pass&&(rowLower[i]<-1.0e20||rowUpper[i]>1.0e20)) {
int nPlus=0;
int nMinus=0;
- for (CoinBigIndex j=rowStart[i];j<rowStart[i+1];j++) {
+ for (CoinBigIndex j=rowStart[i];j<rowStart[i]+rowLength[i];j++) {
int jColumn=column[j];
if (intVar[jColumn]&&colLower[jColumn]==0.0&&colUpper[jColumn]==1.0) {
double value=elements[j];
@@ -1885,7 +1884,7 @@ int CglProbing::gutsOfGenerateCuts(const OsiSolverInterface & si,
double effectiveness=0.0;
if (nPlus==1&&rowUpper[i]>0.0&&rowUpper[i]<1.0e10) {
// can make element smaller
- for (CoinBigIndex j=rowStart[i];j<rowStart[i+1];j++) {
+ for (CoinBigIndex j=rowStart[i];j<rowStart[i]+rowLength[i];j++) {
double value=elements[j];
if (value>0.0) {
elements[j] -= rowUpper[i];
@@ -1897,7 +1896,7 @@ int CglProbing::gutsOfGenerateCuts(const OsiSolverInterface & si,
rowUpper[i]=0.0;
} else if (nMinus==1&&rowLower[i]<0.0&&rowLower[i]>-1.0e10) {
// can make element smaller in magnitude
- for (CoinBigIndex j=rowStart[i];j<rowStart[i+1];j++) {
+ for (CoinBigIndex j=rowStart[i];j<rowStart[i]+rowLength[i];j++) {
double value=elements[j];
if (value<0.0) {
elements[j] -= rowLower[i];
@@ -2922,6 +2921,29 @@ int CglProbing::gutsOfGenerateCuts(const OsiSolverInterface & si,
}
return ninfeas;
}
+// Choose tighter bounds
+static void cleanBounds(int way,int & nFix,int * index,double * element)
+{
+ CoinSort_2(index,index+nFix,element);
+ int last=-1;
+ int n=0;
+ for (int i=0;i<nFix;i++) {
+ if (index[i]>last) {
+ index[n]=index[i];
+ element[n++]=element[i];
+ last=index[i];
+ } else if (way>0) {
+ // tighter ub
+ if (element[n-1]>element[i])
+ element[n-1]=element[i];
+ } else {
+ // tighter lb
+ if (element[n-1]<element[i])
+ element[n-1]=element[i];
+ }
+ }
+ nFix=n;
+}
// Does probing and adding cuts
int CglProbing::probe( const OsiSolverInterface & si,
const OsiRowCutDebugger *
@@ -3008,6 +3030,11 @@ int CglProbing::probe( const OsiSolverInterface & si,
nRowsFake=nRows;
}
row_cut rowCut(nRowsFake, !info->inTree);
+ row_cut * rowCutFake = NULL;
+ if ((mode_&8)!=0) {
+ // redo to be more compact
+ rowCutFake = new row_cut(10000, !info->inTree);
+ }
totalTimesCalled_++;
const int * column = rowCopy->getIndices();
const CoinBigIndex * rowStart = rowCopy->getVectorStarts();
@@ -3256,7 +3283,13 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
}
}
- int leftTotalStack=maxStack*CoinMax(200,maxProbe);
+ double leftTotalStackD=maxStack;
+ leftTotalStackD *= CoinMax(200,maxProbe);
+ int leftTotalStack;
+ if (leftTotalStackD<COIN_INT_MAX)
+ leftTotalStack=static_cast<int>(leftTotalStackD);
+ else
+ leftTotalStack=COIN_INT_MAX;
#ifdef PROBING5
if (!info->inTree&&!info->pass)
leftTotalStack = 1234567890;
@@ -4544,6 +4577,26 @@ int CglProbing::probe( const OsiSolverInterface & si,
break;
}
}
+ if (rowCutFake&&!notFeasible&&iway==1) {
+ assert (j==stackC[0]);
+ // add to cliques
+ for (istackC=1;istackC<nstackC;istackC++) {
+ int icol=stackC[istackC];
+ // for now back to just 0-1
+ if (!colUpper[icol]&&!saveL[istackC]&&saveU[istackC]==1.0) {
+ OsiRowCut rc;
+ rc.setLb(-COIN_DBL_MAX);
+ rc.setUb(1.0);
+ index[0]=icol;
+ element[0]=1.0;
+ index[1]=j;
+ element[1]= 1.0;
+ rc.setRow(2,index,element,false);
+ rowCutFake->addCutIfNotDuplicate(rc);
+ //printf("XX x%d + x%d <= 1\n",j,icol);
+ }
+ }
+ }
if (!notFeasible&&saveFixingInfo) {
// save fixing info
assert (j==stackC[0]);
@@ -4592,6 +4645,7 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
nFix=0;
}
@@ -4611,6 +4665,7 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
}
// could tighten continuous as well
@@ -4670,11 +4725,14 @@ int CglProbing::probe( const OsiSolverInterface & si,
// create cut
OsiRowCut rc;
rc.setLb(-COIN_DBL_MAX);
- rc.setUb(colUpper[icol]-down*boundChange);
+ double newUb = colUpper[icol]-down*boundChange;
+ if (!intVar[icol]&&newUb>1.0e3)
+ newUb += 1.0e-7*newUb;
+ rc.setUb(newUb);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= - boundChange;
+ element[1] = -boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colUpper[icol])/
boundChange;
@@ -4696,12 +4754,15 @@ int CglProbing::probe( const OsiSolverInterface & si,
+ boundChange*solMove-primalTolerance_)) {
// create cut
OsiRowCut rc;
- rc.setLb(colLower[icol]-down*boundChange);
+ double newLb = colLower[icol]-down*boundChange;
+ if (!intVar[icol]&&fabs(newLb)>1.0e3)
+ newLb -= 1.0e-7*fabs(newLb);
+ rc.setLb(newLb);
rc.setUb(COIN_DBL_MAX);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]=- boundChange;
+ element[1] = -boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colLower[icol])/
boundChange;
@@ -5170,6 +5231,7 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
nFix=0;
}
@@ -5230,6 +5292,7 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
}
// could tighten continuous as well
@@ -5264,11 +5327,14 @@ int CglProbing::probe( const OsiSolverInterface & si,
// create cut
OsiRowCut rc;
rc.setLb(-COIN_DBL_MAX);
- rc.setUb(colUpper[icol]+up*boundChange);
+ double newUb = colUpper[icol]+up*boundChange;
+ if (!intVar[icol]&&newUb>1.0e3)
+ newUb += 1.0e-7*newUb;
+ rc.setUb(newUb);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= + boundChange;
+ element[1] = +boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colUpper[icol])/
boundChange;
@@ -5290,12 +5356,15 @@ int CglProbing::probe( const OsiSolverInterface & si,
+ boundChange*solMove-primalTolerance_)) {
// create cut
OsiRowCut rc;
- rc.setLb(colLower[icol]+up*boundChange);
+ double newLb = colLower[icol]+up*boundChange;
+ if (!intVar[icol]&&fabs(newLb)>1.0e3)
+ newLb -= 1.0e-7*fabs(newLb);
+ rc.setLb(newLb);
rc.setUb(COIN_DBL_MAX);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= + boundChange;
+ element[1] = +boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colLower[icol])/
boundChange;
@@ -5803,6 +5872,18 @@ int CglProbing::probe( const OsiSolverInterface & si,
}
}
#endif
+ if (rowCutFake) {
+ numberCliques_ = rowCutFake->numberCuts();
+ CoinBigIndex numberElements = 2*numberCliques_;
+ cliqueEntry_ = new CliqueEntry [numberElements];
+ int * column = reinterpret_cast<int *>(cliqueEntry_);
+ numberElements = 0;
+ for (int iCut=0;iCut<numberCliques_;iCut++) {
+ column[numberElements++]=rowCutFake->cut(iCut)->row().getIndices()[0];
+ column[numberElements++]=rowCutFake->cut(iCut)->row().getIndices()[1];
+ }
+ }
+ delete rowCutFake;
return (ninfeas);
}
// Does probing and adding cuts
@@ -5843,7 +5924,13 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
int * cliqueStack=NULL;
int * cliqueCount=NULL;
int * to_01=NULL;
+ int * cliqueAdd = NULL;
+ int maxCliqueAdded=nCols+nRows;
+ int numberCliqueAdded=0;
+ int * cliqueAdd2 = NULL;
if (!mode_) {
+ cliqueAdd = new int [2*maxCliqueAdded];
+ cliqueAdd2 = cliqueAdd + maxCliqueAdded;
to_01 = new int[nCols];
cliqueStack = new int[numberCliques_];
cliqueCount = new int[numberCliques_];
@@ -6619,6 +6706,7 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
nFix=0;
}
@@ -6638,6 +6726,7 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
}
// could tighten continuous as well
@@ -6729,11 +6818,14 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
// create cut
OsiRowCut rc;
rc.setLb(-COIN_DBL_MAX);
- rc.setUb(colUpper[icol]-down*boundChange);
+ double newUb = colUpper[icol]-down*boundChange;
+ if (!intVar[icol]&&newUb>1.0e3)
+ newUb += 1.0e-7*newUb;
+ rc.setUb(newUb);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= - boundChange;
+ element[1] = -boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colUpper[icol])/
boundChange;
@@ -6756,12 +6848,15 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
+ boundChange*solMove-primalTolerance_)) {
// create cut
OsiRowCut rc;
- rc.setLb(colLower[icol]-down*boundChange);
+ double newLb = colLower[icol]-down*boundChange;
+ if (!intVar[icol]&&fabs(newLb)>1.0e3)
+ newLb -= 1.0e-7*fabs(newLb);
+ rc.setLb(newLb);
rc.setUb(COIN_DBL_MAX);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]=- boundChange;
+ element[1] = -boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colLower[icol])/
boundChange;
@@ -6793,6 +6888,13 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
// restore
cliqueCount[iClique]= cliqueStart_[iClique+1]-cliqueStart_[iClique];
if (!size) {
+ if (numberCliqueAdded<maxCliqueAdded) {
+ printf("Can add %d (going to 0) to clique %d (%d entries)\n",
+ j,iClique,cliqueCount[iClique]);
+ cliqueAdd[numberCliqueAdded]=j;
+ cliqueAdd2[numberCliqueAdded]=iClique;
+ numberCliqueAdded++;
+ }
if (logLevel_>1)
printf("** could extend clique by adding j!\n");
}
@@ -6997,6 +7099,7 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
nFix=0;
}
@@ -7019,6 +7122,7 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
}
// could tighten continuous as well
@@ -7085,11 +7189,14 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
// create cut
OsiRowCut rc;
rc.setLb(-COIN_DBL_MAX);
- rc.setUb(colUpper[icol]+up*boundChange);
+ double newUb = colUpper[icol]+up*boundChange;
+ if (!intVar[icol]&&newUb>1.0e3)
+ newUb += 1.0e-7*newUb;
+ rc.setUb(newUb);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= + boundChange;
+ element[1] = +boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colUpper[icol])/
boundChange;
@@ -7112,12 +7219,15 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
+ boundChange*solMove-primalTolerance_)) {
// create cut
OsiRowCut rc;
- rc.setLb(colLower[icol]+up*boundChange);
+ double newLb = colLower[icol]+up*boundChange;
+ if (!intVar[icol]&&fabs(newLb)>1.0e3)
+ newLb -= 1.0e-7*fabs(newLb);
+ rc.setLb(newLb);
rc.setUb(COIN_DBL_MAX);
index[0]=icol;
element[0]=1.0;
index[1]=j;
- element[1]= + boundChange;
+ element[1] = +boundChange;
// effectiveness is how far j moves
double newSol = (colsol[icol]-colLower[icol])/
boundChange;
@@ -7147,6 +7257,13 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
// restore
cliqueCount[iClique]= cliqueStart_[iClique+1]-cliqueStart_[iClique];
if (!size) {
+ if (numberCliqueAdded<maxCliqueAdded) {
+ printf("Can add %d (going to 1) to clique %d (%d entries)\n",
+ j,iClique,cliqueCount[iClique]);
+ cliqueAdd[numberCliqueAdded]=j|0x80000000;
+ cliqueAdd2[numberCliqueAdded]=iClique;
+ numberCliqueAdded++;
+ }
if (logLevel_>1)
printf("** could extend clique by adding j!\n");
}
@@ -7325,9 +7442,101 @@ int CglProbing::probeCliques( const OsiSolverInterface & si,
}
}
}
+ if (numberCliqueAdded) {
+ CoinSort_2(cliqueAdd2,cliqueAdd2+numberCliqueAdded,cliqueAdd);
+ // do cliqueStart and cliqueEntry
+ int numberEntries = cliqueStart_[numberCliques_];
+ numberEntries += numberCliqueAdded;
+ CliqueEntry * entry = new CliqueEntry [numberEntries];
+ // use cliqueCount
+ memset(cliqueCount,0,numberCliques_*sizeof(int));
+ for (int i=0;i<numberCliqueAdded;i++) {
+ cliqueCount[cliqueAdd2[i]]++;
+ }
+ int nAdd2 = numberCliqueAdded;
+ int last = cliqueStart_[numberCliques_];
+ int put = last+numberCliqueAdded;
+ cliqueStart_[numberCliques_] = put;
+ for (int iClique=numberCliques_-1;iClique>=0;iClique--) {
+ // add in new
+ for (int i=0;i<cliqueCount[iClique];i++) {
+ --nAdd2;
+ int iColumn = cliqueAdd[nAdd2] &0x7fffffff;
+ bool oneFixes = ((cliqueAdd[nAdd2]&0x80000000)!=0);
+ --put;
+ setSequenceInCliqueEntry(entry[put],iColumn);
+ setOneFixesInCliqueEntry(entry[put],oneFixes);
+ assert(iColumn>=0 && iColumn<numberColumns_);
+ }
+ // move existing
+ int start = cliqueStart_[iClique];
+ for (int i=last-1;i>=start;i--)
+ entry[--put]=cliqueEntry_[i];
+ last = start;
+ cliqueStart_[iClique]=put;
+ }
+ assert (!put);
+ delete [] cliqueEntry_;
+ cliqueEntry_ = entry;
+ for (int j=0;j<numberEntries;j++) {
+ assert(sequenceInCliqueEntry(cliqueEntry_[j])>=0);
+ assert(sequenceInCliqueEntry(cliqueEntry_[j])<numberColumns_);
+ }
+ // now create other stuff
+ int * which = cliqueAdd;
+ delete [] whichClique_;
+ assert (nCols==numberColumns_);
+ whichClique_ = new int[numberEntries];
+ for (int i=0;i<numberColumns_;i++) {
+ oneFixStart_[i]=0;
+ zeroFixStart_[i]=0;
+ endFixStart_[i]=0;
+ }
+ // Now do column lists
+ // First do counts
+ for (int iClique=0;iClique<numberCliques_;iClique++) {
+ for (int j=cliqueStart_[iClique];j<cliqueStart_[iClique+1];j++) {
+ int iColumn = sequenceInCliqueEntry(cliqueEntry_[j]);
+ if (oneFixesInCliqueEntry(cliqueEntry_[j]))
+ oneFixStart_[iColumn]++;
+ else
+ zeroFixStart_[iColumn]++;
+ }
+ }
+ // now get starts and use which and end as counters
+ numberEntries=0;
+ for (int iColumn=0;iColumn<numberColumns_;iColumn++) {
+ if (oneFixStart_[iColumn]>=0) {
+ int n1=oneFixStart_[iColumn];
+ int n2=zeroFixStart_[iColumn];
+ oneFixStart_[iColumn]=numberEntries;
+ which[iColumn]=numberEntries;
+ numberEntries += n1;
+ zeroFixStart_[iColumn]=numberEntries;
+ endFixStart_[iColumn]=numberEntries;
+ numberEntries += n2;
+ }
+ }
+ // now put in
+ for (int iClique=0;iClique<numberCliques_;iClique++) {
+ for (int j=cliqueStart_[iClique];j<cliqueStart_[iClique+1];j++) {
+ int iColumn = sequenceInCliqueEntry(cliqueEntry_[j]);
+ if (oneFixesInCliqueEntry(cliqueEntry_[j])) {
+ int put = which[iColumn];
+ which[iColumn]++;
+ whichClique_[put]=iClique;
+ } else {
+ int put = endFixStart_[iColumn];
+ endFixStart_[iColumn]++;
+ whichClique_[put]=iClique;
+ }
+ }
+ }
+ }
delete [] cliqueStack;
delete [] cliqueCount;
delete [] to_01;
+ delete [] cliqueAdd;
delete [] stackC0;
delete [] lo0;
delete [] up0;
@@ -8036,6 +8245,7 @@ CglProbing::probeSlacks( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
nFix=0;
}
@@ -8055,6 +8265,7 @@ CglProbing::probeSlacks( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
}
// could tighten continuous as well
@@ -8300,6 +8511,7 @@ CglProbing::probeSlacks( const OsiSolverInterface & si,
}
if (nFix) {
nTot=nFix;
+ cleanBounds(-1,nFix,index,element);
cc.setLbs(nFix,index,element);
nFix=0;
}
@@ -8322,6 +8534,7 @@ CglProbing::probeSlacks( const OsiSolverInterface & si,
}
if (nFix) {
nTot+=nFix;
+ cleanBounds(1,nFix,index,element);
cc.setUbs(nFix,index,element);
}
// could tighten continuous as well
@@ -8623,7 +8836,7 @@ int CglProbing::snapshot ( const OsiSolverInterface & si,
int returnCode=0;
int ninfeas=
tighten(colLower_, colUpper_, column, rowElements,
- rowStart, NULL,rowLength, rowLower_, rowUpper_,
+ rowStart, rowStartPos,rowLength, rowLower_, rowUpper_,
numberRows_, numberColumns_, intVar, 5, primalTolerance_);
delete [] rowStartPos;
if (ninfeas) {
@@ -8655,7 +8868,7 @@ int CglProbing::snapshot ( const OsiSolverInterface & si,
int * index = new int[numberRows_];
int nDrop=0,nKeep=0;
for (i=0;i<numberRows_;i++) {
- if (rowLower_[i]<-1.0e30&&rowUpper_[i]>1.0e30) {
+ if (rowLower_[i]<-1.0e30&&rowUpper_[i]>1.0e30&&false) {
index[nDrop++]=i;
} else {
rowLower_[nKeep]=rowLower_[i];
@@ -8722,7 +8935,8 @@ void CglProbing::deleteSnapshot()
// Mode stuff
void CglProbing::setMode(int mode)
{
- if (mode>=0&&mode<3) {
+ int mode2 = mode&7;
+ if (mode2>=0&&mode2<3) {
// take off bottom bit
mode_ &= ~15;
mode_ |= mode;
@@ -8984,12 +9198,12 @@ CglProbing::CglProbing ( const CglProbing & rhs)
else
lookedAt_ = NULL;
if (numberCliques_) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
CoinMemcpyN(rhs.cliqueType_,numberCliques_,cliqueType_);
cliqueStart_ = new int [numberCliques_+1];
CoinMemcpyN(rhs.cliqueStart_,(numberCliques_+1),cliqueStart_);
int n = cliqueStart_[numberCliques_];
- cliqueEntry_ = new cliqueEntry [n];
+ cliqueEntry_ = new CliqueEntry [n];
CoinMemcpyN(rhs.cliqueEntry_,n,cliqueEntry_);
oneFixStart_ = new int [numberColumns_];
CoinMemcpyN(rhs.oneFixStart_,numberColumns_,oneFixStart_);
@@ -9161,12 +9375,12 @@ CglProbing::operator=(
else
lookedAt_ = NULL;
if (numberCliques_) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
CoinMemcpyN(rhs.cliqueType_,numberCliques_,cliqueType_);
cliqueStart_ = new int [numberCliques_+1];
CoinMemcpyN(rhs.cliqueStart_,(numberCliques_+1),cliqueStart_);
int n = cliqueStart_[numberCliques_];
- cliqueEntry_ = new cliqueEntry [n];
+ cliqueEntry_ = new CliqueEntry [n];
CoinMemcpyN(rhs.cliqueEntry_,n,cliqueEntry_);
oneFixStart_ = new int [numberColumns_];
CoinMemcpyN(rhs.oneFixStart_,numberColumns_,oneFixStart_);
@@ -9384,9 +9598,9 @@ CglProbing::createCliques( OsiSolverInterface & si,
}
}
if (numberCliques_>0) {
- cliqueType_ = new cliqueType [numberCliques_];
+ cliqueType_ = new CliqueType [numberCliques_];
cliqueStart_ = new int [numberCliques_+1];
- cliqueEntry_ = new cliqueEntry [numberEntries];
+ cliqueEntry_ = new CliqueEntry [numberEntries];
oneFixStart_ = new int [numberColumns_];
zeroFixStart_ = new int [numberColumns_];
endFixStart_ = new int [numberColumns_];
@@ -9557,6 +9771,83 @@ CglProbing::deleteCliques()
cliqueRowStart_=NULL;
numberCliques_=0;
}
+/* Create a fake model by adding cliques
+ if type&4 then delete rest of model first,
+ if 1 then add proper cliques, 2 add fake cliques */
+OsiSolverInterface *
+CglProbing::cliqueModel(const OsiSolverInterface * model,
+ int type)
+{
+ OsiSolverInterface * newModel = model->clone();
+ if ((type&4)!=0) {
+ int numberRows = newModel->getNumRows();
+ int * which =new int [numberRows];
+ for (int i=0;i<numberRows;i++)
+ which[i]=i;
+ newModel->deleteRows(numberRows,which);
+ delete [] which;
+ }
+ type &= 3;
+ if (type!=2) {
+ CoinBigIndex numberElements = cliqueStart_[numberCliques_];
+ int * column = new int [numberElements];
+ double * element = new double [numberElements];
+ double * rowLower = new double [numberCliques_];
+ double * rowUpper = new double [numberCliques_];
+ numberElements = 0;
+ for (int iClique=0;iClique<numberCliques_;iClique++) {
+ int nMinus=0;
+ for (int j=cliqueStart_[iClique];j<cliqueStart_[iClique+1];j++) {
+ int iColumn = sequenceInCliqueEntry(cliqueEntry_[j]);
+ column[numberElements]=iColumn;
+ double value;
+ if (oneFixesInCliqueEntry(cliqueEntry_[j])) {
+ value=1.0;
+ } else {
+ value=-1.0;
+ nMinus++;
+ }
+ element[numberElements++]=value;
+ }
+ rowLower[iClique]=-COIN_DBL_MAX;
+ rowUpper[iClique]=1-nMinus;
+ }
+ newModel->addRows(numberCliques_,cliqueStart_,column,element,
+ rowLower,rowUpper);
+ delete [] column;
+ delete [] element;
+ delete [] rowLower;
+ delete [] rowUpper;
+ } else {
+ int numberCuts = numberCliques_;
+ CoinBigIndex numberElements = 2*numberCuts;
+ int * column = new int [numberElements];
+ double * element = new double [numberElements];
+ double * rowLower = new double [numberCuts];
+ double * rowUpper = new double [numberCuts];
+ CoinBigIndex * start = new CoinBigIndex [numberCuts+1];
+ start[0]=0;
+ numberElements = 0;
+ int * entry = reinterpret_cast<int *>(cliqueEntry_);
+ for (int iCut=0;iCut<numberCuts;iCut++) {
+ column[numberElements]=entry[numberElements];
+ element[numberElements++]=1.0;
+ column[numberElements]=entry[numberElements];
+ element[numberElements++]=1.0;
+ rowLower[iCut]=0.0;
+ rowUpper[iCut]=1.0;
+ start[iCut+1]=numberElements;
+ }
+ newModel->addRows(numberCuts,start,column,element,
+ rowLower,rowUpper);
+ delete [] column;
+ delete [] element;
+ delete [] rowLower;
+ delete [] rowUpper;
+ delete [] start;
+ }
+ return newModel;
+}
/*
Returns true if may generate Row cuts in tree (rather than root node).
Used so know if matrix will change in tree. Really
@@ -9590,7 +9881,7 @@ CglProbing::setupRowCliqueInformation(const OsiSolverInterface & si)
cliqueRowStart_ = new int [numberRows_+1];
cliqueRowStart_[0]=0;
// Temporary array while building list
- cliqueEntry ** array = new cliqueEntry * [numberRows_];
+ CliqueEntry ** array = new CliqueEntry * [numberRows_];
// Which cliques in use
int * which = new int[numberCliques_];
int * count = new int[numberCliques_];
@@ -9624,7 +9915,7 @@ CglProbing::setupRowCliqueInformation(const OsiSolverInterface & si)
// find largest cliques
bool finished=false;
int numberInThis=0;
- cliqueEntry * entries = NULL;
+ CliqueEntry * entries = NULL;
array[iRow]=entries;
while (!finished) {
int largest=1;
@@ -9640,7 +9931,7 @@ CglProbing::setupRowCliqueInformation(const OsiSolverInterface & si)
if (whichClique>=0&&largest<numberFree) {
if (!numberInThis) {
int length=rowLength[iRow];
- entries = new cliqueEntry [length];
+ entries = new CliqueEntry [length];
array[iRow]=entries;
for (int i=0;i<length;i++) {
setOneFixesInCliqueEntry(entries[i],false);
@@ -9699,7 +9990,7 @@ CglProbing::setupRowCliqueInformation(const OsiSolverInterface & si)
delete [] count;
delete [] back;
// Now put info in one array
- cliqueRow_ = new cliqueEntry [cliqueRowStart_[numberRows_]];
+ cliqueRow_ = new CliqueEntry [cliqueRowStart_[numberRows_]];
for (iRow=0;iRow<numberRows_;iRow++) {
if (array[iRow]) {
int start = cliqueRowStart_[iRow];
@@ -9873,4 +10164,5 @@ CglImplication::generateCpp( FILE * fp)
fprintf(fp,"0#include \"CglImplication.hpp\"\n");
fprintf(fp,"3 CglImplication implication;\n");
return "implication";
+
}
diff --git a/src/CglProbing/CglProbing.hpp b/src/CglProbing/CglProbing.hpp
index 41ef835..5ca8996 100644
--- a/src/CglProbing/CglProbing.hpp
+++ b/src/CglProbing/CglProbing.hpp
@@ -1,4 +1,4 @@
-// $Id: CglProbing.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglProbing.hpp 1201 2014-03-07 17:24:04Z forrest $
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -126,6 +126,11 @@ public:
int minimumSize=2, int maximumSize=100);
/// Delete all clique information
void deleteCliques();
+ /** Create a fake model by adding cliques
+ if type&4 then delete rest of model first,
+ if 1 then add proper cliques, 2 add fake cliques */
+ OsiSolverInterface * cliqueModel(const OsiSolverInterface * model,
+ int type);
//@}
/**@name Get tighter column bounds */
@@ -221,6 +226,26 @@ public:
/// Get
int rowCuts() const;
//@}
+ /// Clique type
+ typedef struct {
+ unsigned int equality:1; // nonzero if clique is ==
+ } CliqueType;
+
+ /**@name Information on cliques */
+ //@{
+ /// Number of cliques
+ inline int numberCliques() const
+ { return numberCliques_;}
+ /// Clique type
+ inline CliqueType * cliqueType() const
+ { return cliqueType_;}
+ /// Start of each clique
+ inline int * cliqueStart() const
+ { return cliqueStart_;}
+ /// Entries for clique
+ inline CliqueEntry * cliqueEntry() const
+ { return cliqueEntry_;}
+ //@}
/**@name Whether use objective as constraint */
//@{
@@ -403,14 +428,11 @@ private:
/// Number of cliques
int numberCliques_;
/// Clique type
- typedef struct {
- unsigned int equality:1; // nonzero if clique is ==
- } cliqueType;
- cliqueType * cliqueType_;
+ CliqueType * cliqueType_;
/// Start of each clique
int * cliqueStart_;
/// Entries for clique
- cliqueEntry * cliqueEntry_;
+ CliqueEntry * cliqueEntry_;
/** Start of oneFixes cliques for a column in matrix or -1 if not
in any clique */
int * oneFixStart_;
@@ -425,7 +447,7 @@ private:
So first clique mentioned in row is always 0. If no entries for row
then no cliques. If sequence > numberColumns then not in clique.
*/
- cliqueEntry * cliqueRow_;
+ CliqueEntry * cliqueRow_;
/// cliqueRow_ starts for each row
int * cliqueRowStart_;
/// If not null and [i] !=0 then also tighten even if continuous
diff --git a/src/CglProbing/CglProbingTest.cpp b/src/CglProbing/CglProbingTest.cpp
index 7405ca2..0be9a3a 100644
--- a/src/CglProbing/CglProbingTest.cpp
+++ b/src/CglProbing/CglProbingTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglProbingTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglProbingTest.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglProbing/Makefile.in b/src/CglProbing/Makefile.in
index 8cccc89..6914b9f 100644
--- a/src/CglProbing/Makefile.in
+++ b/src/CglProbing/Makefile.in
@@ -134,6 +134,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -314,6 +318,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglRedSplit/CglRedSplit.cpp b/src/CglRedSplit/CglRedSplit.cpp
index f3e24d6..f9bbb34 100644
--- a/src/CglRedSplit/CglRedSplit.cpp
+++ b/src/CglRedSplit/CglRedSplit.cpp
@@ -6,7 +6,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 2/6/05
//
-// $Id: CglRedSplit.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglRedSplit.cpp 1119 2013-04-06 20:24:18Z stefan $
//---------------------------------------------------------------------------
// Copyright (C) 2005, Francois Margot and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglRedSplit/CglRedSplit.hpp b/src/CglRedSplit/CglRedSplit.hpp
index 024efb6..1265b1d 100644
--- a/src/CglRedSplit/CglRedSplit.hpp
+++ b/src/CglRedSplit/CglRedSplit.hpp
@@ -7,7 +7,7 @@
// email: fmargot at andrew.cmu.edu
// Date: 2/6/05
//
-// $Id: CglRedSplit.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglRedSplit.hpp 1119 2013-04-06 20:24:18Z stefan $
//-----------------------------------------------------------------------------
// Copyright (C) 2005, Francois Margot and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglRedSplit/CglRedSplitParam.cpp b/src/CglRedSplit/CglRedSplitParam.cpp
index 8fed118..7d20161 100644
--- a/src/CglRedSplit/CglRedSplitParam.cpp
+++ b/src/CglRedSplit/CglRedSplitParam.cpp
@@ -4,7 +4,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 11/24/06
//
-// $Id: CglRedSplitParam.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglRedSplitParam.cpp 1122 2013-04-06 20:39:53Z stefan $
//---------------------------------------------------------------------------
// Copyright (C) 2006, Francois Margot and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglRedSplit/CglRedSplitParam.hpp b/src/CglRedSplit/CglRedSplitParam.hpp
index a1a2f1e..2601fb2 100644
--- a/src/CglRedSplit/CglRedSplitParam.hpp
+++ b/src/CglRedSplit/CglRedSplitParam.hpp
@@ -5,7 +5,7 @@
// email: fmargot at andrew.cmu.edu
// Date: 11/24/06
//
-// $Id: CglRedSplitParam.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglRedSplitParam.hpp 1122 2013-04-06 20:39:53Z stefan $
//-----------------------------------------------------------------------------
// Copyright (C) 2006, Francois Margot and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglRedSplit/CglRedSplitTest.cpp b/src/CglRedSplit/CglRedSplitTest.cpp
index ff7d2b1..f82f20d 100644
--- a/src/CglRedSplit/CglRedSplitTest.cpp
+++ b/src/CglRedSplit/CglRedSplitTest.cpp
@@ -5,7 +5,7 @@
// Carnegie Mellon University, Pittsburgh, PA 15213
// Date: 2/6/05
//
-// $Id: CglRedSplitTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglRedSplitTest.cpp 1122 2013-04-06 20:39:53Z stefan $
//---------------------------------------------------------------------------
// Copyright (C) 2005, Francois Margot and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglRedSplit/Makefile.in b/src/CglRedSplit/Makefile.in
index f7896be..92e2429 100644
--- a/src/CglRedSplit/Makefile.in
+++ b/src/CglRedSplit/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglRedSplit2/Makefile.in b/src/CglRedSplit2/Makefile.in
index 088dec6..7d491f2 100644
--- a/src/CglRedSplit2/Makefile.in
+++ b/src/CglRedSplit2/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglResidualCapacity/Makefile.in b/src/CglResidualCapacity/Makefile.in
index 4b7cb4e..d9d0022 100644
--- a/src/CglResidualCapacity/Makefile.in
+++ b/src/CglResidualCapacity/Makefile.in
@@ -136,6 +136,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -316,6 +320,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglSimpleRounding/CglSimpleRounding.cpp b/src/CglSimpleRounding/CglSimpleRounding.cpp
index 433762b..599872b 100644
--- a/src/CglSimpleRounding/CglSimpleRounding.cpp
+++ b/src/CglSimpleRounding/CglSimpleRounding.cpp
@@ -1,4 +1,4 @@
-// $Id: CglSimpleRounding.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglSimpleRounding.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglSimpleRounding/CglSimpleRounding.hpp b/src/CglSimpleRounding/CglSimpleRounding.hpp
index 447f744..b93c8bf 100644
--- a/src/CglSimpleRounding/CglSimpleRounding.hpp
+++ b/src/CglSimpleRounding/CglSimpleRounding.hpp
@@ -1,4 +1,4 @@
-// $Id: CglSimpleRounding.hpp 1150 2013-10-21 18:24:45Z tkr $
+// $Id: CglSimpleRounding.hpp 1149 2013-10-21 18:23:53Z tkr $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglSimpleRounding/CglSimpleRoundingTest.cpp b/src/CglSimpleRounding/CglSimpleRoundingTest.cpp
index f6b99c2..69fad46 100644
--- a/src/CglSimpleRounding/CglSimpleRoundingTest.cpp
+++ b/src/CglSimpleRounding/CglSimpleRoundingTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglSimpleRoundingTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglSimpleRoundingTest.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglSimpleRounding/Makefile.in b/src/CglSimpleRounding/Makefile.in
index ef4a351..854a126 100644
--- a/src/CglSimpleRounding/Makefile.in
+++ b/src/CglSimpleRounding/Makefile.in
@@ -136,6 +136,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -316,6 +320,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglStored.cpp b/src/CglStored.cpp
index 658b5b0..2067508 100644
--- a/src/CglStored.cpp
+++ b/src/CglStored.cpp
@@ -35,7 +35,7 @@ CglStored::generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
}
if (probingInfo_) {
int number01 = probingInfo_->numberIntegers();
- const cliqueEntry * entry = probingInfo_->fixEntries();
+ const CliqueEntry * entry = probingInfo_->fixEntries();
const int * toZero = probingInfo_->toZero();
const int * toOne = probingInfo_->toOne();
const int * integerVariable = probingInfo_->integerVariable();
diff --git a/src/CglStored.hpp b/src/CglStored.hpp
index 3e2dabb..07039d9 100644
--- a/src/CglStored.hpp
+++ b/src/CglStored.hpp
@@ -1,4 +1,4 @@
-// $Id: CglStored.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglStored.hpp 1119 2013-04-06 20:24:18Z stefan $
// Copyright (C) 2005, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglTreeInfo.cpp b/src/CglTreeInfo.cpp
index 345e23d..bf565a5 100644
--- a/src/CglTreeInfo.cpp
+++ b/src/CglTreeInfo.cpp
@@ -1,4 +1,4 @@
-// $Id: CglTreeInfo.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglTreeInfo.cpp 1201 2014-03-07 17:24:04Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -133,8 +133,8 @@ CglTreeProbingInfo::CglTreeProbingInfo (const CglTreeProbingInfo & rhs)
numberEntries_(rhs.numberEntries_)
{
if (numberVariables_) {
- fixEntry_ = new cliqueEntry [maximumEntries_];
- memcpy(fixEntry_,rhs.fixEntry_,maximumEntries_*sizeof(cliqueEntry));
+ fixEntry_ = new CliqueEntry [maximumEntries_];
+ memcpy(fixEntry_,rhs.fixEntry_,maximumEntries_*sizeof(CliqueEntry));
if (numberEntries_<0) {
// in order
toZero_ = CoinCopyOfArray(rhs.toZero_,numberIntegers_+1);
@@ -171,8 +171,8 @@ CglTreeProbingInfo::operator=(const CglTreeProbingInfo& rhs)
maximumEntries_ = rhs.maximumEntries_;
numberEntries_ = rhs.numberEntries_;
if (numberVariables_) {
- fixEntry_ = new cliqueEntry [maximumEntries_];
- memcpy(fixEntry_,rhs.fixEntry_,maximumEntries_*sizeof(cliqueEntry));
+ fixEntry_ = new CliqueEntry [maximumEntries_];
+ memcpy(fixEntry_,rhs.fixEntry_,maximumEntries_*sizeof(CliqueEntry));
if (numberEntries_<0) {
// in order
toZero_ = CoinCopyOfArray(rhs.toZero_,numberIntegers_+1);
@@ -211,14 +211,14 @@ CglTreeProbingInfo::~CglTreeProbingInfo ()
delete [] fixingEntry_;
}
static int outDupsEtc(int numberIntegers, int & numberCliques, int & numberMatrixCliques,
- int * & cliqueStart, char * & cliqueType, cliqueEntry *& entry,
+ int * & cliqueStart, char * & cliqueType, CliqueEntry *& entry,
int numberLastTime, int printit)
{
bool allNew=false;
int * whichP = new int [numberIntegers];
int iClique;
assert (sizeof(int)==4);
- assert (sizeof(cliqueEntry)==4);
+ assert (sizeof(CliqueEntry)==4);
// If lots then get rid of short ones
#define KEEP_CLIQUES 10000
if (numberCliques-numberMatrixCliques>KEEP_CLIQUES) {
@@ -440,7 +440,7 @@ static int outDupsEtc(int numberIntegers, int & numberCliques, int & numberMatri
int * start = new int [nNewC+1];
char * type = new char [nNewC];
start[0]=0;
- cliqueEntry * entryC = new cliqueEntry [size];
+ CliqueEntry * entryC = new CliqueEntry [size];
int nel=0;
allNew = true;
for (int jClique=0;jClique<numberCliques;jClique++) {
@@ -449,7 +449,7 @@ static int outDupsEtc(int numberIntegers, int & numberCliques, int & numberMatri
if (kClique>=numberLastTime)
allNew=false;
int nn=cliqueStart[kClique+1]-cliqueStart[kClique];
- memcpy(entryC+nel,entry+cliqueStart[kClique],nn*sizeof(cliqueEntry));
+ memcpy(entryC+nel,entry+cliqueStart[kClique],nn*sizeof(CliqueEntry));
nel += nn;
type[n++]=cliqueType[kClique];
start[n]=nel;
@@ -462,7 +462,7 @@ static int outDupsEtc(int numberIntegers, int & numberCliques, int & numberMatri
if (kClique>=numberLastTime)
allNew=false;
int nn=cliqueStart[kClique+1]-cliqueStart[kClique];
- memcpy(entryC+nel,entry+cliqueStart[kClique],nn*sizeof(cliqueEntry));
+ memcpy(entryC+nel,entry+cliqueStart[kClique],nn*sizeof(CliqueEntry));
nel += nn;
type[n++]=cliqueType[kClique];
start[n]=nel;
@@ -499,18 +499,25 @@ static int outDupsEtc(int numberIntegers, int & numberCliques, int & numberMatri
return -1;
}
OsiSolverInterface *
-CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
+CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver,
+ int numberExtraCliques,const int * starts,
+ const CliqueEntry * entries,const char * type)
{
if (!createSolver)
return NULL;
convert();
if (!numberIntegers_)
return NULL;
+ bool alwaysDo=false;
+ if (numberExtraCliques<0) {
+ alwaysDo=true;
+ numberExtraCliques=0;
+ }
bool printit=false;
int numberCliques=0;
int numberEntries=0;
int * cliqueStart = NULL;
- cliqueEntry * entry = NULL;
+ CliqueEntry * entry = NULL;
char * cliqueType=NULL;
int * whichP = new int [numberIntegers_];
int * whichM = new int [numberIntegers_];
@@ -530,11 +537,14 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
const double * rowUpper = si.getRowUpper();
for (int iPass=0;iPass<2;iPass++) {
if (iPass) {
- cliqueStart = new int [numberCliques+1];
+ int numberExtraEntries=0;
+ if (numberExtraCliques)
+ numberExtraEntries = starts[numberExtraCliques];
+ cliqueStart = new int [numberCliques+1+numberExtraCliques];
cliqueStart[0]=0;
- entry = new cliqueEntry [numberEntries];
- cliqueType = new char [numberCliques];
- whichClique = new int [numberEntries];
+ entry = new CliqueEntry [numberEntries+numberExtraEntries];
+ cliqueType = new char [numberCliques+numberExtraCliques];
+ whichClique = new int [numberEntries+numberExtraEntries];
numberCliques=0;
numberEntries=0;
}
@@ -610,7 +620,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
for (j=0;j<numberP1;j++) {
int iColumn = whichP[j];
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,true);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
@@ -620,7 +630,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
for (j=0;j<numberM1;j++) {
int iColumn = whichM[j];
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,false);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
@@ -641,6 +651,16 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
}
}
#endif
+ if (numberExtraCliques) {
+ int numberExtraEntries = starts[numberExtraCliques];
+ memcpy(entry+numberEntries,entries,numberExtraEntries*sizeof(CliqueEntry));
+ for (int iClique=0;iClique<numberExtraCliques;iClique++) {
+ cliqueType[numberCliques] = type[iClique];
+ numberCliques++;
+ cliqueStart[numberCliques]=starts[iClique]+numberEntries;
+ }
+ numberEntries += numberExtraEntries;
+ }
numberMatrixCliques=numberCliques;
//int size = toZero_[numberIntegers_];
//char * used = new char [size];
@@ -663,14 +683,14 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
iColumn,jColumn,jColumn,iColumn);
//0-0 illegal
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,false);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
}
numberEntries++;
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,false);
setSequenceInCliqueEntry(temp,jColumn);
entry[numberEntries]=temp;
@@ -724,14 +744,14 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
iColumn,jColumn,jColumn,iColumn);
// 0-1 illegal
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,false);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
}
numberEntries++;
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,true);
setSequenceInCliqueEntry(temp,jColumn);
entry[numberEntries]=temp;
@@ -772,14 +792,14 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
iColumn,jColumn,jColumn,iColumn);
// 1-0 illegal
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,true);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
}
numberEntries++;
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,false);
setSequenceInCliqueEntry(temp,jColumn);
entry[numberEntries]=temp;
@@ -833,14 +853,14 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
iColumn,jColumn,jColumn,iColumn);
// 1-1 illegal
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,true);
setSequenceInCliqueEntry(temp,iColumn);
entry[numberEntries]=temp;
}
numberEntries++;
if (iPass) {
- cliqueEntry temp;
+ CliqueEntry temp;
setOneFixesInCliqueEntry(temp,true);
setSequenceInCliqueEntry(temp,jColumn);
entry[numberEntries]=temp;
@@ -940,7 +960,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
int j = cliqueStart[jClique];
//assert (cliqueStart[jClique+1]==j+2);
for (;j<cliqueStart[jClique+1];j++) {
- cliqueEntry eJ = entry[j];
+ CliqueEntry eJ = entry[j];
int jColumn = sequenceInCliqueEntry(eJ);
if (jColumn>iColumn&&!mark[jColumn]) {
mark[jColumn]=1;
@@ -977,8 +997,8 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
nStrengthen++;
if (numberEntries+jCount+1>maximumEntries) {
maximumEntries = CoinMax(numberEntries+jCount+1,(maximumEntries*12)/10+100);
- cliqueEntry * temp = new cliqueEntry [maximumEntries];
- memcpy(temp,entry,numberEntries*sizeof(cliqueEntry));
+ CliqueEntry * temp = new CliqueEntry [maximumEntries];
+ memcpy(temp,entry,numberEntries*sizeof(CliqueEntry));
delete [] entry;
entry=temp;
int * tempI = new int [maximumEntries];
@@ -997,7 +1017,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
delete [] cliqueType;
cliqueType=tempT;
}
- cliqueEntry eI;
+ CliqueEntry eI;
eI.fixes=0;
setSequenceInCliqueEntry(eI,iColumn);
setOneFixesInCliqueEntry(eI,false);
@@ -1025,7 +1045,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
int j = cliqueStart[jClique];
//assert (cliqueStart[jClique+1]==j+2);
for (;j<cliqueStart[jClique+1];j++) {
- cliqueEntry eJ = entry[j];
+ CliqueEntry eJ = entry[j];
int jColumn = sequenceInCliqueEntry(eJ);
if (jColumn>iColumn&&!mark[jColumn]) {
mark[jColumn]=1;
@@ -1066,8 +1086,8 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
nStrengthen++;
if (numberEntries+jCount+1>maximumEntries) {
maximumEntries = CoinMax(numberEntries+jCount+1,(maximumEntries*12)/10+100);
- cliqueEntry * temp = new cliqueEntry [maximumEntries];
- memcpy(temp,entry,numberEntries*sizeof(cliqueEntry));
+ CliqueEntry * temp = new CliqueEntry [maximumEntries];
+ memcpy(temp,entry,numberEntries*sizeof(CliqueEntry));
delete [] entry;
entry=temp;
int * tempI = new int [maximumEntries];
@@ -1086,7 +1106,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
delete [] cliqueType;
cliqueType=tempT;
}
- cliqueEntry eI;
+ CliqueEntry eI;
eI.fixes=0;
setSequenceInCliqueEntry(eI,iColumn);
setOneFixesInCliqueEntry(eI,true);
@@ -1123,7 +1143,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
int n=0;
double rhs=1.0;
for (int i=cliqueStart[iClique];i<cliqueStart[iClique+1];i++) {
- cliqueEntry eI=entry[i];
+ CliqueEntry eI=entry[i];
int iColumn = integerVariable_[sequenceInCliqueEntry(eI)];
whichP[n]=iColumn;
if (oneFixesInCliqueEntry(eI)) {
@@ -1139,7 +1159,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
}
#endif
OsiSolverInterface * newSolver=NULL;
- if (numberCliques>numberMatrixCliques) {
+ if (numberCliques>numberMatrixCliques||alwaysDo) {
newSolver = si.clone();
// Delete all rows
int * start = new int [ CoinMax(numberRows,numberCliques+1)];
@@ -1157,7 +1177,7 @@ CglTreeProbingInfo::analyze(const OsiSolverInterface & si,int createSolver)
for (iClique=0;iClique<numberCliques;iClique++) {
double rhs=1.0;
for (int i=cliqueStart[iClique];i<cliqueStart[iClique+1];i++) {
- cliqueEntry eI=entry[i];
+ CliqueEntry eI=entry[i];
int iColumn = integerVariable_[sequenceInCliqueEntry(eI)];
column[numberElements]=iColumn;
if (oneFixesInCliqueEntry(eI)) {
@@ -1213,8 +1233,8 @@ CglTreeProbingInfo::fixes(int variable, int toValue, int fixedVariable,bool fixe
if (maximumEntries_>=CoinMax(1000000,10*numberIntegers_))
return false;
maximumEntries_ += 100 +maximumEntries_/2;
- cliqueEntry * temp1 = new cliqueEntry [maximumEntries_];
- memcpy(temp1,fixEntry_,numberEntries_*sizeof(cliqueEntry));
+ CliqueEntry * temp1 = new CliqueEntry [maximumEntries_];
+ memcpy(temp1,fixEntry_,numberEntries_*sizeof(CliqueEntry));
delete [] fixEntry_;
fixEntry_ = temp1;
int * temp2 = new int [maximumEntries_];
@@ -1222,7 +1242,7 @@ CglTreeProbingInfo::fixes(int variable, int toValue, int fixedVariable,bool fixe
delete [] fixingEntry_;
fixingEntry_ = temp2;
}
- cliqueEntry entry1;
+ CliqueEntry entry1;
entry1.fixes=0;
setOneFixesInCliqueEntry(entry1,fixedTo!=0);
setSequenceInCliqueEntry(entry1,intFix);
@@ -1302,7 +1322,7 @@ CglTreeProbingInfo::convert()
assert (sizeof(int)==4);
std::sort(reinterpret_cast<unsigned int *> (fixEntry_)+last,
reinterpret_cast<unsigned int *> (fixEntry_)+n);
- cliqueEntry temp2;
+ CliqueEntry temp2;
temp2.fixes=0;
setSequenceInCliqueEntry(temp2,numberVariables_+1);
for (int i=last;i<n;i++) {
@@ -1325,7 +1345,7 @@ CglTreeProbingInfo::convert()
assert (sizeof(int)==4);
std::sort(reinterpret_cast<unsigned int *> (fixEntry_)+last,
reinterpret_cast<unsigned int *> (fixEntry_)+n);
- cliqueEntry temp2;
+ CliqueEntry temp2;
temp2.fixes=0;
setSequenceInCliqueEntry(temp2,numberVariables_+1);
for (int i=last;i<n;i++) {
diff --git a/src/CglTreeInfo.hpp b/src/CglTreeInfo.hpp
index 1c650c0..4f85aca 100644
--- a/src/CglTreeInfo.hpp
+++ b/src/CglTreeInfo.hpp
@@ -1,4 +1,4 @@
-// $Id: CglTreeInfo.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglTreeInfo.hpp 1201 2014-03-07 17:24:04Z forrest $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -80,7 +80,7 @@ typedef struct {
//unsigned int oneFixed:1; // nonzero if variable to 1 fixes all
//unsigned int sequence:31; // variable (in matrix) (but also see cliqueRow_)
unsigned int fixes;
-} cliqueEntry;
+} CliqueEntry;
class CglTreeProbingInfo : public CglTreeInfo {
public:
@@ -103,7 +103,9 @@ public:
/// Destructor
virtual
~CglTreeProbingInfo ();
- OsiSolverInterface * analyze(const OsiSolverInterface & si, int createSolver=0);
+ OsiSolverInterface * analyze(const OsiSolverInterface & si, int createSolver=0,
+ int numberExtraCliques=0,const int * starts=NULL,
+ const CliqueEntry * entries=NULL,const char * type=NULL);
/** Take action if cut generator can fix a variable
(toValue -1 for down, +1 for up)
Returns true if still room, false if not */
@@ -121,7 +123,7 @@ public:
void generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
const CglTreeInfo info) const;
/// Entries for fixing variables
- inline cliqueEntry * fixEntries()
+ inline CliqueEntry * fixEntries()
{ convert(); return fixEntry_;}
/// Starts of integer variable going to zero
inline int * toZero()
@@ -146,7 +148,7 @@ private:
void convert();
protected:
/// Entries for fixing variables
- cliqueEntry * fixEntry_;
+ CliqueEntry * fixEntry_;
/// Starts of integer variable going to zero
int * toZero_;
/// Starts of integer variable going to one
@@ -166,13 +168,13 @@ protected:
/// Number entries in fixingEntry_ (and fixEntry_) or -2 if correct style
int numberEntries_;
};
-inline int sequenceInCliqueEntry(const cliqueEntry & cEntry)
+inline int sequenceInCliqueEntry(const CliqueEntry & cEntry)
{ return cEntry.fixes&0x7fffffff;}
-inline void setSequenceInCliqueEntry(cliqueEntry & cEntry,int sequence)
+inline void setSequenceInCliqueEntry(CliqueEntry & cEntry,int sequence)
{ cEntry.fixes = sequence|(cEntry.fixes&0x80000000);}
-inline bool oneFixesInCliqueEntry(const cliqueEntry & cEntry)
+inline bool oneFixesInCliqueEntry(const CliqueEntry & cEntry)
{ return (cEntry.fixes&0x80000000)!=0;}
-inline void setOneFixesInCliqueEntry(cliqueEntry & cEntry,bool oneFixes)
+inline void setOneFixesInCliqueEntry(CliqueEntry & cEntry,bool oneFixes)
{ cEntry.fixes = (oneFixes ? 0x80000000 : 0)|(cEntry.fixes&0x7fffffff);}
#endif
diff --git a/src/CglTwomir/CglTwomir.cpp b/src/CglTwomir/CglTwomir.cpp
index 88debb8..8df0104 100644
--- a/src/CglTwomir/CglTwomir.cpp
+++ b/src/CglTwomir/CglTwomir.cpp
@@ -1,4 +1,4 @@
-// $Id: CglTwomir.cpp 1189 2014-01-10 14:40:18Z forrest $
+// $Id: CglTwomir.cpp 1190 2014-01-10 14:58:55Z forrest $
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglTwomir/CglTwomir.hpp b/src/CglTwomir/CglTwomir.hpp
index b5be5b9..ba00380 100644
--- a/src/CglTwomir/CglTwomir.hpp
+++ b/src/CglTwomir/CglTwomir.hpp
@@ -1,4 +1,4 @@
-// $Id: CglTwomir.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglTwomir.hpp 1119 2013-04-06 20:24:18Z stefan $
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglTwomir/CglTwomirTest.cpp b/src/CglTwomir/CglTwomirTest.cpp
index 424716d..3ba05ff 100644
--- a/src/CglTwomir/CglTwomirTest.cpp
+++ b/src/CglTwomir/CglTwomirTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglTwomirTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglTwomirTest.cpp 1120 2013-04-06 20:34:40Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglTwomir/Makefile.am b/src/CglTwomir/Makefile.am
index dd22642..b5e9229 100644
--- a/src/CglTwomir/Makefile.am
+++ b/src/CglTwomir/Makefile.am
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: Makefile.am 1113 2013-04-06 13:28:20Z stefan $
+## $Id: Makefile.am 1105 2013-03-19 12:43:52Z forrest $
# Author: Andreas Waechter IBM 2006-04-13
diff --git a/src/CglTwomir/Makefile.in b/src/CglTwomir/Makefile.in
index 0c1f17c..bc709b7 100644
--- a/src/CglTwomir/Makefile.in
+++ b/src/CglTwomir/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/CglZeroHalf/Cgl012cut.cpp b/src/CglZeroHalf/Cgl012cut.cpp
index da49f1e..332f5b5 100644
--- a/src/CglZeroHalf/Cgl012cut.cpp
+++ b/src/CglZeroHalf/Cgl012cut.cpp
@@ -1,4 +1,4 @@
-// $Id: Cgl012cut.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: Cgl012cut.cpp 1222 2014-09-14 17:32:18Z forrest $
// Copyright (C) 2010, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -7,7 +7,7 @@
#include "CoinTime.hpp"
#include "Cgl012cut.hpp"
#include "CglZeroHalf.hpp"
-int MAX_CUTS = 1000;
+static int MAX_CUTS = 10000000;
//#define PRINT_TABU
//#define PRINT_CUTS
//#define PRINT_TIME
diff --git a/src/CglZeroHalf/Cgl012cut.hpp b/src/CglZeroHalf/Cgl012cut.hpp
index 47bbc3c..2814b0a 100644
--- a/src/CglZeroHalf/Cgl012cut.hpp
+++ b/src/CglZeroHalf/Cgl012cut.hpp
@@ -1,4 +1,4 @@
-// $Id: Cgl012cut.hpp 1150 2013-10-21 18:24:45Z tkr $
+// $Id: Cgl012cut.hpp 1149 2013-10-21 18:23:53Z tkr $
// Copyright (C) 2010, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglZeroHalf/CglZeroHalf.cpp b/src/CglZeroHalf/CglZeroHalf.cpp
index 8244d88..0aa5024 100644
--- a/src/CglZeroHalf/CglZeroHalf.cpp
+++ b/src/CglZeroHalf/CglZeroHalf.cpp
@@ -1,4 +1,4 @@
-// $Id: CglZeroHalf.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglZeroHalf.cpp 1222 2014-09-14 17:32:18Z forrest $
// Copyright (C) 2010, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
@@ -155,7 +155,7 @@ CglCutGenerator(),
msense_(NULL),
flags_(0)
{
- // nothing to do here
+ cutInfo_=Cgl012Cut();
}
//-------------------------------------------------------------------
// Copy constructor
@@ -187,6 +187,8 @@ CglZeroHalf::CglZeroHalf (
mrhs_ = CoinCopyOfArray(source.mrhs_,mr_);
msense_ = CoinCopyOfArray(source.msense_,mr_);
}
+ //cutInfo_ = Cgl012Cut(source.cutInfo_);
+ cutInfo_ = Cgl012Cut();
}
@@ -235,7 +237,6 @@ CglZeroHalf::operator=(
mc_ = rhs.mc_;
mnz_ = rhs.mnz_;
flags_ = rhs.flags_;
- cutInfo_=Cgl012Cut();
if (mr_) {
mtbeg_ = CoinCopyOfArray(rhs.mtbeg_,mr_);
mtcnt_ = CoinCopyOfArray(rhs.mtcnt_,mr_);
@@ -255,6 +256,8 @@ CglZeroHalf::operator=(
mrhs_ = NULL;
msense_ = NULL;
}
+ //cutInfo_=Cgl012Cut(rhs.cutInfo_);
+ cutInfo_=Cgl012Cut();
}
return *this;
}
@@ -330,7 +333,7 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
break;
} else {
double value = rowElements[j];
- if (fabs(value-floor(value+0.5))>1.0e-30) {
+ if (fabs(value-floor(value+0.5))>1.0e-15) {
// not integer coefficient
good=false;
break;
@@ -342,7 +345,7 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
int iType=1;
double rhs=1.0e20;
if (lo>-1.0e20) {
- if (fabs(lo-floor(lo+0.5))>1.0e-12) {
+ if (fabs(lo-floor(lo+0.5))>1.0e-15) {
// not integer coefficient
good=false;
}
@@ -370,6 +373,8 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
mnz_ += iType*n;
}
}
+ int saveMr=mr_;
+ int saveMnz=mnz_;
if (mnz_) {
mc_ = numberColumns;
mtbeg_ = new int [mr_];
@@ -392,7 +397,7 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
break;
} else {
double value = rowElements[j];
- if (fabs(value-floor(value+0.5))>1.0e-12) {
+ if (fabs(value-floor(value+0.5))>1.0e-15) {
// not integer coefficient
good=false;
break;
@@ -404,7 +409,7 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
int iType=1;
double rhs=1.0e20;
if (lo>-1.0e20) {
- if (fabs(lo-floor(lo+0.5))>1.0e-30) {
+ if (fabs(lo-floor(lo+0.5))>1.0e-15) {
// not integer coefficient
good=false;
}
@@ -467,6 +472,8 @@ CglZeroHalf::refreshSolver(OsiSolverInterface * solver)
}
}
}
+ assert(saveMr==mr_);
+ assert(saveMnz==mnz_);
cutInfo_.ilp_load(mr_,mc_,mnz_,mtbeg_,mtcnt_,mtind_,mtval_,
vlb_,vub_,mrhs_,msense_);
cutInfo_.alloc_parity_ilp(mr_,mc_,mnz_);
diff --git a/src/CglZeroHalf/CglZeroHalf.hpp b/src/CglZeroHalf/CglZeroHalf.hpp
index abeb489..929269a 100644
--- a/src/CglZeroHalf/CglZeroHalf.hpp
+++ b/src/CglZeroHalf/CglZeroHalf.hpp
@@ -1,4 +1,4 @@
-// $Id: CglZeroHalf.hpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: CglZeroHalf.hpp 1122 2013-04-06 20:39:53Z stefan $
// Copyright (C) 2010, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglZeroHalf/CglZeroHalfTest.cpp b/src/CglZeroHalf/CglZeroHalfTest.cpp
index 9d1a9ae..2822f56 100644
--- a/src/CglZeroHalf/CglZeroHalfTest.cpp
+++ b/src/CglZeroHalf/CglZeroHalfTest.cpp
@@ -1,4 +1,4 @@
-// $Id: CglZeroHalfTest.cpp 1155 2013-11-10 17:51:42Z tkr $
+// $Id: CglZeroHalfTest.cpp 1154 2013-11-10 17:50:24Z tkr $
// Copyright (C) 2010, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
diff --git a/src/CglZeroHalf/Makefile.am b/src/CglZeroHalf/Makefile.am
index a7e5f2f..1b030b4 100644
--- a/src/CglZeroHalf/Makefile.am
+++ b/src/CglZeroHalf/Makefile.am
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: Makefile.am 1166 2013-12-11 09:25:29Z stefan $
+## $Id: Makefile.am 1165 2013-12-11 09:18:38Z stefan $
# Author: Andreas Waechter IBM 2006-04-13
diff --git a/src/CglZeroHalf/Makefile.in b/src/CglZeroHalf/Makefile.in
index a4c789e..af41dcb 100644
--- a/src/CglZeroHalf/Makefile.in
+++ b/src/CglZeroHalf/Makefile.in
@@ -135,6 +135,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -315,6 +319,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/Makefile.am b/src/Makefile.am
index cd21fea..e7d4463 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: Makefile.am 1171 2013-12-16 14:51:04Z tkr $
+## $Id: Makefile.am 1159 2013-11-21 19:57:09Z stefan $
# Author: Andreas Waechter IBM 2006-04-13
diff --git a/src/Makefile.in b/src/Makefile.in
index 0f05caa..b567eab 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -145,6 +145,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -325,6 +329,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/src/config_cgl_default.h b/src/config_cgl_default.h
index f66167a..5ae5889 100644
--- a/src/config_cgl_default.h
+++ b/src/config_cgl_default.h
@@ -5,13 +5,13 @@
/***************************************************************************/
/* Version number of project */
-#define CGL_VERSION "0.58.9"
+#define CGL_VERSION "0.59.9"
/* Major Version number of project */
#define CGL_VERSION_MAJOR 0
/* Minor Version number of project */
-#define CGL_VERSION_MINOR 58
+#define CGL_VERSION_MINOR 59
/* Release Version number of project */
#define CGL_VERSION_RELEASE 9
diff --git a/test/Makefile.am b/test/Makefile.am
index ccbb94c..7737f3a 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2,7 +2,7 @@
# All Rights Reserved.
# This file is distributed under the Eclipse Public License.
-## $Id: Makefile.am 1113 2013-04-06 13:28:20Z stefan $
+## $Id: Makefile.am 1110 2013-04-06 13:19:05Z stefan $
# Author: Andreas Waechter IBM 2006-04-13
diff --git a/test/Makefile.in b/test/Makefile.in
index 81db577..33292c8 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -117,6 +117,10 @@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@
COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@
COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@
COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@
+COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
+COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
+COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
+COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
COIN_HAS_OSICLP_FALSE = @COIN_HAS_OSICLP_FALSE@
COIN_HAS_OSICLP_TRUE = @COIN_HAS_OSICLP_TRUE@
COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@
@@ -297,6 +301,7 @@ coin_doxy_tagfiles = @coin_doxy_tagfiles@
coin_doxy_tagname = @coin_doxy_tagname@
coin_doxy_usedot = @coin_doxy_usedot@
coin_have_doxygen = @coin_have_doxygen@
+coin_have_latex = @coin_have_latex@
datadir = @datadir@
exec_prefix = @exec_prefix@
have_autoconf = @have_autoconf@
diff --git a/test/unitTest.cpp b/test/unitTest.cpp
index 00feaf0..e941b44 100644
--- a/test/unitTest.cpp
+++ b/test/unitTest.cpp
@@ -1,4 +1,4 @@
-// $Id: unitTest.cpp 1123 2013-04-06 20:47:24Z stefan $
+// $Id: unitTest.cpp 1114 2013-04-06 14:00:12Z stefan $
// Copyright (C) 2000, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/coinor-cgl.git
More information about the debian-science-commits
mailing list