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

组合优化问题常用模型

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

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=1jkxi,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<jn)xixj=ij,(0<i<jn)

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=bb=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 a1x1++anxnc,其中 ⋈ \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 xyc的形式
  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} mincx s.t. {Ax=bx0

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于2-opt的算法是一种常用求解旅行商问题(Traveling Salesman Problem,TSP)的启发式算法。下面是基本的2-opt算法求解TSP问题的步骤: 1. 初始化: - 随机选择一个初始路径作为旅行商的遍历顺序。 2. 2-opt操作: - 对当前路径中的每一对边进行检查,判断是否存在更短的路径。 - 对于路径上的每一对边 (i, j) 和 (k, l),计算两种交换方式后的路径长度: - 交换(i, j)和(k, l)之间的边得到新路径。 - 交换(i, k)和(j, l)之间的边得到新路径。 - 如果存在交换可以使路径变短,则选择变短幅度最大的交换方式,并更新路径。 3. 终止条件: - 如果经过一次完整的2-opt操作后,路径没有变化或者变化很小,则认为找到了近似最优解,终止算法。 - 否则,返回步骤2继续进行2-opt操作。 通过不断地进行2-opt操作,可以不断优化路径,使其逐渐接近TSP问题的最优解。2-opt算法的时间复杂度较低,但并不能保证找到全局最优解,只能得到一个较好的近似解。为了进一步提高结果质量,可以使用更复杂的启发式算法、局部搜索策略等来改进求解过程。 需要注意的是,2-opt算法适用于小规模的TSP问题,对于大规模问题,可能需要结合其他算法或者优化技术来求解。此外,对于特定的TSP问题,还可以根据问题特点设计相应的启发式规则和策略,以提高求解效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值