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). style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440
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] style S fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style A fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style B fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style L fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style D fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style F fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style G fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style H fill:#fce4ec,stroke:#ad1457,stroke-width:3px,color:#2e3440 style I fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style J fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style K fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
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] style B fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style F fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style G fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style H fill:#fce4ec,stroke:#ad1457,stroke-width:3px,color:#2e3440 style A fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style I fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style D fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style J fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style K fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440