有許多困難的組合優化問題,使用回溯或隨機化不能有效地解決。
組合優化問題:在有限的可能性中找出最優解。一個近似算法將給出一個合理的解,逼近一個最優解。(大多數)近似算法的標記特徵是它們是快速的(多項式時間算法)。然而,人們不應該樂觀地尋找一個有效的近似算法,因爲有一些困難的問題,即使存在一個合理的近似算法是不可能的,除非NP=P。
組合優化問題
輸入:COP的實例I。
可行集:FEAS(1) =實例I的所有可行(或有效)解的集合,通常用一組約束表示。
目標成本函數:實例I包括對目標成本函數的描述。Cost[l]映射每個解決方案S(可行或不可行)一個實數或±。
目標:優化(即最小化或最大化)目標成本函數。
優化設置:OPT(I) ={Sol ∈ FEAS(I) | Cost[I] (Sol) ≤ Cost[i] (Sol'), VSol' ∈FEAS(1)},成本最小值的集合≤實例I可行的解決方案;
組合:指問題結構意味着只有有限數量的解決方案需要被檢查以找到最優。
輸出:一個解決方案Sol ∈ OPT(I),或報告FEAS(I) = 。
COP舉例:
“Easy”(多項式時間可解):最短(簡單)路徑,最小生成樹,圖匹配;
“NP-Hard”(沒有已知的多項式時間解決方案):最長(簡單)路徑,旅行推銷員,頂點覆蓋,集合覆蓋,K-Cluster,0/1 揹包。
分類
差界算法:
我們從近似算法中所能期望的最大結果是,最優解的值與通過近似算法得到的解的值之間的差總是不變的。對於所有問題的實例,可以得到一個近似算法A這樣, K是常數。但是有差分界近似算法的NP-hard優化問題很少。
平面着色問題可以用近似算法求解;
揹包問題不存在差界近似算法,除非NP=P;
裝箱問題:給定一個集合,的大小是,其中每個s在0和1之間,我們需要將這些物品打包到單位容量的最小箱數。四種啓發式方法:FF(最先適配,放第j個物品時,放入第一個可以放的箱子,且), BF(最優適配,放第j個物品時,使放入後箱子空餘儘量少), FFD(先做從大到小的排序,在進行FF), BFD。
定理:對於裝箱問題的所有實例I,
定理:對於裝箱問題的所有實例I,
加權頂點覆蓋問題:
輸入:頂點權值爲w(V)的無向圖G(V,E),w(v)>0是頂點vV的權值
輸出: 頂點覆蓋C: CV覆蓋所有的邊
目標:最小化頂點覆蓋C的權重
頂點覆蓋問題表示爲整數線性規劃:,,約束條件爲(P1)
求解:鬆弛——將整數線性規劃變爲線性規劃問題,即(P2)
對偶——(P3)
當時,點v爲tight;當u或者v是tight時,邊(u,v)是final。
ALGORITHM Approximate-Vertex-Cover (G(V,E), w(V)) for each edge (u,v)∈E do p(u,v) ← 0 for each edge (u,v)∈E do finalize (u,v), i.e.,increase p(u,v) until u or v becomes tight,(取u,v中最小的,未取的減去最小的,更新price,0值放入到C中) C ← { v ∈ V | v is tight } return C end
這是一個2-近似算法,有以下的特點:1)正確性,得到的C是可行解;2)多項式時間算法;3)
加權集合覆蓋問題:,F包含m個X的子集,挑選C,使得C可以覆蓋X,並使得權值儘可能地小:
ALGORITHM Greedy-Set-Cover (X, F, w(F)) 1. U ← X (* uncovered elements *) 2. C ← Ø (* set cover *) while U ≠ Ø do select S∈F that minimizes price p = w(S) / |S∩U| U ← U - S C ← C ∪ {S} return C end
這是一個H(n)-近似算法(與n有關的)。
Harmonic Number:;
Maximumdegree:;
引理:;
定理:Greedy-Set-Cover算法的特點:正確性:輸出可行解C;多項式運行時間;近似界:
旅行商問題(TSP):
設nxn的矩陣,表示城市i到城市j的距離。輸出路徑T,T從起點出發,路過每個城市且僅路過一次,最後回到起點,找出一條最短的路徑T。
最小生成樹,哈密爾頓迴路(HCP),圖的匹配,歐拉圖都是NP-hard問題。
哈密爾頓迴路:存在圈經過每一座城市且僅經過一次。
定理:設是一個常數,一般的TSP問題的近似算法是NP-hard問題。(即不存在多項式時間近似算法)
metric-TSP:是一般TSP問題的特殊情況,也是NP-hard問題,存在2-近似算法,1.5-近似算法。歐拉圖:對圖G進行遍歷,經過每條邊且僅經過一次。
metric-TSP的2-近似算法:步驟,首先構造最小生成樹,雙邊的MST的歐拉圖了,跳過重複的點。
根據三角不等式,跳過重複點的操作不會增加哈密爾頓迴路的長度 ,即哈密爾頓迴路的長度不會超過歐拉圖的長度。
2是“緊的”,是可達的
metric-TSP的1.5-近似算法—圖的匹配,匹配集M是G的一個子集,且滿足任意兩條邊都沒有公共的頂點。完美匹配,每個點都被匹配,即位於M中(偶數個點才存在完美匹配)。
步驟:構造MST
找出其中度數爲奇數的頂點,對找出的頂點找到最小權值的完美匹配M,E=MST+M,E是一個歐拉圖
跳過重複點的歐拉圖得到TSP迴路T。
1.5是可達的。
K-聚類問題(The K-Cluster Problem)
設點集X,是之間的距離,以及正整數K,把X分成K類,並使得K類中最長的直徑最小化,即。
貪心算法;是2-近似多項式算法;
(1)貪婪地逐步的從X中取K個點作爲集羣的“中心”,並選擇離之前選擇的中心最遠的集羣中心。
(2)將剩餘的X點分配給離中心最近的集羣。
定義:是離最遠的點。如果我們想要k+ 1箇中心,,令r*=r(k+1)=min(d(x*,) ,j=1.k}。
引理:算法具有以下性質:(a)每個點距離其簇中心最多r*的距離。(b) K+1個點之間的距離至少爲r*。
0/1揹包問題(可切割Fractional)
最大化:
約束條件:
FKP的最優解可以在O(nlogn)時間內得到。
證明:
貪心策略:按vi/wi的遞減順序考慮;
將物品按順序放在揹包裏,直到袋子裝滿;
只有放在揹包中的最後一件物品可能被分割;
第一步的排序時間是O(nlogn)。
01KP approximation Greedy Algorithm Input: 2n+1 positive integers corresponding to item weights {w1...wn}, item values {v1...vn} and the knapsack capacity W Output: A subset Z of the items whose total size is at most W 1. Renumber the items so that v1/w1...vn/wn 2. j←0, K←0, V←0, Z←{} 3. while j<n and K<W 4. j←j+1 5. if wj←W-K then 6. Z←Z←{uj} 7. K←K+wj 8. V←V+vj 9. end if 10. end while 近似度R是無界的 舉例:U={u1,u2},w1=1,v1=2;w2=v2=W>2 近似解是u1,最優解是u2,R=W/2,W可以任意取 11. Let Z’={us}, where us is an item of maximizing value 12. if Vvs then return Z 13. else return Z’ 加上後面的代碼,此時近似度R=2
設,對於某個正整數k,算法,由兩步組成。首先,選擇最多有k個元素的子集,並在揹包中取出它們。然後對剩餘的項運行knapsack貪婪算法。這兩個步驟重複,j是每個子集的大小,0≤j≤k。
定理15.4(PTAS):令對於k≥1,算法的運行時間爲,性能比爲。
近似算法:多項式運行時間;
PTAS(多項式時間近似策略):額外輸入參數e,作爲相對誤差的界;找到的相對誤差最多爲e;對於固定的e而言,關於輸入規模的多項式運行時間
FPTAS:是一個PTAS,並關於輸入規模和1/e的多項式時間。