Skip to content

Commit

Permalink
Merge branch 'implied_integer_network_matrices' into 'master'
Browse files Browse the repository at this point in the history
Implied integer detection using network matrices

See merge request integer/scip!3480
  • Loading branch information
svigerske committed Oct 19, 2024
2 parents 3863929 + 9b87472 commit 95f0ab4
Show file tree
Hide file tree
Showing 13 changed files with 14,906 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ build*
debug/
release/
cmake-build-debug/
cmake-build-release/

# check folder, files created by or for `make test`
check/results/
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ Features
- detailed information about applied symmetry handling techniques can be printed to the terminal
- added a new separator sepa_multilinear to generate flower cuts from AND constraints nonlinear product expressions.
- added functionality to deal with hypergraphs by means of efficient access to vertices, edges and intersections edges.
- added support for (transposed) network matrix detection in pub_network.h
- added a new presolver presol_implint which detects implied integers by detecting (transposed) network submatrices in the problem. For now, this plugin is disabled by default.

Performance improvements
------------------------
Expand Down Expand Up @@ -44,6 +46,8 @@ Interface changes
- SCIPhypergraphCreate(), SCIPhypergraphClear(), SCIPhypergraphFree(), SCIPhypergraphAddVertex(), SCIPhypergraphAddEdge(), SCIPhypergraphIsValid() and SCIPhypergraphComputeVerticesEdges() for building and deleting hypergraphs, SCIPhypergraphComputeOverlaps(), SCIPhypergraphOverlapFind(), SCIPhypergraphIntersectEdges(), SCIPhypergraphComputeOverlapsEdges(), SCIPhypergraphComputeVerticesOverlaps(), SCIPhypergraphOverlapsDisjoint() to deal with pair-wise intersections of hyperedges, SCIPhypergraphIterInit(), SCIPhypergraphIterClear(), SCIPhypergraphIterStart(), SCIPhypergraphIterValid(), SCIPhypergraphIterNext(), SCIPhypergraphIterBase(), SCIPhypergraphIterAdjacent(), SCIPhypergraphIterMinVertex(), SCIPhypergraphIterOverlap() for iterating over adjacent edges, SCIPhypergraphHasVertexEdges() SCIPhypergraphHasOverlaps(), SCIPhypergraphHasOverlapsEdges(), SCIPhypergraphHasVertexOverlaps(), SCIPhypergraphGetNVertices(), SCIPhypergraphGetNEdges(), SCIPhypergraphBlkmem(), SCIPhypergraphGetNOverlaps(), SCIPhypergraphVertexData(), SCIPhypergraphEdgeData(), SCIPhypergraphEdgeSize(), SCIPhypergraphEdgeVertices(), SCIPhypergraphVertexEdgesFirst(), SCIPhypergraphVertexEdgesBeyond(), SCIPhypergraphVertexEdgesGetAtIndex(), SCIPhypergraphOverlapData(), SCIPhypergraphOverlapSize(), SCIPhypergraphOverlapVertices() SCIPhypergraphEdgesOverlapsFirst(), SCIPhypergraphEdgesOverlapsBeyond(), SCIPhypergraphEdgesOverlapsGetAtIndex(), SCIPhypergraphOverlapsEdgesFirst(), SCIPhypergraphOverlapsEdgesBeyond(), SCIPhypergraphOverlapsEdgesGetAtIndex(), SCIPhypergraphVertexOverlapsFirst(), SCIPhypergraphVertexOverlapsBeyond() and SCIPhypergraphVertexOverlapsGetAtIndex() to query information about vertices, edges and overlaps as well as their incidences.
- SCIPdebugClearSol() for clearing the debug solution
- Renamed XML functions to avoid name clash with libxml2 by adding "SCIP": SCIPxmlProcess(), SCIPxmlNewNode(), SCIPxmlNewAttr(), SCIPxmlAddAttr(), SCIPxmlAppendChild(), SCIPxmlFreeNode(), SCIPxmlShowNode(), SCIPxmlGetAttrval(), SCIPxmlFirstNode(), SCIPxmlNextNode(), SCIPxmlFindNode(), SCIPxmlFindNodeMaxdepth(), SCIPxmlNextSibl(), SCIPxmlPrevSibl(), SCIPxmlFirstChild(), SCIPxmlLastChild(), SCIPxmlGetName(), SCIPxmlGetLine(), SCIPxmlGetData(), SCIPxmlFindPcdata().
- SCIPincludePresolImplint() to include the new implied integer presolver
- SCIPnetmatdecCreate() and SCIPnetmatdecFree() for creating and deleting a network matrix decomposition. SCIPnetmatdecTryAddCol() and SCIPnetmatdecTryAddRow() are used to add columns and rows of the matrix to the decomposition. SCIPnetmatdecContainsRow() and SCIPnetmatdecContainsColumn() check if the decomposition contains the given row or columns. SCIPnetmatdecRemoveComponent() can remove connected components from the decomposition. SCIPnetmatdecCreateDiGraph() can be used to expose the underlying digraph. SCIPnetmatdecIsMinimal() and SCIPnetmatdecVerifyCycle() check if certain invariants of the decomposition are satisfied and are used in tests.

### Changes in preprocessor macros

Expand All @@ -63,6 +67,8 @@ Interface changes
- new parameter "propagating/symmetry/handlesignedorbitopes" to control whether special symmetry handling techniques for orbitopes whose columns can be (partially) reflected shall be applied
- 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
- new parameter "propagating/symmetry/dispsyminfo" to control whether information about which symmetry handling methods are applied are printed
- 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
- new parameter "presolving/implint/numericslimit" determines the limit for absolute integral coefficients beyond which the corresponding rows and variables are excluded from implied integer detection

### Data structures

Expand Down
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,7 @@ SCIPPLUGINLIBOBJ= scip/benders_default.o \
scip/presol_dualinfer.o\
scip/presol_gateextraction.o \
scip/presol_implics.o \
scip/presol_implint.o \
scip/presol_inttobinary.o \
scip/presol_qpkktref.o \
scip/presol_redvub.o \
Expand Down Expand Up @@ -860,6 +861,7 @@ SCIPLIBOBJ = scip/boundstore.o \
scip/misc.o \
scip/misc_linear.o \
scip/misc_rowprep.o \
scip/network.o \
scip/nlhdlr.o \
scip/nlp.o \
scip/nlpi.o \
Expand Down
5 changes: 5 additions & 0 deletions doc/xternal.c
Original file line number Diff line number Diff line change
Expand Up @@ -9054,6 +9054,11 @@
* @brief methods for creating and accessing user decompositions
*/

/**@defgroup NetworkMatrix Network Matrix
* @ingroup DataStructures
* @brief methods for detecting network matrices and converting them to the underlying graphs
*/

/**@defgroup SymGraph Symmetry Detection Graph
* @ingroup DataStructures
* @brief methods for creating and manipulating symmetry detection graphs
Expand Down
4 changes: 4 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ set(scipsources
scip/heur_zirounding.c
scip/hypergraph.c
scip/message_default.c
scip/network.c
scip/nlhdlr_bilinear.c
scip/nlhdlr_convex.c
scip/nlhdlr_default.c
Expand All @@ -194,6 +195,7 @@ set(scipsources
scip/presol_dualinfer.c
scip/presol_gateextraction.c
scip/presol_implics.c
scip/presol_implint.c
scip/presol_inttobinary.c
scip/presol_qpkktref.c
scip/presol_redvub.c
Expand Down Expand Up @@ -691,6 +693,7 @@ set(scipheaders
scip/presol_gateextraction.h
scip/presol.h
scip/presol_implics.h
scip/presol_implint.h
scip/presol_inttobinary.h
scip/presol_qpkktref.h
scip/presol_redvub.h
Expand Down Expand Up @@ -746,6 +749,7 @@ set(scipheaders
scip/pub_misc_rowprep.h
scip/pub_misc_select.h
scip/pub_misc_sort.h
scip/pub_network.h
scip/pub_nlhdlr.h
scip/pub_nlp.h
scip/pub_nlpi.h
Expand Down
Loading

0 comments on commit 95f0ab4

Please sign in to comment.