组合优化问题常用模型

组合优化问题常常难以求解,我们可以把这些转化为目前已经有成熟求解器的模型。

1. 可满足性问题(Satisfiability, SAT)

上一节已经讲过,SAT 是一个 NPC 问题,很多NP难的组合优化问题都可以归约到SAT。用SAT问题求解另一问题的过程,称作SAT编码。下面给出k-图着色的判定问题归约到SAT的编码方式。

例1. k-图着色问题(k-coloring problem):判定一个无向图 G = ( V , E ) G=(V,E) G=(V,E) 是否可以由 k 种不同的颜色对 V 中所有的顶点着色,其中 E 中任意一条边的两个顶点不能着同一种颜色。判定是否存在一种着色方案满足要求。

编码方式:

  1. 定义变量 x i , j x_{i,j} xi,j​ 表示对G中第i个顶点着第j种颜色,共有 k|V| 个变量。
  2. 为了保证图中每个顶点都着色,定义子句:
    c i = ⋁ 1 ≤ j ≤ k x i , j c_{i}=\bigvee_{1 \leq j \leq k} x_{i, j} ci​=1≤j≤k⋁​xi,j​
    表明每个顶点至少有一种颜色,这样的子句共有 |V| 条。
  3. 为了保证图中任意两条边的颜色不同,定义如下子句:
    c i , j , k ′ = ¬ x i , k ∨ ¬ x j , k c_{i, j, k}^{\prime}=\neg x_{i, k} \vee \neg x_{j, k} ci,j,k′​=¬xi,k​∨¬xj,k​
    其中i,j表示E中的边,k表示某种着色。这样的子句共有k|E|条。

这样就得到了一个k-图着色问题可行的SAT编码。

上面给出的编码简单直接,但并不是最好的编码。但我们可以由此得出编码SAT问题的思路:

 1. 考虑约束变量的定义和个数2. 考虑问题的条件可以用什么子句表达3. 考虑问题的对称性

目前的SAT求解器有 MiniSAT(主流), Glucose, Maple, ReasonLS等。

2. SAT的变形(MaxSAT, partial MaxSAT, weighted partial MaxSAT)

MaxSAT 问题是SAT问题的变形。

MaxSAT: 给定一个CNF公式,找到一个完备赋值,满足给定的 CNF 公式 F 中最多的子句。

当F中所有的子句都可以被满足的时候,MaxSAT就等同于SAT问题。

partial MaxSAT: 假如将子句分为硬字句和软子句两部分,partial MaxSAT
问题需要尽可能的满足更多的软子句并满足所有的硬字句。

例2. 找图G=(V,E)中的最大团,可以按照如下的策略将其编码成partial MaxSAT 问题:

  1. 对每一个G中的顶点定义一个变量 x i x_i xi​,表示该顶点是否在团中。共有 |V| 个这样的变量。
  2. 定义一条硬子句,满足图中任意一堆不相邻的顶点,不能都在团中:
    c i , j = ¬ x i ∨ ¬ x j c_{i, j}=\neg x_{i} \vee \neg x_{j} ci,j​=¬xi​∨¬xj​
  3. 定义一条软子句,使得一个团中有尽可能多的顶点:
    c i ′ = x i c_{i}^{\prime}=x_{i} ci′​=xi​
    此时如果得到一个最优解,就得到了最大团。

weighted partial MaxSAT: 为 partial MaxSAT 问题中的每一条边赋予一个权值,求解目标转化为满足所有的硬子句,并且使满足的软子句的权值之和最大。

经过以上的描述,可以看出SAT问题和其变形问题都可以作为一个通用求解器。
但是,SAT 的表述能力限制于命题逻辑。
还有表述能力更强的 CSP 和SMT 问题和相应的求解器,分别可以用来求解约束满足问题和一阶逻辑相关的问题。

3. 约束满足问题(CSP)

Constraint Satisfication Problem, CSP: 约束满足问题定义为一组对象,这些对象需要满足一定的条件约束。CSP 一般描述为三元对(X,D,C),包含变量集合 X = { X 1 , X 2 , ⋯ , X n } X=\left\{X_{1}, X_{2}, \cdots, X_{n}\right\} X={X1​,X2​,⋯,Xn​},变量的定义域 D = { D 1 , D 2 , ⋯ , D n } D=\left\{D_{1}, D_{2}, \cdots, D_{n}\right\} D={D1​,D2​,⋯,Dn​} ,和一个约束集合 C = { C 1 , C 2 , ⋯ , C n } \mathrm{C}=\left\{\mathrm{C}_{1}, \mathrm{C}_{2}, \cdots, \mathrm{C}_{n}\right\} C={C1​,C2​,⋯,Cn​}。
其中每个变量 X i X_i Xi​ 可以在非空的定义域Di中取出。限制条件Cj依序对应一对 <tj,Rj>,tj是n维变量,Rj是从定义域Dj映射到子集合上的n维关系。
变量有对应的评估函数f,从变量映射到值域。如果 f ( x 1 ) , … , f ( x n ) ∈ R j f(x_1),\ldots,f(x_n) \in R_j f(x1​),…,f(xn​)∈Rj​, 那么f满足 < ( t 1 , … , t n ) , R j > <(t_1,\ldots,t_n),R_j> <(t1​,…,tn​),Rj​>的条件限制。

对于CSP问题,我们称赋值是无矛盾的当且仅当一个评估不违反任何的条件限制,称赋值是完备的当且仅当一个评估包含了所有变量。一个赋值是无矛盾且完备的,那么这个评估就是CSP问题的一个解。

例3. 4皇后问题:判定是否可以将皇后互无冲突地放在4*4的棋盘上。无冲突指任何两个皇后不能在同一对角线或者行列上。

首先确定变量的个数和取值,再确定变量之间的关系。
  1. 变量集合 X = { x 1 , x 2 , x 3 , x 4 } X=\left\{x_{1}, x_{2},x_3 , x_{4}\right\} X={x1​,x2​,x3​,x4​},xi表示第i列的皇后所在的行。
  2. xi的取值范围 Di={1,2,3,4}
  3. 根据任何两个皇后不在同一行列和同一对角线的约束:
    x i ≠ x j , ( 0 < i < j ≤ n ) ∣ x i − x j ∣ ≠ ∣ i − j ∣ , ( 0 < i < j ≤ n ) x_i\neq x_j, (0<i<j\le n)\\ |x_i-x_j|\neq |i-j|, (0<i<j\le n) xi​​=xj​,(0<i<j≤n)∣xi​−xj​∣​=∣i−j∣,(0<i<j≤n)

x1和x2的约束条件可写为:<(x1,x2),{(1,3),(1,4),(2,4),(3,1),(4,1)}>

CSP 可以比 SAT 更紧凑地表达多取值的约束问题。

4. 多理论下的可满足性问题(SMT)

Satisfiability Modulo Theories,SMT: 判定一阶逻辑公式在组合背景理论下的可满足问题,比SAT更强。

一节逻辑可以强力描述现实世界中的绝大多数问题,求解能力强于命题逻辑。

一般SMT求解器可以处理的理论包括:

  1. 未解释函数(Uninterpreted Function,UF)主要包括一些没有经过解释的函数符号和它们的参数。
    例4. a = b ∧ b = f ( c ) ∧ ¬ ( g ( a ) = g ( f ( c ) ) ) a=b \wedge b=f(c) \wedge \neg(g(a)=g(f(c))) a=b∧b=f(c)∧¬(g(a)=g(f(c)))表示了一个由带符号的未解释函数组成的公式
  2. 线性实数演算(Linear real arithmetic,LRA)和线性整数演算(Linear Integer arithmetic,LIA)可以表示为 a 1 x 1 + ⋯ + a n x n ⋈ c a_{1} x_{1}+\cdots+a_{n} x_{n} \bowtie c a1​x1​+⋯+an​xn​⋈c,其中 ⋈ \bowtie ⋈可以表示 = 、 ≠ 、 ⩽ 、 ⩾ =、 \neq 、 \leqslant 、 \geqslant =、​=、⩽、⩾等符号。
  3. 非线性实数演算(non-liner real arithmetic,NRA)和非线性整数演算(non-linear integer arithmetic,NIA)的公式则可以表示任意的数学表达式
  4. 实数差分逻辑(difference logic over the reals, RDL)和整数差分逻辑(difference logic
    over the integers, IDL)一般可以表示成 x − y ⋈ c x-y \bowtie c x−y⋈c的形式
  5. 数组和位向量。用于处理计算机中的数据结构

线性规划与整数线性规划

运筹学中的通用模型(Linear Programming, LP), 一般形式为
min ⁡ c ′ x s.t.  { A x = b x ≥ 0 \begin{aligned} &\min c^{\prime} x\\ &\text { s.t. }\left\{\begin{array}{c} A x=b \\ x \geq 0 \end{array}\right. \end{aligned} ​minc′x s.t. {Ax=bx≥0​​

SAT求解技术简介

完备性(complete)算法:对于给定的一组CNF公式,一定能够证明其可满足性。一般采用回溯+推理
不完备(incomplete)算法:仅证明一组公式是可满足的,不能证明一个公式是不可满足的。一般采用局部搜索

归结原理(Resolution rule): 如果一个CNF公式 F 包含两个子句 x ∨ α x \vee \alpha x∨α 和 ¬ x ∨ β \neg x \vee \beta ¬x∨β,那么公式 F 可以推出 α ∨ β \alpha \vee \beta α∨β。
归结原理是一个充分且完备的规则。

完备的SAT求解算法的主要框架是回溯粗略,比较有代表性的算法有DPLL和CDCL

2-2 组合优化问题-常用模型与通用求解器相关推荐

  1. 优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

    优化| 手把手教你学会杉数求解器COPT的安装.配置与测试 前言 线性规划(LP)测试榜单--单纯形法: Benchmark of Simplex LP solvers 线性规划(LP)测试榜单--内 ...

  2. 组合优化- 均值方差、最大夏普、风险平价模型

    组合优化- 均值方差.最大夏普.风险平价模型-基于matlab的实现 理论性质的大家参考网上搜索吧: 关键词:均值方差模型的实现 风险平价模型的实现 组合优化matlab 以上模型实现本质是 二次规划 ...

  3. 【ML4CO论文精读】用于组合优化的机器学习:方法论之旅(Yoshua Bengio, 2021)

    Machine learning for combinatorial optimization: A methodological tour d'horizon 论文:Bengio Y, Lodi A ...

  4. 【ML4CO论文精读】基于深度强化学习的组合优化问题研究进展(李凯文, 2020)

    基于深度强化学习的组合优化研究进展 本人研究方向(博士期间):多目标组合优化与决策研究--致力于多约束多目标多任务组合优化算法和多目标决策系统的研究与开发,以及多目标优化技术在一些工程实践中的应用. ...

  5. 基于深度强化学习的组合优化方法在工业应用中的实践

    <统筹方法平话>中有一个例子曾被收录到语文课本中,讲"烧水泡茶"有五道工序:1.烧开水,2.洗茶壶,3.洗茶杯,4.拿茶叶,5.泡茶,其中前四道工序是泡茶的前提,且各道 ...

  6. NeurIPS 2022 | Stable Diffusion采样速度翻倍!清华提出扩散模型高效求解器

    ©作者 | 机器之心编辑部 来源 | 机器之心 清华大学计算机系朱军教授带领的 TSAIL 团队提出 DPM-Solver(NeurIPS 2022 Oral,约前 1.7%)和 DPM-Solver ...

  7. 【Simulink专题】Simulink模型设置(一):求解器、数据导入/导出、数学和数据类型的设置

    前言 Simulink中模型设置是关乎着整个模型的运行模式以及代码生成样式,不同的设置关乎着不同的结果,今天就给大家讲解下作者对整个模型设置的理解,有疑问的地方还需要大家多多指出,谢谢 使用版本:MA ...

  8. 基于组合优化的出租车订单调度模型

    出租车预订应用程序在世界各地非常流行,因为它们为用户提供了快速响应时间等便利.出租车预订应用程序的关键组件是调度系统,该系统旨在提供司机和乘客之间的最佳匹配.传统的调度系统按顺序向乘客调度出租车,目的 ...

  9. 滴滴KDD2017论文:基于组合优化的出租车分单模型 By 机器之心2017年8月14日 10:29 数据挖掘顶会 KDD 2017 已经开幕,国内有众多来自产业界的论文被 KDD 2017 接收。

    滴滴KDD2017论文:基于组合优化的出租车分单模型 By 机器之心2017年8月14日 10:29 数据挖掘顶会 KDD 2017 已经开幕,国内有众多来自产业界的论文被 KDD 2017 接收.本 ...

最新文章

  1. 驳《五大受损 全面解析PHP的糟糕设计》——为PHP正言
  2. (转)Android 常用 adb 命令总结
  3. hive ALLOW_UNQUOTED_CONTROL_CHARS
  4. ASP.NET MVC编程——控制器
  5. 这可能是我见过最详细的快速排序!
  6. 【WebRTC---源码篇】(一)全局初始化
  7. 使用搜索栏过滤collectionView(按照首字母)
  8. android fragment 管理器,Android Fragment 與 Fragment管理器
  9. hibernate_Restrictions用法 .
  10. shell脚本使用getopts自定义传入参数选项
  11. AS100 和AS90 2个不同自治区域如何通信
  12. 小程序模仿通讯录制作
  13. Exploit-exercises
  14. jquery动画顺序执行_深入理解jquery自定义动画animate()
  15. mysql查出繁体文字_Mysql获取数据出现繁体显示为乱码的问题
  16. 区块链版《绝地求生》游戏—Blast Royale攻略
  17. 世上本没有坏人,实际上也无所谓坏人与好人
  18. SAP ABAP CDS view Association 引入的缘由
  19. JAVA练习:利用JAVA基本语句实现打印日历
  20. 【计算机科学基础】计算理论基础

热门文章

  1. 阿尔法元秒杀阿法狗,人工智能时代开启了吗
  2. springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统
  3. 2022.9.19 自学计算机
  4. otter异常——zookeeper重新初始化
  5. 去掉浏览器页面广告和弹窗
  6. matlab实现图片锐化处理
  7. python识图找图_python识别图片
  8. ARM发布全新16纳米A72架构
  9. FileRun多功能网盘的搭建
  10. HTML5历史状态管理history API-pushState/replaceState与popstate事件