gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge LP interface updates to branch 1.1
0 4 0
merge 1.1
0 files changed with 33 insertions and 25 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -33,66 +33,85 @@
33 33
  HINTS ${COIN_ROOT_DIR}/lib/coin
34 34
  HINTS ${COIN_ROOT_DIR}/lib
35 35
)
36 36
FIND_LIBRARY(COIN_OSI_CBC_LIBRARY
37 37
  NAMES OsiCbc libOsiCbc
38 38
  HINTS ${COIN_ROOT_DIR}/lib/coin
39 39
  HINTS ${COIN_ROOT_DIR}/lib
40 40
)
41 41
FIND_LIBRARY(COIN_OSI_CLP_LIBRARY
42 42
  NAMES OsiClp libOsiClp
43 43
  HINTS ${COIN_ROOT_DIR}/lib/coin
44 44
  HINTS ${COIN_ROOT_DIR}/lib
45 45
)
46 46
FIND_LIBRARY(COIN_OSI_VOL_LIBRARY
47 47
  NAMES OsiVol libOsiVol
48 48
  HINTS ${COIN_ROOT_DIR}/lib/coin
49 49
  HINTS ${COIN_ROOT_DIR}/lib
50 50
)
51 51
FIND_LIBRARY(COIN_VOL_LIBRARY
52 52
  NAMES Vol libVol
53 53
  HINTS ${COIN_ROOT_DIR}/lib/coin
54 54
  HINTS ${COIN_ROOT_DIR}/lib
55 55
)
56 56

	
57
FIND_LIBRARY(COIN_ZLIB_LIBRARY
58
  NAMES z libz
59
  HINTS ${COIN_ROOT_DIR}/lib/coin
60
  HINTS ${COIN_ROOT_DIR}/lib
61
)
62
FIND_LIBRARY(COIN_BZ2_LIBRARY
63
  NAMES bz2 libbz2
64
  HINTS ${COIN_ROOT_DIR}/lib/coin
65
  HINTS ${COIN_ROOT_DIR}/lib
66
)
67

	
57 68
INCLUDE(FindPackageHandleStandardArgs)
58 69
FIND_PACKAGE_HANDLE_STANDARD_ARGS(COIN DEFAULT_MSG
59 70
  COIN_INCLUDE_DIR
60 71
  COIN_CBC_LIBRARY
61 72
  COIN_CBC_SOLVER_LIBRARY
62 73
  COIN_CGL_LIBRARY
63 74
  COIN_CLP_LIBRARY
64 75
  COIN_COIN_UTILS_LIBRARY
65 76
  COIN_OSI_LIBRARY
66 77
  COIN_OSI_CBC_LIBRARY
67 78
  COIN_OSI_CLP_LIBRARY
68 79
  # COIN_OSI_VOL_LIBRARY
69 80
  # COIN_VOL_LIBRARY
70 81
)
71 82

	
72 83
IF(COIN_FOUND)
73 84
  SET(COIN_INCLUDE_DIRS ${COIN_INCLUDE_DIR})
74
  SET(COIN_LIBRARIES "${COIN_CBC_LIBRARY};${COIN_CBC_SOLVER_LIBRARY};${COIN_CGL_LIBRARY};${COIN_CLP_LIBRARY};${COIN_COIN_UTILS_LIBRARY};${COIN_OSI_LIBRARY};${COIN_OSI_CBC_LIBRARY};${COIN_OSI_CLP_LIBRARY}")
75
  SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARY};${COIN_COIN_UTILS_LIBRARY}")
76
  SET(COIN_CBC_LIBRARIES ${COIN_LIBRARIES})
85
  SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARY};${COIN_COIN_UTILS_LIBRARY};${COIN_ZLIB_LIBRARY};${COIN_BZ2_LIBRARY}")
86
  IF(COIN_ZLIB_LIBRARY)
87
    SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARIES};${COIN_ZLIB_LIBRARY}")
88
  ENDIF(COIN_ZLIB_LIBRARY)
89
   IF(COIN_BZ2_LIBRARY)
90
    SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARIES};${COIN_BZ2_LIBRARY}")
91
  ENDIF(COIN_BZ2_LIBRARY)
92
  SET(COIN_CBC_LIBRARIES "${COIN_CBC_LIBRARY};${COIN_CBC_SOLVER_LIBRARY};${COIN_CGL_LIBRARY};${COIN_OSI_LIBRARY};${COIN_OSI_CBC_LIBRARY};${COIN_OSI_CLP_LIBRARY};${COIN_ZLIB_LIBRARY};${COIN_BZ2_LIBRARY};${COIN_CLP_LIBRARIES}")
93
  SET(COIN_LIBRARIES ${COIN_CBC_LIBRARIES})
77 94
ENDIF(COIN_FOUND)
78 95

	
79 96
MARK_AS_ADVANCED(
80 97
  COIN_INCLUDE_DIR
81 98
  COIN_CBC_LIBRARY
82 99
  COIN_CBC_SOLVER_LIBRARY
83 100
  COIN_CGL_LIBRARY
84 101
  COIN_CLP_LIBRARY
85 102
  COIN_COIN_UTILS_LIBRARY
86 103
  COIN_OSI_LIBRARY
87 104
  COIN_OSI_CBC_LIBRARY
88 105
  COIN_OSI_CLP_LIBRARY
89 106
  COIN_OSI_VOL_LIBRARY
90 107
  COIN_VOL_LIBRARY
108
  COIN_ZLIB_LIBRARY
109
  COIN_BZ2_LIBRARY
91 110
)
92 111

	
93 112
IF(COIN_FOUND)
94 113
  SET(LEMON_HAVE_LP TRUE)
95 114
  SET(LEMON_HAVE_MIP TRUE)
96 115
  SET(LEMON_HAVE_CLP TRUE)
97 116
  SET(LEMON_HAVE_CBC TRUE)
98 117
ENDIF(COIN_FOUND)
Ignore white space 6 line context
1 1
SET(CPLEX_ROOT_DIR "" CACHE PATH "CPLEX root directory")
2 2

	
3 3
FIND_PATH(CPLEX_INCLUDE_DIR
4 4
  ilcplex/cplex.h
5
  PATHS "C:/ILOG/CPLEX91/include"
6
  PATHS "/opt/ilog/cplex91/include"
5
  PATHS "C:/ILOG/CPLEX/include"
6
  PATHS "/opt/ilog/cplex/include"
7 7
  HINTS ${CPLEX_ROOT_DIR}/include
8 8
)
9 9
FIND_LIBRARY(CPLEX_LIBRARY
10
  cplex91
11
  PATHS "C:/ILOG/CPLEX91/lib/msvc7/stat_mda"
12
  PATHS "/opt/ilog/cplex91/bin"
10
  cplex
11
  PATHS "C:/ILOG/CPLEX/lib/msvc7/stat_mda"
12
  PATHS "/opt/ilog/cplex/bin"
13 13
  HINTS ${CPLEX_ROOT_DIR}/bin
14
  HINTS ${CPLEX_ROOT_DIR}/lib
14 15
)
15 16

	
16 17
INCLUDE(FindPackageHandleStandardArgs)
17 18
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPLEX DEFAULT_MSG CPLEX_LIBRARY CPLEX_INCLUDE_DIR)
18 19

	
19 20
FIND_PATH(CPLEX_BIN_DIR
20
  cplex91.dll
21
  PATHS "C:/ILOG/CPLEX91/bin/x86_win32"
21
  cplex.dll
22
  PATHS "C:/ILOG/CPLEX/bin/x86_win32"
23
  HINTS ${CPLEX_ROOT_DIR}/bin
22 24
)
23 25

	
24 26
IF(CPLEX_FOUND)
25 27
  SET(CPLEX_INCLUDE_DIRS ${CPLEX_INCLUDE_DIR})
26 28
  SET(CPLEX_LIBRARIES ${CPLEX_LIBRARY})
27 29
  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
28 30
    SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
29 31
  ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
30 32
ENDIF(CPLEX_FOUND)
31 33

	
32 34
MARK_AS_ADVANCED(CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_BIN_DIR)
33 35

	
34 36
IF(CPLEX_FOUND)
35 37
  SET(LEMON_HAVE_LP TRUE)
36 38
  SET(LEMON_HAVE_MIP TRUE)
37 39
  SET(LEMON_HAVE_CPLEX TRUE)
38 40
ENDIF(CPLEX_FOUND)
Ignore white space 6 line context
... ...
@@ -4,54 +4,49 @@
4 4
 *
5 5
 * Copyright (C) 2003-2009
6 6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 8
 *
9 9
 * Permission to use, modify and distribute this software is granted
10 10
 * provided that this copyright notice appears in all copies. For
11 11
 * precise terms see the accompanying LICENSE file.
12 12
 *
13 13
 * This software is provided "AS IS" with no warranty of any kind,
14 14
 * express or implied, and with no claim as to its suitability for any
15 15
 * purpose.
16 16
 *
17 17
 */
18 18

	
19 19
///\file
20 20
///\brief Implementation of the CBC MIP solver interface.
21 21

	
22 22
#include "cbc.h"
23 23

	
24 24
#include <coin/CoinModel.hpp>
25 25
#include <coin/CbcModel.hpp>
26 26
#include <coin/OsiSolverInterface.hpp>
27 27

	
28
#ifdef COIN_HAS_CLP
29 28
#include "coin/OsiClpSolverInterface.hpp"
30
#endif
31
#ifdef COIN_HAS_OSL
32
#include "coin/OsiOslSolverInterface.hpp"
33
#endif
34 29

	
35 30
#include "coin/CbcCutGenerator.hpp"
36 31
#include "coin/CbcHeuristicLocal.hpp"
37 32
#include "coin/CbcHeuristicGreedy.hpp"
38 33
#include "coin/CbcHeuristicFPump.hpp"
39 34
#include "coin/CbcHeuristicRINS.hpp"
40 35

	
41 36
#include "coin/CglGomory.hpp"
42 37
#include "coin/CglProbing.hpp"
43 38
#include "coin/CglKnapsackCover.hpp"
44 39
#include "coin/CglOddHole.hpp"
45 40
#include "coin/CglClique.hpp"
46 41
#include "coin/CglFlowCover.hpp"
47 42
#include "coin/CglMixedIntegerRounding.hpp"
48 43

	
49 44
#include "coin/CbcHeuristic.hpp"
50 45

	
51 46
namespace lemon {
52 47

	
53 48
  CbcMip::CbcMip() {
54 49
    _prob = new CoinModel();
55 50
    _prob->setProblemName("LEMON");
56 51
    _osi_solver = 0;
57 52
    _cbc_model = 0;
... ...
@@ -237,55 +232,49 @@
237 232
  void CbcMip::_getObjCoeffs(InsertIterator b) const {
238 233
    int num = _prob->numberColumns();
239 234
    for (int i = 0; i < num; ++i) {
240 235
      Value coef = _prob->getColumnObjective(i);
241 236
      if (coef != 0.0) {
242 237
        *b = std::make_pair(i, coef);
243 238
        ++b;
244 239
      }
245 240
    }
246 241
  }
247 242

	
248 243
  void CbcMip::_setObjCoeff(int i, Value obj_coef) {
249 244
    _prob->setColumnObjective(i, obj_coef);
250 245
  }
251 246

	
252 247
  CbcMip::Value CbcMip::_getObjCoeff(int i) const {
253 248
    return _prob->getColumnObjective(i);
254 249
  }
255 250

	
256 251
  CbcMip::SolveExitStatus CbcMip::_solve() {
257 252

	
258 253
    if (_osi_solver) {
259 254
      delete _osi_solver;
260 255
    }
261
#ifdef COIN_HAS_CLP
262 256
    _osi_solver = new OsiClpSolverInterface();
263
#elif COIN_HAS_OSL
264
    _osi_solver = new OsiOslSolverInterface();
265
#else
266
#error Cannot instantiate Osi solver
267
#endif
268 257

	
269 258
    _osi_solver->loadFromCoinModel(*_prob);
270 259

	
271 260
    if (_cbc_model) {
272 261
      delete _cbc_model;
273 262
    }
274 263
    _cbc_model= new CbcModel(*_osi_solver);
275 264

	
276 265
    _osi_solver->messageHandler()->setLogLevel(_message_level);
277 266
    _cbc_model->setLogLevel(_message_level);
278 267

	
279 268
    _cbc_model->initialSolve();
280 269
    _cbc_model->solver()->setHintParam(OsiDoReducePrint, true, OsiHintTry);
281 270

	
282 271
    if (!_cbc_model->isInitialSolveAbandoned() &&
283 272
        _cbc_model->isInitialSolveProvenOptimal() &&
284 273
        !_cbc_model->isInitialSolveProvenPrimalInfeasible() &&
285 274
        !_cbc_model->isInitialSolveProvenDualInfeasible()) {
286 275

	
287 276
      CglProbing generator1;
288 277
      generator1.setUsingObjective(true);
289 278
      generator1.setMaxPass(3);
290 279
      generator1.setMaxProbe(100);
291 280
      generator1.setMaxLook(50);
... ...
@@ -295,55 +284,53 @@
295 284
      CglGomory generator2;
296 285
      generator2.setLimit(300);
297 286
      _cbc_model->addCutGenerator(&generator2, -1, "Gomory");
298 287

	
299 288
      CglKnapsackCover generator3;
300 289
      _cbc_model->addCutGenerator(&generator3, -1, "Knapsack");
301 290

	
302 291
      CglOddHole generator4;
303 292
      generator4.setMinimumViolation(0.005);
304 293
      generator4.setMinimumViolationPer(0.00002);
305 294
      generator4.setMaximumEntries(200);
306 295
      _cbc_model->addCutGenerator(&generator4, -1, "OddHole");
307 296

	
308 297
      CglClique generator5;
309 298
      generator5.setStarCliqueReport(false);
310 299
      generator5.setRowCliqueReport(false);
311 300
      _cbc_model->addCutGenerator(&generator5, -1, "Clique");
312 301

	
313 302
      CglMixedIntegerRounding mixedGen;
314 303
      _cbc_model->addCutGenerator(&mixedGen, -1, "MixedIntegerRounding");
315 304

	
316 305
      CglFlowCover flowGen;
317 306
      _cbc_model->addCutGenerator(&flowGen, -1, "FlowCover");
318 307

	
319
#ifdef COIN_HAS_CLP
320 308
      OsiClpSolverInterface* osiclp =
321 309
        dynamic_cast<OsiClpSolverInterface*>(_cbc_model->solver());
322 310
      if (osiclp->getNumRows() < 300 && osiclp->getNumCols() < 500) {
323 311
        osiclp->setupForRepeatedUse(2, 0);
324 312
      }
325
#endif
326 313

	
327 314
      CbcRounding heuristic1(*_cbc_model);
328 315
      heuristic1.setWhen(3);
329 316
      _cbc_model->addHeuristic(&heuristic1);
330 317

	
331 318
      CbcHeuristicLocal heuristic2(*_cbc_model);
332 319
      heuristic2.setWhen(3);
333 320
      _cbc_model->addHeuristic(&heuristic2);
334 321

	
335 322
      CbcHeuristicGreedyCover heuristic3(*_cbc_model);
336 323
      heuristic3.setAlgorithm(11);
337 324
      heuristic3.setWhen(3);
338 325
      _cbc_model->addHeuristic(&heuristic3);
339 326

	
340 327
      CbcHeuristicFPump heuristic4(*_cbc_model);
341 328
      heuristic4.setWhen(3);
342 329
      _cbc_model->addHeuristic(&heuristic4);
343 330

	
344 331
      CbcHeuristicRINS heuristic5(*_cbc_model);
345 332
      heuristic5.setWhen(3);
346 333
      _cbc_model->addHeuristic(&heuristic5);
347 334

	
348 335
      if (_cbc_model->getNumCols() < 500) {
349 336
        _cbc_model->setMaximumCutPassesAtRoot(-100);
Ignore white space 48 line context
... ...
@@ -61,87 +61,87 @@
61 61
    SET(LP_TEST_LIBS ${LP_TEST_LIBS} ${CPLEX_LIBRARIES})
62 62
  ENDIF()
63 63
  IF(LEMON_HAVE_CLP)
64 64
    SET(LP_TEST_LIBS ${LP_TEST_LIBS} ${COIN_CLP_LIBRARIES})
65 65
  ENDIF()
66 66

	
67 67
  TARGET_LINK_LIBRARIES(lp_test ${LP_TEST_LIBS})
68 68
  ADD_TEST(lp_test lp_test)
69 69
  ADD_DEPENDENCIES(check lp_test)
70 70

	
71 71
  IF(WIN32 AND LEMON_HAVE_GLPK)
72 72
    GET_TARGET_PROPERTY(TARGET_LOC lp_test LOCATION)
73 73
    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
74 74
    ADD_CUSTOM_COMMAND(TARGET lp_test POST_BUILD
75 75
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/glpk.dll ${TARGET_PATH}
76 76
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/libltdl3.dll ${TARGET_PATH}
77 77
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/zlib1.dll ${TARGET_PATH}
78 78
    )
79 79
  ENDIF()
80 80

	
81 81
  IF(WIN32 AND LEMON_HAVE_CPLEX)
82 82
    GET_TARGET_PROPERTY(TARGET_LOC lp_test LOCATION)
83 83
    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
84 84
    ADD_CUSTOM_COMMAND(TARGET lp_test POST_BUILD
85
      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex91.dll ${TARGET_PATH}
85
      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex.dll ${TARGET_PATH}
86 86
    )
87 87
  ENDIF()
88 88
ENDIF()
89 89

	
90 90
IF(LEMON_HAVE_MIP)
91 91
  IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer")
92 92
    ADD_EXECUTABLE(mip_test mip_test.cc)
93 93
  ELSE()
94 94
    ADD_EXECUTABLE(mip_test EXCLUDE_FROM_ALL mip_test.cc)
95 95
  ENDIF()
96 96

	
97 97
  SET(MIP_TEST_LIBS lemon)
98 98

	
99 99
  IF(LEMON_HAVE_GLPK)
100 100
    SET(MIP_TEST_LIBS ${MIP_TEST_LIBS} ${GLPK_LIBRARIES})
101 101
  ENDIF()
102 102
  IF(LEMON_HAVE_CPLEX)
103 103
    SET(MIP_TEST_LIBS ${MIP_TEST_LIBS} ${CPLEX_LIBRARIES})
104 104
  ENDIF()
105 105
  IF(LEMON_HAVE_CBC)
106 106
    SET(MIP_TEST_LIBS ${MIP_TEST_LIBS} ${COIN_CBC_LIBRARIES})
107 107
  ENDIF()
108 108

	
109 109
  TARGET_LINK_LIBRARIES(mip_test ${MIP_TEST_LIBS})
110 110
  ADD_TEST(mip_test mip_test)
111 111
  ADD_DEPENDENCIES(check mip_test)
112 112

	
113 113
  IF(WIN32 AND LEMON_HAVE_GLPK)
114 114
    GET_TARGET_PROPERTY(TARGET_LOC mip_test LOCATION)
115 115
    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
116 116
    ADD_CUSTOM_COMMAND(TARGET mip_test POST_BUILD
117 117
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/glpk.dll ${TARGET_PATH}
118 118
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/libltdl3.dll ${TARGET_PATH}
119 119
      COMMAND ${CMAKE_COMMAND} -E copy ${GLPK_BIN_DIR}/zlib1.dll ${TARGET_PATH}
120 120
    )
121 121
  ENDIF()
122 122

	
123 123
  IF(WIN32 AND LEMON_HAVE_CPLEX)
124 124
    GET_TARGET_PROPERTY(TARGET_LOC mip_test LOCATION)
125 125
    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
126 126
    ADD_CUSTOM_COMMAND(TARGET mip_test POST_BUILD
127
      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex91.dll ${TARGET_PATH}
127
      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex.dll ${TARGET_PATH}
128 128
    )
129 129
  ENDIF()
130 130
ENDIF()
131 131

	
132 132
FOREACH(TEST_NAME ${TESTS})
133 133
  IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer")
134 134
    ADD_EXECUTABLE(${TEST_NAME} ${TEST_NAME}.cc)
135 135
  ELSE()
136 136
    ADD_EXECUTABLE(${TEST_NAME} EXCLUDE_FROM_ALL ${TEST_NAME}.cc)
137 137
  ENDIF()
138 138
  TARGET_LINK_LIBRARIES(${TEST_NAME} lemon)
139 139
    IF(TEST_WITH_VALGRIND)
140 140
      ADD_TEST(${TEST_NAME}
141 141
        valgrind --error-exitcode=1 ${VALGRIND_FLAGS}
142 142
        ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} )
143 143
    ELSE()
144 144
      ADD_TEST(${TEST_NAME} ${TEST_NAME})
145 145
    ENDIF()
146 146
  ADD_DEPENDENCIES(check ${TEST_NAME})
147 147
ENDFOREACH()
0 comments (0 inline)