SAT 2017
基于竞争(Portfolio)
基于合作(Divide-and-Conquer)
关注:多样性(Diversification)
使用不同的启发式方法(决策策略、学习策略、随机种子等)
使用变量预赋值(Phase)进行软划分
使用变量块(Block Branching)进行硬划分:决策变量只能从所属的块中选择
关注:搜索空间划分和线程负载均衡
搜索空间划分
线程负载均衡:任务窃取(Work Stealing)
共享标准
共享范围
求解主体部分:
SatResult solve(int* cube)
void setInterrupt()
void setPhase(int var, bool value)
void bumpVariableActivity(int var, int factor)
void diversify():调整求解器内部参数
void diversify()
子句共享部分:
void addClause(Clause cls)
void addLearntClause(Clause cls)
Clause getLearntClause()
void solve(int* cube)
void join(SatResult res, int* model)
void doSharing(SolverInterface[*] producers, SolverInterface[*] consumers)
Glucose-syrup(SC15并行#1):基于顺序求解器Glucose,基于竞争
Treengeling(SC16并行#1):基于顺序求解器Lingeling,基于合作
Hordesat:基于顺序求解器Minisat或Lingeling,基于竞争