Expand description
CDCL-Style (Conflict-Driven Clause Learning) MIP Branching
This module adapts CDCL techniques from SAT solving to MIP branch-and-bound. When a sub-problem is found infeasible, the algorithm extracts a “nogood” clause (a conjunction of branching decisions that caused infeasibility) and stores it to prune future subproblems that replay the same partial assignment.
§Algorithm Overview
- Branching: select the fractional variable with the highest VSIDS activity score.
- Conflict analysis: when a node is infeasible, record a learned clause
NOT(d_1) ∨ NOT(d_2) ∨ … ∨ NOT(d_k)for each branching decision d_i on the path. - Propagation: before expanding a node, check all learned clauses; prune if any clause is violated.
- Activity decay: periodically decay all activity scores to prioritise recent conflicts (VSIDS heuristic).
§Integration
The CdclBranchingState is designed to plug into MilpBranchAndBound via
the BranchingStrategy::Cdcl variant (see BranchingStrategy). The
host solver calls:
select_branching_varto pick which variable to branch on.record_conflictwhen LP infeasibility is detected.apply_clausesbefore expanding each child node.decay_activitiesafter each batch of conflicts.
§References
- Marques-Silva & Sakallah (1996). “GRASP—A new search algorithm for satisfiability.” ICCAD.
- Achterberg, T. (2007). “Conflict analysis in mixed integer programming.” Discrete Optimization, 4(1), 4–20.
Structs§
- Branching
Decision - A single branching decision: set variable
var_indexto valuevalue. - Cdcl
Branching State - Mutable state for CDCL-style MIP branching.
- Cdcl
Config - Configuration for the CDCL branching state.
- Learned
Clause - A learned nogood clause: a disjunction of negated literals.
Enums§
- Branching
Strategy - Enumeration of branching strategies for use with
MilpBranchAndBound.