From a8666839e6d9680a9042f43359e7ec1ef78093b7 Mon Sep 17 00:00:00 2001 From: littlecube8152 Date: Fri, 26 Apr 2024 21:35:24 +0800 Subject: [PATCH] tailor some content of simplex algorithm --- content/posts/simplex-implementation.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/posts/simplex-implementation.md b/content/posts/simplex-implementation.md index 10abbaa8..db849cab 100644 --- a/content/posts/simplex-implementation.md +++ b/content/posts/simplex-implementation.md @@ -67,7 +67,7 @@ $$ ## Simplex - Overview -Simplex 演算法的想法就是,二維的 LP 會是一個凸包,三維的 LP 會是 3D 凸包,所有的 LP 都是一個多維凸包(大部分的文獻都說是 polytope,但是多胞形太抽象了),既然這樣,我們就沿著凸包一直往答案變大的地方走下去,要是走不下去不就是結束了嗎? +Simplex 演算法的想法就是,二維的 LP 會是一個凸包,三維的 LP 會是 3D 凸包,所有的 LP 都是一個多維凸包(大部分的文獻都說是 polytope,但是翻譯過來的多胞形聽起來太抽象了,個人認為凸包聽起來比較有感),既然這樣,我們就沿著凸包一直往答案變大的地方走下去,要是走不下去不就是結束了嗎? 換句話說,Simplex 其實只是在 - 先找一組合法解 @@ -117,7 +117,7 @@ $$ & x_i, s_j & \geq 0 \\\ \end{array} $$ -這時候要介紹一個概念:基底變數跟非基底變數(basic variable and non-basic variable)。基底變數可以想成是我們手上握著一組目前的答案,而非基底變數都會是 $0$,如果有學一點點線性代數,就可以想像成非基底是可以自由調整的變數,而我們在解空間內所以全部 $0$ 是一組合法解;而基底變數就是我們手上維持不變的解。在一開始的時候,我們一定是握著 $Z = 0, s_i = b_i$ 的這組基底。 +這時候要介紹一個概念:基底變數跟非基底變數(basic variable and non-basic variable)。基底變數可以想成是我們手上握著一組目前的答案,而非基底變數都會是 $0$,如果有學一點點線性代數,就可以想像成非基底是可以自由調整的變數,而我們手上的基底是合法的解,所以非基底的變數全部不取,都是 $0$ 會是一組合法解;而基底變數就是我們手上維持不變的解。在一開始的時候,我們一定是握著 $Z = 0, s_i = b_i$ 的這組基底。 只不過一直握著同一組基底沒有什麼意思,所以 Simplex 剛剛所說的走路就是指我們拿著一個非基底的變數走走看,如果能讓答案變大就走到底,同時原本的基底變數會有一個人離開,而剛剛的非基底變數會有一個人走進去。 @@ -197,9 +197,9 @@ $$ & & x,&y,&z,&s_1,&s_2 & \geq 0 \\\ \end{array} $$ -這時候我們把要離開的變數所對應的列叫做 pivot row,我不知道這個的翻譯是啥,但是如果你學過高斯消去法應該就會知道這是什麼意思。 +這時候我們把要離開的變數所對應的列叫做 pivot row,我不太確定這個名詞的翻譯,但是如果你學過高斯消去法應該就會知道這是什麼意思。 -因為上面的因素,你才不會想要把第一列消掉,一消下去 $Z$ 就變 $0$,整個社會大倒退。所以我們永遠不會選擇第一列。 +因為上面的因素,你才不會想要把第一列消掉,一消下去 $Z$ 就變 $0$,整個社會大倒退。所以我們永遠不會選擇第一列。換句話說,我們是刻意不要讓 $Z$ 走出基底變數,因為我們的目標就是讓他增加。 在第一列就是目標的時候,選擇誰要加入基底變數就相當簡單,如果他在第一行的係數是負的,那增加他 $Z$ 就會變大,也就是我們想要的。但反過來如果他是正的,$Z$ 就會變小,我們的演算法就會倒退,也就是說這樣就會是不好的。