Skip to content

Commit eba4cf3

Browse files
author
Christopher Hojny
committed
Merge remote-tracking branch 'origin/performance-master' into 3877-shrink-symmetry-detection-graph
2 parents 0bf6564 + e2237d4 commit eba4cf3

File tree

113 files changed

+31473
-3267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+31473
-3267
lines changed

CHANGELOG

+45-12
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ Features
2828
- added decomposition kernel search (DKS) heuristic (disabled by default). This heuristic implements a kernel search framework and can be used
2929
both as a construction heuristic as well as an improvement heuristic. In addition, existing decomposition information can be utilized by this heuristic.
3030
- symmetry detection does not treat implicit integer variables separately anymore, but computes symmetries based on the variable type inferred from variable bounds and implied integrality
31+
- when solving a SCIP problem with additional decomposition information (for example, when reading a DEC file) and enabling decomposition/applybenders,
32+
the problem is now solved in a Benders' decomposition relaxator; instead of decomposing the original SCIP instance, the relaxator builds the decomposed problem in
33+
sub-SCIPs and solves it via default Benders' Decomposition; a solution to the original (undecomposed) problem is now made available by the relaxator;
34+
the SCIP shell dialog "display statistics" now also prints the statistics from solving the Benders' decomposition in the relaxator
3135

3236
Performance improvements
3337
------------------------
@@ -68,6 +72,7 @@ Interface changes
6872
- the callback SCIP_DECL_EXPRINTEGRALITY, which returns the integrality of an expression, had its fourth argument change from SCIP_Bool* to SCIP_IMPLINTTYPE*, to represent implied integrality in nonlinear expressions, that is an implied integral type of an auxiliary variable if the expression were assigned to it
6973
- new event SCIP_EVENTTYPE_DUALBOUNDIMPROVED is generated whenever the global dual bound is improved
7074
- new event mask SCIP_EVENTTYPE_GAPUPDATED for catching updates in primal or dual bound
75+
- added new sorting functions SCIPsortRealPtrPtr(), ...
7176

7277
### Deleted and changed API methods
7378

@@ -87,6 +92,8 @@ Interface changes
8792
- SCIPexprSetIntegrality(): set argument generalized from SCIP_Bool integral to SCIP_IMPLINTTYPE integrality (4th position)
8893
- Temporarily for SCIP 10 only: Creating a variable SCIPcreateVar() with type SCIP_VARTYPE_IMPLINT creates a variable of type SCIP_VARTYPE_CONTINUOUS and implied integral type SCIP_IMPLINTTYPE_WEAK instead
8994
- Temporarily for SCIP 10 only: SCIPchgVarType() converts a call with type SCIP_VARTYPE_IMPLINT into a call of SCIPchgVarImplType() with type SCIP_IMPLINTTYPE_WEAK
95+
- SCIPapplyBendersDecomposition has been removed. This was originally used to apply Benders' decomposition from a
96+
supplied decomposition structure. The application of Benders' decomposition now occurs in benders_relax.
9097

9198
### New API functions
9299

@@ -127,6 +134,8 @@ Interface changes
127134
- added SCIPvarsCountTypes() to determine the variable type count distribution for an array of variables
128135
- added SCIPeventGetOldImplType() and SCIPeventGetNewImplType() to query the new event SCIP_EVENTTYPE_IMPLTYPECHANGED
129136
- added SCIPexprGetIntegrality(), which in addition to the existing function SCIPexprIsIntegral() provides information about the presence of weakly implied integral variables
137+
- added SCIPincludeRelaxBenders(), which is used to include the Benders' decomposition relaxator.
138+
- added SCIPgetMasterProblemRelaxBenders() for retrieving the master problem SCIP instance from the Benders' decomposition relaxator.
130139

131140
### Changes in preprocessor macros
132141

@@ -162,6 +171,7 @@ Interface changes
162171
- new parameter "propagating/symmetry/handlesignedorbitopes" to control whether special symmetry handling techniques for orbitopes whose columns can be (partially) reflected shall be applied
163172
- new parameter "propagating/symmetry/usesimplesgncomp" to control whether symmetry components all of whose variables are simultaneously reflected by a symmetry shall be handled by a special inequality
164173
- new parameter "propagating/symmetry/dispsyminfo" to control whether information about which symmetry handling methods are applied are printed
174+
- new parameter "presolving/implint/convertintegers" to control whether implied integrality should also be detected for enforced integral variables
165175
- new parameter "presolving/implint/columnrowratio" indicates the ratio of rows/columns where the row-wise network matrix detection algorithm is used instead of the column-wise network matrix detection algorithm
166176
- new parameter "presolving/implint/numericslimit" determines the limit for absolute integral coefficients beyond which the corresponding rows and variables are excluded from implied integrality detection
167177
- iis/minimal, iis/nodes, iis/removedbounds, iis/removeunusedvars, iis/silent, iis/stopafterone, iis/time, iis/greedy/additive, iis/greedy/conservative, iis/greedy/delafteradd, iis/greedy/dynamicreordering, iis/greedy/maxbatchsize, iis/greedy/maxrelbatchsize, iis/greedy/nodelimperiter, iis/greedy/priority, iis/greedy/timelimperiter
@@ -178,6 +188,11 @@ Interface changes
178188
"heuristics/dks/buckmaxgap", "heuristics/dks/maxlinkscore", "heuristics/dks/maxbuckfrac", "heuristics/dks/maxnodes",
179189
"heuristics/dks/usetwolevel", "heuristics/dks/usedecomp", "heuristics/dks/usebestsol", "heuristics/dks/redcostsort", "heuristics/dks/primalonly",
180190
"heuristics/dks/redcostlogsort", "heuristics/dks/objcutoff", and "heuristics/dks/runbinprobsonly" to control heuristic decomposition kernel search
191+
- new parameters "relaxing/benders/continueorig" and "relaxing/benders/nodelimit" for controlling the behaviour of the
192+
Benders' decomposition relaxator. The "continueorig" parameter indicates whether the original problem should continue
193+
solving after the completion of the Benders' decomposition algorithm if the problem is not solved to optimality. The
194+
"nodelimit" parameter allows the user to provide a node limit for the Benders' decomposition master problem (by
195+
default the limits from the original SCIP instance are copied to the master problem).
181196

182197
### Data structures
183198

@@ -284,15 +299,31 @@ Miscellaneous
284299

285300
- updated description of paramater misc/usesymmetry
286301

302+
@section RN923 SCIP 9.2.3
303+
*************************
304+
305+
Fixed bugs
306+
----------
307+
308+
Build system
309+
------------
310+
311+
### Cmake
312+
313+
### Makefile
314+
315+
Miscellaneous
316+
-------------
317+
287318
@section RN922 SCIP 9.2.2
288319
*************************
289320

290321
Fixed bugs
291322
----------
292323

293-
- fixed definition of slack variables of >= constraints and ranged rows in LP interface to Gurobi (lpi_grb.c)
324+
- fixed definition of slack variables of >= constraints and ranged rows in LP interface to Gurobi
294325
- free memory leaking singleton arrays for ignored variables in SCIPapplyHeurDualval()
295-
- use epsilon tolerance for bound implications of dual substitutions in dualPresolve() of cons_linear.c
326+
- use epsilon tolerance for bound implications of dual substitutions in dualPresolve() of cons_linear
296327
- fixed timeouts due to race conditions when using TPI=omp
297328
- fixed issues with indexing of concurrent solvers when a solver finishes (because SCIP is too fast) before others have been created when using TPI=tny
298329
- respect fixing if variable is declared binary in bounds section of mps file
@@ -301,12 +332,18 @@ Fixed bugs
301332
- adds missing NULL check for Benders' subproblems in feasalt cut
302333
- apply objective scale to pseudoboolean non-linear terms
303334
- impose pseudoboolean cost bound without intermediate casting
304-
- flatten aggregation graph before finishing presolving to accelerate evaluating an empty solution
305-
- respect fixed resultants in binvarGetActiveProbindex() of branch_relpscost.c
306-
- drop fixed resultants when copying pseudoboolean constraint to avert segmentation fault
307-
- correct matrix entry when resolving aggregated variables in checkSystemGF2() of cons_xor.c
308-
- corrected symmetry detection graph of cons_and.c, cons_or.c, and cons_xor.c
309-
- correct redundancy filter in consdataCreateRedundant() of cons_bounddisjunction.c
335+
- flatten aggregation graph before finishing presolve to accelerate evaluating an empty solution
336+
- respect fixed resultants in binvarGetActiveProbindex() of branch_relpscost
337+
- drop fixed resultants when copying pseudoboolean constraint
338+
- correct matrix entry when resolving aggregated variables in checkSystemGF2() of cons_xor
339+
- corrected symmetry detection graph of cons_and, cons_or, cons_xor, and cons_indicator
340+
- correct redundancy filter in consdataCreateRedundant() of cons_bounddisjunction
341+
- replaced unreliable comparison of node pointers by node numbers in prop_genvbounds
342+
- allocate memory for all integral variables in applyCliqueFixings() of heur_clique
343+
- fix conflict resolution for one particular case in cons_indicator
344+
- make interface to nauty thread safe
345+
- use relative epsilon tolerance to check Farkas row in SCIPlpGetDualfarkas() to avoid invalid cutoff
346+
- fixed bug with SOS2 constraints of size that avoided a correct enforcing
310347

311348
Build system
312349
------------
@@ -324,9 +361,6 @@ Build system
324361
- fix use of SANITIZE=full for debug builds with GCC on Linux: removed -fsanitize=leak because it cannot be used together with -fsanitize=address
325362
- fix that make install SHARED=true missed to install libscipbase
326363

327-
Miscellaneous
328-
-------------
329-
330364
@section RN921 SCIP 9.2.1
331365
*************************
332366

@@ -341,7 +375,6 @@ Fixed bugs
341375
- added copy callbacks for presolvers dualagg and redvub, branching rules lookahead and cloud, primal heuristics dualval and repair, propagator nlobbt, and separators gauge and convexproj
342376
- respect maximal separation rounds setting by running remaining delayed separators in last round
343377
- replace terms consistently in applyFixings() of cons_linear to handle infinite aggregations
344-
- fixed bug with SOS2 constraints of size that avoided a correct enforcing
345378

346379
Build system
347380
------------

CMakeLists.txt

+3-7
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_R
2121
set(SCIP_VERSION_MAJOR 10)
2222
set(SCIP_VERSION_MINOR 0)
2323
set(SCIP_VERSION_PATCH 0)
24-
set(SCIP_VERSION_API 141)
24+
set(SCIP_VERSION_API 143)
2525

2626
project(SCIP
2727
VERSION ${SCIP_VERSION_MAJOR}.${SCIP_VERSION_MINOR}.${SCIP_VERSION_PATCH}
@@ -543,10 +543,6 @@ elseif(LPS STREQUAL "highs")
543543
message(FATAL_ERROR "Requested LP solver HiGHS not found.")
544544
endif()
545545
find_package(Threads REQUIRED)
546-
find_package(OpenMP)
547-
if(OPENMP_FOUND)
548-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
549-
endif()
550546
elseif(LPS STREQUAL "none")
551547
set(lpi lpi/lpi_none.c)
552548
else()
@@ -783,8 +779,8 @@ if(SCIP_WITH_EXACTSOLVE)
783779
if(SCIP_WITH_LPSEXACT STREQUAL "SoPlex")
784780
include_directories(${SOPLEX_INCLUDE_DIRS})
785781
set(lpiexact lpiexact/lpiexact_spx.cpp)
786-
set(LPS_LIBRARIES ${SOPLEX_LIBRARIES})
787-
set(LPS_PIC_LIBRARIES ${SOPLEX_PIC_LIBRARIES})
782+
set(LPS_LIBRARIES ${LPS_LIBRARIES} ${SOPLEX_LIBRARIES})
783+
set(LPS_PIC_LIBRARIES ${LPS_PIC_LIBRARIES} ${SOPLEX_PIC_LIBRARIES})
788784
endif()
789785

790786
if(SCIP_WITH_LPSEXACT STREQUAL "none")

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,7 @@ SCIPPLUGINLIBOBJ= scip/benders_default.o \
878878
scip/reader_tim.o \
879879
scip/reader_wbo.o \
880880
scip/reader_zpl.o \
881+
scip/relax_benders.o \
881882
scip/sepa_aggregation.o \
882883
scip/sepa_cgmip.o \
883884
scip/sepa_clique.o \

0 commit comments

Comments
 (0)