UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法
UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法
- DFS方法基础
- 邮票问题
这部分的主要目标是建立求解整数规划的方法,早期解决整数规划需要穷举,后来人们把搜索技术应用到整数规划中,极大地提高了整数规划求解地效率,最常被用到的两种技术是DFS和分支定界,所以这部分就从这两种技术开始介绍,然后讨论怎么用来解决整数规划问题。
DFS方法基础
DFS全称是Depth First Search,也就是深度优先搜索。这个算法思路很简单,就是莽就完了,但莽的时候要记录莽过的路径,下一个位置不符合要求就可以退回来重新莽。下面用一个简单的例子说明,假设在一个4×44\times 44×4的棋盘上要放四个棋子,每两个棋子不能位于同一行同一列同一对角线,要计算所有的放法。
首先讨论一下穷举法,在4×44 \times 44×4的棋盘上放四个棋子的放法一共有44=2564^4=25644=256种,因此用穷举法需要对256种可能性进行判断。(如果我是随便做做估计就穷举了,毕竟不用动脑筋而且运算量也不大)但显然用穷举来做估计是拿不到分的,我们要根据题目的限制条件来做搜索。
简单阐述一下DFS解决这个问题的思想。假设第一个棋子放在第一行,第二个放在第二行,以此类推,用i,j,k,li,j,k,li,j,k,l表示第1-4行的棋子的位置。第一步,考虑(1,j,k,l)(1,j,k,l)(1,j,k,l):
| X | X | ||
| X | X | ||
| X | X |
O代表对应位置放上了棋子,X代表对应位置不能再放棋子了。从这个图可以看出,i=1i=1i=1,也就是第一个棋子放在第一行第一个位置以后,第二个棋子只能在j=3,4j=3,4j=3,4的位置,假设优先搜索靠左的位置,接下来我们考虑(1,3,k,l)(1,3,k,l)(1,3,k,l):
| X | X | O | X |
| X | X | ||
| X | X | X |
现在放第三个棋子,显然它只能在k=2,4k=2,4k=2,4的位置,接下来就考虑(1,3,2,l)(1,3,2,l)(1,3,2,l):
| X | X | O | X |
| X | O | X | X |
| X | X | X | X |
于是路就走不通了,第四个棋子没位置了,那么我们退回去,考虑(1,3,4,l)(1,3,4,l)(1,3,4,l):
| X | X | O | X |
| X | X | X | O |
| X | X | X |
最后剩下l=2l=2l=2这个位置,它是符合要求的,那么(1,3,4,2)(1,3,4,2)(1,3,4,2)就构成了第一条通路。现在我们记录下通路的信息,然后回到第二个棋子处,考虑(1,4,k,l)(1,4,k,l)(1,4,k,l):
| X | X | X | O |
| X | X | X | |
| X | X |
第三个棋子没得选,那就放在第二个位置
| X | X | X | O |
| X | O | X | X |
| X | X | X |
最后第四个棋子只能放在第三个位置,因此(1,4,2,3)(1,4,2,3)(1,4,2,3)构成了第二条通路。这样我们就完成了i=1i=1i=1的所有搜索,下面的步骤就是对i=2,3,4i=2,3,4i=2,3,4做同样的搜索。
邮票问题
邮局发行了一套有nnn种不同面值的邮票,记面值为(S1,⋯,Sn)(S_1,\cdots,S_n)(S1,⋯,Sn)(Si<Si−1S_i < S_{i-1}Si<Si−1),每个信封最多能贴mmm张邮票,为了保证这套邮票可以贴出(1,2,⋯,N)(1,2,\cdots,N)(1,2,⋯,N)这些面值,请问面值应该怎么设计?
假设rrr是一个自然数,如果它是能被这套邮票表示的面值,那么∃{t1,⋯,tn}⊂N\exists \{t_1,\cdots,t_n\} \subset \mathbb{N}∃{t1,⋯,tn}⊂N,
r=∑i=1ntiSi,∑i=1nti≤mr = \sum_{i=1}^n t_i S_i,\ \ \sum_{i=1}^nt_i \le mr=i=1∑ntiSi, i=1∑nti≤m
这个问题的输入是n,mn,mn,m,输出是(S1,⋯,Sn)(S_1,\cdots,S_n)(S1,⋯,Sn)以及NNN,要实现的是
maxS1,⋯,SNNs.t.r=∑i=1ntiSi,∑i=1nti≤m1≤r≤N\max_{S_1,\cdots,S_N} \ \ N \\ s.t. \ \ r = \sum_{i=1}^n t_i S_i,\ \ \sum_{i=1}^nt_i \le m \\ 1 \le r \le NS1,⋯,SNmax Ns.t. r=i=1∑ntiSi, i=1∑nti≤m1≤r≤N
这是一个典型的整数规划问题,下面我们简单讨论一下怎么用DFS的思想解这个问题。先考虑搜素范围,显然
1=S1<S2<S3<⋯<Sn≤N1 = S_1 < S_2 < S_3 < \cdots < S_n \le N 1=S1<S2<S3<⋯<Sn≤N
在搜索SiS_iSi的可能取值时,要保证SiS_iSi不会大于能用前i−1i-1i−1个面值的邮票连续表示的最大整数,记为Int(S1,⋯,Si−1)Int(S_1,\cdots,S_{i-1})Int(S1,⋯,Si−1),也就是
Si−1<Si≤Int(S1,⋯,Si−1)S_{i-1}<S_i \le Int(S_1,\cdots,S_{i-1})Si−1<Si≤Int(S1,⋯,Si−1)
按这个记号,N=Int(S1,⋯,Sn)N=Int(S_1,\cdots,S_{n})N=Int(S1,⋯,Sn)。下面以n=5n=5n=5,m=3m=3m=3为例说明一下搜索过程:
Lunnon(1969)修正了这个算法,提出在搜索SiS_iSi的取值时可以先进行剪枝操作再搜索,可以降低算法复杂度。他认为
Si<Int(S1,⋯,Si−1)−1m,Si−1<Int(S1,⋯,Si−1)−1m2S_i<\frac{Int(S_1,\cdots,S_{i-1})-1}{m},\ \ S_{i-1}<\frac{Int(S_1,\cdots,S_{i-1})-1}{m^2}Si<mInt(S1,⋯,Si−1)−1, Si−1<m2Int(S1,⋯,Si−1)−1
这两个分支可以剪掉。沿用上面的数值例子,引入剪枝操作,简单说明一下搜索过程:
后续步骤以此类推,我就不打字详细说明了。
总结
以上是生活随笔为你收集整理的UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: UA MATH563 概率论的数学基础2
- 下一篇: UA MATH567 高维统计I 概率不