科学网

 找回密码
  注册

tag 标签: 子句消去法

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

3SAT多关联段求解训练例题
accsys 2015-12-26 06:49
3SAT 多关联段求解训练例题 配合我介绍的 3-SAT 解法博文《 子句消去法如何避免进入无解分支求解》(见 http://blog.sciencenet.cn/blog-340399-945926.html )这里上传一个多关联段求解练习的例子,有 100 逻辑变量, 296 个子句。由于用的是 Excel 文件,操作十分方便,设值之后可用编辑 - 删除菜单项将满足条件的子句删去,需要求解的子句会迅速减少,操作起来更为方便。 例题中用不同颜色标注关联段,还留有多解子句块,练习中可以根据需要设定解。 希望这个练习能够帮助需要计算 k - SAT 的朋友迅速掌握子句消去法这个实用的方法。 姜咏江 多关联段.xls 2015-12-26
个人分类: 3SAT解法|1930 次阅读|0 个评论
子句消去法如何避免进入无解分支求解
accsys 2015-12-26 05:57
子句消去法如何避免进入无解分支求解 姜咏江 合取范式 3-CNF=1 的解是由 n 个逻辑变量的可满足取值所决定的,用子句消去法求解时,只要一个逻辑变量无法确定使子句值为 1 ,那么整个 3-CNF=1 就无解。实际上,整体的 3-CNF=1 是由一些局部的性质所决定的。这种局部特征集中体现在子句块和关联段,并且随着变量值的设定子句块和关联段都在缩小,特别是关联段,随着子句的消去,会划分成更小的关联段。因而用子句消去法求解 3-CNF=1 ,常常是分为一些局部求解。在求解中只要我们记牢无解的基本结构,就可以避免进入无解的情况,从而顺利地逐步获得满足解。 1. 合取范式 3-CNF=1 无解的基本结构 用子句消去法求 3-CNF=1 的解,先要清楚无解的情况。一般来说, 3-CNF=1 只有三种结构会出现无解。 ( 1 )子句块有 8 个子句; ( 2 )有两个变量的值已经确定,无法设定第三个变量的值; ( 3 )有一个变量的值已经确定,其余两个变量表示的子句有 4 种不同基本类型。 2. 唯一解值类型 子句块中变量写出的 0 或 1 称为变量表示值,而消去子句选择的 0 或 1 称为变量的解值。变量解值一经选定,该变量表示值与之相同的子句都可以消去。如果一些子句能够被唯一的一组解值消去,则称该组值为唯一解值。 局部的唯一解是求解 3-CNF=1 的关键,熟练掌握唯一解的情况,就能够快速地得到整体解。 3-CNF=1 唯一解值类型如下: ( 1 )子句块有一个变量有 4 个一样的表示值。 因为一个子句块若有一个变量有 4 个相同表示值,那么其余两个变量的表示值一定形成了 00 , 10 , 01 , 11 这四种,不然就出现了重复数。此时只有选择那一个有 4 个相同表示值做为该变量解值,那么才不会出现无解。 ( 2 )子句块两个变量值确定,第三个变量只有一种表示值。 ( 3 )子句块有 3 个子句,且一个变量值已经确定。 这种情况待选值变量取值以表示值多的为准。例如子句块中 x 1 已经确定为 0 ,有子句块如下: x 1 x 2 x 3 1 0 0 1 1 0 1 0 1 这时只要设定 x 2 =0 , x 3 =0 即可。 3. 关联段求解顺序 懂得了无解和唯一解的结构,按照下面的操作顺序, 3-CNF=1 求解就不是难事。 ( 1 )先检查是否有 8 个子句的子句块,没有转( 2 )。 ( 2 )找子句块有 4 相同表示值变量,设定该值,消去相应子句,否则转( 3 )。 ( 3 )都是多解子句块,找出关联子句块设定一个块解,消去相应子句,转( 4 ),若出现无解,则结束。 ( 4 )对剩余子句块先求唯一解,后定多解,直至关联段结束或多解转( 3 )。 4. 几点说明 ( 1 )子句消去法求解合取范式满足解的方法具有很强的鲁棒性。即使整个 3-CNF=1 无解,我们仍然可以确定出有解的部分和无解的部分,这对做多因素分析十分重要。 ( 2 )如果我们在实际问题研究中归纳出了 k-CNF-SAT ,那么你可以将 k-CNF-SAT 归约成 3-CNF-SAT 获得一些满足解(参考: http://blog.sciencenet.cn/blog-340399-945744.html )。 ( 3 )运用表上作业的子句消去法求 3-CNF=1 的解,是一个对 n 个变量设值的过程。这种设值过程不需要重复,只要进行 n 次即可,因而子句消去法完全是一种 O(n) 的多项式时间复杂度的算法。不妨随便写出一个 3-SAT ,用子句消去法求解试试,速度之快,超出以往的想象。 2015-12-25
个人分类: 3SAT解法|2390 次阅读|0 个评论
柳渝你还认为子句消去法证明的是P=P吗?
热度 1 accsys 2015-12-26 05:27
今在网上偶见蒋迅的“数学都知道”还在登载柳渝对子句消去法的否定见解,觉得应该更改了。 我这个人喜欢公开地讨论问题,因为相互竞说能够引人入胜,促进问题的解决。子句消去法求解 3-SAT(包括k-SAT) ,到现在应该是端倪尽现了。不知柳渝博友是否还认为这是一个 P=P 的方法? 诚然,我当初提出的子句消去法不够完善,或者说内有错误论述,你的批评是正确的。现在我将子句消去法已经完善了(我想你已经读了我近期有关的博文),希望能够再提出你的宝贵评价。我想,这对我们搞学术研究的人十分有益。 顺致问候 圣诞快乐! 姜咏江 2015-12-25
个人分类: 3SAT解法|2458 次阅读|1 个评论
k-Sat归约到3sat求解只会得到部分解
accsys 2015-12-25 09:37
k-Sat 归约到 3sat 求解只会得到部分解 姜咏江 当 k3 时, k-SAT 归约到 3-SAT 的公式 : k-CNF=( x 1 + x 2 + y 1 ) ( y’ 1 + x 3 + y 2 ) ( y’ 2 + x 3 + y 3 )…( x k-1 + x k + y’ k-3 ) 用 01 表格式表达的 5-CNF 如表 1 所示,最上面一行是变量取值。 表 1 5-CNF 0 1 1 0 * x 1 x 2 x 3 x 4 x 5 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 0 1 将表 1 的 5-CNF 归约到 3-CNF 如表 2 所示。 表 2 归约成 3-CNF x 1 x 2 x 3 x 4 x 5 y 1 y 2 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 0 1 0 1 1 0 1 0 1 0 表 2 出现了重复子句,按照子句块排列,并消除重复子句表示,化简得到表 3 。 将表 3 的 3-CNF 按照子句消去法进行求解。 ( 1 )有 4 同值变量 y 2 =0 ,则可消去后面的 4 行。 ( 2 )若选取 y 1 =1 ,则有 x 3 不能够取值,造成 3-CNF=1 无解;所以取值 y 1 =0 ,选取相应子句。 ( 3 )取 y 1 =0 值后,还剩 3 个子句,且有一个变量的值已经确定,故必选 x 1 =1 , x 2 =0 才能够将全部子句消去。 这样我们在 3-CNF=1 得到一组解 x 1 x 2 x 3 x 4 x 5 =10*** ,“ * ”表示是 0 或 1 , y 1 =0 , y 2 =0 不涉及 5-CNF=1 求解。 表 3 3-CNF 化简 1 0 * * * 0 0 x 1 x 2 x 3 x 4 x 5 y 1 y 2 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 对于这个 3-CNF=1 求解的每一步都是唯一解,所以不可能再有其它的解。 小结:由表意 1 可见 x 1 x 2 x 3 x 4 x 5 =0110* 也是这个 5-SAT 例题的解。自然会想到 A 归约到 B 后,通过 B 只能够求出 A 的部分解。 2015-12-25
个人分类: 3SAT解法|3684 次阅读|0 个评论
学术研究常常需要你改变思路
热度 1 accsys 2015-12-23 09:45
学术研究常常需要你改变思路 姜咏江 学术研究和创新科研常常需要你改变前人的思路,如此才有希望获得独到的成就。我现在可以完全肯定 3-SAT 问题已经被我解决了。 3-SAT 就是一个初等数学的问题。一个初等数学就能够解决的问题,被学术界说得如此神乎其神,其原因多半是研究中缺乏及时地改变思路所至。 搞学术或科研,自然免不了先要学习前人或别人的许多东西,自然免不了要顺着人家的思路进行研究思考,这是学术研究的惯性。但是,如果沿着那种成型的思路走不下去的时侯,就应该考虑换个角度或方法研究,这样才会有所发现。 我在机器计算基础研究中发现了限位数理论和方法,因而才想到将 k-CNF-SAT 的子句按照 k 个变量组织到一起,看看有什么特征。这就是“子句块”和“关联段”。我这种变换角度的思考方法,是我获得 3-SAT 解法成功的关键。有了子句块和关联段的概念,再对之施行“子句消去法”,那么不仅 3-SAT 是个初等数学问题,就连 k-CNF-SAT 也都是初等数学问题! 我进入 P/NP 问题的研究过程就记录在科学网上。说起我进入 P/NP 问题的研究,那是一个完全偶然的事情。我擅长的是计算机 CPU 设计, 2014 年在网上介绍 CPU 设计的重要性之时,被李斌网友提及 P/NP 问题才是重大的科研问题所吸引。于是就以玩玩的态度,在科学网上做起了 P/NP 问题的学术研究。这其中最大的目的还是想活动活动大脑,顺便在网上结交一些朋友。 我起先以为 P/NP 问题关乎到程序运行时间计算问题。因而抛出了程序执行时间计算方法的博文,被李斌嘲笑我根本没有弄清楚 P/NP 问题。这期间免不了要深入学习什么是 P/NP 问题,最后落实到 3-SAT 的求解方法。 子句消去法是分段子句消去法的简称。“逻辑多项式的某项值为 1 ,那么这个逻辑多项式的值就是 1 ” ,这就是子句消去法的基本原理。这一简单的原理恐怕没有什么人不清楚。如果一个个设定逻辑变量的值,子句消去法无疑是一种穷举的方法,不是多项式时间的算法。但我相信,找到合取范式 k-CNF 的结构规律,一定会找出规律的计算方法。说实话,这其中我有若干次想放弃,对一些批评和讥讽感到有理。一个半个多世纪都未被学术界解决的问题,你一个七十岁的老者能够破解?兴趣是学术研究最大的动力,这方面也许有人不信,但我确实是被兴趣所驱使,一种不想失败的想法激励着我继续。事实证明我成功了,我自己也就轻松了。 用子句消去法求解 3-CNF=1 的解,每一个中学生都可以学会,这不就是一个初等数学问题?既然是初等数学问题,为何长期得不到解决? 其实, k-SAT 问题涉及到一种离散型关联关系的计算,而这种计算并不是通常的算术运算所能够解决的。算术运算是一种连续地因果关系的思维模式,其极致就是数学分析的微积分思想。离散型关联关系的因素之间只为相互结构所左右,而不具备因果关系的那些显著特征。离散关联关系形成问题的结果只需要回答是否,而不会像我们所通晓的数那样分为相互关联的级别。 例如,逻辑变量表达式 ( x’ 1 + x’ 2 + x’ 3 )( x 1 + x’ 2 + x’ 3 )( x’ 1 + x 2 + x’ 3 )( x 1 + x 2 + x’ 3 )( x’ 1 + x’ 2 + x 3 )( x 1 + x’ 2 + x 3 )( x’ 1 + x 2 + x 3 )( x 1 + x 2 + x 3 ) ,不论我们给出逻辑变量 x 1 、 x 2 、 x 3 怎样的值,该表达式最终的结果一定是 0 ,这是逻辑变量间的结构造成的。这种多因素的结构关联,在以往的研究中缺失很多。显然书写成上面这种表达式的方式不利于结构因素研究。将上面的表达式写成下面表 1 的形式( x i 用 1 记录, x’ i 用 0 记录),就能够一目了然地看出变量之间的相互制约关系。 由表 1 可以看出,我们将每一行看作一个子句,无论我们对 x 1 、 x 2 、 x 3 设定怎样的值,都不能够将全部子句消去。而去掉表 1 中的某些行,那么就可以设定 x 1 、 x 2 、 x 3 的值将子句全部消去。 表 1 3-CNF 完全子句块 x 1 x 2 x 3 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1 对于 3-CNF 来说,设定 x 1 、 x 2 、 x 3 的值后,能消去 3-CNF 的全部子句,就等于求出了 3-CNF=1 的解。所以逻辑变量间的结构如何就成了 k-CNF=1 求解的钥匙。 子句块之间的相互关联结构也影响到 k-CNF=1 求解,这是离散因素结构分析的必然。表上有限次操作无疑是一种多项式时间复杂度的算法。 一年多的时间,我能够完成 3-CNF=1 的求解方法,关键的地方是改变了以往人们的思考路线,引进了表结构方式,从而找到了 k-CNF=1 求解的基本途径。 按照维基百科网站上的说法, P/NP 问题涉及的科研层面太广了,解决了 3-SAT 问题就等于解决了 P/NP 问题。一般认为, NPC 的典型 3-SAT 的多项式时间求解存在,就等同于 P=NP 。这究竟是否完全正确,我还没有详细地研究。 2015-12-23
个人分类: 3SAT解法|2826 次阅读|2 个评论
详解3SAT归约到子集和问题的方法
accsys 2015-12-17 08:29
详解 3SAT 归约到子集和问题的方法 姜咏江 《算法导论》一书对 3SAT 规约到子集和论述不够,特作如下详细解释。 1. 确认表示与 01 表示 先给出一个 3-CNF=( x' 1 + x' 2 + x' 3 )( x' 1 + x' 2 + x 3 )( x 1 + x 2 + x 3 )( x 2 + x 3 + x' 4 )( x 2 + x' 3 + x' 4 ) 的例子。表 1 是这个 3-CNF 的确认表示法,表 2 是它的 01 表示法。表 1 有底纹与无底纹的选择,分别表示选择 x 1 =1 , x 2 =1 , x 3 =1 , x 4 =1 和 x 1 =0 , x 2 =0 , x 3 =0 , x 4 =0 ,这两种选值都不是 3-CNF=1 的解。 不难看出, 3-CNF=1 求解的问题,在表 1 中变成了 sum 是否没有 0 数据位的问题;而在表 2 中就变成了是否有剩余子句的问题。 表 1 3-CNF 确认表示法(无解) 表 2 3-CNF01 表示法 x 1 x' 1 x 2 x' 2 x 3 x' 3 x 4 x' 4 sum x 1 x 2 x 3 x 4 1 1 1 0 3 0 0 0 1 1 1 1 2 0 0 1 1 1 1 3 0 1 1 1 1 1 1 2 1 1 1 0 1 1 1 1 2 1 0 0 例如选择 x 1 =1 , x 2 =0 , x 3 =0 , x 4 =0 或 x 1 =0 , x 2 =1 , x 3 =1 , x 4 =1 ,那么 sum 没有为 0 数位, 3-CNF=1 都有解。 表 3 3-CNF 确认表示法(有解) 表 4 3-CNF01 表示法 x 1 x' 1 x 2 x' 2 x 3 x' 3 x 4 x' 4 sum x 1 x 2 x 3 x 4 1 1 1 2 1 0 0 0 1 1 1 1 2 0 0 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 0 1 1 1 2 1 1 0 0 依据子句消去法对合取范式 3SAT 求解中,只要出现 2 选值变量的 4 种不同值,就会出现无解情况(参阅: http://blog.sciencenet.cn/blog-340399-928224.html )。因此只要这里选 x 1 =1 和 x 4 =1 ,就会出现关联段无解的情况,即不论 x 2 、 x 3 为何值, 3-CNF=1 都无解。这方面从表 1 可得验证,无论如何 sum 总有 0 值出现。 容易知道 3-CNF 的变量值确认表中每个子句的标志和 sum=3 ,若其中正变量取值数为 s ,则其反变量必取 3-s 个。 引理 : n 元变量 k-CNF 确认表示法中选择 n 列向量求和,不出现为 0 分量,则得 k-CNF=1 有解,反之无解。 证明 :因为确认表示法向量的每个分量值为 1 代表 01 表示法的选中 0 或 1 的确认,它们之间是一一对应的关系。故 01 表示法的子句变量值选中,必在确认表示法有 1 存在,反之亦然。由此可知引理成立。 2. 3SAT 归约成子集和 由 k-CNF 的确认表示法很容易转换成特殊的子集和。由表 1 可见,将每列的空格认为是 0 ,那么那么求和就变成了子集和问题。为了不出现相同的数,增加 4 行(见表 5 ),为了能够求出和的低 4 位为固定数 3+1 ,选择松弛变量{ 1 , 2 }。 表 5 特殊的子集和问题(下面是高位) x 1 x' 1 x 2 x' 2 x 3 x' 3 x 4 x' 4 s 1 s' 1 s 2 s' 2 s 3 s' 3 s 4 s' 4 S 5 s' 5 sum 1 1 1 1 2 4 1 1 1 1 2 4 1 1 1 1 2 4 1 1 1 1 2 4 1 1 1 1 2 4 1 1 1 1 1 1 1 1 1 1 1 1 3. k-SAT 归约成子集和 一般的 k-SAT 也可以归约到子集和,设子句数为 m ,变量数为 n 。那么设定目标值的高 n 位都是 1 ,低 m 位都是 k+1 。 松弛变量的选择要依据能够产生 1 到 k 的最小非负整数集为准。例如 k=6 ,那么松弛变量集应为{ 1 、 2 、 3 }。此时目标值低 m 位应是 7 ,那么子句选择值是 1 ~ 6 ,总可以通过松弛变量选择使和值的对应位为 7 。 本文旨在解释 k-SAT 归约到子集和问题,故不谈证明。如若了解请看 《算法导论》或其它相关书籍。 2015-12-17
个人分类: 3SAT解法|10858 次阅读|0 个评论
多解的子句块关联段求解
accsys 2015-12-15 11:11
多解的子句块关联段求解 姜咏江 都是多解的子句块形成的关联段,求解时要先解决有可能形成无解的情况。表 1 中可能形成无解的情况只有底纹暗色的部分,那么选取 x 1 和 x 4 及 x 5 的值,就要注意不能够产生无解的剩余子句块。 图 1 中用子句消去法若选择 x 1 = 1 , x 4 = 1 就会出现无解的情况。因而求解中要避开无解。 表 1 多解的子句块关联 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 这个问题中,只要选择 x 1 = 0 ,就进入了可解状态。 显然,多解子句块间有两个变量相互关联段才有可能出现无解的情况,而只有一个变量关联的多解子句块间不会形成无解。 2015-12-15
个人分类: 3SAT解法|2258 次阅读|0 个评论
3SAT剩余子句块多解表示方法
accsys 2015-12-15 09:07
3-sat剩余子句块多解表示方法 姜咏江 使用子句消去法对 3-SAT 求解,最后会碰到剩余子句块多解的情况。如果我们只选择 0 和 1 表示,就会使那些很容易就得到的多解无法表出,为此需要引进 确定了一个变量值后 的剩余多解子句块的表示方法,这样一次可以获得更多的 3SAT 解表示。下面表 1 和表 2 中的 $ 表示该变量值已经确定,上面一行是表示符号。 表 1 剩余一个子句 表示: v v t t k k q q 变量: X i X j X k X i X j X k X i X j X k X i X j X k 剩值: $ 0 0 $ 1 1 $ 1 0 $ 0 1 vv 表示 x j x k 的值是 0* 或 *0, tt 表示 x j x k 的值是 1* 或 *1, kk 表示 x j x k 的值是 1* 或 *0, qq 表示 x j x k 的值是 0* 或 *1 。“ * ”表示 0 或 1 。 表 2 剩余 2 个子句 表示: 2 2 3 3 2 2 3 3 变量: X i X j X k X i X j X k X i X j X k X i X j X k 剩值: $ 0 0 $ 1 0 $ 1 1 $ 0 1 1 1 0 1 0 0 1 0 22 表示 x j x k 的值是 01 或 10, 33 表示 x j x k 的值是 11 或 00 。 这种表示一般只用于剩余的独立子句块,如若是多解的关联段,尚需设定值求解,到最后碰到此种情况方可使用。 需要说明,子句消去法并不能够一次性求出 3SAT 的全部解,除非 3SAT 只有唯一解和只有我们这里给出的表示法能够表出的那些解。这种多解表示法只是对剩余多解子句块运用的一种表示法,目的是在 3SAT 的一次求解中能够尽可能地表示出更多的解。 剩余只有 3 种子句的子句块一定有唯一解。剩余有 4 种类型子句的子句块一定无解。 2015-12-15
个人分类: 3SAT解法|2677 次阅读|0 个评论
3SAT的子句消去法求解方法介绍
accsys 2015-12-11 08:56
3SAT 的子句消去法求解方法介绍 姜咏江 子句消去法求解用 0 和 1 表示的 3SAT 问题简单易学。这里以简单的例子来说明解法。 1. 独立子句块 由逻辑变量 x 1 , x 2 , x 3 构成的 3SAT 有最多有 8 个子句,将其用阵列表示,即为表 1 所示。 表 1 子句块 序号 x 1 x 2 x 3 1 0 0 0 2 1 0 0 3 0 1 0 4 1 1 0 5 0 0 1 6 1 0 1 7 0 1 1 8 1 1 1 子句消去法的要点是将变量设定 0 或 1 的值,并将表中有这个值的子句全消去。如果全部变量值设定之后,表中无子句,则设定的变量值向量就是这个 3SAT 的解,如有剩余子句存在,则此 3SAT 无满足解。 从表 1 中可见我们无法确定 x 1 , x 2 , x 3 为何值能够把这些子句全消去。由 3 个变量形成的子句叫子句块,3SAT子句块中子句数为 8 ,那么这个 3SAT 一定无满足解。 将表 1 的子句随便删除一个(如有底纹一行),就构成了 7 个子句的子句块,这种子句块一定有唯一解。确定解的办法简单: ( 1 )选中有 4 个相同值的变量,并让该变量取这个值( x 3 =0 ,这是必选值,不然无解)。 ( 2 )剩余子句块如表 2 所示。在 x 3 =0 的情况下,只有选 x 1 =1 和 x 2 =0 才能够将这 3 个子句全部消去(变量选值最多的数码)。 表 2 剩余子句块 序号 x 1 x 2 x 3 5 0 0 1 6 1 0 1 8 1 1 1 小结: 有 7 个子句的子句块有唯一解。只要子句块有一个变量有 4 个相同值,就必选。子句数不足 7 的子句块必有多解。子句块解的数量为 8- (块子句数)。 例如,表 3 可以有 6 个解{ 100 、 010 、 001 、 101 、 011 、 111 }(操作时选 x 3 =1即可)。 表 3 多解子句块 序号 x 1 x 2 x 3 1 0 0 1 2 1 1 1 2. 避免关联子句块无解 有共同变量的子句块形成关联段。 3SAT 求解要先求出唯一解子句块的解,这些块解求出来之后,会剩下一些相互关联的多解子句块。如果这些多解的关联子句块出现了表 4 的情况,那么必定产生无解。 表 4 剩余关联多解子句块 序号 x 1 =0 x 2 x 3 x 4 =1 x 5 =0 1 1 0 0 2 1 0 1 3 1 0 0 4 1 1 0 5 0 0 1 6 1 0 1 如果在此之前 x 1 , x 4 , x 5 的值都是通过求唯一解的过程得到的,那么可以断定此 3SAT 无解。在求解中这些先确定的值变动一下能够避免图 4 中的有色的 4 个二进制数出现,那么就可以继续设定变量值求解。 一般的 3SAT 都有多解。子句消去法一次可以求出部分解,少数情况下可以一次求出全部解。 参考: http://blog.sciencenet.cn/blog-340399-928224.html 2015-12-11
个人分类: 3SAT解法|3028 次阅读|0 个评论
悬赏百万美元千禧难题有了新进展
accsys 2015-12-6 13:42
悬赏百万美元千禧难题有了新进展 美国克雷数学研究所于 2000 年悬赏 100 万美元求解的 P/NP 问题最近有了新进展。据维基百科说 P/NP 问题直接涉及到计算机科学和数学的方方面面(参见附录)。 什么是 P/NP 问题呢? 简单地说,能够用函数或映射方式有限次(多项式时间)求解的问题是 P 类问题,而能够用验证方法(关系)有限次得到解的问题是 NP 类问题。问, P=NP? 显然用函数或映射方法得到问题解的过程是确定性的,而用验证的方法求解过程是随机性的。我们可以将函数求解的过程看作是一种验证方法,因而可以认为 P 类问题就是 NP 类问题。反过来, NP 类问题是否也是 P 类问题?这正是几十年来人们未曾解决的难题。 1971 年斯提芬 . 库克提出了所有 NP 类问题都可以在多项式时间转化(归约)为某个特殊的问题,这个问题叫 NP 难( NP-hard ),如果这个问题本身是 NP 问题,那么就称这个问题是 NP 完全问题( NP-complete )。 后来学术界承认了斯提芬 . 库克的观点,发现了许多所有 NP 问题都可以归约到的 NP-complete 问题(见图 1 )。由于 NP 完全问题是 NP 问题,因而只要找到一个 NP-complete 问题能够用函数或映射的方法经过有限次操作求出解,那么可以得出 P=NP 的结论。 图 1 典型的NP-complete问题 近些年来,尽管人们发现了数以千计的 NP-complete 问题,然而 2015 年之前一直没有人能够找到某个 NP-complete 问题的多项式时间解法。有人预测, P/NP 问题的解决至少还需要三十年,但想不到这个问题在 2015 年就有了让人们眼前一亮的结果。 NP-complete 问题看似最简单的是 3-CNF-SAT 问题,一般称为 3-SAT 或 3SAT 。 把逻辑变量 x 的非运算用 x’ 表示,逻辑变量间的或运算用“ + ”连接,那么 3-CNF 就是形如 ( x 1 ’+ x 2 + x 3 ’) ( x 1 + x 2 + x 3 ) ( x 6 + x 8 + x 10 ’)…( x i + x j ’+ x k )…, 由 3 个逻辑变量自身或者它的非运算组成的逻辑多项式(子句)的与运算表达式。这种表达式一般称为合取范式。 如果用 f ( x 1 , x 2 ,…, x n ) 来记 3-CNF ,那么 3SAT 问题就是求 f ( x 1 , x 2 ,…, x n )=1 的解。 看起来 3SAT 仅仅是一个求 n 元函数值为 1 的解问题,然而长期以来人们却未找到它的解法,很多人都认为它的求解难度极大,包括克雷数学研究所。 谁都知道, n 个变量的 3SAT 有解一定是一个 n 位的二进制数。如果我们将 2 n 个 n 位的二进制数都一一带入 f ( x 1 , x 2 ,…, x n )=1 的左端验证,一定能够得到是解,或者不是解。因而 3SAT 是一个典型的 NP 问题。遵从斯提芬 . 库克理论的人已经证明了 3SAT 是一个 NP-complete 问题(这方面的证明较复杂,在此不谈)。因而只要我们能够用函数或映射的方法,有限次一步步地推定出 f ( x 1 , x 2 ,…, x n )=1 的解,那么是否 P=NP 的问题不就解决了? 2014 我国的一位数学出身计算机专业退休的教师,凭着兴趣进入了 3SAT 这一问题研究,提出了看似非常简单的“子句消去法”来求解。经过一年多的曲曲折折,竟然让他找到了用子句消去法求解 3SAT 的方法。他相信,任何一个人见到这种 3SAT 求解方法之后,不能不叫人发出“原来这么简单!”的感叹。 他将变量自身用 1 表示,将变量的非运算用 0 表示,将 3-CNF 列成了表 1 的格式,所求解放在表头上方。遵从子句消去法的函数算法,不论多少个变量(有限多),都能够一次性逐步求出 3SAT 的满足解。 表 1 3-CNF 子句的表格式 子句消去法是运用子句中某项的值为 1 ,消去该子句不影响剩余 3-CNF=1 的解的原理,逐步求出全体 n 个变量取值的向量解。 子句消去法规则简单。变量相同的子句在表中形成了子句块。可以证明有 8 个子句组成的子句块存在时 3SAT 一定无解;有一个变量值确定,剩余的两个变量形成 4 种不同类型子句的子句块存在,或者两个变量值确定,剩下一个变量有不同值, 3SAT 都无解。 依照子句消去法上面求解的这些原则, 对没有 8 个子句的子句块组成的 3-CNF 数值表,进行如下步骤的操作可以求出满足解。 (1)将所有子句块中一个变量有4个相同值的变量设定其值,消去变量值相同的子句; (2)确定剩余子句中有唯一解的剩余子句块解,并消去变量值相同的子句(特别是3个子句的剩余子句块); (3)最后设定所有多解的剩余子句块的解。 (4)求解中,如果前面处理的都是变量唯一解的情况,遇到了不能回避的无解情况,那么3SAT无解。 子句消去法用Excel操作十分方便。 如果您有兴趣探讨,可参考 http://blog.sciencenet.cn/blog-340399-928224.html ,亦可联系accsys@126.com或accsysuibe@uibe.edu.cn 2015-12-6 【附录:摘自网上百度文库 huangyz59420 《对 P 和 NP 问题的介绍》上传于 2010-12-28 】 假如 P=NP, 世界将会怎样? P 是否等于 NP 是计算机科学领域中最突出的问题,在千禧年七大难题中排在首位。虽然人们大多相信 P 问题不等于 NP 问题,但人们目前既不能证明它,也不能推翻它。科学家们普遍认为 P ≠ NP 是有原因的,让我们来看一看,如果哪一天科学家证明了 P=NP ,那这个世界将会变得怎样? l 已知的 NPC 难题将全部获解,这将瞬间给各个科学领域都带来革命性的进展。整数规划、 01 规划、背包问题全部获解,运筹学将登上一个全新的高度;同时,当空接龙、扫雷、数独等经典游戏也由于获得了多项式的是否而在很大程度上失去了意义。 l 算法研究方向将发生全面转移。对算法的研究可能会转向围棋等 NP-hard 问题。算法设计的学问与“ NP 问题统一解”的关系正如小学应用题与列方程解题的关系一样,将成为一种纯粹锻炼思维的游戏。 l 一些新型的自动编程语言将出现,并将逐渐取代传统的编程语言。这种新型编程语言扮演着一个“判定性 / 最优化问题万能解决器”的角色。 l 困扰人类已久的自然语言处理问题将被一举攻破。考虑这样一个最优化问题:输入一大批语句样本,它们有的符合语法,有的不符合语法;寻找一个最简单的算法,将这些语句输入这个算法时,算法能正确得出它是否符合语法。 l 类似地,所有人工智能问题都将得到解决。我们只需要向计算机提交足够多的情境以及与之对应的正常人反应,计算机就可以找出一种能正确生成出这些反应的最简单算法,完全模仿人类的行为。 l 数学证明可以完全交给计算机来处理。寻找一个反例和验证一个反例变得同样简单,一切错误的猜想都将瞬间被推翻。事实上,寻找一个数学证明和验证一个证明的正确性也变得同样简单,因此一切正确的命题也能够瞬间找到一个最简单的证明。 l 发明任何新的密码算法都是徒劳的。计算机可以根据一大批明文密文样本推算出生成密文的算法(只要这个算法是多项式的)。现有的密码学体系彻底崩溃。
个人分类: 3SAT解法|3791 次阅读|0 个评论
谈3SAT特殊的唯一解
accsys 2015-11-30 08:17
谈 3SAT 特殊的唯一解 姜咏江 在 3-SAT 求解中,很关键的是一个变量具有 4 个相同值的子句块,我们称之为 4 同值子句块。表 1 子句块的解只与变量 x 的值有关,与其余变量是无关的。只有当 x =0 时,这个子句块有解,其余情况都无解。 表 1 变量4 同值子句块 x y z 0 0 0 0 1 0 0 0 1 0 1 1 4 同值子句块应该认为是唯一解还是多解?我认为叫变量唯一解比较合适,因为不取该值,子句块就无解,从而3SAT也无解。这种情况在逻辑电路设计时,起码可以节省元器件。 有 7 个子句的子句块有唯一解,其中必有 4 同值变量,因而有部分 4 同值子句块存在。求解时只要先设定 4 同值的变量,就立即得到了有唯一解的动态子句块,这样求唯一解十分迅速方便。 有 5 个或 6 个子句的子句块如果有 4 同值变量,那么先设定这个变量的值,即刻得到了多解的动态块。 用子句消去法在 3SAT 求解中,确定唯一解部分是首选。只要将唯一解部分全都解决了,那么剩下的多解部分就容易处理了。 2015-11-30
个人分类: 教学笔记|2048 次阅读|0 个评论
3-SAT求解中几种无解情况及回避
accsys 2015-11-29 16:34
3-SAT 求解中几种无解情况及回避 姜咏江 表格式给出的 3-SAT 用子句消去法求解很方便,但应该记住无解的情况。无解的情况有: ( 1 )有 8 个子句的子句块存在; ( 2 )两个相互关联的子句块,一个关联变量有 0 和 1 的值各 4 个; ( 3 )动态子句块不可避免的全 2-SAT 可选值; ( 4 )子句块中两个变量的值确定,无法避免第三个变量同时有 0 和 1 的值。 在这 4 种当中只有( 3 )和( 4 )需要先确定其它变量的值,因而是有可能避免的。我们在求解过程中首先要回避无解,然后求唯一解,连续唯一解过程碰到了不可解决的无解,则 3-SAT 无解。 快速求解练习 1 : X1 X2 X3 X4 X5 X6 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 快速求解练习 2 : X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 1 参考: http://blog.sciencenet.cn/blog-340399-928224.html 2015-11-29
个人分类: 3SAT解法|2505 次阅读|0 个评论
神奇的子句消去法
accsys 2015-11-26 08:45
神奇的子句消去法 姜咏江 连我自己都想不到子句消去法最终竟然如此简单神奇。这里给出 100 变量的 3-SAT 解题的例子。你可以选择任意的关联段求解,只要记住 解题一般步骤如下: 1. 避免出现无解情况(找一个变量有 4 个相同值的子句块,为这个变量设定该值,消去相关子句); 2. 找出剩下的有唯一解动态子句块设定值,消去相关子句; 3. 继续 2 ,直至全部剩余子句块都是多解; 4. 查找多解的剩余关联段可形成无解动态块,设值避免无解; 5. 独立的子句块单独求解; 6. 合成 SAT 的解。 如果最终出现多解动态块,可以用下面给定的方法记录: 两个变量的值是{ 00 、 11 },那么用 33 表示解为 01 和 10 ; 两个变量的值是{ 10 、 01 },那么用 22 表示解为 00 和 11 ; 两个变量的值是{ 00 },那么用 vv 表示解为 0* 和 *0 ; 两个变量的值是{ 11 },那么用 tt 表示解为 1* 和 *1 ; 两个变量的值是{ 10 },那么用 kk 表示解为 1* 和 *0 ; 两个变量的值是{ 01 },那么用 qq 表示解为 0* 和 *1 ; *表示0或1。 注意: 1 至 3 的操作可以从局部进行,然后逐步扩充。如果某一个关联段无解,那么3SAT就无解。 您有兴趣可以试解此题,不会耗费多少时间。 练习例题: 100个变量的3sat求解.xls 2015-11-26
个人分类: 3SAT解法|1933 次阅读|0 个评论
子句消去法无需重复求3SAT的解
accsys 2015-11-23 02:57
经过艰苦细致地钻研,我终于找到了3SAT有限次函数过程求解的方法。我可以理直气壮地认为破解了P/NP问题。研究问题本身就是一种乐趣。不过这种乐趣与一般的娱乐不同,这要付出艰苦的脑力劳动。一年多以来我寝食难安,经常半夜爬起来,记录自己那睡梦中迸发出来的智慧火花。 子句消去法,一个简单到让人耻笑的算法!然而它就能够迅速地求出3SAT的满足解,这无疑体现了理论研究的平庸与伟大。 还是认为中国人的智力同样是超群的,然而将超群的智力用到相互掣肘上,会使一切都变得遥远与渺茫! 这是我一生中值得纪念的时光。 15年23日黎明时分
个人分类: 随笔|1831 次阅读|0 个评论
为什么子句分段消去法可以求出3SAT的解?
accsys 2015-10-16 16:44
为什么子句分段消去法可以求出 3SAT 的解? 姜咏江 A proof that P = NP could havestunning practical consequences, if the proof leads to efficient methods forsolving some of the important problems in NP . 上面这句话引自维基百科的 P versus NP 。说得是否有些过分了? 用子句分段消去法求解 3-CNF=1 的解,首先是将逻辑变量表达的问题结构化了,这种 3-CNF 特有的结构是求解的基础。子句间形成的子句块制约了子句中逻辑变量的自由变化,使 3-CNF=1 的解转化成了局部的“子句块解”和“关联段解”,从而避开了处处要从全局变量变化来确定逻辑变量值的传统方法。 子句块中子句数量的变化,为我们揭示了变量取值的规律,而关联段求解中产生的动态块,又为我们指明了段中变量值变化的规律和相互制约关系。所以我们才能够依据这些 3-CNF 中变量变化的内在规律,找到求解 3-SAT 问题满足解的方法。这是一种函数关系的体现, 不客气地说,我是计算机科学理论方法的里手,仔细研究,这个 P/NP 问题应该是纯数学的问题,它与计算机程序运行的时间计算等关系并不十分紧密,将其说成是计算机运行时间的问题不够贴切,因为计算机程序运行时间只与指令重复执行次数相关。 2015-10-16
个人分类: 科研讨论|2281 次阅读|0 个评论
3-SAT分段子句消去法(正规专业版)
热度 1 accsys 2015-10-15 06:53
前言:本文投给《中国科技论文在线》后说我已经在科学网上发表了。前在博客中发表的不够正规专业,因此将正规一些的再用博文发表一次,供数学计算机专业的人士讨论。 3-SAT 分段子句消去法 姜咏江 摘要 :本文给出了 3-SAT 分段消去子句的求解算法。证明了可以在多项式时间求出 3-SAT 的解。从而证实斯提芬 . 库克定义下的 NP-complete 问题就是一个 P 类问题。 关键词 : NP-complete ; P/NP 问题;子句消去法 中图分类号 : O158 The 3-SAT Algorithm by Sections JiangYongjiang Abstract : In this paper,I gave the remove clausemethed to get answer of the 3-SAT proplem. This is a polynomial time algorithm.It is proved the problem of NP-complete is a P class problem. Key words : NP-complete;P/NP problem; The clause remove method 1. 引言 P/NP 问题曾于 2000 年被美国克雷数学所定为世界头号难题 ,更有甚者说其挑战了人类智慧。所谓 P/NP 问题的定义是这样给出的: 复杂度类P包含所有那些可以由一个确定型图灵机在多项式表达的时间内解决的问题;类NP由所有其肯定解可以在给定正确信息的多项式时间内验证的决定问题组成,或者等效的说,那些解可以在非确定图灵机上在多项式时间内找出的问题的集合。 实际上这个定义有很多歧义。这涉及到人们对确定型图灵机、非确定型图灵机、多项式时间、问题、决定问题、肯定解、给定正确信息、验证等一系列概念的统一认识,因而很难形成统一的见解。 1971 年斯提芬 . 库克 (Stephen A. Cook) 发表了《 The Complexity of Theorem Proving Procedures 》 才把 P 之外的问题归结为三大类,即 NP 、 NPC 及 NPH 。库克的分类得到了学术界的认可。库克给出的 P 、 NP 、 NPC 、 NPH 问题的定义如下: 可以在多项式时间内求出解的问题,叫 P 问题( Polynomial problem )。 可以在多项式的时间里验证一个解的问题,叫 NP 问题( Non-deterministic polynomial )。 如果所有的 NP 问题都存在多项式时间算法使其能够归约为某一 NP 问题,则称该 NP 问题为 NPC 问题( NP-complete )。 如果所有的 NP 问题都存在多项式时间算法使其归约到某问题,则称该问题为 NPH 问题( NP-hard )。 所谓的多项式时间算法,就是一种函数求解过程。显然,求解方法也是一种验证方法,因而有 P 类问题属于 NP 类问题。如果 NP 类问题也属于 P 类问题,那么就有 P=NP 了。学术界已经证明了所有的 NPC 之间都有多项式时间算法实现转化。由 NPC 的定义不难看出,只要找到一个 NPC 问题的多项式时间算法,也就等于找到了所有 NP 问题的多项式时间算法,于是也就证明了 NP=P 。 2. 典型的 NPC 问题 长时间以来,人们将寻找 NPC 类问题的多项式时间算法作为了解决 P=NP 问题的关键途径。一些典型的 NP 类问题 (见 图 1 所示)早已经被一些数学家证明是 NPC 问题了。例如,由 3 个逻辑变量组成的合取范式 3-CNF-SAT (简称为 3-SAT )满足问题、子集和问题 SUBSET-SUM 、旅行商问题 TSP 、哈密顿回路问题 HAM-CYCLE 等,这些都是 NPC 问题寻找多项式时间算法研究的热门问题。 图 1 典型 NPC 问题及相关 Fig. 1 NPC Problems 3. 3-SAT 与子句消去法 本文给出的分段子句消去法是解决如何在多项式时间求出 3-SAT 满足解的方法。 3.1 3-SAT 定义 所谓的 3-CNF 就是多个由 3 个逻辑变量或其非组成的多项式间形成的与运算表达式。一般这种逻辑表达式被称为合取范式 (CNF) ,多项式逻辑因子称为子句。 将逻辑变量 x 的非运算用 x’ 表示,集合 A= { x 1 , x 2 ,..., x n } , A’= { x 1 ’, x 2 ’ ,..., x n ’ }, 3-CNF 定义如下: 3-CNF= 其中 m 是子句的数量, x ij ∈ A ∪ A’. 求 3-CNF=1 解的问题一般叫 3-SAT. 3.2 子句消去法与反子句 由逻辑代数知,逻辑多项式的任何一项值为 1 ,则多项式的值为 1 。因而欲使 3-CNF=1 ,只要每个子句的值为 1 就行。 定义 1 :设定子句中逻辑项值为 1 ,并消去该项值为 1 的所有子句的方法,称为子句消去法。 定义 2 :将子句中的项用非运算表示得到的子句叫原子句的反子句。 定义 3 :子句中包含变量 x 与 x’ ,则称此子句为恒一子句。 由于恒一子句的逻辑值总是 1 ,不影响子句消去法,所以本文后面提到的 3-CNF 、 3-SAT 、 k-CNF 或合取范式等一律不包含恒一子句。 4. 3-CNF 表格式和关联段 分段子句消去法要用到 3-CNF 的表格表达方式。 4.1 3-CNF 的表格式 将逻辑变量 x 用 1 表示, x’ 用 0 表示,建立的 3-CNF 表格式如图 2 所示。子句以 3 位二进制数的形式占表中一行,并且规定变量相同的子句行相邻。 图 2 3-CNF 值格式 Fig. 2 The form of 3-CNF 定义4 :变量相同的子句放到一起叫子句块。 定义5 :能够使子句块中全部子句消去的变量值叫块解。 4.2 关联段 定义 6 :由相同变量联接的子句块组称为关联段。 依据定义,图 2 中有 5 个子句块的关联段。 定义 7 :能使关联段中所有子句值为 1 的段中变量值,称为段解。 定义 8 :子句块间有一个共同变量的叫一元关联。子句间有 2 个共同变量的叫二元关联。 定义 9 :子句块间没有共同变量的子句块,称为独立段。 显然, 3-CNF 有三个共同变量的子句就是子句块。 5. 子句消去法相关定理 为了说明子句消去法对 k ≥ 3 合取范式 k-CNF=1 求解的有效性,我们以更一般的情况来论述本节一些内容。 5.1 k-CNF 的定理 定理1 :所有变量值都设定之后,仍然有剩余子句存在,则设定的 n 位数不是 k-CNF=1 的解,否则是解。 证明 :因为依子句消去法,消去的子句值是 1 ,直到所有变量值设定后剩下的子句值一定是 0 。这些值为 0 的子句是合取范式的因子,必使 k-CNF=0 。 定理2 :子句块中若有互反子句存在,则二值都不是块解。 证明 :依据子句消去法,以子句的值为 1 消去的所有子句中不包括其反子句,因此总有其反子句不能被消去,则互反子句值都不是块解。 推论1 : k-CNF 中子句的反子句值不是块解。 推论2 : k-CNF 子句块解不超过 2 k -1 个。 推论3 :若 k-CNF 中有 2 k 个子句的子句块存在,则 k-CNF=1 无解。 定理3 :从一个子句块出发确定的 k-CNF=1 解,也可以从另一子句块出发确定这个解。 证明 :假设由子句块 A 确定的解 a 不是由子句块 B 确定的解,那么因 a 中必含有 B 的一个子句值,于是可以从这个值出发,按照 a 的值扩充来求解,仍然是这个合取范式的一个解。于是可知,从 A 做起始块或 B 做起始块可以得到相同的解。 由此定理可知,选择任何子句块做为起始块求解,效果一样。 定理4 : n 个变量的 k-CNF 子句块最多有 C n k 个 。 证明 :显然 k 阶子句的变量是从 n 个变量中取出 k 个构成的集合,每个变量取值 0 或 1 就构成了子句块。依据排列组合知识,知定理成立。 5.2 3-CNF 的定理和性质 定理5 :子句块或关联段无解,则 3-CNF=1 无解。 证明 :因为子句块解与关联段解都是 3-CNF=1 解的组成部分,其无解, 3-CNF=1 自然无解。 将独立的子句块也看成一个关联段,那么有下面定理 6 。 定理 6 : 3-CNF=1 的求解可以分别对各关联段求解。 证明 :由 3-CNF 的表格式可知关联段是不重合的,并且将各关联段的解按照变量顺序组合就是 3-CNF=1 的解,所以可以分开求解。 定义 10 :子句消去过程中剩余子句块间有相同变量,则称这些子句块为动态块,消去此动态块的变量值叫动态块解。 定理 7 :动态块无解,则关联段无解。 证明 :因为动态块变量是关联段解的组成部分,所以动态块无解,其所在关联段就无解。 定理 8 :确定了一个变量值的动态块其余变量的所有可能值都存在,则此次段选值不是段解。 证明 :如表 1 所示,如果固定了左侧 3 列中一个变量的值,那么剩余 2 个变量的值可能为右侧的 2 列值。如果右面 2 列 4 行值都存在,则表明无论设定剩余 2 个变量取任何值,都不能够将动态块的子句消除干净,因此知此次选值不是段解。 表 1 一个变量值确定其它变量值 Tab. 1 Situation of fixed onevariable 块子句可能值 固定一个变量后剩余变量可取值 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 1 推论4 :动态块确定一个变量值后其余 2 变量有 3 组值,则有惟一动态块解;两组或一组值,则有多个动态块解。 推论5 :子句块中变量有4子句同值,取其它值可无解。 定理 9 :连续多值可选的关联段最终可确定段解。 证明 : 3-CNF 求解中只有一个变量值确定的动态块可以产生多解。若设定关联变量值后的剩余动态块仍然有多值可设,则可连续查找关联块,直至无解、有惟一解或有关联段的结束动态块出现。如果最终出现关联子句块无解,则关联段无解。如果出现子句块块有唯一解,可反方向设定关联变量值去确定前面每个多值动态块的解;如果多解情况最终关联的是未曾设定解的子句块,可以把子句块解设定,然后反方向去确定多解的动态子句块,最终会连成一个关联段,得到关联段的解或无解。 6. 3-SAT 分段消去算法 运用子句消去法,可以按照关联段设定变量值,消去子句,逐步对 3-CNF=1 求解。 6.1 关联段子句消去法 运用子句消去法,可以按照关联段设定变量值,消去相关子句,逐步对 3-CNF=1 求解。对没有 8 个子句的子句块组成的数值表 3-CNF ,进行如下步骤的操作可以求出满足解。 ( 1 )将所有子句块中一个变量有 4 个相同值的变量设定其值,消去相应子句; ( 2 )对形成表 2 右侧 3 种类型子句的动态块和只需设定一个变量值的动态块求出唯一解,并消去相应子句; ( 3 )设定所有多解的剩余子句块的解,优先处理可能形成无解的情况。 如果前面都是唯一解的情况,遇到了无法回避的表 3 的无解情况,那么 3-SAT 无解。 依据子句消去法,若所有的关联段都有解,那么 3-CNF=1 就有解。其解为各关联段解的组合。 6.2 关联段子句消去法实例 图 3 给出了用分段子句消去法求 3-CNF=1 的例子。 首先,本例的子句块 x 1 x 2 x 3 选 x 3 =0 ;子句块 x 3 x 4 x 5 选 x 5 =0 ;子句块 x 4 x 5 x 6 选 x 6 =0 (见图 3 ( 1 ))。 其次,消去相应子句后,有 x 5 x 6 x 8 动态块必需确定 x 8 =0 (图 3 ( 2 )) 最后,消去相应子句后,剩下了有多解的关联段(图 3 ( 3 )),可以设定 x 1 =0 、 x 2 =1 将全部剩余子句消去。此 3-CNF=1 有解 010*00*0*** 。 图 3 3-CNF=1 求解过程 Fig. 3 procedue of the remove clauses 6.3 分段子句消去法的多项式时间复杂度 分段子句消去法,将 3-CNF 的子句分成了相互关联的段,并以段解来组成 3-CNF=1 的解。由于关联段是不重复的,所以 3-CNF 的关联段最多有 个,此时最多有一至两个子句块之间关联,其余子句块都是独立的。 由于 3-CNF 的每个关联段都可以一 次求段解操作,因而用分段子句消去法求出 3-CNF=1 的解或判定无解,最多需要进行 段消去子句的过程。从这一点来说,用分段子句消去法求 3-CNF=1 的解是一个 O( n ) 时间复杂度的算法。 其实, 3-CNF=1 是否有解,主要取决于子句数 m 和子句分配的结构,亦即子句之间关联的程度。 3-CNF 关联段子句越多, 3-CNF=1 的解就越少,反之解的数量会很多。当所有子句块只有一个子句并且都是独立块时, 3-CNF=1 会有最多的解。 7. 结论 3-SAT 求满足解的分段子句消去法是一个多项式时间复杂度的算法。本算法证明了典型的 NP-complete 问题之一 3-SAT 是一个 P 类问题。依据学术界公认的观点,分段子句消去法可以说明 P=NP 。 (References) https://en.wikipedia.org/wiki/P_versus_NP_problem Steven Cook. The complexity of theorem proving procedures. In Proc. ThirdAnnual ACM Symposium on the Theory of Computing, pages 151-158,1971. Thomas H. Cormen Charles E. LeisersonRonald L. Rivest Clufford Stein. Introduction to Algorithms,Third Edition,pages1082-1104,2009. Gilles Brassard and Paul Bratley. Fundamentals of Algorithmics. PrenticeHall,1996. 附加一个例题: 100个变量的3sat求解.xls 2015年11月22日补充修改
个人分类: 科研论文|5245 次阅读|1 个评论
再请杜立智详细解析姜咏江解决了3SAT难题如何?
热度 3 accsys 2015-9-22 04:03
再请杜立智详细解析姜咏江解决了 3SAT 难题如何? 科学网上的牛人杜立智还是很有影响力的。一篇博文《 详细解析天才的姜咏江解决了3SAT难题 》至今已有1017次阅读,20次评论,很好。 我以讨论的心态从事科学研究,目的是能够从批评中得到启发。杜老师的轻蔑带有讽刺意味的解析评论,是激发我前进的动力。所以我感谢杜立智。 还是被杜老师认为是脑残的“子句消去法”,有了独特的感觉,更需要象杜立智这样的功底深厚的人批评。博文地址: http://blog.sciencenet.cn/blog-340399-928224.html 姜咏江 2015-9-22 附录:杜立智博文和一些评论 详细解析天才的姜咏江解决了3SAT难题 各位,70余岁高龄的姜咏江博主,名校计算机专业退休老教师,一次又一次地声称解决了世界难题。蒙他看得起,多次点名要求我予以评判。 我已经多次评论过,他的那一套荒谬可笑,他还要继续,并还要点名要我评。我就恭敬不如从命了,反正他的天才解决方案,我稍稍一看,立即看懂,所以也不花什么时间精力。 我这里表这个态:看算法的论文关键是必须进入思路,哪怕别人表达不太好,推敲一下很快进入思路就能看懂。对于这个世界任何高档次高难度的算法论文,只要不涉及其他领域专门的知识,主要是复杂的思路和基础数学,我都能很快进入思路很快看懂,并能很快确定算法到底难不难,有多高的价值,作者实力如何。两种语言,中文英文。而不像大量论文和基金评审专家猪,根本看不懂就做评论。 下面是他最近声称解决了3SAT问题的方法,岂止3SAT,4,5,6SAT…等等他都解决了! 一个逻辑多项式如果存在一项的值是 1 ,那么这个逻辑多项式的值一定就是 1 。同样,一个逻辑项的存在为 0 的因子,那么这个逻辑项的值一定是 0 。逻辑变量非的值,一定是逻辑变量值的反码。逻辑运算的这些基本规律是子句消去法计数成立的基础。 本文用“ + ”表示或运算,用“ ’ ”表示非运算,与运算符号省略。 我们可以利用逐次消去 n 个变量或其非运算一方,通过 n 次消去,最终确定消去的变量取值是否是合取范式值为 1 的解。这叫子句消去法。用子句消去法进行改造,获得了下面的 子句消去计数法 。 用子句消去计数法求解 k-CNF-SAT 问题算法如下: ( 0 ) 设立 n 元单侧计数器: x 1 ’x 2 ’x 3 ’…x n-1 ’ x n ’ ,…, x 1 x 2 x 3 …x n-1 x n ,x 1 ’x 2 ’x 3 ’…x 5 ’x 6 ,共计 64 个。 ( 1 )去掉恒一子句 ( x 1 + x 1 '+ x 2 ') ,剩 ( x 2 + x 3 + x 4 )( x 1 '+ x 3 '+ x 4 ')( x 1 '+ x 2 + x 5 ')( x 2 + x 3 + x 6 )( x 1 + x 5 + x 6 ') ( 2 )剩下非恒一合取范式的第一子句使含 x 2 x 3 x 4 标识的计数器都加 1 ;第二子句使含 x 1 ' x 3 ' x 4 ' 标识的计数器都加 1 ;继续 5 次,查遍所有子句。 ( 3 )令为 0 计数器的变量取反码值即得解。例如,计数器 x 1 ’x 2 ’x 3 x 4 ’x 5 ’x 6 ,于是得 f ( x 1 ,..., x 6 ) 值为 1 的解有:( 110110 )。 ( 4 )一次性可以写出所有解。互为反码标识的计数器都为 0 ,则对应逻辑变量组合双方都是解。 验证 : 对于所得解可以带入原式验证。将 x 1 =1 、 x 2 =1 、 x 3 =0 、 x 4 =1 、 x 5 =1 、 x 6 =0 带入原式得: f (1,1,0,1,1,0)=1 。 3. 概念与性质 为什么子句消去计数法就能够求出 k-CNF=1 的解?它的证明就在下面的概念和方法中。 定义 1 :如果子句中同时有逻辑变量和其反表示,则称子句为恒一子句。 显然,恒一子句的值总是 1 ,与逻辑变量的取值无关。 定义 2 :所有包含变量 x 的非恒一子句叫 x 相关子句。 定义 3 :我们将 n 对互反变量只取变量或变量非,得到的 n 个变量组合,叫一侧。显然, n 个变量的一侧有 2 n 个。 子句消去计数法的计数器就是记录一侧含有的子句数量的。 定理1 : n 个变量合取范式 k-CNF 中一侧相关子句数最多为C n k 。 证明 :因为一侧只有 n 个变量,从中取出 k 个为C n k 。 此定理可以用来检查给定的合取范式是否不正确。如果给出的合取范式的一侧相关子句超过这个数,则可判定合取范式有错误。 定义 4 :将合取范式一个变量的值定为 1 的子句消去求解的方法,称为子句消去法。 显然,子句消去法经过 n 次消去,若没有剩余子句,则 k-CNF 是可满足的,反之不满足。 定理2 :非恒一子句全体,消去 x 相关子句中,一定不含有其反变量 x’ 。 证明 :因为非恒一子句 x 与 x’ 是不同时出现在一个子句,所以消去 x 相关子句, x’ 相关子句依然存在。 完全定理 : n 个逻辑变量所成的 k 元合取范式 k-CNF ,最多有C 2n k 个子句。非恒一子句最多有 个。 证明 :因为每个子句的元素可以是逻辑变量或它的非,这相当从 2n 个元素中取出 k 个的组合数,即为。而恒一子句最多有 个,所以非恒一子句最多有 个。 推论 :完全合取范式的值恒为 0 。 因为完全合取范式包含 x 与 x’ 的所有相关子句。所以用子句消去法无论经过怎样的 n 次消去子句,都不能使剩余没有子句。 可满足定理 :若非恒一子句中互反变量有一侧相关子句不存在,则 k-CNF-SAT 可满足。 证明 :因为 x 的相关子句全体包含一侧所有的 n 个变量或其非,如果一侧不存在,则可确定其相反一侧变量逐一消去,依据定理 2 可知最终没有剩余子句。 满足定理是我们进行 k-CNF-SAT 求解子句消去计数算法正确性的依据。 步数定理 :用子句消去计数法确定 k-CNF 可满足全部解,最多用了C 2n k 次检查。 因为子句数不超过C 2n k ,得证。 步数定理告诉我们,上面介绍的求解算法是一个多项式时间算法。 各位,包括计算机专业的专家们,包括计算机专业的一大部分基金评审专家猪,你们是否能立即看懂了? 我断言,大比例这样的人会半天看不懂! 首先一个问题,他的方法对吗? 我告诉你们,他的方法毫无疑问是对的! 那么,姜博主真的是天才了?这么顶级的世界难题他一下子就解决了,甚至仅仅只是“回去想了想”? 姜博主的整个工作,相当于是在解这样一个方程x=x,一样的无聊。 尽管如此,我还是佩服姜老师的智商,一个70余岁的老人,他玩的一些花样,大量计算机专业高职称高学历的垃圾一点头脑的人是看不懂的。 记得有这样一个谜语:七七四十九,和尚庙里有。 他洋洋洒洒这么长的一段所谓“算法和证明”,其实只要一句话就可以概括。我就不概括了。 这就是姜老师解决世界难题的方法。 联想到上一次他声称解决了整数子集和问题,他那个方法和程序若是自己独立完成的,表明他的头脑没有衰退,智商很高。因为我判断大量杂牌一点头脑的计算机专业的人是做不出来的。 部分网友的评论:
个人分类: 随笔|2931 次阅读|4 个评论
非常复杂问题一旦引入新算法就变得十分简单了
accsys 2015-7-8 17:22
非常复杂问题一旦引入新算法就变得十分简单了 姜咏江 在数学史上,复杂问题一旦引入新方法后,问题求解就变得十分简单了,这样的例子很多。例如从加减法运算引入乘除法运算,引入矩阵运算等。 K-CNF-SAT 问题以前求解相当复杂,常常通过已有的方法不能达到准确地求解,于是人们想到近似计算,概率引入的计算等,弄得十分复杂,甚至将计算者自己都绕了进去。 姜咏江创造的子句消去法是一种全新的求解 K-CNF-SAT 问题的方法。这种方法使本来 3SAT 求解十分困难的状态,一下子变得十分容易起来。这就是在数学计算中引入新的计算方法的魅力所在。 子句消去法与传统的数学精准的概念不同,不是对众多的变量一个个地讨论变化的相互影响,而是抓住子句的主要变量,一次性地将主要变量存在的子句全部处理掉。这看起来操作十分简单的事情,背后隐藏着对逻辑电路抽象的深刻理解,对数学概念和方法的准确把握,透过数学运算的现象,看出其深刻的本质才行。不然,近 50 年为何没有人发现这一简单的合取范式求值方法?子句消去法并不是将变量一个个地去掉了,而是在消去子句的同时,变量又会以另外的身份出现,我们怎么能够想得到呢! 一个新的计算方法如果不能够使原本复杂的求解问题简单化,那么这种新的算法就失去了它存在的意义。有的网友看到子句消去法使 K-CNF-SAT 问题的求解变得如此简单,如此初等,说什么也不相信解决世界级的数学难题,竟然会如此简单!其实,不管有多少人不相信,科学的方法终究是科学的方法。计算 K-CNF-SAT 问题的解,居然象求多元一次方程那么简单,只要解题者设定一些前面变量的值,那么后面的变量会一个跟着一个被确定出来,似乎真有些不可思议了。然而事实摆在那里,不容你不信。 由于 SAT 问题涉及到密码学、遗传学、数理逻辑、人工智能、机器学习、 VLSI 集成电路设计与检测、数据检索等方面都有重要的应用,所以慎重地对待子句消去法,这是科学发展的正常理念。解决的办法就是让理论的创新应用于实践,让应用者利用子句消去法解决那些实际当中的问题,在实践中检验它的正确性,必然是其发展的正确途径。 新的数学计算方法的引入,一定是全新的理论研究的开始。 2015-7-8
个人分类: 科研讨论|2043 次阅读|0 个评论
公布一个3-CNF-SAT函数的所有解
accsys 2015-7-8 06:28
公布一个 3 - CNF-SAT 函数的所有解 姜咏江 为了证实我创造的子句消去法求解 k-CNF-SAT 的真实有效性,特给出一个 6 个逻辑变量的 3-CNF-SAT 函数求解实例,希望读者能够通过这个实例的全部解求出,更好地理解子句消去法的正确性。 f (x 1 ,..., x 6 )= (x 1 +x 1 '+x 2 ')(x 2 +x 3 +x 4 )(x 1 '+x 3 '+x 4 ')(x 1 '+x 2 +x 5 ')(x 2 +x 3 +x 6 )(x 1 +x 5 +x 6 ') 。 这个合取范式是否有值为 1 的解?共有多少?都是什么?用子句消去法很快就可以求出来。 我将这些解罗列出来,是否正确,读者可以任选一组 6 元二进制数进行检验,看看我给的那些二进制数是不是都是解。此外,读者可以任意给出不在其中的 6 位二进制数,进行验证,看看它们是否使 f (x 1 ,..., x 6 )=0 。 通过子句消去法,得到这个合取范式成立的解集合如下: 000010 , 000011 , 000100 , 000101 , 000110 , 000111 , 001010 , 001011 , 001100 , 001110 , 010010 , 010011 , 010100 , 010110 , 010111 , 011010 , 011011 , 011100 , 011110 , 100011 , 100101 , 100111 , 101001 , 101011 , 110010 , 110011 , 110100 , 110110 , 110111 , 111000 , 111010 , 111011 , 111100 , 111110 。 以上共计 34 个解。 验证 在解集合中的数 : (x6,x5,x4,x3,x2,x1) = 011110 ,得: f (x 1 ,..., x 6 )= (0+1+0)(1+1+1)(1+0+0)(1+1+0)(1+1+0)(0+1+1)=1 。 验证 不在解集合中的数 : (x6,x5,x4,x3,x2,x1) = 011111 ,得 : f (x 1 ,..., x 6 )= (1+0+0)(1+1+1) (0+0+0) (0+1+0)(1+1+0)(1+1+1)=0 。 可见不在解集合中的 6 位二进制数会使某个合取范式的子句为 0 ,因而造成无解,使此 3-CNF-SAT 不满足。 2015-7-8
个人分类: 科研论文|5331 次阅读|0 个评论
库克定义下的k-CNF-SAT=P证明(中文版)
热度 2 accsys 2015-7-4 08:45
库克定义下的 k-CNF-SAT = P 证明(中文版) 姜咏江 Email:accsys@126.com 摘要 :采用子句消去法证明了斯提芬 . 库克定义下的 NP C 问题 k-CNF-SAT 可以是一个 P 类问题。给出了子句消去法的算法。同时也给出了可以在有限步骤内求出 k-CNF-SAT 问题的解或指出其不满足的条件。 关键词 : NPC , P/NP 问题,子句消去法 1. 背景 P/NP 问题曾于 2000 年被美国克雷数学所定为最难的难题,有甚者说其挑战了人类智慧。 2010 年 8 月 6 日, HP LAB 的 Vinay Deolalikar 教授宣布证明了 P!=NP ,证明文章 已经发送到该问题各相关领域专家手中,等待检验,在他的主页上,证明过程已经公布( PDF 格式共 103 页)。 本文将给出 NP C 问题 k-CNF-SAT 可以是一个 P 类问题的算法和相关证明,跟 Vinay Deolalikar 教授唱个反调,主张 P=NP ,是否会得到学术界认可,有待每个感兴趣的人检验。 2. 子句消 去法求解的算法 一个逻辑多项式如果存在一项的值是 1 ,那么这个逻辑多项式的值一定就是 1 。同样,一个逻辑项的存在为 0 的因子,那么这个逻辑项的值一定是 0 。逻辑变量非的值,一定是逻辑变量值的反码。逻辑运算的这些基本规律是子句消去法成立的基础。 本文用“ + ”表示或运算,用“ ’ ”表示非运算,与运算符号省略。 对于 k-CNF-SAT 问题用子句消去法求解的算法如下: (1) 在合取范式中取第一个子句的一个变量表示(选择过的变量 x ,不选 x’ ,或选过 x’ 则 x 不选),若是变量本身,定其值为 1 ,若是变量非表示,设定变量的值为 0 。 (2) 消去所有含有选择变量表达形式的子句,得到剩余子句。 (3) 若还有剩余子句且有变量未选择,则转到( 1 )对剩余合取范式继续执行操作。 (4) 若所有变量皆选过,尚有剩余子句,则表示这不是合取范式此值为 1 的解;不然将前面取值按照变量顺序排好,未取值的变量表示值可以任意(用“ * ”代替)。 例1 , f ( x 1 , x 2 , x 3 )= ( x 1 '+ x 2 )( x 2 ’+ x 3 ’)( x 2 + x 3 ) ( x 2 ’+ x 3 ) ( x 2 + x 1 ) 。 ( 1 )由 x 1 ' 令 x 1 =0 ,消去含有 x 1 ' 子句,剩 ( x 2 ’+ x 3 ’)( x 2 + x 3 ) ( x 2 ’+ x 3 ) ( x 2 + x 1 ) ; ( 2 )由 x 2 ' 令 x 2 =0 ,消去含有 x 2 ' 子句,剩 ( x 2 + x 3 ) ( x 2 + x 1 ) ; ( 3 )由 x 3 令 x 3 =1 ,消去含有 x 3 子句,剩 ( x 2 + x 1 ) 。 由于此剩余子句的值为 0 ,故 f (0,0,1)=0 。 例2 , f ( x 1 ,..., x 6 )= ( x 1 + x 1 '+ x 2 ')( x 2 + x 3 + x 4 )( x 1 '+ x 3 '+ x 4 ')( x 1 '+ x 2 + x 5 ')( x 2 + x 3 + x 6 )( x 1 + x 5 + x 6 ') ,求满足 f ( x 1 ,..., x 6 )=1 的解。 ( 1 )令 x 1 =1 ,剩 ( x 2 + x 3 + x 4 )( x 1 '+ x 3 '+ x 4 ')( x 1 '+ x 2 + x 5 ')( x 2 + x 3 + x 6 ) ( 2 )令 x 2 =1 ,剩 ( x 1 '+ x 3 '+ x 4 ') ( 3 )令 x 3 =0 ,则消去值为 1 子句后,无有剩余子句。 于是得 f ( x 1 ,..., x 6 ) 值为 1 的解有:( ***011 ),其中 * 表示为 0 或 1 不限。 验证 : 对于所得解可以带入原式验证。将 x 1 =1 、 x 2 =1 、 x 3 =0 带入原式得: f (1,1,0, x 4 ,..., x 6 )=1 。 3. 概念与性质 定义 1 : n 个逻辑变量全部可取 k 元子句组成的合取范式叫完全合取范式。 定义 2 :元素对应取反的两个子句称为互反子句。 例如 3-CNF 中有子句 x 2 ’+ x 5 ’+ x 9 和 x 2 + x 5 + x 9 ’ ,它们的表示相反,因而是互反子句。 定义 3 :如果子句中同时有逻辑变量和其反表示,则称子句为恒一子句。 显然,恒一子句的值总是 1 ,与逻辑变量的取值无关。 性质1 :合取范式去掉恒一子句,所得合取范式与原合取范式值满足性相同。 完全定理 : n 个逻辑变量所成的 k 元合取范式 k-CNF ,最多有C 2n k 个子句。 证明 :因为每个子句的元素可以是逻辑变量或它的非,这相当从 2n 个元素取出 k 个的组合数,即为 C 2n k 。 推论1 :完全合取范式去除恒一子句,都是互反子句 。 证明 :根据完全合取范式的定义,去掉恒一子句后,如果某子句的互反子句不在其中,则知这不是完全合取范式。则知必都有互反子句 。 可满足定理 :子句消去法最终无剩余子句,则此合取范式是可满足的。 证明 :因为子句消去的条件是值为 1 ,若最终子句全消去,则知原合取范式是可满足的。 步数定理 :用子句消去法确定了 k-CNF 可满足,最多用了 n 次化简。 此定理从子句消去法定义立得。 4. 3-CNF-SAT 子句数 3-CNF 的恒 1 子句共有: n × 2(n-1)=2n(n-1) 完全 3-CNF 全部子句数: 2n(2n-1)(2n-2)/6=2n(n-1)(2n-1)/3 完全 3-CNF 去掉恒一子句的可能子句数: 2n(n-1)(2n-1)/3-2n(n-1)=2n(n-1) (2n-4)/3 5. 结论 一般 P/NP 问题的描述与斯提芬 . 库克的 NP 、 NPC 定义有不同之处。本文仅是站在伟大的库克的肩膀上,找出了特出 k-CNF-SAT 问题不满足的条件,并推出子句消去法求 k-CNF-SAT 问题满足解的一种方法。 斯提芬 . 库克一脉学术观点认为:若任意 NPC 问题可证明是 P 问题,那么 P=NP 成立。本文给出了 k-CNF-SAT 问题的 n 次化简求解法,并且对于 n 位二进制数是否是 n 元逻辑变量的 k-CNF-SAT 解的验证,也肯定了是典型所谓的“多项式时间”,故可以得出在 斯提芬 . 库克定义的条件下,可以有 NPC = P ,这个结论否定了 P ! =NP 。 2015-7-4
个人分类: 科研论文|8385 次阅读|35 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-21 02:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部