Thuật toán đơn hình 2 pha sẽ được áp dụng trong các bài toán LP mà ta không dễ dàng
tìm được một cơ sở chấp nhận được xuất phát.
Nội dung chính của 2 pha:
Pha 1: Giải bài toán phụ trợ để tìm một cơ sở chấp nhận được xuất phát.
Pha 2: Sử dụng cơ sở tìm được, áp dụng thuật toán đơn hình để tìm nghiệm tối ưu.
\\
▸ DẠNG CHUẨN TẮC
Trong nhiều trường hợp các ràng buộc có vế phải âm hoặc không thể tạo được cơ sở chấp nhận
được xuất phát một cách trực tiếp, ta sẽ sử dụng phương pháp đơn hình 2 pha.
Các bước thực hiện đối với dạng chuẩn tắc cực đại hóa:
Pha 1: Giải bài toán phụ trợ sau
max − x 0 s.t. − x 0 1 + A x ≤ b , x 0 , x ≥ 0 \begin{align*}
\max & \quad -x_0 \\
\text{s.t.} & \quad -x_0\mathbf{1} + Ax \le b, \quad x_0, x \ge 0
\end{align*} max s.t. − x 0 − x 0 1 + A x ≤ b , x 0 , x ≥ 0
Sử dụng bảng đơn hình có cả hàm mục tiêu gốc z z z , hàm mục tiêu w w w của bài toán phụ trợ và thêm cột x 0 x_0 x 0 .
Nếu giá trị tối ưu của w = 0 w = 0 w = 0 thì bài toán gốc có nghiệm chấp nhận được.
Nếu giá trị tối ưu của w > 0 w > 0 w > 0 thì bài toán gốc vô nghiệm.
Pha 2: Trích ra một bảng mới gồm phần hàm mục tiêu và các cột (biến) của bài toán gốc từ bảng đơn hình
thu được sau khi thực hiện pha 1. Sau đó áp dụng thuật toán đơn hình để giải bài toán LP.
▸ VÍ DỤ
Bài toán gốc:
max x 1 − x 2 + x 3 s.t. 2 x 1 − x 2 + 2 x 3 ≤ − 4 2 x 1 − 3 x 2 + x 3 ≤ − 5 − x 1 + x 2 − 2 x 3 ≤ − 1 \begin{align*}
\max \quad
& \ \ x_1 & -\; & \ \ x_2 & +\; & \ \ x_3 & & \\
\text{s.t.} \quad
& 2x_1 & -\; & \ \ x_2 & +\; & 2x_3 & \le & \ \phantom{-} 4 \\
& 2x_1 & -\; & 3x_2& +\; & \ \ x_3 & \le & \ -5 \\
-& \ \ x_1 & +\; & \ \ x_2& -\; & 2x_3 & \le & \ -1
\end{align*} max s.t. − x 1 2 x 1 2 x 1 x 1 − − − + x 2 x 2 3 x 2 x 2 + + + − x 3 2 x 3 x 3 2 x 3 ≤ ≤ ≤ − 4 − 5 − 1
x 1 , x 2 , x 3 ≥ 0 x_1, x_2, x_3 \ge 0 x 1 , x 2 , x 3 ≥ 0
Pha 1: Viết bài toán phụ trợ như sau
max − x 0 s.t. − x 0 + 2 x 1 − x 2 + 2 x 3 ≤ − 4 − x 0 + 2 x 1 − 3 x 2 + x 3 ≤ − 5 − x 0 − x 1 + x 2 − 2 x 3 ≤ − 1 \begin{align*}
\max \quad
&-x_0 & & & & & & & & \\
\text{s.t.} \quad
&-x_0 & +\; & 2x_1 & -\; & \ \ x_2 & +\; & 2x_3 & \le & \ \phantom{-} 4 \\
&-x_0 & +\; & 2x_1 & -\; & 3x_2& +\; & \ \ x_3 & \le & \ -5 \\
&-x_0 & -\; & \ \ x_1 & +\; & \ \ x_2& -\; & 2x_3 & \le & \ -1
\end{align*} max s.t. − x 0 − x 0 − x 0 − x 0 + + − 2 x 1 2 x 1 x 1 − − + x 2 3 x 2 x 2 + + − 2 x 3 x 3 2 x 3 ≤ ≤ ≤ − 4 − 5 − 1
x 1 , x 2 , x 3 ≥ 0 x_1, x_2, x_3 \ge 0 x 1 , x 2 , x 3 ≥ 0
↓ \downarrow ↓
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b s 1 − 1 2 − 1 2 1 0 0 4 s 2 − 1 2 − 3 1 0 1 0 − 5 s 3 − 1 − 1 1 − 2 0 0 1 − 1 − z 0 1 − 1 1 0 0 0 0 − w − 1 0 0 0 0 0 0 0 ] \left[
\begin{array}{c|ccccccc|c}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & -1 & 2 & -1 & 2 & 1 & 0 & 0 & 4 \\
s_2 & -1 & 2 & -3 & 1 & 0 & 1 & 0 & -5\\
s_3 & -1 & -1 & 1 & -2 & 0 & 0 & 1 & -1\\
\hline
-z & 0 & 1 & -1 & 1 & 0 & 0 & 0 & 0\\
-w & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
\end{array}
\right] s 1 s 2 s 3 − z − w x 0 − 1 − 1 − 1 0 − 1 x 1 2 2 − 1 1 0 x 2 − 1 − 3 1 − 1 0 x 3 2 1 − 2 1 0 s 1 1 0 0 0 0 s 2 0 1 0 0 0 s 3 0 0 1 0 0 b 4 − 5 − 1 0 0
Lần xoay đầu tiên, ta chọn cột xoay là cột x 0 x_0 x 0 với hàng xoay i i i là hàng có chỉ số b i < 0 b_i < 0 b i < 0
(thông thường chọn hàng có chỉ số âm nhất).
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b s 1 − 1 2 − 1 2 1 0 0 4 s 2 − 1 2 − 3 1 0 1 0 − 5 s 3 − 1 − 1 1 − 2 0 0 1 − 1 − z 0 1 − 1 1 0 0 0 0 − w − 1 0 0 0 0 0 0 0 ] \left[
\begin{array}{c|ccccccc|c}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & -1 & 2 & -1 & 2 & 1 & 0 & 0 & 4 \\
s_2 & \boxed{-1} & 2 & -3 & 1 & 0 & 1 & 0 & \boxed{-5} \\
s_3 & -1 & -1 & 1 & -2 & 0 & 0 & 1 & -1 \\
\hline
-z & 0 & 1 & -1 & 1 & 0 & 0 & 0 & 0 \\
-w & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\end{array}
\right] s 1 s 2 s 3 − z − w x 0 − 1 − 1 − 1 0 − 1 x 1 2 2 − 1 1 0 x 2 − 1 − 3 1 − 1 0 x 3 2 1 − 2 1 0 s 1 1 0 0 0 0 s 2 0 1 0 0 0 s 3 0 0 1 0 0 b 4 − 5 − 1 0 0
↓ \downarrow ↓
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b s 1 0 0 2 1 1 − 1 0 9 x 0 1 − 2 3 − 1 0 − 1 0 5 s 3 0 − 3 4 − 3 0 − 1 1 4 − z 0 1 − 1 1 0 0 0 0 − w 0 − 2 3 − 1 0 − 1 0 5 ] \left[
\begin{array}{c|ccccccc|c}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & 0 & 0 & 2 & 1 & 1 & -1 & 0 & 9 \\
x_0 & 1 & -2 & 3 & -1 & 0 & -1 & 0 & 5 \\
s_3 & 0 & -3 & 4 & -3 & 0 & -1 & 1 & 4 \\
\hline
-z & 0 & 1 & -1 & 1 & 0 & 0 & 0 & 0 \\
-w & 0 & -2 & 3 & -1 & 0 & -1 & 0 & 5 \\
\end{array}
\right] s 1 x 0 s 3 − z − w x 0 0 1 0 0 0 x 1 0 − 2 − 3 1 − 2 x 2 2 3 4 − 1 3 x 3 1 − 1 − 3 1 − 1 s 1 1 0 0 0 0 s 2 − 1 − 1 − 1 0 − 1 s 3 0 0 1 0 0 b 9 5 4 0 5
Sau đó tiến hành thuật toán đơn hình với hàm mục tiêu w w w như bình thường.
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b R a t i o s 1 0 0 2 1 1 − 1 0 9 9 / 2 x 0 1 − 2 3 − 1 0 − 1 0 5 5 / 3 s 3 0 − 3 4 − 3 0 − 1 1 4 1 − z 0 1 − 1 1 0 0 0 0 − − w 0 − 2 3 − 1 0 − 1 0 5 − ] \left[
\begin{array}{c|ccccccc|cc}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b & Ratio \\
\hline
s_1 & 0 & 0 & 2 & 1 & 1 & -1 & 0 & 9 & 9/2 \\
x_0 & 1 & -2 & 3 & -1 & 0 & -1 & 0 & 5 & 5/3 \\
s_3 & 0 & -3 & \boxed{4} & -3 & 0 & -1 & 1 & \boxed{4} & 1\\
\hline
-z & 0 & 1 & -1 & 1 & 0 & 0 & 0 & 0 & - \\
-w & 0 & -2 & \boxed{3} & -1 & 0 & -1 & 0 & 5 & - \\
\end{array}
\right] s 1 x 0 s 3 − z − w x 0 0 1 0 0 0 x 1 0 − 2 − 3 1 − 2 x 2 2 3 4 − 1 3 x 3 1 − 1 − 3 1 − 1 s 1 1 0 0 0 0 s 2 − 1 − 1 − 1 0 − 1 s 3 0 0 1 0 0 b 9 5 4 0 5 R a t i o 9/2 5/3 1 − −
↓ \downarrow ↓
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b s 1 0 3 / 2 0 5 / 2 1 − 1 / 2 − 1 / 2 7 x 0 1 1 / 4 0 5 / 4 0 − 1 / 4 − 3 / 4 2 x 2 0 − 3 / 4 1 − 3 / 4 0 − 1 / 4 1 / 4 1 − z 0 1 / 4 0 1 / 4 0 − 1 / 4 1 / 4 1 − w 0 1 / 4 0 5 / 4 0 − 1 / 4 − 3 / 4 2 ] \left[
\begin{array}{c|ccccccc|c}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & 0 & 3/2 & 0 & 5/2 & 1 & -1/2 & -1/2 & 7 \\
x_0 & 1 & 1/4 & 0 & 5/4 & 0 & -1/4 & -3/4 & 2 \\
x_2 & 0 & -3/4 & 1 & -3/4 & 0 & -1/4 & 1/4 & 1 \\
\hline
-z & 0 & 1/4 & 0 & 1/4 & 0 & -1/4 & 1/4 & 1 \\
-w & 0 & 1/4 & 0 & 5/4 & 0 & -1/4 & -3/4 & 2 \\
\end{array}
\right] s 1 x 0 x 2 − z − w x 0 0 1 0 0 0 x 1 3/2 1/4 − 3/4 1/4 1/4 x 2 0 0 1 0 0 x 3 5/2 5/4 − 3/4 1/4 5/4 s 1 1 0 0 0 0 s 2 − 1/2 − 1/4 − 1/4 − 1/4 − 1/4 s 3 − 1/2 − 3/4 1/4 1/4 − 3/4 b 7 2 1 1 2
↓ \downarrow ↓
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b R a t i o s 1 0 3 / 2 0 5 / 2 1 − 1 / 2 − 1 / 2 7 14 / 5 x 0 1 1 / 4 0 5 / 4 0 − 1 / 4 − 3 / 4 2 8 / 5 x 2 0 − 3 / 4 1 − 3 / 4 0 − 1 / 4 1 / 4 1 − − z 0 1 / 4 0 1 / 4 0 − 1 / 4 1 / 4 1 − − w 0 1 / 4 0 5 / 4 0 − 1 / 4 − 3 / 4 2 − ] \left[
\begin{array}{c|ccccccc|cc}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b & Ratio\\
\hline
s_1 & 0 & 3/2 & 0 & 5/2 & 1 & -1/2 & -1/2 & 7 & 14/5 \\
x_0 & 1 & 1/4 & 0 & \boxed{5/4} & 0 & -1/4 & -3/4 & 2 & \boxed{8/5} \\
x_2 & 0 & -3/4 & 1 & -3/4 & 0 & -1/4 & 1/4 & 1 & - \\
\hline
-z & 0 & 1/4 & 0 & 1/4 & 0 & -1/4 & 1/4 & 1 & - \\
-w & 0 & 1/4 & 0 & \boxed{5/4} & 0 & -1/4 & -3/4 & 2 & - \\
\end{array}
\right] s 1 x 0 x 2 − z − w x 0 0 1 0 0 0 x 1 3/2 1/4 − 3/4 1/4 1/4 x 2 0 0 1 0 0 x 3 5/2 5/4 − 3/4 1/4 5/4 s 1 1 0 0 0 0 s 2 − 1/2 − 1/4 − 1/4 − 1/4 − 1/4 s 3 − 1/2 − 3/4 1/4 1/4 − 3/4 b 7 2 1 1 2 R a t i o 14/5 8/5 − − −
↓ \downarrow ↓
[ x 0 x 1 x 2 x 3 s 1 s 2 s 3 b s 1 − 2 1 0 0 1 0 1 3 x 3 4 / 5 1 / 5 0 1 0 − 1 / 5 − 3 / 5 8 / 5 x 2 3 / 5 − 3 / 5 1 0 0 − 2 / 5 − 1 / 5 11 / 5 − z − 1 / 5 1 / 5 0 0 0 − 1 / 5 2 / 5 3 / 5 − w − 1 0 0 0 0 0 0 0 ] \left[
\begin{array}{c|ccccccc|c}
& x_0 & x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & -2 & 1 & 0 & 0 & 1 & 0 & 1 & 3 \\
x_3 & 4/5 & 1/5 & 0 & 1 & 0 & -1/5 & -3/5 & 8/5 \\
x_2 & 3/5 & -3/5 & 1 & 0 & 0 & -2/5 & -1/5 & 11/5 \\
\hline
-z & -1/5 & 1/5 & 0 & 0 & 0 & -1/5 & 2/5 & 3/5 \\
-w & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\end{array}
\right] s 1 x 3 x 2 − z − w x 0 − 2 4/5 3/5 − 1/5 − 1 x 1 1 1/5 − 3/5 1/5 0 x 2 0 0 1 0 0 x 3 0 1 0 0 0 s 1 1 0 0 0 0 s 2 0 − 1/5 − 2/5 − 1/5 0 s 3 1 − 3/5 − 1/5 2/5 0 b 3 8/5 11/5 3/5 0
Như vậy w w w có giá trị tối ưu là 0. Ta thu được cơ sở xuất phát ban đầu là { s 1 , x 3 , x 2 } \{s_1, x_3, x_2\} { s 1 , x 3 , x 2 } , cơ sở này không chứa x 0 x_0 x 0 .
Pha 2: Trích xuất bảng đơn hình của bài toán gốc từ phần bảng đơn hình của bài toán phụ trợ, bỏ đi cột x 0 x_0 x 0
và hàng w w w . Sau đó, áp dụng thuật toán đơn hình với bảng đơn hình mới.
[ x 1 x 2 x 3 s 1 s 2 s 3 b s 1 1 0 0 1 0 1 3 x 3 1 / 5 0 1 0 − 1 / 5 − 3 / 5 8 / 5 x 2 − 3 / 5 1 0 0 − 2 / 5 − 1 / 5 11 / 5 − z 1 / 5 0 0 0 − 1 / 5 2 / 5 3 / 5 ] \left[
\begin{array}{c|cccccc|c}
& x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_1 & 1 & 0 & 0 & 1 & 0 & 1 & 3 \\
x_3 & 1/5 & 0 & 1 & 0 & -1/5 & -3/5 & 8/5 \\
x_2 & -3/5 & 1 & 0 & 0 & -2/5 & -1/5 & 11/5 \\
\hline
-z & 1/5 & 0 & 0 & 0 & -1/5 & 2/5 & 3/5 \\
\end{array}
\right] s 1 x 3 x 2 − z x 1 1 1/5 − 3/5 1/5 x 2 0 0 1 0 x 3 0 1 0 0 s 1 1 0 0 0 s 2 0 − 1/5 − 2/5 − 1/5 s 3 1 − 3/5 − 1/5 2/5 b 3 8/5 11/5 3/5
↓ \downarrow ↓
[ x 1 x 2 x 3 s 1 s 2 s 3 b R a t i o s 1 1 0 0 1 0 1 3 3 x 3 1 / 5 0 1 0 − 1 / 5 − 3 / 5 8 / 5 − x 2 − 3 / 5 1 0 0 − 2 / 5 − 1 / 5 11 / 5 − − z 1 / 5 0 0 0 − 1 / 5 2 / 5 3 / 5 − ] \left[
\begin{array}{c|cccccc|cc}
& x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b & Ratio \\
\hline
s_1 & 1 & 0 & 0 & 1 & 0 & \boxed{1} & 3 & \boxed{3} \\
x_3 & 1/5 & 0 & 1 & 0 & -1/5 & -3/5 & 8/5 & -\\
x_2 & -3/5 & 1 & 0 & 0 & -2/5 & -1/5 & 11/5 & -\\
\hline
-z & 1/5 & 0 & 0 & 0 & -1/5 & \boxed{2/5} & 3/5 & - \\
\end{array}
\right] s 1 x 3 x 2 − z x 1 1 1/5 − 3/5 1/5 x 2 0 0 1 0 x 3 0 1 0 0 s 1 1 0 0 0 s 2 0 − 1/5 − 2/5 − 1/5 s 3 1 − 3/5 − 1/5 2/5 b 3 8/5 11/5 3/5 R a t i o 3 − − −
↓ \downarrow ↓
[ x 1 x 2 x 3 s 1 s 2 s 3 b s 3 1 0 0 1 0 1 3 x 3 4 / 5 0 1 3 / 5 − 1 / 5 0 17 / 5 x 2 − 2 / 5 1 0 1 / 5 0 0 14 / 5 − z − 1 / 5 0 0 − 2 / 5 − 1 / 5 0 − 3 / 5 ] \left[
\begin{array}{c|cccccc|c}
& x_1 & x_2 & x_3 & s_1 & s_2 & s_3 & b \\
\hline
s_3 & 1 & 0 & 0 & 1 & 0 & 1 & 3 \\
x_3 & 4/5 & 0 & 1 & 3/5 & -1/5 & 0 & 17/5 \\
x_2 & -2/5 & 1 & 0 & 1/5 & 0 & 0 & 14/5 \\
\hline
-z & -1/5 & 0 & 0 & -2/5 & -1/5 & 0 & -3/5 \\
\end{array}
\right] s 3 x 3 x 2 − z x 1 1 4/5 − 2/5 − 1/5 x 2 0 0 1 0 x 3 0 1 0 0 s 1 1 3/5 1/5 − 2/5 s 2 0 − 1/5 0 − 1/5 s 3 1 0 0 0 b 3 17/5 14/5 − 3/5
Vậy nghiệm tối ưu là ( x 1 , x 2 , x 3 ) ⊤ = ( 0 , 14 5 , 17 5 ) ⊤ (x_1, x_2, x_3)^\top = (0, \frac{14}{5}, \frac{17}{5})^\top ( x 1 , x 2 , x 3 ) ⊤ = ( 0 , 5 14 , 5 17 ) ⊤ với giá trị tối ưu là z = 3 5 z = \frac{3}{5} z = 5 3 .