extreduce_extmst.c
Go to the documentation of this file.
21 * Allows to efficiently compute and store special distance (SD) MSTs between the leaves of extension tree.
24 * A 'level' of the extension tree consists of all possible extension edges from the leaf used for extension.
25 * For each level there are a number of 'components': all the subsets that were not already ruled-out.
30 * 1. the MST corresponding to the extension tree without the level and without the tree node at which the level
38 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
279 const SCIP_Real* const adjcosts_ancestors = extreduce_mldistsTargetDists(sds_vertical, comp_level, comp_vert);
299 adjcosts[adjpos++] = extreduce_mldistsTargetDist(sds_horizontal, comp_level, comp_vert, sibling);
373 assert(mst_parent->nnodes == nleaves - extreduce_extStackCompNOutedges(extdata, stackpos_parent));
375 SCIPdebugMessage("got MST level parent with n=%d, m=%d \n", mst_parent->nnodes, mst_parent->nedges_max);
397 extreduce_mldistsTopLevel(sds_vertical) == extreduce_mldistsTopLevel(reddata->sdsbias_vertical) );
506 SCIPdebugMessage("add MST level with n=%d, m=%d \n", mstextcomp->mst_new->nnodes, mstextcomp->mst_new->nedges_max);
507 SCIPdebugMessage("weight of levelbase new MST: %f \n", reduce_dcmstGetWeight(scip, mstextcomp->mst_new));
606 SCIPdebugMessage("added MST component with n=%d, m=%d \n", mst_new->nnodes, mst_new->nedges_max);
784 if( extreduce_bottleneckIsDominated(scip, graph, topleaf, leaf, specialDist, edge_forbidden, extdata) )
865 SCIPdebugMessage("initialized first MST level (%d) \n", extreduce_mldistsTopLevel(sds_vertical));
912 /** Is bottleneck rule out with biased SDs from leaf of top tree component to siblings possible?
961 if( extreduce_bottleneckToSiblingIsDominatedBiased(scip, graph, edge2top, edge2sibling, sdbiased, extdata) )
974 /** Is bottleneck rule out with biased SDs from leaf of top tree component to ancestors possible?
987 const SCIP_Real* const adjedgecosts = extreduce_mldistsTopTargetDists(sdsbias_vertical, topleaf);
998 /* if there are no siblings, then there is a chance to find a non-trivial bottleneck rule-out */
1015 if( extreduce_bottleneckIsDominatedBiased(scip, graph, topleaf, leaf, specialDistBiased, extdata) )
1030 * Returns early (with leafRuledOut == TRUE) if extension via 'edge2leaf' can be ruled out already.
1054 const SCIP_Bool atInitialAnyStar = extIsAtInitialStar(extdata) || extIsAtInitialGenStar(extdata);
1058 assert(atInitialAnyStar || extreduce_mldistsLevelNTopTargets(sds_horizontal) >= extStackGetTopSize(extdata) - 1);
1093 if( extreduce_bottleneckIsDominated(scip, graph, topleaf, sibling, sds[j], edge2sibling, extdata) )
1106 assert(!extreduce_bottleneckToSiblingIsDominated(scip, graph, edge2top, edge2sibling, sds[j], extdata));
1108 else if( extreduce_bottleneckToSiblingIsDominated(scip, graph, edge2top, edge2sibling, sds[j], extdata) )
1126 * Returns early (with leafRuledOut == TRUE) if extension via 'edge2leaf' can be ruled out already.
1152 assert(extreduce_sdsverticalInSync(scip, graph, extStackGetTopSize(extdata), nleaves_ancestors, topleaf, extdata));
1183 if( extreduce_bottleneckIsDominated(scip, graph, topleaf, leaf, specialDist, edge2leaf, extdata) )
1203 * Returns early (with leafRuledOut == TRUE) if extension via 'edge2leaf' can be ruled out already.
1225 mstCompLeafGetSDsToSiblings(scip, graph, edge2leaf, extdata, &(sds[nleaves_ancestors]), leafRuledOut);
1230 assert(!extInitialCompIsStar(extdata) || dbgBottleneckFromLeafIsDominated(scip, graph, compleaf, TRUE, edge2leaf, extdata));
1241 mstCompLeafGetSDsToAncestors(scip, graph, edge2leaf, nleaves_ancestors, extdata, sds, leafRuledOut);
1246 assert(!extInitialCompIsStar(extdata) || dbgBottleneckFromLeafIsDominated(scip, graph, compleaf, FALSE, edge2leaf, extdata));
1250 if( hasSdsBiased && mstCompLeafToAncestorsBiasedRuleOut(scip, graph, edge2leaf, nleaves_ancestors, extdata) )
1256 assert(!dbgBottleneckFromLeafIsDominated(scip, graph, compleaf, FALSE, edge2leaf, extdata) || graph_pc_isPc(graph));
1261 /** Adds leaf from top component of current tree to MST. I.e., adds SD adjacency costs updates MST.
1263 * Returns early (with leafRuledOut == TRUE) if extension via 'edge2leaf' can be ruled out already.
1335 if( extdata->tree_nleaves == 3 && EQ(mstweight, tree_cost) && !mstEqComp3RuleOut(scip, graph, tree_cost, extdata) )
1428 SCIP_Real* const adjedgecostsBiased = hasBiasedSds ? extreduce_mldistsEmptySlotTargetDists(sdsbias_vertical) : NULL;
1435 int* const adjidsBiased = hasBiasedSds ? extreduce_mldistsEmptySlotTargetIds(sdsbias_vertical) : NULL;
1456 if( extreduce_bottleneckWithExtedgeIsDominated(scip, graph, edge2neighbor, neighbor_base, leaf, specialDist, extdata) )
1468 specialDist = extGetSdDoubleFromDistdata(scip, graph, neighbor, leaf, extdata->distdata_biased, extdata);
1474 if( extreduce_bottleneckWithExtedgeIsDominatedBiased(scip, graph, edge2neighbor, neighbor_base, leaf, specialDist, extdata) )
1592 /* remove the neighbor base SD entry (which we don't need for further extensions from the neighbor base) */
1610 /** checks whether the MST extended at the given neighbor allows to rule-out any extension along this neighbor */
1748 const SCIP_Real specialDist = extreduce_mldistsTopTargetDist(sds_horizontal, sibling_left, ext_head);
1753 const SCIP_Real sd_new = extGetSdDoubleFromDistdata(scip, graph, ext_head, sibling_left, distdata, extdata);
1766 const SCIP_Real specialDist = extGetSdDoubleFromDistdata(scip, graph, ext_head, sibling_right, distdata, extdata);
1873 assert(!hasBiasedSd || extreduce_mldistsTopLevel(sdsbias_vertical) == extreduce_mldistsTopLevel(sds_vertical));
1881 * if extension via this edge can be ruled out already by using a bottleneck argument or MST. */
1912 /* if not yet ruled out and in PC mode, try bottleneck distances to tree vertices marked before */
1943 assert(!extInitialCompIsStar(extdata) || neighbor_base == graph->head[extdata->extstack_data[0]]);
1969 SCIPdebugMessage("add EMPTY vertical level %d \n", extreduce_mldistsTopLevel(sds_vertical) + 1);
1979 assert(extreduce_mldistsTopLevel(sdsbias_vertical) == extreduce_mldistsTopLevel(sds_vertical));
2002 assert(extreduce_mldistsTopLevel(sdsbias_vertical) == extreduce_mldistsTopLevel(sds_vertical));
2021 assert(extreduce_mldistsTopLevel(sdsbias_vertical) == extreduce_mldistsTopLevel(sds_vertical));
2051 mstLevelHorizontalAddSds(scip, graph, nextedges, extedges, extdata, extdata->distdata, sds_horizontal);
2057 mstLevelHorizontalAddSds(scip, graph, nextedges, extedges, extdata, extdata->distdata_biased, sdsbias_horizontal);
2059 assert(extreduce_mldistsTopLevel(sds_horizontal) == extreduce_mldistsTopLevel(sdsbias_horizontal));
2074 SCIPdebugMessage("add EMPTY horizontal level %d \n", extreduce_mldistsTopLevel(sds_horizontal) + 1);
2083 assert(extreduce_mldistsTopLevel(sds_horizontal) == extreduce_mldistsTopLevel(sdsbias_horizontal));
2095 SCIPdebugMessage("remove horizontal MST level %d \n", extreduce_mldistsNlevels(reddata->sds_horizontal));
2138 SCIPdebugMessage("close MST level %d, horizontal nslots=%d\n", extreduce_mldistsTopLevel(reddata->sds_horizontal),
2170 assert(horizontal_nlevels == vertical_nlevels || (horizontal_nlevels + 1) == vertical_nlevels);
void graph_csrdepo_addEmptyTopTree(CSRDEPO *, int)
Definition: graph_util.c:836
void extreduce_mstLevelVerticalReopen(EXTDATA *extdata)
Definition: extreduce_extmst.c:1985
static void mstLevelBuildBaseMst(SCIP *scip, const GRAPH *graph, int extnode, REDDATA *reddata, EXTDATA *extdata)
Definition: extreduce_extmst.c:1665
SCIP_Bool extreduce_bottleneckIsDominatedBiased(SCIP *, const GRAPH *, int, int, SCIP_Real, EXTDATA *)
Definition: extreduce_bottleneck.c:520
void extreduce_mstLevelVerticalClose(REDDATA *reddata)
Definition: extreduce_extmst.c:2008
SCIP_Bool extreduce_mstTopCompObjValid(SCIP *, const GRAPH *, SCIP_Real, EXTDATA *)
Definition: extreduce_dbg.c:1468
static SCIP_Bool extInitialCompIsGenStar(const EXTDATA *extdata)
Definition: extreducedefs.h:293
static void mstLevelBuildBaseMstRoot(SCIP *scip, REDDATA *reddata)
Definition: extreduce_extmst.c:1695
static void mstLevelLeafSetVerticalSDsBoth(SCIP *scip, const GRAPH *graph, int edge2neighbor, EXTDATA *extdata, SCIP_Bool *ruledOut)
Definition: extreduce_extmst.c:1414
Definition: graphdefs.h:184
Definition: extreducedefs.h:187
static int extLeafFindPos(const EXTDATA *extdata, int leaf)
Definition: extreducedefs.h:462
Definition: extreducedefs.h:161
Definition: struct_scip.h:59
int extreduce_mldistsLevelNSlots(const MLDISTS *, int)
Definition: extreduce_mldists.c:754
SCIP_Real extreduce_distDataGetSdDouble(SCIP *, const GRAPH *, int, int, DISTDATA *)
Definition: extreduce_dist.c:1463
static void pcSdToNodeMark(const GRAPH *graph, int startvertex, EXTDATA *extdata)
Definition: extreduce_extmst.c:642
void extreduce_bottleneckCheckNonLeaves(SCIP *, const GRAPH *, int, EXTDATA *, SCIP_Bool *)
Definition: extreduce_bottleneck.c:833
SCIP_Bool extreduce_mstTopLevelBaseObjValid(SCIP *, const GRAPH *, int, EXTDATA *)
Definition: extreduce_dbg.c:1381
static void mstCompBuildMst(SCIP *scip, const GRAPH *graph, EXTDATA *extdata, SCIP_Bool *ruledOut)
Definition: extreduce_extmst.c:1365
SCIP_Bool extreduce_mstInternalsInSync(const EXTDATA *)
Definition: extreduce_dbg.c:1573
static SCIP_Bool extIsAtInitialStar(const EXTDATA *extdata)
Definition: extreducedefs.h:305
void extreduce_mstLevelVerticalAddLeafInitial(SCIP *scip, const GRAPH *graph, int edge2neighbor, EXTDATA *extdata, SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1929
SCIP_Bool extreduce_mldistsEmptySlotExists(const MLDISTS *)
Definition: extreduce_mldists.c:383
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:490
static SCIP_Bool dbgBottleneckFromLeafIsDominated(SCIP *scip, const GRAPH *graph, int topleaf, SCIP_Bool with_sd_double, int edge_forbidden, EXTDATA *extdata)
Definition: extreduce_extmst.c:755
int * extreduce_mldistsEmptySlotTargetIdsDirty(const MLDISTS *)
Definition: extreduce_mldists.c:418
static void extGetSdPcUpdate(const GRAPH *g, const PCDATA *pcdata, int vertex1, int vertex2, SCIP_Real *sd)
Definition: extreduce_extmst.c:70
SCIP_Bool extreduce_bottleneckIsDominated(SCIP *, const GRAPH *, int, int, SCIP_Real, int, EXTDATA *)
Definition: extreduce_bottleneck.c:464
SCIP_Real * extreduce_mldistsEmptySlotTargetDistsDirty(const MLDISTS *)
Definition: extreduce_mldists.c:454
static SCIP_Bool mstCompLeafToAncestorsBiasedRuleOut(SCIP *scip, const GRAPH *graph, int edge2leaf, int nleaves_ancestors, EXTDATA *extdata)
Definition: extreduce_extmst.c:977
Definition: reducedefs.h:71
void extreduce_mldistsEmptySlotSetBase(int, MLDISTS *)
Definition: extreduce_mldists.c:477
static SCIP_Real extGetSdDoubleFromDistdata(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, DISTDATA *distdata, EXTDATA *extdata)
Definition: extreduce_extmst.c:117
static SCIP_Bool mstCompLeafToSiblingsBiasedRuleOut(SCIP *scip, const GRAPH *graph, int edge2top, EXTDATA *extdata)
Definition: extreduce_extmst.c:915
void extreduce_mstLevelHorizontalAddEmpty(const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_extmst.c:2065
static void mstLevelLeafAdjustVerticalSDs(int neighbor_base, MLDISTS *sds_vertical, EXTDATA *extdata)
Definition: extreduce_extmst.c:1488
int extreduce_mldistsNlevels(const MLDISTS *)
Definition: extreduce_mldists.c:778
includes various files containing graph methods used for Steiner tree problems
static SCIP_Bool extInitialCompIsEdge(const EXTDATA *extdata)
Definition: extreducedefs.h:264
void extreduce_mstLevelVerticalRemove(REDDATA *reddata)
Definition: extreduce_extmst.c:2105
static int extStackGetTopOutEdgesStart(const EXTDATA *extdata, int stackpos)
Definition: extreducedefs.h:398
void graph_csrdepo_getTopCSR(const CSRDEPO *, CSR *)
Definition: graph_util.c:684
SCIP_Bool extreduce_sdsverticalInSync(SCIP *, const GRAPH *, int, int, int, EXTDATA *)
Definition: extreduce_dbg.c:1212
static void baseMstBuildNew(SCIP *scip, const GRAPH *graph, REDDATA *reddata, EXTDATA *extdata, MSTXCOMP *mstextcomp)
Definition: extreduce_extmst.c:412
static SCIP_Bool extInitialCompIsStar(const EXTDATA *extdata)
Definition: extreducedefs.h:279
static SCIP_Real extGetSdDouble(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:95
static int extStackGetTopOutEdgesEnd(const EXTDATA *extdata, int stackpos)
Definition: extreducedefs.h:412
static int extStackGetPosition(const EXTDATA *extdata)
Definition: extreducedefs.h:325
SCIP_Real extreduce_distDataGetSdDoubleForbidden(SCIP *, const GRAPH *, int, int, EXTDATA *)
Definition: extreduce_dist.c:1557
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:438
static void mstLevelHorizontalAddSds(SCIP *scip, const GRAPH *graph, int nextedges, const int *extedges, EXTDATA *extdata, DISTDATA *distdata, MLDISTS *sds_horizontal)
Definition: extreduce_extmst.c:1711
int extreduce_extStackCompNOutedges(const EXTDATA *, int)
Definition: extreduce_dbg.c:1645
void extreduce_mldistsLevelCloseTop(MLDISTS *)
Definition: extreduce_mldists.c:625
static void mstLevelLeafTryExtMst(SCIP *scip, const GRAPH *graph, int extneighbor, EXTDATA *extdata, SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1612
static int extStackGetTopSize(const EXTDATA *extdata)
Definition: extreduce_extmst.c:189
static SCIP_Bool mstCompRuleOut(SCIP *scip, const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_extmst.c:1301
static void baseMstGetAdjcosts(const REDDATA *reddata, MSTXCOMP *mstextcomp, SCIP_Real adjcosts[])
Definition: extreduce_extmst.c:262
static void mstAddRootLevelMsts(SCIP *scip, EXTDATA *extdata)
Definition: extreduce_extmst.c:826
static void pcSdToNodeUnmark(const GRAPH *graph, int startvertex, EXTDATA *extdata)
Definition: extreduce_extmst.c:720
SCIP_Real extreduce_extGetSdProperDouble(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:2242
int extreduce_mldistsTopLevelNSlots(const MLDISTS *)
Definition: extreduce_mldists.c:769
SCIP_Real reduce_dcmstGetExtWeight(SCIP *, const CSR *, const SCIP_Real *, DCMST *)
Definition: reduce_util.c:1541
void reduce_dcmstAddNode(SCIP *, const CSR *, const SCIP_Real *, DCMST *, CSR *)
Definition: reduce_util.c:1411
This file implements extended reduction techniques for several Steiner problems.
void extreduce_mldistsLevelAddAndCloseEmpty(int, MLDISTS *)
Definition: extreduce_mldists.c:594
static void mstCompAddLeaf(SCIP *scip, const GRAPH *graph, int edge2leaf, MSTXCOMP *mstextcomp, EXTDATA *extdata, SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1266
void extreduce_bottleneckUnmarkRootPath(const GRAPH *, int, EXTDATA *)
Definition: extreduce_bottleneck.c:422
static void baseMstInitMsts(const EXTDATA *extdata, REDDATA *reddata, CSR *mst_parent, CSR *mst_new)
Definition: extreduce_extmst.c:351
int * extreduce_mldistsEmptySlotTargetIds(const MLDISTS *)
Definition: extreduce_mldists.c:395
SCIP_Bool extreduce_bottleneckWithExtedgeIsDominated(SCIP *, const GRAPH *, int, int, int, SCIP_Real, EXTDATA *)
Definition: extreduce_bottleneck.c:561
SCIP_Bool extreduce_mstTopCompExtObjValid(SCIP *, const GRAPH *, int, SCIP_Real, EXTDATA *)
Definition: extreduce_dbg.c:1427
void SCIPsortIntInt(int *intarray1, int *intarray2, int len)
void extreduce_mldistsEmptySlotSetFilled(MLDISTS *)
Definition: extreduce_mldists.c:534
static SCIP_Bool extIsAtInitialComp(const EXTDATA *extdata)
Definition: extreducedefs.h:251
static void baseMstGetOrderedParentNodes(const GRAPH *graph, const EXTDATA *extdata, int *parentcomp_size, int parentcomp_nodes[])
Definition: extreduce_extmst.c:307
void extreduce_mstCompRemove(const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_extmst.c:1829
SCIP_Real reduce_dcmstGetWeight(SCIP *, const CSR *)
Definition: reduce_util.c:1573
static SCIP_Bool extReddataHasBiasedSds(const REDDATA *reddata)
Definition: extreducedefs.h:529
void reduce_dcmstAddNodeInplace(SCIP *, const SCIP_Real *, DCMST *, CSR *)
Definition: reduce_util.c:1438
void extreduce_mldistsLevelReopenTop(MLDISTS *)
Definition: extreduce_mldists.c:656
void graph_csrdepo_getEmptyTop(const CSRDEPO *, CSR *)
Definition: graph_util.c:874
void extreduce_printTopLevel(const EXTDATA *)
Definition: extreduce_dbg.c:1073
static void compMstFinalizeNew(const MSTXCOMP *mstextcomp, SCIP_Bool deletemst, EXTDATA *extdata)
Definition: extreduce_extmst.c:574
int extreduce_mldistsLevelNTargets(const MLDISTS *, int)
Definition: extreduce_mldists.c:730
void extreduce_mldistsLevelAddAndCloseRoot(int, MLDISTS *)
Definition: extreduce_mldists.c:609
SCIP_Bool extreduce_spg3LeafTreeRuleOut(SCIP *, const GRAPH *, SCIP_Real, EXTDATA *)
Definition: extreduce_extspg.c:207
void extreduce_mldistsLevelRemoveTop(MLDISTS *)
Definition: extreduce_mldists.c:695
static SCIP_Bool extProbIsPc(const GRAPH *graph, const EXTDATA *extdata)
Definition: extreducedefs.h:237
static void baseMstInitExtComp(const REDDATA *reddata, int extnode, const CSR *mst_parent, CSR *mst_new, MSTXCOMP *mstextcomp)
Definition: extreduce_extmst.c:385
SCIP_Bool extreduce_sdshorizontalInSync(SCIP *, const GRAPH *, int, EXTDATA *)
Definition: extreduce_dbg.c:1269
static SCIP_Real extGetSd(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:140
static void compMstInitExtComp(const GRAPH *graph, const EXTDATA *extdata, const CSR *mst_base, CSR *mst_new, MSTXCOMP *mstextcomp)
Definition: extreduce_extmst.c:514
SCIP_Bool extreduce_stackTopIsHashed(const GRAPH *, const EXTDATA *)
Definition: extreduce_dbg.c:1615
static int extStackGetOutEdgesEnd(const EXTDATA *extdata, int stackpos)
Definition: extreducedefs.h:384
void extreduce_mstLevelRemove(REDDATA *reddata)
Definition: extreduce_extmst.c:2160
void graph_csrdepo_addEmptyTop(CSRDEPO *, int, int)
Definition: graph_util.c:800
static void mstCompLeafGetSDs(SCIP *scip, const GRAPH *graph, int edge2leaf, EXTDATA *extdata, SCIP_Real sds[], SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1206
SCIP_Real extreduce_extGetSd(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:2200
SCIP_Real extreduce_mldistsTopTargetDist(const MLDISTS *, int, int)
Definition: extreduce_mldists.c:885
static int extStackGetOutEdgesStart(const EXTDATA *extdata, int stackpos)
Definition: extreducedefs.h:355
static void mstLevelLeafExit(const GRAPH *graph, int neighbor_base, int neighbor, SCIP_Bool ruledOut, EXTDATA *extdata)
Definition: extreduce_extmst.c:1569
SCIP_Real * reduce_dcmstGetAdjcostBuffer(const DCMST *)
Definition: reduce_util.c:1617
SCIP_Bool extreduce_bottleneckToSiblingIsDominated(SCIP *, const GRAPH *, int, int, SCIP_Real, EXTDATA *)
Definition: extreduce_bottleneck.c:683
struct mst_extension_tree_component MSTXCOMP
const SCIP_Real * extreduce_mldistsTopTargetDists(const MLDISTS *, int)
Definition: extreduce_mldists.c:873
void extreduce_bottleneckCheckNonLeaves_pc(SCIP *, const GRAPH *, int, EXTDATA *, SCIP_Bool *)
Definition: extreduce_bottleneck.c:787
static int extStackGetLastMarked(const EXTDATA *extdata)
Definition: extreduce_extmst.c:170
static void pcSdMarkSingle(const GRAPH *graph, int entry, SCIP_Real value, SCIP_Real *pcSdToNode, int *pcSdCands, int *nPcSdCands)
Definition: extreduce_extmst.c:613
SCIP_Bool extreduce_mstbiased3LeafTreeRuleOut(SCIP *, const GRAPH *, SCIP_Real, EXTDATA *)
Definition: extreduce_extmstbiased.c:182
static void mstCompLeafGetSDsToAncestors(SCIP *scip, const GRAPH *graph, int edge2leaf, int nleaves_ancestors, EXTDATA *extdata, SCIP_Real sds[], SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1129
includes extended reductions definitions and inline methods used for Steiner tree problems ...
SCIP_Real extreduce_distDataGetSd(SCIP *, const GRAPH *, int, int, DISTDATA *)
Definition: extreduce_dist.c:1426
void extreduce_mstAddRootLevel(SCIP *scip, int root, EXTDATA *extdata)
Definition: extreduce_extmst.c:1814
SCIP_Real extreduce_extGetSdProper(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:2228
SCIP_Real * extreduce_mldistsEmptySlotTargetDists(const MLDISTS *)
Definition: extreduce_mldists.c:432
Definition: extreducedefs.h:79
void extreduce_mstLevelVerticalAddEmpty(const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_extmst.c:1959
Definition: graphdefs.h:138
Definition: graphdefs.h:150
void extreduce_mstLevelVerticalAddLeaf(SCIP *scip, const GRAPH *graph, int edge2neighbor, EXTDATA *extdata, SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1882
int extreduce_mldistsLevelNTopTargets(const MLDISTS *)
Definition: extreduce_mldists.c:743
Portable definitions.
SCIP_Bool sdeq_hasForbiddenEdges
Definition: extreducedefs.h:208
Definition: graphdefs.h:158
void extreduce_bottleneckMarkRootPath(const GRAPH *, int, EXTDATA *)
Definition: extreduce_bottleneck.c:354
Definition: extreducedefs.h:138
void extreduce_mldistsLevelAddTop(int, int, MLDISTS *)
Definition: extreduce_mldists.c:562
void graph_csrdepo_emptyTopSetMarked(CSRDEPO *)
Definition: graph_util.c:890
int extreduce_mldistsTopLevel(const MLDISTS *)
Definition: extreduce_mldists.c:790
static void mstCompLeafGetSDsToSiblings(SCIP *scip, const GRAPH *graph, int edge2top, EXTDATA *extdata, SCIP_Real sds[], SCIP_Bool *leafRuledOut)
Definition: extreduce_extmst.c:1033
static SCIP_Bool ruledOut(SCIP *scip, const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_contract.c:446
static void compMstInitMsts(EXTDATA *extdata, CSR *mst_base, CSR *mst_new)
Definition: extreduce_extmst.c:539
SCIP_Bool extreduce_nodeIsInStackTop(const GRAPH *, const EXTDATA *, int)
Definition: extreduce_dbg.c:1094
SCIP_Bool extreduce_bottleneckToSiblingIsDominatedBiased(SCIP *, const GRAPH *, int, int, SCIP_Real, EXTDATA *)
Definition: extreduce_bottleneck.c:751
static SCIP_Bool extIsAtInitialGenStar(const EXTDATA *extdata)
Definition: extreducedefs.h:315
void extreduce_mstLevelHorizontalRemove(REDDATA *reddata)
Definition: extreduce_extmst.c:2090
SCIP_Bool extreduce_bottleneckWithExtedgeIsDominatedBiased(SCIP *, const GRAPH *, int, int, int, SCIP_Real, EXTDATA *)
Definition: extreduce_bottleneck.c:640
SCIP_Bool extreduce_sdsTopInSync(SCIP *, const GRAPH *, const SCIP_Real[], int, EXTDATA *)
Definition: extreduce_dbg.c:1329
void extreduce_mldistsEmptySlotReset(MLDISTS *)
Definition: extreduce_mldists.c:496
static void mstLevelLeafInit(const GRAPH *graph, int neighbor_base, int neighbor, EXTDATA *extdata)
Definition: extreduce_extmst.c:1539
const SCIP_Real * extreduce_mldistsTargetDists(const MLDISTS *, int, int)
Definition: extreduce_mldists.c:845
SCIP_Real extreduce_mldistsTargetDist(const MLDISTS *, int, int, int)
Definition: extreduce_mldists.c:904
static void mstAddRootLevelSDs(int root, EXTDATA *extdata)
Definition: extreduce_extmst.c:847
static void baseMstFinalizeNew(SCIP *scip, const GRAPH *graph, const MSTXCOMP *mstextcomp, REDDATA *reddata, EXTDATA *extdata)
Definition: extreduce_extmst.c:481
void extreduce_mstLevelClose(SCIP *scip, const GRAPH *graph, int extnode, EXTDATA *extdata)
Definition: extreduce_extmst.c:2126
SCIP_Bool extreduce_mstTopCompInSync(SCIP *, const GRAPH *, EXTDATA *)
Definition: extreduce_dbg.c:1505
SCIP_Real extreduce_extGetSdDouble(SCIP *scip, const GRAPH *g, int vertex1, int vertex2, EXTDATA *extdata)
Definition: extreduce_extmst.c:2214
Definition: objbenders.h:33
void extreduce_mstLevelInitialInit(REDDATA *reddata, EXTDATA *extdata)
Definition: extreduce_extmst.c:1849
static int extGetNancestorLeaves(const EXTDATA *extdata)
Definition: extreduce_extmst.c:206
static SCIP_Bool mstEqComp3RuleOut(SCIP *scip, const GRAPH *graph, SCIP_Real tree_cost, EXTDATA *extdata)
Definition: extreduce_extmst.c:871
static void mstExtend(SCIP *scip, const SCIP_Real adjcosts[], DCMST *dcmst, MSTXCOMP *mstextcomp)
Definition: extreduce_extmst.c:232
SCIP_Bool extreduce_mstRuleOutPeriph(SCIP *scip, const GRAPH *graph, EXTDATA *extdata)
Definition: extreduce_extmst.c:1783
void extreduce_mstLevelHorizontalAdd(SCIP *scip, const GRAPH *graph, int nextedges, const int *extedges, EXTDATA *extdata)
Definition: extreduce_extmst.c:2037