【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing

文章目录

    • 相关文献
    • 从一个例子出发
    • 图形化表示(Graphical Representations)

作者:小猪快跑

基础数学&计算数学,从事优化领域5年+,主要研究方向:MIP求解器、整数规划、随机规划、智能优化算法

在过去的几十年里,出现了两种主要的约束处理方案——一种基于 conditioning 或者 search,,另一种基于 inference 或者 derivation.。约束满足的 search 采用深度优先回溯的形式,而 inference 则通过变量消除和树聚类算法或有界局部一致性强制来执行。与人类解决问题的技术相比,conditioning 类似于猜测(一个变量的值),或者通过假设进行推理。然后将问题划分为子问题,以变量子集的实例化为条件,每个子问题都应得到解决。另一方面,inference 对应于对手头问题的重新解释或演绎。基于 inference 的算法派生并记录新信息,生成等价的问题表示,从而更容易地解决问题。

如有错误,欢迎指正。如有更好的算法,也欢迎交流!!!——@小猪快跑

相关文献

  • [Handbook of Constraint Programming](Handbook.dvi (gla.ac.uk))

从一个例子出发

我们先看一个简单的约束满足问题(CSP),假设约束如下:

max ⁡   A + B + C + D + E s . t . A + 2 B + 3 C ⩽ 5 A + 2 E + 3 F ⩽ 4 C + 2 D + 3 E ⩽ 3 A + 2 C + 3 E ⩽ 2 A , B , C , D , E ∈ N \begin{aligned} \max\ & A+B+C+D+E \\ s.t. & A + 2B + 3C \leqslant 5 \\ & A + 2E + 3F \leqslant 4 \\ & C + 2D + 3E\leqslant 3 \\ & A + 2C + 3E \leqslant 2 \\ & A,B,C,D,E \in \mathbb{N} \end{aligned} max s.t.A+B+C+D+EA+2B+3C5A+2E+3F4C+2D+3E3A+2C+3E2A,B,C,D,EN

我们把所有变量画在图上,然后对于每个约束,我们画一个圈,刚好包含其变量,如图(a)所示,我们一般称之为hypergraph

【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing_第1张图片

通过节点表示变量,并将弧与驻留在同一约束中的任意两个节点关联起来,如图(b)所示,我们一般称之为Primal-constraint graph (二元约束图的泛化)。
【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing_第2张图片

我们来看一下对偶问题:
min ⁡ 5 W + 4 X + 3 Y + 2 Z { W + X + Z ⩾ 1 2 W ⩾ 1 3 W + Y + 2 Z ⩾ 1 2 Y ⩾ 1 2 X + 3 Y + 3 Z ⩾ 1 3 X ⩾ 1 W , X , Y , Z ∈ N \begin{aligned} \min 5W+4X+3Y+2Z \\ \left\{ %在equation环境下使用,用\left\{命令添加左大括号,用\right.以打点.结束 \begin{gathered} W& +& X& & & +& Z& \geqslant 1 \\ 2W& & & & & & & \geqslant 1 \\ 3W& & & +& Y& +& 2Z& \geqslant 1 \\ & & & & 2Y& & & \geqslant 1 \\ & & 2X& +& 3Y& +& 3Z& \geqslant 1 \\ & & 3X& & & & & \geqslant 1 \\ \end{gathered} \right.\\ W,X,Y,Z \in \mathbb{N} \\ \end{aligned} min5W+4X+3Y+2Z W2W3W+X2X3X++Y2Y3Y+++Z2Z3Z111111W,X,Y,ZN

我们知道其实 W W W 对应原问题第一个约束: A + 2 B + 3 C ⩽ 5 A + 2B + 3C \leqslant 5 A+2B+3C5,那我们重新定义一下符号,令 W = ( A B C ) W=(ABC) W=(ABC)
min ⁡ 5 ( A B C ) + 4 ( A E F ) + 3 ( C D E ) + 2 ( A C E ) { ( A B C ) + ( A E F ) + ( A C E ) ⩾ 1 2 ( A B C ) ⩾ 1 3 ( A B C ) + ( C D E ) + 2 ( A C E ) ⩾ 1 2 ( C D E ) ⩾ 1 2 ( A E F ) + 3 ( C D E ) + 3 ( A C E ) ⩾ 1 3 ( A E F ) ⩾ 1 ( A B C ) , ( A E F ) , ( C D E ) , ( A C E ) ∈ N \begin{aligned} \min 5(ABC)+4(AEF)+3(CDE)+2(ACE) \\ \left\{ %在equation环境下使用,用\left\{命令添加左大括号,用\right.以打点.结束 \begin{gathered} (ABC)& +& (AEF)& & & +& (ACE) &\geqslant 1 \\ 2(ABC)& & & & & & &\geqslant 1 \\ 3(ABC)& & & +& (CDE)& +& 2(ACE) &\geqslant 1 \\ & & & & 2(CDE)& & &\geqslant 1 \\ & & 2(AEF)& +& 3(CDE)& +& 3(ACE) &\geqslant 1 \\ & & 3(AEF)& & & & &\geqslant 1 \\ \end{gathered} \right.\\ (ABC),(AEF),(CDE),(ACE) \in \mathbb{N} \\ \end{aligned} min5(ABC)+4(AEF)+3(CDE)+2(ACE) (ABC)2(ABC)3(ABC)+(AEF)2(AEF)3(AEF)++(CDE)2(CDE)3(CDE)+++(ACE)2(ACE)3(ACE)111111(ABC),(AEF),(CDE),(ACE)N
我们又知道,对偶问题不等号右边的系数其实来自于原问题的目标函数,第一个约束对应原问题目标函数里 A A A 的系数,我们记为 A c o e f A_{coef} Acoef
min ⁡ 5 ( A B C ) + 4 ( A E F ) + 3 ( C D E ) + 2 ( A C E ) { ( A B C ) + ( A E F ) + ( A C E ) ⩾ A c o e f 2 ( A B C ) ⩾ B c o e f 3 ( A B C ) + ( C D E ) + 2 ( A C E ) ⩾ C c o e f 2 ( C D E ) ⩾ D c o e f 2 ( A E F ) + 3 ( C D E ) + 3 ( A C E ) ⩾ E c o e f 3 ( A E F ) ⩾ F c o e f ( A B C ) , ( A E F ) , ( C D E ) , ( A C E ) ∈ N \begin{aligned} \min 5(ABC)+4(AEF)+3(CDE)+2(ACE) \\ \left\{ %在equation环境下使用,用\left\{命令添加左大括号,用\right.以打点.结束 \begin{gathered} (ABC)& +& (AEF)& & & +& (ACE) &\geqslant A_{coef} \\ 2(ABC)& & & & & & &\geqslant B_{coef} \\ 3(ABC)& & & +& (CDE)& +& 2(ACE) &\geqslant C_{coef} \\ & & & & 2(CDE)& & &\geqslant D_{coef} \\ & & 2(AEF)& +& 3(CDE)& +& 3(ACE) &\geqslant E_{coef} \\ & & 3(AEF)& & & & &\geqslant F_{coef} \\ \end{gathered} \right.\\ (ABC),(AEF),(CDE),(ACE) \in \mathbb{N} \\ \end{aligned} min5(ABC)+4(AEF)+3(CDE)+2(ACE) (ABC)2(ABC)3(ABC)+(AEF)2(AEF)3(AEF)++(CDE)2(CDE)3(CDE)+++(ACE)2(ACE)3(ACE)AcoefBcoefCcoefDcoefEcoefFcoef(ABC),(AEF),(CDE),(ACE)N
于是我们会发现一个现象,比如第一个约束:
( A B C ) + ( A E F ) + ( A C E ) ⩾ A c o f f (A) (ABC)+(AEF)+(ACE)\geqslant A_{coff} \tag{A} (ABC)+(AEF)+(ACE)Acoff(A)
每个变量名都有A,那么他们的关系我们就记为A,以此类推,我们画图(c),一般我们称为dual-constraint-graph
【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing_第3张图片

我们看到图©中 ( A E F ) (AEF) (AEF) ( A B C ) (ABC) (ABC) 之间的弧线是多余的,因为变量A也沿着备选路径 ( A B C ) − A C − ( A C E ) − A E − ( A E F ) (ABC) - AC - (ACE) - AE - (AEF) (ABC)AC(ACE)AE(AEF) 出现。因此,即使去掉了 ( A E F ) (AEF) (AEF) ( A B C ) (ABC) (ABC) 之间的约束,这些约束也保证了对 A A A 的一致赋值。同样,标记为 E E E C C C 的弧线也是冗余的,删除它们产生图(d)。

【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing_第4张图片

最后我们总结一下: (a)Hyper, (b)Primal, ©Dual and (d)Join-tree constraint graphs of a CSP.

【0基础运筹学】约束满足问题(CSP)的可处理结构 Tractable Structures for Constraint Satisfaction Problems——2023.9 持续更新ing_第5张图片

那么小伙伴肯定要问了,我们折腾了一大圈画了这个图到底有什么用呢?

我们其实很容易发现根节点是 A C E ACE ACE ,对应的约束是 A + 2 C + 3 E ⩽ 2 A + 2C + 3E \leqslant 2 A+2C+3E2 ,从这个约束中能推出 R A C E = { ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 2 , 0 , 0 ) , ( 0 , 1 , 0 ) } R_{ACE}=\{(0,0,0),(1,0,0),(2,0,0),(0,1,0)\} RACE={(0,0,0),(1,0,0),(2,0,0),(0,1,0)}

A C E
0 0 0
1 0 0
2 0 0
0 1 0

这时候我们发现 E = 0 E=0 E=0 ,于是可以把变量 E E E fixed。我们再看 A C E ACE ACE 的子节点,比如说 C D E CDE CDE ,因为 E = 0 E=0 E=0 ,所以其实 C D E CDE CDE 已经变成 C D CD CD 了。 R C D = ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) , ( 3 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) R_{CD}={(0,0),(1,0),(2,0),(3,0),(0,1),(1,1)} RCD=(0,0),(1,0),(2,0),(3,0),(0,1),(1,1) 。因为 C D CD CD A C AC AC 之间的关系只有 C C C ,所以我们只关心两种关系 C C C 取交集。于是 R C D = { ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R_{CD}=\{(0,0),(1,0),(0,1),(1,1)\} RCD={(0,0),(1,0),(0,1),(1,1)} 。其实我们会发现 R C D R_{CD} RCD 也是很特殊的关系,可以拆分成 R C = { 0 , 1 } , R D = { 0 , 1 } R_C=\{0,1\},R_D=\{0,1\} RC={0,1},RD={0,1}

C D
0 0
1 0
0 1
1 1

同样的, A E F AEF AEF 已经变成 A F AF AF 了, R A F = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) , ( 3 , 0 ) , ( 4 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R_{AF}=\{(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1)\} RAF={(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1)} 。因为 A F AF AF A C AC AC 之间的关系只有 A A A ,所以我们只关心两种关系 A A A 取交集。于是 R A F = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R_{AF}=\{(0,0),(1,0),(2,0),(0,1),(1,1)\} RAF={(0,0),(1,0),(2,0),(0,1),(1,1)}

A F
0 0
1 0
2 0
0 1
1 1

同样的, R A B C = { ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 2 , 0 , 0 ) , ( 3 , 0 , 0 ) , ( 4 , 0 , 0 ) , ( 5 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 2 , 1 , 0 ) , ( 3 , 1 , 0 ) , ( 0 , 2 , 0 ) , ( 1 , 2 , 0 ) , ( 0 , 0 , 1 ) , ( 1 , 0 , 1 ) , ( 2 , 0 , 1 ) , ( 0 , 1 , 1 ) } R_{ABC}=\{(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(0,2,0),(1,2,0),(0,0,1),(1,0,1),(2,0,1),(0,1,1)\} RABC={(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(0,2,0),(1,2,0),(0,0,1),(1,0,1),(2,0,1),(0,1,1)} 。因为 A B C ABC ABC A C AC AC 之间的关系有 A C AC AC ,所以我们关心两种关系 A C AC AC 取交集。于是 R A B C = { ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 2 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 2 , 1 , 0 ) , ( 0 , 2 , 0 ) , ( 1 , 2 , 0 ) , ( 0 , 0 , 1 ) , ( 0 , 1 , 1 ) } R_{ABC}=\{(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)\} RABC={(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)}

A B C
0 0 0
1 0 0
2 0 0
0 1 0
1 1 0
2 1 0
0 2 0
1 2 0
0 0 1
0 1 1

又因为 R A B C R_{ABC} RABC 包含了 R A C R_{AC} RAC ,又因为 R A B C R_{ABC} RABC 包含了 R C R_{C} RC ,所以最终我们只需看:
R D = { 0 , 1 } R A F = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R A B C = { ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 2 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 2 , 1 , 0 ) , ( 0 , 2 , 0 ) , ( 1 , 2 , 0 ) , ( 0 , 0 , 1 ) , ( 0 , 1 , 1 ) } E = 0 \begin{aligned} &R_D=\{0,1\} \\ &R_{AF}=\{(0,0),(1,0),(2,0),(0,1),(1,1)\} \\ &R_{ABC}=\{(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)\} \\ &E=0 \\ \end{aligned} RD={0,1}RAF={(0,0),(1,0),(2,0),(0,1),(1,1)}RABC={(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)}E=0
又容易发现 D D D 仅在 R D R_D RD 中,那么对于MILP问题来说,我们直接可以关注目标函数来确定最优的 D D D 值,于是 D = 1 D=1 D=1
R A F = { ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R A B C = { ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 2 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 2 , 1 , 0 ) , ( 0 , 2 , 0 ) , ( 1 , 2 , 0 ) , ( 0 , 0 , 1 ) , ( 0 , 1 , 1 ) } D = 1 E = 0 \begin{aligned} &R_{AF}=\{(0,0),(1,0),(2,0),(0,1),(1,1)\} \\ &R_{ABC}=\{(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)\} \\ &D=1 \\ &E=0 \\ \end{aligned} RAF={(0,0),(1,0),(2,0),(0,1),(1,1)}RABC={(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,0,1),(0,1,1)}D=1E=0

同样的 F F F 仅在 R A F R_{AF} RAF 中, C C C 仅在 R A B C R_{ABC} RABC 中, B B B 仅在 R A B C R_{ABC} RABC 中:

AF
A=0
F=0
F=1
A=1
F=0
F=1
A=2
F=0
ABC
A=0
C=0
B=0
B=1
B=2
C=1
B=0
B=1
A=1
C=0
B=0
B=1
B=2
A=2
C=0
B=0
B=1
ABC
A=0
C=0,B=2
C=1,B=1
A=1
C=0,B=2
A=2
C=0,B=1

R A F = { ( 2 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) } R A B C = { ( 2 , 1 , 0 ) , ( 0 , 2 , 0 ) , ( 1 , 2 , 0 ) , ( 0 , 1 , 1 ) } D = 1 E = 0 \begin{aligned} &R_{AF}=\{(2,0),(0,1),(1,1)\} \\ &R_{ABC}=\{(2,1,0),(0,2,0),(1,2,0),(0,1,1)\} \\ &D=1 \\ &E=0 \\ \end{aligned} RAF={(2,0),(0,1),(1,1)}RABC={(2,1,0),(0,2,0),(1,2,0),(0,1,1)}D=1E=0

这时候 Join-tree constraint graphs of a CSP 变成了:

A
ABC
AF

至此,我们其实已经完成了推理过程。之后的方法有很多,也不是本用例的重点。

图形化表示(Graphical Representations)

待更新。。。

你可能感兴趣的:(MILP,算法,图搜索算法,经验分享)