0 1分數規劃詳解

2022-03-20 06:31:18 字數 1664 閱讀 9006

(這是我寫的最認真的數學筆記)

0/1分數規劃模型是指,給定一系列整數\(a_1\),\(a_2\)......\(a_n\)以及\(b_1\),\(b_2\)......\(b_n\),求一組解\(x_i\)(\(1\leq i \leq n\),\(x_i=0 |1\)),使得下式最大化。

\[\frac^\cdot}^\cdot}

\]這裡有乙個誤區(是我存在過的誤區),就是0/1分數規劃的\(x_i\)值是恆定的,也就是說,針對於上式,不存在分子的\(x_i\)為0而分母的\(x_i\)得1的情況。而必須是同時得0或同時得1.

所以我們會發現,這個模型可以這樣去理解:

給定長度相等的兩個數列(即若干對整數\(a_i\),\(b_i\)),從中選出若干對,使得選出的數對的\(a\)之和和\(b\)之和的商最大。

這個模型很重要!!!

我們在考慮解決0/1分數規劃問題的時候,其實就是在找一組解,\(x_i\in \),使得上面的式子成立。

我們隨便猜測乙個值\(a\),使得下式成立:

\[\sum_^(-a\cdot)\cdot\geq0

\]如果存在這樣一組解

那麼我們把上式變形得到:

\[(\sum_^\cdot)-a\cdot(\sum_^\cdot)\geq0

\]即:

\[\exists\,,\cdots\}\rightarrow\frac^\cdot}^\cdot}\geq a

\]也就是說,這個設出來的值\(a\)要比我們所求的最大值小

如果我們存在任意一組解使得下式成立

\[\sum_^(-a\cdot)\cdot<0

\]那麼我們同樣可以把上式變形得到:

\[(\sum_^\cdot)-a\cdot(\sum_^\cdot)<0

\]同理,我們得到:

\[\forall\,,\cdots\}\rightarrow\frac^\cdot}^\cdot}< a

\]也就是說,這個設出來的值\(a\)要比我們求的最大值大。

所以,通過以上的論述,我們發現,我們所求的最大值,其實可以用二分答案來實現,事實上,這的確也是0/1分數規劃的最常見、最常用的實現方式。

剛剛我們已經說過,0/1分數規劃的最常見、最常用的實現方式是二分答案,聯想到二分演算法,我們能夠想出,二分答案的精髓和難點在於判斷函式check()的書寫,那麼針對於二分答案解決0/1分數規劃,我們能夠通過剛剛的推導發現,我們只需要判斷「是否存在一組解滿足\(\sum_^(-a\cdot)\cdot\geq0\)」,並由此得到應該向上拓展答案區間還是向下拓展答案區間。

所以,我們把原問題轉化為:給定\(a_1\),\(a_2\)......\(a_n\),\(b_1\),\(b_2\)......\(b_n\)及\(a\),求一組解:\(x_1,x_2,x_3,\cdots x_n\),使得\(\sum_^(-a\cdot)\cdot\)最大化。

通過剛才的推導,我們發現,針對於這個問題,我們只需要判斷這個最大值是否非負即可,所以,我們得出了二分思路:

實數域(解的可能區間)二分mid,我們取的每乙個mid其實是剛剛問題中的\(a\),也就是說,我們需要計算這個式子的最大值,檢查是否非負,如果非負,則右移區間,否則左移。

求解完畢。

0 1分數規劃

題目鏈結 中文鏈結 附一篇大佬部落格感覺講的不錯 0 1分數規劃,不妨設 l a i b i 題目要求要讓結果最大,那麼就是l最大最終移相化簡可得 a i l b i 0,因為a 和b都是已知所以我們可以直接列舉l,當我們所求的值大於零說明l還有更優解當小於零時l沒有最優解。直接二分即可 inclu...

01分數規劃

01分數規劃,就是這樣乙個東西 max frac 其中 xi in 簡而言之,就是在n個物品中選出任意幾個 或者可以有限制選多少個 使得其兩種權值a,b的比值最大 這樣的問題可以二分解決 假如有這樣一道裸題 poj2976,選n k個物品使得比值最大 我們二分出r,若存在 frac r 則r可行 變...

01分數規劃

已經接觸過01分數規劃但是只知道二分寫法 實際求解略慢 dinkelbach演算法還是值得一學的。上一道裸的01分數規劃吧。poj x陣列代表我們選或者不選 0,1構成 r sigma a i x i sigma b i x i 變形 設f v 為 sigma a i x i sigma b i x...