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∑n?ti?Si?,??i=1∑n?ti?≤m
這個問題的輸入是n,mn,mn,m,輸出是(S1,?,Sn)(S_1,\cdots,S_n)(S1?,?,Sn?)以及NNN,要實現的是
max?S1,?,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?,?,SN?max???Ns.t.??r=i=1∑n?ti?Si?,??i=1∑n?ti?≤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 概率不