-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Source: SteinerTree
Target: ILP
Motivation: Enables solving Steiner Tree via ILP solvers; the flow-based formulation is the standard in network optimization and VLSI routing tools.
Reference: Wong, 1984; Koch & Martin, 1998
Reduction Algorithm
Notation:
- Source: undirected weighted graph
$G = (V, E, w)$ , terminals$T \subseteq V$ ,$n = |V|$ ,$m = |E|$ ,$|T| = k$ - Target: ILP with binary and continuous variables
Step 1 — Choose a root: Pick any terminal
Step 2 — Variables:
- Edge selection:
$y_e \in {0, 1}$ for each edge$e \in E$ (include in tree?) - Flow:
$f^t_{uv} \in [0, 1]$ for each directed arc$(u,v)$ (both directions of each edge) and each non-root terminal$t \in T'$ . Represents one unit of flow from$r$ to$t$ .
Step 3 — Constraints:
-
Flow conservation (for each
$t \in T'$ and each vertex$v \in V$ ):
-
Capacity linking (for each directed arc
$(u,v)$ and each$t \in T'$ ):
Objective: minimize
Solution extraction: Select edges with
Size Overhead
| Target metric (code name) | Polynomial (using symbols above) |
|---|---|
num_vars |
|
num_constraints |
|
Validation Method
Closed-loop testing: solve SteinerTree by brute-force (enumerate edge subsets), solve the reduced ILP, and verify both give the same optimal cost.
Example
Source: 5 vertices, 7 edges, terminals
| Edge | Weight |
|---|---|
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 5 | |
| 5 | |
| 6 |
ILP: root
- 7 edge variables + 28 flow variables = 35 variables
- 10 conservation + 28 capacity = 38 constraints
Optimal ILP solution:
Flow for terminal 2:
Flow for terminal 4: