《再探線性規劃對偶在信息學競賽中的應用》 - 學習筆記

學習自 丁曉漫,再探線性規劃對偶在信息學競賽中的應用,2021集訓隊論文。當然很多公式和圖片是直接抄下來的。

被迫營業

定義什麼的全都跳過。

如果一開始就講對偶的定義,那做到最後一題的時候多半已經忘記定義了(比如我),所以學習筆記的寫作順序會和原論文不同。

因爲是被迫營業,所以很多簡單的東西不會被略過,可能講得較慢。

通用解法

OI 中能用到的暫時只有單純形法。

可以在這裏學習。

標準型對偶

(目前看來)最常用的對偶。

先把原線性規劃寫成標準形式:

\[\max c^T x\\ Ax\le b\\ x\ge 0 \]

其中 \(x,c\) 是長度爲 \(n\) 的向量,分別表示變量和目標函數係數。 \(A\)\(m\times n\) 的矩陣,表示 \(m\) 個約束。 \(b\) 是長度爲 \(m\) 的向量,表示約束中的常數。

這可以對偶成

\[\min y^Tb\\ A^Ty\ge c\\ y\ge 0 \]

其中 \(y\) 是新的變量。

方便背誦的形式:限制和變量對調,目標函數係數和約束常數對調,約束中的係數不變。

可以證明其中一邊有解時另一邊也一定有解,且目標函數的最優解相同。注意對偶是雙向的。

一個弱點是從對偶形式的 \(y\) 較難還原出原形式的 \(x\) (論文沒寫,我不會),所以對偶形式的 \(y\) 所具有的性質不能在 \(x\) 上找到對應的性質,並且在要求輸出方案時不太能做。

最小費用流模型

建議全文背誦,比每次重新推一遍快很多。

\(f_{uv},c_{uv},w_{uv}\) 分別表示流量、流量上界、代價。\(b_u\) 表示 \(u\) 的流量需求,即流出減流入至多是 \(b_u\) (論文中用了等號,效果略有不同,下面會講)。

直接把線性規劃寫出來,得到

\[\min \sum_{u v} w_{u v} f_{u v} \\ -f_{u v} \geq-c_{u v} \\ \sum_{v} f_{v u}-\sum_{v} f_{u v}\ge -b_{u} \]

\(z_{uv}\) 是邊流量約束的對偶變量, \(p_u\) 是點流量約束的對偶變量。有

\[\max \sum_{u}-b_{u} p_{u}-\sum_{u v} c_{u v} z_{u v} \\ p_{v}-p_{u}-z_{u v} \leq w_{u v} \]

注意到 \(z_{uv}\) 的係數是非正數(這要求 \(c\) 是非負數),而且它只在一個約束中出現,所以容易發現它一定要取到下界 \(\max (0,p_v-p_u-w_{uv})\) 。然後把負號提出去,變成

\[-\min \left\{\sum_{u} b_{u} p_{u}+\sum_{u v} c_{u v} \max \left(0, p_{v}-p_{u}-w_{u v}\right)\right\} \]

其中 \(p_u,p_v,c_{uv}\) 都必須是非負數,\(b,w\) 沒有限制。

另外,如果要求“流出減流入恰好是 \(b_u\)”,就會使得 \(p_u\) 非負的限制被刪除。這是因爲一個 \(=\) 要被拆成兩個相反的約束,對偶之後就是兩個相減的變量,也就相當於取值任意。

因爲對偶是雙向的,所以如果題目可以轉化成最後這個形式,就一定可以用費用流求解。

整數性的探討

雖然費用流在流量都是整數的時候最優解也一定是整數,但這並不代表它的對偶問題也一定有整數最優解。

不過事實證明整數最優解是一定存在的:

把非整數的 \(p_u\) 拿出來,按照本質不同的非零小數部分分類,設有 \(k\) 種。

隨便拿一部分出來,考慮把它調大或者調小 \(\epsilon\)

分類討論一下發現調大調小的 \(\Delta\) 之和恰好爲 0 ,所以必然有一邊不劣。往這邊一直調直到 \(k\) 減小即可。

所以在這個模型中不再需要考慮整數解的存在性了。

例題

設置變量的一些技巧可以自己揣摩。

默認所有設出的變量都會帶 \(\ge0\) 的限制。

[ZJOI2013] 防守戰線

直接設 \(p_i\) 表示前 \(i\) 個位置一共建了幾個塔,就是

\[\min p_{i}\left(C_{i}-C_{i+1}\right) \\ p_{i+1}-p_{i} \geq 0 \\ p_{R_{i}}-p_{L_{i}-1} \geq D_{i} \]

直接轉化成

\[\sum_{v} p_{v}\left(C_{v}-C_{v+1}\right)+\sum_{v} \infty \max \left(0, p_{v}-p_{v+1}\right)+\sum_{i} \infty \max \left(0, p_{L_{i}-1}-p_{R_{i}}+D_{i}\right) \]

[Aizu 2230] How to Create a Good Game

\(p_i\) 表示到 \(i\) 的最長路。設原圖 \(0\)\(n-1\) 的最長路長度是 \(D\) 。設 \(x_{uv}\) 是增長的邊權。

雖然不能限制 \(p\) 恰好等於最長路,但是如果取到比最長路更長一定不優,所以只需要限制它不是太短,即滿足三角不等式。

\[\max \sum_{u v} x_{u v} \\ p_{n-1}-p_{0} \leq D \\ p_{v}-p_{u} \geq w_{u v}+x_{u v} \\ \]

仍然注意到 \(x_{uv}\) 只在一個約束中出現,所以它必然取到上界 \(p_v-p_u-w_{uv}\) ,而且這東西必須 \(\ge 0\)

該取反的取反,得到

\[\min \sum_{u v} \infty \max \left(0, p_{u}-p_{v}+w_{u v}\right)+p_{u}-p_{v}+w_{u v} \]

動態規劃模型

對偶時貢獻係數會變成約束的常數,那麼如果貢獻係數很小,對偶之後的操作空間就很小。此時可能可以用 DP 解決。

當然還是逃不過證明整數最優解存在的這一步。

例題

[XX Open Cup. GP of Moscow] Circles

限制是一個環,要求相鄰兩個相加不超過 \(s_i\) ,貢獻係數是 1 。

容易發現對偶之後仍然是一個環,要求相鄰兩個相加至少是 1 ,貢獻係數是 \(s_i\) ,求最小值。

容易發現每個變量的取值都是 \([0,1]\) 。進一步地,可以發現所有變量都應當取 \(\{0,1\}\) ,或者是全部 \(0.5\)

證明:
對於偶環,可以奇數位置減、偶數位置加,或者反過來,則一定有一種調整方法不劣。調到出現 0 爲止,那麼它兩邊都是 1 ,與剩下的位置獨立,可以刪去。然後對剩下的位置接着操作即可。

對於奇環,拿一個最優解出來,考慮是否有相鄰兩個位置相加大於 1 。如果不存在那麼必須全都是 \(0.5\) ,否則從這裏斷開之後可以一樣的方法操作。爲了保證最優性,兩個方向調整都不會改變總和,所以奇數加偶數減直到出現 0 即可。

然後隨便 DP 。

[ZJOI2020] 序列

二三類操作是類似的,而一類操作和它們不太一樣。二三類操作之間又是獨立的。

如果只有其中一種操作,都很容易知道答案是差分之後 \(>0\) 位置的和。

那麼設做完一類操作之後每個位置的值是 \(b_i\) ,則答案顯然是

\[\min \left\{\sum \max(0,b_i-b_{i-2})+\max(0,(a_i-b_i)-(a_{i-1}-b_{i-1}))+\infty \max(0,b_i-a_i)\right\} \]

轉化成最大費用流就是

\[b_{i-2}\to b_i,[0,1],0\\ b_i\to b_{i-1},[0,1],a_i-a_{i-1}\\ S\to b_i,[0,+\infty),-a_i\\ b_i\to T,[0,+\infty),0 \]

(稍微注意一點:我們其實弄出了一個新的變量 \(t=0\) 。爲了保證 \(t=0\) 就會在目標函數中加上 \(+\infty \cdot t\) ,也就相當於從 \(S\) 連向 \(t\) 的流量無窮的邊。那麼 \(t\)\(S,T\) 都有流量無窮的邊,所以它就是 \(S,T\) 的化身。連邊中所有不存在的變量都會視語境變成 \(S\)\(T\) 。)

注意我們是最大費用流,所以 \(S\to b_i\) 的邊肯定是能不流就不流。而其他邊的流量非常小,跨度也很小,直接 DP 即可。

顯然這比貪心做法簡單一萬倍。唯一的壞處就是做完之後啥也沒學到(

拉格朗日對偶

一般的拉格朗日對偶

\[\max f(x)\\ g(x)\le 0 \]

引入拉格朗日乘子 \(\lambda\) ,要求 \(\lambda\ge 0\) 。設 \(L(\lambda)=\max f(x)-\lambda g(x)\) 。(注意 \(x,\lambda\) 也可以同時是向量。)

由定義容易得到 \(\max f(x)\le \min L(\lambda)\)

由於 \(L(\lambda)\)\(\max\) 裏面關於 \(\lambda\) 線性,而外面套一層 \(\max\) ,所以容易發現 \(L({a+b\over 2})\le {1\over 2}(L(a)+L(b))\) ,即滿足凸性。

(不過暫時沒有看出凸性有什麼用)

注意此時我們甚至不知道 \(\max f(x)\le \min L(\lambda)\) 的等號是否能取到。

線性規劃中的拉格朗日對偶

\(f(x)={c}^{T} {x}, g(x)={A} {x}-{b}, \lambda=y^{T}\) ,其中 \(y\) 是對偶問題中的最優解。

那麼就有 \(L(\lambda)=\max c^Tx-y^T(Ax-b)=\max (c^T-y^TA)x+y^Tb\) 。因爲 \(c^T\le y^TA\) ,所以 \(x=0\) 時取到最大值 \(y^Tb\) ,恰好是 \(\max f(x)\)

可以看出在線性規劃中對偶和拉格朗日對偶有着奧妙重重的關係。論文說它們本質相同,我頭腦愚鈍不知何爲本質(

有什麼用呢?可以正着做,也就是設出 \(\lambda\) 然後亂搞;也可以倒着做,見到 \(\min \{\max\{\}\}\) 的形式時反着推回普通線性規劃的形式。

例題

[POJ Monthly 2015.5] Min-Max

沒有太多可解釋的。

直接對偶也是可以的。有兩個限制

\[\sum p_i\mu_i=C\\ \sum \mu_i=1 \]

根據前面所說,\(=\) 的限制對偶之後的變量可以在 \(\mathbb{R}\) 中任取,所以對偶之後的限制是半平面交,最值會在凸包頂點處取到。

[Utpc2012.10] きたまさの逆襲

\(\lambda_i\) 表示給 \(U_i\) 加的 buff 層數, \(f_{uv}\) 表示這條邊是否存在於完美匹配中,則答案顯然是

\[\max _{\lambda_{1}, \ldots, \lambda_{k} \geq 0} \min _{|f|=|V|} \sum _i\left(\sum_{u \in U_{i}} \sum_{v}\left(w_{u v}+\lambda_{i}\right) f_{u v}-b_{i} \lambda_{i}\right) \]

裏層拆成兩部分,分別是

\[\sum_{uv}w_{uv}f_{uv}\\ -\sum _i\left(b_{i}-\sum_{u \in U_{i}} \sum_{v} f_{u v} \right)\lambda_{i} \]

第一部分就是代價函數,第二部分就是限制函數。對偶的結果就是

\[\min \sum_{uv}w_{uv}f_{uv}\\ b_{i}-\sum_{u \in U_{i}} \sum_{v} f_{u v}\ge 0 \]

可以看出是滿足一些條件的最小費用流,直接做即可。

最後還有整數性的問題。前面證明拉格朗日對偶時說的是 \(\lambda=y^T\) ,而由於費用流的對偶變量都是整數,所以一定存在合法的整數 \(\lambda\)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章