Skip to main content

Search

Trait Search 

Source
pub trait Search {
    // Required methods
    fn propagate(&mut self, kernel: &mut Kernel) -> bool;
    fn decide(&mut self, kernel: &mut Kernel);
    fn analyze(&mut self, kernel: &mut Kernel);
    fn backtrack(&mut self, kernel: &mut Kernel);
    fn search(
        &mut self,
        kernel: &mut Kernel,
        in_processor: &mut Vec<Box<dyn Pass>>,
    ) -> SATResult;
}
Expand description

CDCL 搜索核心接口。

典型循环为: propagate -> (conflict ? analyze + backtrack : decide)

直观伪代码: while result == UNKNOWN { if !propagate() { analyze(); backtrack(); } else if all_assigned() { return SAT; } else { decide(); } }

flowchart TD Start([开始]) --> P[propagate: BCP] P -->|发现冲突| A[analyze: 冲突分析/学习] A --> B[backtrack: 非时序回跳] B --> P P -->|无冲突且全部已赋值| Sat([返回 SAT]) P -->|无冲突但仍有未赋值变量| D[decide: 决策赋值] D --> P

Required Methods§

Source

fn propagate(&mut self, kernel: &mut Kernel) -> bool

执行 BCP(通常基于双观察文字)。

返回 false 表示传播中遇到冲突。

Source

fn decide(&mut self, kernel: &mut Kernel)

在无冲突且仍有未赋值变量时执行一次决策赋值。

Source

fn analyze(&mut self, kernel: &mut Kernel)

对当前冲突做分析,构造学习子句并计算回跳层级。

Source

fn backtrack(&mut self, kernel: &mut Kernel)

analyze 结果回跳,并断言学习子句中的 UIP 文字。

Source

fn search( &mut self, kernel: &mut Kernel, in_processor: &mut Vec<Box<dyn Pass>>, ) -> SATResult

驱动完整搜索流程,直至返回 SAT/UNSAT/UNKNOWN

Implementors§