pub_network.h
Go to the documentation of this file.
37 * A matrix \f$M \in \{-1,0,1\}^{m\times n} \f$ is a network matrix if there exists a directed graph \f$G = (V,A)\f$
38 * with \f$|A| = m+n\f$ arcs and a spanning forest \f$T\f$ with \f$|T| = m\f$ such that \f$M\f$'s rows index \f$T\f$ and
43 * +1 & \textrm{if the unique } u-v \textrm{ path in } T \textrm{ passes through } a \textrm{ forwardly}, \\
44 * -1 & \textrm{if the unique } u-v \textrm{ path in } T \textrm{ passes through } a \textrm{ backwardly}, \\
50 * The main difficulty with detecting network matrices is that there may exist many pairs of a graph and a spanning tree
51 * that realize a matrix. The algorithms in this file maintain and update an SPQR forest, which is a graph decomposition
54 * Note that all addition algorithms expect that each nonzero is given exactly once and not more often; in particular,
61 * Note that although these publications contain the methods for undirected graphs (and binary matrices),
69/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
87/** create an empty network matrix decomposition that can store a matrix with at most the given dimensions
105/** tries to add a given column to the network matrix. Any nonzero row indices in the column that are not yet in the
108 * @note Each column and row may be added only once. Trying to add a column that is already in the decomposition will
124/** tries to add a given row to the network matrix. Any nonzero column indices in the row that are not yet in the
127 * @note Each column and row may be added only once. Trying to add a row that is already in the decomposition will
133 * If the user is only interested in determining if a certain (sub)matrix is network or not, using
134 * SCIPnetmatdecTryAddCol() will generally be faster, unless the (sub)matrix has many more columns than rows.
163 * @note This method is 'stupid', and does not delete the associated graph data structure in the decomposition.
164 * Moreover, it does not explicitly check if the rows/columns that the user provides are a connected
165 * component of the submatrix given by the decomposition. If this is not the case, this will lead to buggy behavior.
179 * A network matrix decomposition is minimal if it does not contain adjacent parallel or series skeletons.
202 SCIP_Bool* pathsignstorage /**< A buffer to store the computed path's row signs. Should have size
208 * The arc data of the digraph contains the row/column indices of the graph. If index < nrows, then the index is the
210 * Since many different realizations are possible, we use the default orientation of the two-separations to associate
211 * pairs of nodes to each other. In particular, we choose to connect the nodes of different 2-connected components
212 * in node 0. This way, the rank of the underlying matrix is equal to m+1-c, where c is the number of undirected
common defines and data types used in all packages of SCIP
SCIP_Bool SCIPnetmatdecVerifyCycle(BMS_BUFMEM *bufmem, SCIP_NETMATDEC *dec, int column, int *nonzrowidx, double *nonzvals, int nnonzs, int *pathrowstorage, SCIP_Bool *pathsignstorage)
Definition: network.c:11685
SCIP_RETCODE SCIPnetmatdecCreateDiGraph(SCIP_NETMATDEC *dec, BMS_BLKMEM *blkmem, SCIP_DIGRAPH **pdigraph, SCIP_Bool createrowarcs)
Definition: network.c:11701
SCIP_Bool SCIPnetmatdecContainsRow(SCIP_NETMATDEC *dec, int row)
Definition: network.c:11651
void SCIPnetmatdecRemoveComponent(SCIP_NETMATDEC *dec, int *componentrows, int nrows, int *componentcols, int ncols)
Definition: network.c:11667
SCIP_Bool SCIPnetmatdecContainsColumn(SCIP_NETMATDEC *dec, int column)
Definition: network.c:11659
SCIP_RETCODE SCIPnetmatdecTryAddRow(SCIP_NETMATDEC *dec, int row, int *nonzcols, double *nonzvals, int nnonzs, SCIP_Bool *success)
Definition: network.c:11627
SCIP_RETCODE SCIPnetmatdecCreate(BMS_BLKMEM *blkmem, SCIP_NETMATDEC **pdec, int nrows, int ncols)
Definition: network.c:11566
SCIP_RETCODE SCIPnetmatdecTryAddCol(SCIP_NETMATDEC *dec, int column, int *nonzrows, double *nonzvals, int nnonzs, SCIP_Bool *success)
Definition: network.c:11603
SCIP_Bool SCIPnetmatdecIsMinimal(SCIP_NETMATDEC *dec)
Definition: network.c:11678
memory allocation routines
Definition: memory.c:2545
Definition: struct_misc.h:221
Definition: network.c:11560
type definitions for block memory pools and memory buffers
type definitions for miscellaneous datastructures
type definitions for return codes for SCIP methods