Simplex method 單純形法
先簡介一下 simplex method 的精神:從任意一個上述的頂點開始,每次都找 steepest edge 至下一個頂點來降低目前的 cost。以下拿一個例子來介紹: \[ minimize\ f(x) = -x_1 - x_2 \\ s.t.\ 2x_1+x_2\leq12, \\ x_1+2x_2\leq9, \\ x_i\geq 0 \] 第一步是要轉換以上的式子成為本文最上面提到的形式,也就是所有的約束必須要是等式。我們可以加入 slack variables \(x_3, x_4\) 讓以上約束成為等式: \[ 2x_1+x_2+x_3= 12, \\ x_1+2x_2+x_4=9 \] 因此此問題被轉換成: \[ minimize\ f(x) = -x_1 - x_2 \\ 2x_1+x_2+x_3= 12, \\ x_1+2x_2+x_4=9 \\ x_i\geq 0 \] 一開始我們從原點開始,這時的 cost function 值為 0 ,並且假設 cost function 的值為 z: \[ z = -x_1 - x_2 = 0 \] 這個問題的 cost function 包含了 \(x_1\) 跟 \(x_2\),我們剛剛提到每次都要找一個頂點降低 cost。這兩個變數的係數都是 -1 所以挑哪一個變數都沒差,接下來取 \(x_1\) 來計算。從兩個約束的式子可以看出 \(x_1\) 最大只能變成 6 ,因為如果超過 6 的話 \(x_2, x_3\) 至少會有一個為負數。我們下一步把 \(x_1\) 移項帶入到第二式子: \[ x_1 + \frac{x_2}{2} + \frac{x_3}{2} = 6,\ (x_1 = 6 - \frac{x_2}{2} - \frac{x_3}{2}) \\ (6 - \frac{x_2}{2} - \frac{x_3}{2}) + 2x_2+x_4=9,\ (\frac{3}{2}x_2 - \frac{1}{2}x_3 + x_4 = 3) \] 也把 \(x_1\) 代入 cost function: \[ z = -(6 - \frac{x_2}{2} - \frac{x_3}{2}) - x_2 = -6 - \frac{x_2}{2} + \frac{x_3}{2} \] 下一步取 \(x_2\) 來計算,從兩個約束的式子可以看出 \(x_2\) 最大只能變成 2,否則 \(x_3, x_4\) 至少會有一個為負數。我們做一樣的事情將 \(x_2\) 移項得到: \[ x_2 - \frac{x_3}{3} + \frac{2}{3}x_4 = 2 \] 代入另外兩個式子: \[ z = -6 - \frac{2 + \frac{x_3}{3} - \frac{2}{3}x_4}{2} + \frac{x_3}{2} \\ x_1 + \frac{2 + \frac{x_3}{3} - \frac{2}{3}x_4}{2} + \frac{x_3}{2} = 6 \] 整理後得到: \[ z=-7 + \frac{x_3}{3} + \frac{x_4}{3} \\ x_1 + \frac{2}{3}x_3 - \frac{1}{3}x_4 = 5 \] 計算到這,由於 cost function 式子中 \(x_3, x_4\) 的係數都是正數,並且我們知道所有的 x 都是非負數,所以代表 cost function 的值最小就是 -7,並且此時 \(x_3= x_4=0\),也就可以得到以下解: \[ x_1^* = 5, \\ x_2^* = 2 \] 以上只是個簡單的例子,但是實際上在解這個問題的時候必須考慮更多狀況,有興趣的讀者可以讀演算法聖經 Introduction to Algorithms 的內容。
沒有留言:
張貼留言