一种基于过程中分治的布尔可满足性问题并行求解方法
- 国知局
- 2024-07-31 22:58:31
本发明涉及布尔可满足性问题的并行求解方法,特别是一种基于求解过程中动态分治求解的方法。
背景技术:
1、布尔可满足性问题(sat)是判定一个给定的命题逻辑公式是否可满足的判定问题,它在电子设计自动化(eda)、自动定理证明、模型检测、人工智能等领域都有极其重要的应用价值。sat求解器为求解sat问题的专用工具,其输入通常为合取范式(cnf)的形式,即形如∧i∨j lij的公式。cnf由子句的合取组成,子句由文字的析取组成,而文字则由命题变量本身(正文字)或命题变量的否定(负文字)的形式表示。随着工业样例难度和规模的增长,串行sat求解已逐渐无法满足业界的需求,并行sat求解器则可以利用机器的并行优势来加速求解。
2、目前主流的串行sat求解框架为冲突驱动的子句学习技术(cdcl),代表求解器为kissat、cadical、relaxed等求解器,主流的sat并行求解器多以cdcl求解器为基础而开发,按照方法可以分为“多样性策略”和“分治法”两类。两类方法的特点和局限性如下所示:
3、1)多样性策略主要利用了求解器和参数间的互补性,不同线程运行不同的求解器或者同一求解器的不同参数,该方法常见于sat比赛。该方法的弱点在于算法的求解能力受到最优配置的限制,且每个线程需要人为的指定配置,限制于高效求解器的种类和高效求解器的配置数目,该方法的泛化能力(可以适配的核心数目)相较另一种方法来说较差。
4、2)分治法的代表技术为cube-and-conquer技术,它将原始问题通过lookahead求解器拆分为k个子问题(子任务,可由一组文字的合取表示并称为一个cube),并依次分配给不同的线程进行求解。当有一个子任务中找到了解时,或者所有子任务均搜索完成且所有子任务中都没有解时,算法会停止搜索并汇报求解情况。该方法成功求解了许多难解的数学问题。但是该算法存在严重的“负载不均衡”问题,即划分的子任务的求解时间区分巨大,求解到最后会存在大量线程空载的现象。对于很多工业问题来说,即便划分为百万量级的子任务,仍然存在该类现象。
技术实现思路
1、针对现有技术的缺陷,本发明提出了一种高性能的sat求解系统,利用了一种新的基于过程中分治的布尔可满足性问题并行求解方法,本发明既有强泛化、拓展能力,又可以很好的解决负载均衡问题。本发明中的并行sat求解方法是一种过程中动态分治的方法,且属于经典的“主-从”架构。主线程为一个控制线程,负责监督各个从线程和管理全局启发式信息,是一个轻量级的线程。从线程负责接收主线程的控制信息,返回求解信息,并负责实际的子公式求解和计算子任务的分裂。为了提高求解的效率,本发明还针对难解子任务引入了多样性策略。借助以上策略,我们设计了一种外层为过程中多样性策略、内层为多样性策略的并行多样性并行sat求解系统。
2、本发明的技术方案为:
3、一种基于过程中分治的布尔可满足性问题并行求解方法,其步骤包括:
4、1)对于待求解的电路,所述电路采用与非图格式表示,包含电路的结构和待测试属性;利用master线程的cnf预处理器对所述电路的cnf文件进行简化;
5、2)利用master线程的监控调度器对化简后的cnf文件进行任务调度;其中,所述监控调度器中包含一个数据库,用于存储化简后的cnf文件中的公式、各worker线程返回的高质量学习子句和调度结构信息;所述调度结构信息主要包含了worker线程正在求解的子任务之间的关系(调用关系树),并用于管理worker线程和判定求解结果;所述监控调度器首先将化简后的cnf文件中的公式分发给若干worker线程进行求解,并接收相应worker线程返回的高质量学习子句和求解结果;然后将收到的高质量学习子句分发给其它的worker线程用于提速。
6、进一步的,利用cnf预处理器对所述电路的cnf文件进行简化的处理包括:布尔约束传播、等价文字替代、限界变量消解、归结检测、结构化变量添加、包含和自包含消解。
7、进一步的,所述归结检测的处理方法为:将包含同一个变量l的正反文字的两条子句cl=l∨l1∨…∨ln与子句归结成归结式l1∨…∨ln∨l′1∨…∨l′m,其中ln为子句cl中的第n个文字,l′m为子句cr中的第m个文字;如果根据变量l归结后所得的子句均为重言式,即得到的子句数目为0,则从所述cnf文件中删除与该变量l相关的所有子句。
8、进一步的,利用调用关系树描述所述调度结构信息,其中将master线程作为调用关系树的根结点,将每个求解任务的标识id作为调用关系树中的一个节点,若多个worker线程负责求解同一子任务,则保存该多个worker线程间的配对关系,它们互相称为绑定线程;如果子任务b是从子任务a分裂出来的,则子任务b是子任务a的子任务;子任务b对应节点是子任务a对应节点的子节点,子任务a对应节点是子任务b对应节点的父亲节点;所述子任务由cube表示,包括子任务对应的文字集合,每一个文字对应一变量,每个变量对应一打分ft。
9、进一步的,所述master线程会接收worker线程的信号,并进行相应处理,包括:
10、a.当接收到worker线程i的“线程求解结束”信号时,所述master线程对应的处理为:
11、如果该worker线程i绑定了其他worker线程,则向与该worker线程i绑定的其他worker线程发送“切断”信号;然后master线程会判断该worker线程i的求解结果是否满足对应子任务,如果满足,则判定原始任务可满足,且其他子任务没有必要再继续求解并向其他worker线程发送“切断”信号并释放所占用内存;如果不满足且目前没有未分配求解的子任务和正在求解的worker线程,则判定对应子任务不可满足并释放所有worker线程占用的内存;如果不满足且存在未分配求解的子任务,则向该worker线程i发送一个未分配求解的子任务进行求解并更新相关的启发式信息,更新相关的启发式信息包括:
12、①若结束求解的为子任务a,则在调用关系树上,将子任务a的所有儿子节点直接指向子任务a的父节点,如果父节点已经求解完成,则向上迭代地指向正在求解的节点;
13、②利用该worker线程i当前所执行子任务执行情况,更新该子任务的cube表示中变量的打分ft;ft初始值为1,更新方法为
14、其中,t为该worker线程i当前所执行的子任务的求解时间,tavg为所有之前已执行的其它子任务的平均求解时间,len为该worker线程i当前所执行子任务的cube表示中的文字数目,lenavg为之前已完成求解的子任务的cube表示中的平均文字数目;
15、③查询该worker线程i求解当前子任务时维护的文字块距离lbd不大于2的子句,并判断是否被所述数据库中的子句包含,如果未被包含则将其添加到该数据库;在后续启用新的子任务时,将该新的子任务连同高质量子句一并交给一个空载的worker线程;
16、b.当接收到worker线程i的“线程空载”信号时,所述master线程对应的处理为:如果所述master线程本地仍然有没有处理的子任务j,则通过计算子问题j对应的cube表示中变量的打分ft的平均值avgv∈cubej(ft(v)),并采用衡量子任务j的难度;如果子任务j的难度大于阈值p且存在n个空载worker线程(p和n有对应的启发式函数),则启动该n个worker线程同时求解该子任务j,并将该n个worker线程互相绑定,否则master线程则将该子任务j交给任一处于空载状态的worker线程处理;如果所述master线程本地没有未处理的子问题,则监控调度器发送“分裂”信号给一个正在求解且求解器时间超过tavg2倍的worker线程,如果不存在该类worker线程,则不做任何回应。
17、进一步的,每一worker线程包含一cdcl求解器,所述worker线程的状态包括:“空载”状态,“求解”状态,“分裂”状态。不同的状态下接收信号和所执行的操作如下:
18、a.如果worker线程处于“空载”状态,则向master线程发送请求任务信号;
19、b.如果worker线程处于“空载”状态,且接收到所述master线程发出的“求解”信号,则该worker线程则会读取化简后的任务文件,并且从监控调度器中或者父节点中取高质量子句辅助求解,然后该worker线程的状态变为“求解”状态;
20、c.如果worker线程处于“求解”状态,且接收到“切断”信号,该worker线程则会终止目前的求解任务,并返回给master线程当前任务的求解时间、高质量子句数目、冲突频率;
21、d.如果worker线程处于“求解”状态,且接收到“分裂”信号,则该worker线程重启并进入“分裂”状态;然后该worker线程采用前瞻技术对本worker线程正求解的子任务进行分裂,直到分裂出的任务数目达到要求为止;然后将分裂出的子任务交给master线程进行分配,并重启worker线程并再次进入cdcl“求解”状态;
22、e.如果worker线程处于“求解”状态,且没有收到外部信号,则一直保持当前的状态。
23、进一步的,将所述电路和待测试属性解析到给定的数据结构,并将所述电路和待测试属性转化为合取范式格式的命题逻辑公式,得到所述电路的cnf文件。
24、进一步的,所述给定的数据结构为aiger标准数据结构;采用tseitin编码将所述电路和待测试属性转化为合取范式格式的命题逻辑公式。
25、一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上述方法中各步骤的指令。
26、一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。
27、本发明的优点如下:
28、本发明相对于传统的多样性方法有很好的泛化性,可以适用于任何给定的cpu核心数目,方便大规模并行。相较于传统的分治法,本发明很好的解决了线程负载均衡问题,任务按需分配。本方法拓展性强,分治启发式可以根据问题规模和结构特点动态学习和调整。
本文地址:https://www.jishuxx.com/zhuanli/20240730/195556.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表