sequenceDiagram participant CuttingPlane participant SearchSpace participant OracleFeas loop Cutting Plane Iterations CuttingPlane->>SearchSpace: request xc() SearchSpace-->>CuttingPlane: return xc CuttingPlane->>OracleFeas: assess_feas(xc) alt Feasible (cut is None) OracleFeas-->>CuttingPlane: return None CuttingPlane-->>CuttingPlane: Return solution (xc, niter) else Infeasible OracleFeas-->>CuttingPlane: return cut CuttingPlane->>SearchSpace: update_bias_cut(cut) alt Update successful SearchSpace-->>CuttingPlane: continue else Update failed SearchSpace-->>CuttingPlane: status CuttingPlane-->>CuttingPlane: Return (None, niter) end end end
graph LR A -- "7" --> E(("v2")) A -. "6" .-> E A(("v0")) -- "6" --> B(("v3")) A -. "6" .-> B D(("v1")) -- "9" --> E D -. "6" .-> E E -- "6" --> B E -. "6" .-> B B -- "8" --> C(("v4")) B -. "8" .-> C C -- "3" --> D C -. "3" .-> D %% Caption: Timing Constraint Graph (TCG).
graph LR S{central cut?} -- Yes --> A{parallel?} S -- No --> B{parallel?} A -- Yes --> L{ฮฒ1 < 0} A -- No --> D[central cut] L -- No --> C{ฮฒ1 >= ฯ} C -- No --> E[parallel central] C -- Yes --> D B -- No --> F{ฯ < ฮฒ0} B -- Yes --> G{ฮฒ1 < ฮฒ0} F -- Yes --> H([NoSoln]) L -- Yes --> H([NoSoln]) F -- No --> I[deep cut] G -- Yes --> H G -- No --> J{ฮฒ1 >= ฯ} J -- Yes --> I J -- No --> K[parallel deep]
graph LR B{parallel?} -- No --> F{ฯ < ฮฒ0} B -- Yes --> G{ฮฒ1 < ฮฒ0} F -- Yes --> H([NoSoln]) F -- No --> A{ฯ + n ฮฒ0 <= 0} A -- Yes --> C([NoEffect]) A -- No --> I[bias cut] G -- Yes --> H([NoSoln]) G -- No --> D{ฯ^2 + n ฮฒ0 ฮฒ1 <= 0} D -- Yes --> C([NoEffect]) D -- No --> J{ฮฒ1 >= ฯ} J -- Yes --> I J -- No --> K[parallel bias]