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

博客介绍了组合优化问题常用模型,包括可满足性问题(SAT)及其变形、约束满足问题(CSP)、多理论下的可满足性问题(SMT),还提及线性规划与整数线性规划。此外,对SAT求解技术进行了简介,如完备性和不完备算法、归结原理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组合优化问题常用模型

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

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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值