日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法

發布時間:2025/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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):

OXXX
XX
XX
XX

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)

OXXX
XXOX
XX
XXX

現在放第三個棋子,顯然它只能在k=2,4k=2,4k=2,4的位置,接下來就考慮(1,3,2,l)(1,3,2,l)(1,3,2,l):

OXXX
XXOX
XOXX
XXXX

于是路就走不通了,第四個棋子沒位置了,那么我們退回去,考慮(1,3,4,l)(1,3,4,l)(1,3,4,l):

OXXX
XXOX
XXXO
XXX

最后剩下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):

OXXX
XXXO
XXX
XX

第三個棋子沒得選,那就放在第二個位置

OXXX
XXXO
XOXX
XXX

最后第四個棋子只能放在第三個位置,因此(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=1n?ti?Si?,??i=1n?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=1n?ti?Si?,??i=1n?ti?m1rN

這是一個典型的整數規劃問題,下面我們簡單討論一下怎么用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為例說明一下搜索過程:

  • S1=1S_1=1S1?=1, m=3?Int(S1)=3m=3 \Rightarrow Int(S_1)=3m=3?Int(S1?)=3,因此S2∈{2,3}S_2 \in \{2,3\}S2?{2,3},假設更小的數被優先搜索,下面考慮S2=2S_2=2S2?=2
  • Int(S1,S2)=6Int(S_1,S_2)=6Int(S1?,S2?)=6,因此S3∈{3,4,5,6}S_3 \in \{3,4,5,6\}S3?{3,4,5,6},下一步考慮S3=3S_3=3S3?=3
  • Int(S1,S2,S3)=9Int(S_1,S_2,S_3)=9Int(S1?,S2?,S3?)=9,因此S4∈{4,5,6,7,8,9}S_4 \in \{4,5,6,7,8,9\}S4?{4,5,6,7,8,9},下一步考慮S4=4S_4=4S4?=4
  • Int(S1,S2,S3,S4)=12Int(S_1,S_2,S_3,S_4)=12Int(S1?,S2?,S3?,S4?)=12,因此S5∈{5,6,7,8,9,10,11,12}S_5\in \{5,6,7,8,9,10,11,12\}S5?{5,6,7,8,9,10,11,12},如果S5=5S_5=5S5?=5,則N=15N=15N=15。這就拿到了第一種可能面值為(1,2,3,4,5)(1,2,3,4,5)(1,2,3,4,5),三張郵票能表示的最大面值為15,記錄下這個信息后轉到S5=6S_5=6S5?=6,計算得到N=16N=16N=16,記錄這個信息后轉到S5=7S_5=7S5?=7,以此類推,討論完S5S_5S5?的所有可能性后回到S4S_4S4?的其他可能,然后再回到S3S_3S3?S2S_2S2?的其他可能
  • 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?

    這兩個分支可以剪掉。沿用上面的數值例子,引入剪枝操作,簡單說明一下搜索過程:

  • S1=1S_1=1S1?=1, m=3?Int(S1)=3m=3 \Rightarrow Int(S_1)=3m=3?Int(S1?)=3,因此S2∈{2,3}S_2 \in \{2,3\}S2?{2,3},計算Int(S1)?1m=2/3\frac{Int(S_1)-1}{m}=2/3mInt(S1?)?1?=2/3S2S_2S2?的可能取值比較,發現不符合剪枝條件,假設更小的數被優先搜索,下面考慮S2=2S_2=2S2?=2
  • Int(S1,S2)=6Int(S_1,S_2)=6Int(S1?,S2?)=6,因此S3∈{3,4,5,6}S_3 \in \{3,4,5,6\}S3?{3,4,5,6},計算Int(S1,S2)?1m=5/3\frac{Int(S_1,S_2)-1}{m}=5/3mInt(S1?,S2?)?1?=5/3,與S3S_3S3?的可能取值比較,不符合剪枝條件;計算Int(S1,S2)?1m2=5/9\frac{Int(S_1,S_2)-1}{m^2}=5/9m2Int(S1?,S2?)?1?=5/9,與S2S_2S2?的可能取值比較,不符合剪枝條件,下一步考慮S3=3S_3=3S3?=3
  • 后續步驟以此類推,我就不打字詳細說明了。

    總結

    以上是生活随笔為你收集整理的UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。