Skip to content

Commit

Permalink
tailor some content of simplex algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
littlecube8152 committed Apr 26, 2024
1 parent f53d7f0 commit a866683
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions content/posts/simplex-implementation.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ $$

## Simplex - Overview

Simplex 演算法的想法就是,二維的 LP 會是一個凸包,三維的 LP 會是 3D 凸包,所有的 LP 都是一個多維凸包(大部分的文獻都說是 polytope,但是多胞形太抽象了),既然這樣,我們就沿著凸包一直往答案變大的地方走下去,要是走不下去不就是結束了嗎?
Simplex 演算法的想法就是,二維的 LP 會是一個凸包,三維的 LP 會是 3D 凸包,所有的 LP 都是一個多維凸包(大部分的文獻都說是 polytope,但是翻譯過來的多胞形聽起來太抽象了,個人認為凸包聽起來比較有感),既然這樣,我們就沿著凸包一直往答案變大的地方走下去,要是走不下去不就是結束了嗎?

換句話說,Simplex 其實只是在
- 先找一組合法解
Expand Down Expand Up @@ -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 剛剛所說的走路就是指我們拿著一個非基底的變數走走看,如果能讓答案變大就走到底,同時原本的基底變數會有一個人離開,而剛剛的非基底變數會有一個人走進去。

Expand Down Expand Up @@ -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$ 就會變小,我們的演算法就會倒退,也就是說這樣就會是不好的。

Expand Down

0 comments on commit a866683

Please sign in to comment.