Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion solvers/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,8 @@ if (TARGET ilogcp)
add_ampl_solver(ssdsolver LIBRARIES amplilogcp-static)
if (TARGET ssdsolver)
add_ampl_library(ssd ssdsolver/ssd.cc)
target_include_directories(ssd PRIVATE .)
target_include_directories(ssd PRIVATE .
${CMAKE_SOURCE_DIR}/src/asl/solvers)
endif ()
endif ()

Expand Down
30 changes: 24 additions & 6 deletions solvers/ilogcp/ilogcp.cc
Original file line number Diff line number Diff line change
Expand Up @@ -345,11 +345,20 @@ IlogCPSolver::IlogCPSolver() :
"Limit on the number of choice points created "
"before terminating a search. Default = no limit.",
cp_, IloCP::ChoicePointLimit)));


#if CPX_VERSION >= 12080000
// Changed behaviour:
// https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.8.0/ilog.odms.studio.help/CP_Optimizer/Release_notes/topics/relnotes_V1280_changes_api.html
AddOption(OptionPtr(new EnumOption("cppresolve",
"0 or 1 (default 1): Whether to activate presolve on the CP optimizer.",
cp_, IloCP::IntParam::Presolve, IloCP::Off,
ValueArrayRef(FLAGS, 1))));
#else
AddOption(OptionPtr(new EnumOption("constraintaggregation",
"0 or 1 (default 1): Whether to aggregate basic constraints.",
cp_, IloCP::ConstraintAggregation, IloCP::Off,
ValueArrayRef(FLAGS, 1))));
"0 or 1 (default 1): Whether to aggregate basic constraints.",
cp_, IloCP::ConstraintAggregation, IloCP::Off,
ValueArrayRef(FLAGS, 1))));
#endif

AddIntOption("debugexpr",
"0 or 1 (default 0): Whether to print debugging "
Expand Down Expand Up @@ -433,13 +442,17 @@ IlogCPSolver::IlogCPSolver() :
"Synonym for ``logverbosity``.",
cp_, IloCP::LogVerbosity, IloCP::Quiet, VERBOSITIES)));

#if CPX_VERSION < 12080000
// Not available in 12.8, documented only in the Java docs
// https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.8.0/ilog.odms.studio.help/CP_Optimizer/Release_notes/topics/relnotes_V1280_changes_java.html
AddOption(OptionPtr(new EnumOption("propagationlog",
"Level of propagation trace reporting. Possible values:\n"
"\n"
".. value-table::\n"
"\n"
"The default value is ``quiet``.",
cp_, IloCP::PropagationLog, IloCP::Quiet, VERBOSITIES)));
#endif

AddOption(OptionPtr(new IntOption("randomseed",
"Seed for the random number generator. Default = 0.",
Expand Down Expand Up @@ -644,6 +657,7 @@ void IlogCPSolver::SetCPLEXIntOption(
void IlogCPSolver::SolveWithCP(
Problem &p, const MPToConcertConverter &converter,
Stats &stats, SolutionHandler &sh) {

#if CPX_VERSION >= 12060100
if (!filenames_[DUMP_FILE].empty())
cp_.dumpModel(filenames_[DUMP_FILE].c_str());
Expand Down Expand Up @@ -674,8 +688,12 @@ void IlogCPSolver::SolveWithCP(
solution_limit = p.num_objs() > 0 ? INT_MAX : 1;
stats.setup_time = GetTimeAndReset(stats.time);
if (priority_vars.getSize() != 0) {
IloSearchPhase phase(env_, priority_vars);
cp_.startNewSearch(phase);
#if CPX_VERSION >= 12080000
IloGoal goal(env_, priority_vars);
#else
IloSearchPhase goal(env_, priority_vars);
#endif
cp_.startNewSearch(goal);
} else {
cp_.startNewSearch();
}
Expand Down
43 changes: 31 additions & 12 deletions support/cmake/FindCPLEX.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,27 @@ else ()
set(CPLEX_ARCH x86)
set(CPLEX_ILOG_DIRS "C:/Program Files (x86)/IBM/ILOG" ${CPLEX_ILOG_DIRS})
endif ()
if (MSVC10)
set(CPLEX_LIB_PATH_SUFFIXES
lib/${CPLEX_ARCH}_windows_vs2010/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG
lib/${CPLEX_ARCH}_windows_vs2010/stat_mdd)
elseif (MSVC9)
set(CPLEX_LIB_PATH_SUFFIXES
lib/${CPLEX_ARCH}_windows_vs2008/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG
lib/${CPLEX_ARCH}_windows_vs2008/stat_mdd)
# Amended for VS and its various toolsets
# https://cmake.org/cmake/help/v3.11/variable/MSVC_VERSION.html
# Can use GREATER_EQUAL instead of the mess below if cmake version >= 3.7
if(NOT (MSVC_VERSION LESS 1910))
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2017/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2017/stat_mdd)
elseif (NOT (MSVC_VERSION LESS 1900)) # to support VS2015 with 2013 libraries change below
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2015/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2015/stat_mdd)
elseif (NOT (MSVC_VERSION LESS 1800))
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2013/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2013/stat_mdd)
elseif (NOT (MSVC_VERSION LESS 1700))
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2012/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2012/stat_mdd)
elseif (NOT (MSVC_VERSION LESS 1600))
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2010/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2010/stat_mdd)
elseif (NOT (MSVC_VERSION LESS 1500))
set(CPLEX_LIB_PATH_SUFFIXES lib/${CPLEX_ARCH}_windows_vs2008/stat_mda)
set(CPLEX_LIB_PATH_SUFFIXES_DEBUG lib/${CPLEX_ARCH}_windows_vs2008/stat_mdd)
endif ()
endif ()
if (NOT CPLEX_STUDIO_DIR)
Expand All @@ -75,14 +86,14 @@ find_package(Threads)
# ----------------------------------------------------------------------------
# CPLEX

set(CPLEX_DIR ${CPLEX_STUDIO_DIR}/cplex)
set(CPLEX_DIR ${CPLEX_STUDIO_DIR_}/cplex)

# Find the CPLEX include directory.
find_path(CPLEX_INCLUDE_DIR ilcplex/cplex.h PATHS ${CPLEX_DIR}/include)

macro(find_win_cplex_library var path_suffixes)
foreach (s ${path_suffixes})
file(GLOB CPLEX_LIBRARY_CANDIDATES "${CPLEX_DIR}/${s}/cplex*.lib")
file(GLOB CPLEX_LIBRARY_CANDIDATES "${CPLEX_DIR}/${s}/cplex*.lib")
if (CPLEX_LIBRARY_CANDIDATES)
list(GET CPLEX_LIBRARY_CANDIDATES 0 ${var})
break ()
Expand All @@ -99,16 +110,24 @@ if (UNIX)
PATHS ${CPLEX_DIR} PATH_SUFFIXES ${CPLEX_LIB_PATH_SUFFIXES})
set(CPLEX_LIBRARY_DEBUG ${CPLEX_LIBRARY})
elseif (NOT CPLEX_LIBRARY)
message("in windows trying " ${${CPLEX_LIB_PATH_SUFFIXES}})
# On Windows the version is appended to the library name which cannot be
# handled by find_library, so search manually.
find_win_cplex_library(CPLEX_LIB "${CPLEX_LIB_PATH_SUFFIXES}")
message("CPLEX_LIB " ${CPLEX_LIB})
message("CPLEX_LIBRARY " ${CPLEX_LIBRARY})
set(CPLEX_LIBRARY ${CPLEX_LIB} CACHE FILEPATH "Path to the CPLEX library")
find_win_cplex_library(CPLEX_LIB "${CPLEX_LIB_PATH_SUFFIXES_DEBUG}")



set(CPLEX_LIBRARY_DEBUG ${CPLEX_LIB} CACHE
FILEPATH "Path to the debug CPLEX library")
message("CPLEX_LIBRARY " ${CPLEX_LIBRARY})
if (CPLEX_LIBRARY MATCHES ".*/(cplex.*)\\.lib")
file(GLOB CPLEX_DLL_ "${CPLEX_DIR}/bin/*/${CMAKE_MATCH_1}.dll")
set(CPLEX_DLL ${CPLEX_DLL_} CACHE PATH "Path to the CPLEX DLL.")
message("CPLEX_DLL " ${CPLEX_DLL})
endif ()
endif ()

Expand Down