笔记来源:高级算法设计(孙晓明老师部分)
https://en.wikipedia.org/wiki/Maximum_satisfiability_problem#Weighted_MAX-SAT
随机算法在近似算法中的应用
本节问题可能利用条件期望去随机化,将随机化算法转化为近似算法,也可以利用LP+rounding+ 条件期望去随机化

1. MAX-SAT定义



SAT,NP问题是否存在一系列变量的取值为真或假使得给定句子为真,SAT不身是不可判定的问题。

MAX-SAT,输入是一系列析取表达式,存在n个变量,m个子句,每一个子句合取表达式
输出是最大化可以取真的子句的数量,n个变量可以为真,也可以为负。

2. MAX-SAT 求解

希望作一个近似算法,求出的值AAA尽可能的接近最优的最大值OPTOPTOPT,使其比值A/optA/optA/opt尽可能为1。

2.1 条件期望去随机化近似算法

先设计一个不太差的随机算法,然后再去随机化 :设计0-1变量XiX_iXi​,将X1,…,XnX_1,\dots,X_nX1​,…,Xn​随机赋值。,求出期望能满足的子句个数E(Y)E(Y)E(Y)

Yi对应子句Ci,如果子句Ci为真,则Yi=1Y_i对应子句C_i,如果子句C_i为真,则Y_i=1Yi​对应子句Ci​,如果子句Ci​为真,则Yi​=1

例如表达式

而每个子句期望或者说为真的概率与子句中变量有关,变量个数越多,则对应的概率越高。

因此对于3SATR,,则对应的E(Y)/opt可以达到一个7/8的近似。

对于混合的SAT通过不同的权重都可以获得一个比较高的E(Y)
接下来可以通过去随机化获得一个较好的近似算法

2.2 接下来考虑另外一种算法LP+rounding

思路转化:

2.2.1 MAX-SAT转化为ILP。

MAX-SAT 转化为ILP,两者是等价的,即整数线性规划的解yILPopty_{ILP}^{opt}yILPopt​是精确解,这里没有采用近似,但是不易求解,因此松弛为线性规划 ,线性规划的解是近似的,且有yLPopt>yILPopty_{LP}^{opt}>y_{ILP}^{opt}yLPopt​>yILPopt​

将不同的变量用X1…,XnX_1\dots,X_nX1​…,Xn​表示,不同的子句对应一个变量yi{i=1,2,…,m}y_i\{i=1,2,\dots,m\}yi​{i=1,2,…,m}
如何将每一个子句用变量形式化表达?(1)代数化方法

若将y1y_1y1​表示成这样的方式,约束条件不是线性规划了。
只要析取表达式中变量只要有一个是1 就是1,当所有变量为0 时,y为零,因此与以下等价


这就是如何将MAX-SAT 转化为等价的整数线性规划,

2.2.2 ILP转化为RLP。

将整数线性规划松弛为线性规划

椭球法和内敛法可以多项式时间复杂度内求解Relaxiation LP
由于松弛后可行域变大因此yLPopt>yILPopty_{LP}^{opt}>y_{ILP}^{opt}yLPopt​>yILPopt​.我们希望yLPopty_{LP}^{opt}yLPopt​能否大于αyLPopt\alpha y_{LP}^{opt}αyLPopt​,这样的话可以得到一个α\alphaα近似(比值)

2.3 ·LP->LP+Rounding

用x1∗,…,xn∗,y1∗,…,yn∗,x_1^*,\dots,x_n^*,y_1^*,\dots,y_n^*,x1∗​,…,xn∗​,y1∗​,…,yn∗​,表示松弛后的LP的解yLPy_{LP}yLP​,然后利用Rounding (随机舍入)方法由x1∗,…,xn∗,y1∗,…,yn∗,x_1^*,\dots,x_n^*,y_1^*,\dots,y_n^*,x1∗​,…,xn∗​,y1∗​,…,yn∗​,出发得到一个最终的近似解x1,…,xn,y1,…,ynx_1,\dots,x_n,y_1,\dots,y_nx1​,…,xn​,y1​,…,yn​,且有y≥?yILPopty\ge?y_{ILP}{opt}y≥?yILP​opt

接下来求Rounding 后的解:设独立的随机变量XiX_iXi​,表示子句CiC_iCi​中的合取变量
目前已经求出了LP的解x1∗,…,xn∗x_1^*,\dots,x_n^*x1∗​,…,xn∗​由于其属于0-1 之间,因此可以将其看作是XiX_iXi​取不同值的概率值,那么XiX_iXi​最终确定下来的值作为最后的解。具体来说,

将不同的子句用取值0-1 之间的随机变量表示,即每一个子句的取值都有0-1


那么Y=∑YiY=\sum Y_iY=∑Yi​即为rounding 后的最终的近似解,以下这里求出它的期望的界。

2.3.1 求期望的界

怎样将其和y1∗y_1^*y1∗​联系起来呢,由均值不等式及约束条件

一般的对于有k个变量的CiC_iCi​子句有下列式子成立

即我们将每一个yiy_iyi​与yi∗y_i^*yi∗​联系起来了

它是关于yi∗y_i^*yi∗​为变量的函数,其中这里的k是常数

可以令1−(1−yi∗k)k=f(yi∗)1-(1-\frac{y_i^*}{k})^k=f(y_i^*)1−(1−kyi∗​​)k=f(yi∗​)
f(yi∗)yi∗\frac{f(y_i^*)}{y_i*}yi​∗f(yi∗​)​求导,当yi∗=1y_i^*=1yi∗​=1有极小值,并利用放缩求得
f(yi∗)≥(1−(1−1k)k)∗yi∗≥(1−1e)∗yi∗f(y_i^*)\ge(1-(1-\frac{1}{k})^k)*y_i^*\ge(1-\frac{1}{e})*y_i^*f(yi∗​)≥(1−(1−k1​)k)∗yi∗​≥(1−e1​)∗yi∗​

之所以变成这样的形式,是为了求出先前提到的α\alphaα

即做到0.63的近似,(LP是松弛后的结果,实际中比它大,因此这个界只会大于0.63)
在实际中当每个CiC_iCi​出现的变量不一致时,实际中,对于每个XiX_iXi​根据其出现次数作为权重进行概率赋值,而不是1/2,比如X_i 的补出现的次数比X_i出现的多,则PXi=1<12P{X_i=1}<\frac{1}{2}PXi​=1<21​

上面近似算法利用LP+ rounding (随机舍入)求得一个不低于0.63的期望值,

因此可以通过条件期望去随机化,
求得一个Y=f(x1,x2,…,xn)≥E(Y)≥0.63optY=f(x_1,x_2,\dots,x_n)\ge E(Y)\ge0.63optY=f(x1​,x2​,…,xn​)≥E(Y)≥0.63opt
这里用到了条件期望去随机化算法的原理,可以参考之前的介绍

主要思路:还是逐个固定不同的变量,然后放缩

0.63opt≤E(Y)=Pr(X1=1)E(Y∣X1=1)+Pr(X1=0)E(Y∣X1=0)=x1∗ϕ1,1+(1−x1∗)ϕ1,0≤max⁡(ϕ1,1,ϕ1,0)<⋯<⋯<E(Y∣X1=x1,X2=x2,…,Xn=xn)=f(x1,x2,…,xn),0.63opt \leq E(Y)=Pr(X_1=1)E(Y|X_1=1)+Pr(X_1=0)E(Y|X_1=0)=x_1^*\phi_{1,1}+(1-x_1^*)\phi_{1,0} \le \max(\phi_{1,1},\phi_{1,0})<\dots<\dots<E(Y|X_1=x_1,X_2=x_2,\dots,X_n=x_n)=f(x_1,x_2,\dots,x_n),0.63opt≤E(Y)=Pr(X1​=1)E(Y∣X1​=1)+Pr(X1​=0)E(Y∣X1​=0)=x1∗​ϕ1,1​+(1−x1∗​)ϕ1,0​≤max(ϕ1,1​,ϕ1,0​)<⋯<⋯<E(Y∣X1​=x1​,X2​=x2​,…,Xn​=xn​)=f(x1​,x2​,…,xn​),
其中的E(Y∣X1=x1,X2=x2,…,Xi=xi,Xi+1,…,Xn)的下界求法用上面的Rounding,即类似于E(Y)下界的求解E(Y|X_1=x_1,X_2=x_2,\dots,X_i=x_i,X_{i+1},\dots,X_{n})的下界求法用上面的Rounding ,即类似于E(Y)下界 的求解E(Y∣X1​=x1​,X2​=x2​,…,Xi​=xi​,Xi+1​,…,Xn​)的下界求法用上面的Rounding,即类似于E(Y)下界的求解

高级算法设计分析-- Max-SAT(随机算法近似算法)相关推荐

  1. 红包随机算法微信群红包随机算法

    文章目录 1.前言 2.参考微信群红包算法 3.一个可用的随机算法 参考文献 1.前言 因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开.为活跃年会氛围,年会直播间会有抢红包环 ...

  2. (转)红包随机算法微信群红包随机算法

    通过这篇文章算是把微信群红包的算法弄明白了 1.前言 因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开.为活跃年会氛围,年会直播间会有抢红包环节.因产品要求,红包金额要随机生成 ...

  3. labuladong的算法小抄pdf_随机算法:水塘抽样算法

    读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...

  4. java random算法_负载均衡--随机算法(Random)

    随机算法是指:从服务器列表中,随机选取一台服务器进行访问.由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果. 一.算法描述 假 ...

  5. js实现kmp算法_搜索算法 与 随机算法 (JS实现)

    搜索算法 我们会发现 之前学习的 数据结构与算法 中的 BinarySearchTree 类的 search 方法(二叉搜索树中 )以及 LinkedList 类的 indexOf 方法( 链表中 ) ...

  6. 伪随机算法c语言,伪随机算法实现各语言实现示例。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 无聊,又研究了一下几种排序算法,在测速的时候,发现自己忘记了一个重要的问题,在某天看到有人在帖吧提到生成随机数只计数到32768就停止了,顺手查了一下C库 ...

  7. 数值随机化算法和舍伍德随机算法

    开篇 我们之前讨论过的动态规划算法.回溯法.分支限界算法.二分法等等都是每个计算步骤确定的算法,而这次要讨论的是随机化算法,允许算法在执行过程中随机地选择下一个计算步骤. 随机化算法不一定是最优的,甚 ...

  8. c语言微信抢红包的随机算法,微信红包的随机算法是怎样实现的?

    单身时我把气球装上水模拟成Dcup的样子,有了女朋友后她脸红红的问我是否对此熟练,我说"精通".捷径我们需要走捷径,因为我们的生命是有限的.我们一生能做的事情不多,越是精英越会觉得 ...

  9. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

最新文章

  1. android 自定义 listView
  2. JDBC与mysql同为CST时区导致数据库时间和客户端时间差13或者14小时
  3. 【FI】SAP ODN简介
  4. Pots POJ - 3414(bfs)
  5. Request/Response【学习笔记03】
  6. Linux基础(5)--Linux常用命令表
  7. html checkbox 多选 根据数据库来显示选取和未选取,前端框架(2)DIV多选复选框框的封装和MySql数据库存取...
  8. .net2005底层类
  9. 列出场景对象Lightmap属性
  10. QQ好友不在线也可发送自定义表情(转)
  11. 分享一个下载系统镜像的网站
  12. Qt设计精美的登录注册界面(包含SQLite数据库应用)
  13. 高德地图获取坐标距离_高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码
  14. CCF推荐|中科院2区生物信息与计算机类SCI征稿~
  15. 国产数据库mysql_国产的数据库都有哪些?
  16. Social LSTM:Human Trajectory Prediction in Crowded Spaces 翻译
  17. BLHeli无刷电调 后续
  18. 如何配置TeXstudio+SumatraPDF+Texlive
  19. FontForge:免费字库设计软件
  20. 【转】Excel中的Vlookup等函数用法

热门文章

  1. Winwods下Redis启动 错误1067导致进程意外终止的解决方法
  2. html css img标签鼠标事件,HTML+CSS入门 img标签学习
  3. 互联网让信息泛滥了吗?
  4. mysql 主从同步_Mysql主从同步的实现原理
  5. 美团点评 TiDB 深度实践之旅
  6. 数据标注行业前景与发展方向浅析【转自 彭瀚 的脉脉专栏】
  7. 老公是用来欺负的....
  8. 美国知识产权局正式批准了 Verasity 的POV专利
  9. 用eclipse打war包
  10. 浅谈等保2.0标准下医院信息化安全问题研究及对策