You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Add plan for #293: [Model] IntegralFlowBundles
* Add IntegralFlowBundles model
* Add IntegralFlowBundles to ILP reduction
* Wire IntegralFlowBundles through CLI and example db
* Add IntegralFlowBundles paper entry and polish formatting
* chore: remove plan file after implementation
---------
Co-authored-by: Xiwei Pan <xiwei.pan@connect.hkust-gz.edu.cn>
Co-authored-by: Xiwei Pan <90967972+isPANN@users.noreply.github.com>
@@ -5490,6 +5491,64 @@ A classical NP-complete problem from Garey and Johnson @garey1979[Ch.~3, p.~76],
5490
5491
) <fig:d2cif>
5491
5492
]
5492
5493
5494
+
#{
5495
+
letx= load-model-example("IntegralFlowBundles")
5496
+
letsource= x.instance.source
5497
+
letsink= x.instance.sink
5498
+
[
5499
+
#problem-def("IntegralFlowBundles")[
5500
+
Given a directed graph $G = (V, A)$, specified vertices $s, t in V$, a family of arc bundles $I_1, dots, I_k subset.eq A$ whose union covers $A$, positive bundle capacities $c_1, dots, c_k$, and a requirement $R inZZ^+$, determine whether there exists an integral flow $f: A -> ZZ_(>= 0)$ such that (1) $sum_(a in I_j) f(a) <= c_j$ for every bundle $j$, (2) flow is conserved at every vertex in $V backslash {s, t}$, and (3) the net flow into $t$ is at least $R$.
5501
+
][
5502
+
Integral Flow with Bundles is the shared-capacity single-commodity flow problem listed as ND36 in Garey \& Johnson @garey1979. Sahni introduced it as one of a family of computationally related network problems and showed that the bundled-capacity variant is NP-complete even in a very sparse unit-capacity regime @sahni1974.
5503
+
5504
+
The implementation keeps one non-negative integer variable per directed arc. Unlike ordinary max-flow, the usable range of an arc is not determined by an intrinsic per-arc capacity; it is bounded instead by the smallest bundle capacity among the bundles that contain that arc. The registered $O(2^m)$ catalog bound therefore reflects the unit-capacity case with $m = |A|$, which is exactly the regime highlighted by Garey \& Johnson and Sahni.#footnote[No exact worst-case algorithm improving on brute-force is claimed here for the bundled-capacity formulation.]
5505
+
5506
+
*Example.* The canonical YES instance has source $s = v_#source$, sink $t = v_#sink$, and arcs $(0,1)$, $(0,2)$, $(1,3)$, $(2,3)$, $(1,2)$, $(2,1)$. The three bundles are $I_1 = {(0,1), (0,2)}$, $I_2 = {(1,3), (2,1)}$, and $I_3 = {(2,3), (1,2)}$, each with capacity 1. Sending one unit along the path $0 -> 1 -> 3$ yields the flow vector $(1, 0, 1, 0, 0, 0)$: bundle $I_1$ contributes $1 + 0 = 1$, bundle $I_2$ contributes $1 + 0 = 1$, bundle $I_3$ contributes $0 + 0 = 0$, and the only nonterminal vertices $v_1, v_2$ satisfy conservation. If the requirement is raised from $R = 1$ to $R = 2$, the same gadget becomes infeasible because $I_1$ caps the total outflow leaving the source at one unit.
content((1.0, 1.0), text(8pt, fill: blue)[$I_1, c = 1$])
5541
+
content((3.3, 1.0), text(8pt, fill: orange)[$I_2, c = 1$])
5542
+
content((3.3, -1.0), text(8pt, fill: teal)[$I_3, c = 1$])
5543
+
content((2.2, 1.8), text(8pt)[$f(0,1) = 1$])
5544
+
content((3.4, 1.55), text(8pt)[$f(1,3) = 1$])
5545
+
}),
5546
+
caption: [Canonical YES instance for Integral Flow with Bundles. Thick blue/orange arcs carry the satisfying flow $0 -> 1 -> 3$, while the lighter arcs show the two unused alternatives coupled into bundles $I_1$, $I_2$, and $I_3$.],
@@ -7004,6 +7063,27 @@ The following reductions to Integer Linear Programming are straightforward formu
7004
7063
_Solution extraction._ For each item $i$, find the unique $j$ with $x_(i j) = 1$; assign item $i$ to bin $j$.
7005
7064
]
7006
7065
7066
+
#reduction-rule("IntegralFlowBundles", "ILP")[
7067
+
The feasibility conditions are already linear: one integer variable per arc, one inequality per bundle, one conservation equality per nonterminal vertex, and one lower bound on sink inflow.
7068
+
][
7069
+
_Construction._ Given Integral Flow with Bundles instance $(G = (V, A), s, t, (I_j, c_j)_(j=1)^k, R)$ with arc set $A = {a_0, dots, a_(m-1)}$, create one non-negative integer variable $x_i$ for each arc $a_i$. The ILP therefore has $m$ variables.
7070
+
7071
+
_Bundle constraints._ For every bundle $I_j$, add
7072
+
$sum_(a_i in I_j) x_i <= c_j$.
7073
+
7074
+
_Flow conservation._ For every nonterminal vertex $v in V backslash {s, t}$, add
7075
+
$sum_(a_i = (u, v) in A) x_i - sum_(a_i = (v, w) in A) x_i = 0$.
7076
+
7077
+
_Requirement constraint._ Add the sink inflow lower bound
7078
+
$sum_(a_i = (u, t) in A) x_i - sum_(a_i = (t, w) in A) x_i >= R$.
7079
+
7080
+
_Objective._ Minimize 0. The target is a pure feasibility ILP, so any constant objective works.
7081
+
7082
+
_Correctness._ ($arrow.r.double$) Any satisfying bundled flow assigns a non-negative integer to each arc, satisfies every bundle inequality by definition, satisfies every nonterminal conservation equality, and yields sink inflow at least $R$, so it is a feasible ILP solution. ($arrow.l.double$) Any feasible ILP solution gives non-negative integral arc values obeying the same bundle, conservation, and sink-inflow constraints, hence it is a satisfying solution to the original Integral Flow with Bundles instance.
7083
+
7084
+
_Solution extraction._ Identity: read the ILP vector $(x_0, dots, x_(m-1))$ directly as the arc-flow vector of the source problem.
Completion times are natural integer variables, precedence constraints compare those completion times directly, and one binary order variable per task pair enforces that a single machine cannot overlap two jobs.
0 commit comments