. •<br />
<br />
\ W X<br />
<br />
F { Q J<br />
<br />
W U u Q K<br />
<br />
N K R D<br />
<br />
K e F<br />
<br />
GIẢI MỘT LỚP BÀI TOÁN<br />
QUI HOẠCH PHÂN THỨC PHI TUYẾN<br />
GS.TS. Trần Vũ Thiệu<br />
Khoa Toán - Tin<br />
Tóm tắt. Bài này trình bày phương pháp giải một lớp bài toán<br />
qui hoạch phân thức phi tuyến. Dùng biến đổi Charnes-Cooper ([2], tr.<br />
54), bài toán được đưa về một qui hoạch phi tuyến tương đương và<br />
sau đó qui hoạch này lại được biến đổi thành một bài toán qui hoạch<br />
tuyến tính, với một biến số và hai ràng buộc nhiều hơn so với bài toán<br />
ban đâu. Cuối bài nêu ra các ví dụ số minh hoạ cho phương pháp giải.<br />
1. NỘI DUNG BÀI TOÁN<br />
Xét bài toán qui hoạch phân thức phi tuyến có dạng:<br />
p 0 (t 0 ) p1 ( t 1 ) x 1 p n ( t n ) x n<br />
(P)<br />
,<br />
min<br />
xk , tk , qk<br />
q 0 q1 x 1 q n x n<br />
với các điều kiện<br />
A1x1 + ... + Anxn ≤ b, x1 ≥ 0, ... , xn ≥ 0.<br />
ak ≤ tk ≤ b k, ck ≤ qk ≤ dk, k = 0, 1, ... , n,<br />
trong đó ak, bk, ck, dk ∈ ℝ, Ak ∈ ℝm (k = 1, ... , n) và b ∈ ℝm cho trước, pk(t) là hàm liên tục<br />
theo t ∈ [ak, bk] ⊂ ℝ. Các biến cần tìm của (P) là xk. tk, qk, k = 1, ... , n. Ta giả thiêt:<br />
a) Tập X = {x ∈ ℝn : A1x1 + ... + Anxn ≤ b, x ≥ 0} ≠ ∅ và bị chặn;<br />
b) q 0 + q1x1+ ... + qnxn > 0 ∀x = (x1, ... , xn)T ∈ X, ∀qk ∈ [ck, d k].<br />
Khi ak = bk, ck = dk với mọi k = 0, 1, ... , n (tức mọi pk, qk cho trước), (P) trở thành bài<br />
toán qui hoạch phân tuyến tính ([2], tr. 41 và [3], tr. 703) thông thường, ký hiệu (LFP). Khi<br />
xem mọi tk, qk như các biến số thì (P) là một bài toán qui hoạch phân thức phi tuyến. Để cho<br />
tiện về sau, ta ký hiệu A = (A1, A2, ... , An). Trường hợp mọi pk(tk) tuyến tính đã xét ở [4].<br />
Có thể giải thích ý nghĩa của bài toán (P) như sau: Giả sử một xí nghiệp có thể dùng m<br />
loại vật tư hiện có để sản xuất ra n loại sản phẩm. Gọi bi là lượng vật tư i (i = 1, ... , m) mà xí<br />
nghiệp có và aik là định mức tiêu hao vật tư i để sản xuất một đơn vị sản phẩm k (k = 1, ... , n).<br />
Mỗi đơn vị sản phẩm k sản xuất ra sẽ cho lợi nhuận là pk(tk) phụ thuộc tham số tk ∈ [ak, bk] và<br />
tốn chi phí sản xuất là qk∈ [ck, dk], p0(t0) là lợi nhuận cố định thu được và q0 là chi phí cố<br />
định cần bỏ ra (p0, q0 không phụ thuộc số lượng sản phẩm sản xuất). Hỏi với số vật tư đã có xí<br />
nghiệp nên sản xuất bao nhiêu đơn vị sản phẩm mỗi loại sao cho hiệu qủa sản xuất của xí<br />
nghiệp (đo bằng tỉ số giữa tổng lợi nhuận thu được trên tổng chi phi sản xuất) là lớn nhất? Bài<br />
toán này dẫn đến mô hình qui hoạch phân thức có dạng bài toán (P).<br />
Dùng phép đổi biến số Charnes - Cooper ([2], tr. 54), ta đưa bài toán (P) về một bài toán<br />
tối ưu phi tuyến tương đương: Thêm vào một biến mới<br />
1<br />
y0 =<br />
> 0,<br />
q 0 q1x 1 q n x n<br />
<br />
7 U<br />
<br />
u Q J<br />
<br />
9 L<br />
<br />
K e F<br />
<br />
7 K<br />
<br />
Q J<br />
<br />
/ R Q J<br />
<br />
72<br />
<br />
. •<br />
<br />
\ W X<br />
<br />
F { Q J<br />
<br />
W U u Q K<br />
<br />
N K R D<br />
<br />
K e F<br />
<br />
(P) được viết lại thành bài toán:<br />
p0(t0)y0 + p1(t1)y0x1 + ... + pn(tn)y0 xn → min,<br />
q0 y0 + q1 y0 x1 + ... + q ny0 xn = 1,<br />
A1 y0x1 + ... + Any0 xn ≤ by0, x1 ≥ 0, ... , xn ≥ 0, y0 ≥ 0.<br />
ak ≤ tk ≤ b k, ck ≤ qk ≤ d k, k = 0, 1, ... , n.<br />
Bằng cách thay các biến xk bởi yk = y0 xk với mọi k = 1, ... , n, ta đưa bài toán trên về<br />
dạng tương đương:<br />
(Q)<br />
p0(t0)y0 + p1(t1)y1 + ... + p n(tn)yn → min,<br />
q0 y0 + q1 y1 + ... + qnyn = 1,<br />
- by0 + A1y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
ak ≤ tk ≤ b k, ck ≤ qk ≤ d k, k = 0, 1, ... , n.<br />
Định lý sau cho thấy có thể giải (Q) thay cho bài toán (P).<br />
<br />
Định lý 1. Với các giả thiết đã nêu, nếu y* = ( y , y1 , ... , y )T là một nghiệm tối ưu<br />
0<br />
n<br />
<br />
của bài toán (Q) thì y > 0 và x* = ( x1 , x , ... , x )T với x = y / y sẽ là một nghiệm tối<br />
0<br />
2<br />
n<br />
k<br />
k<br />
0<br />
ưu của bài toán (P) ban đầu.<br />
Chứng minh. Trước tiên ta chứng minh y > 0. Thật vậy, nếu y = 0 thì do q Ty* = 1<br />
0<br />
0<br />
<br />
nên đặt z = ( y1 , ... , y ) ta có z ≠ 0 và z thỏa mãn Az ≤ 0, z ≥ 0. Khi đó z là một hướng lùi xa<br />
n<br />
của tập lồi X, bởi vì với bất kỳ x ∈ X (tức Ax ≤ b, x ≥ 0) ta có A(x + z) = Ax + Az ≤ b và<br />
x + z ≥ 0 với mọi ≥ 0. Chứng tỏ x + z ∈ X với mọi ≥ 0, điều này trái với giả thiêt tập X<br />
bị chặn. Vậy phải có y ≠ 0. Do y ≥ 0 nên y > 0.<br />
0<br />
0<br />
0<br />
Bây giờ ta chứng minh x* là nghiệm tối ưu của (P). Thật vậy, do y* là nghiệm của (Q),<br />
> 0 nên x* nghiệm đúng Ax* ≤ b, x* ≥ 0, tức x* ∈ X. Lấy bất kỳ x ∈ X (Ax ≤ b, x ≥ 0).<br />
Do giả thiêt q0 + q1x1 + ... + qnxn > 0 nên y = (y0, y1, ... , yn) với y0 = 1/(q 0 + q1x1 + ... + q nxn)<br />
> 0, yk = y0 xk ≥ 0, k = 1, ... , n, sẽ thoả mãn mọi ràng buộc của bài toán (Q). Mặt khác, y* là<br />
nghiệm tối ưu của (Q) nên phải có<br />
<br />
p 0(t0) y + p1(t1) y1 + ... + p n(tn) y ≤ p0(t0)y0 + p1(t1)y1 + ... + p n(tn)yn.<br />
0<br />
n<br />
<br />
y<br />
0<br />
<br />
Bằng cách thay y = y . x , yk = xk/(q0 + q 1x1 + ... + q nxn), k = 1, ... , n và y0 = 1/(q 0 +<br />
k<br />
0<br />
k<br />
q1x1 + ... + q nxn) ta thấy<br />
<br />
y (p0(t0) + p 1(t1) x1 + ... + pn(tn) x ) ≤<br />
0<br />
n<br />
≤ (p0(t0) + p 1(t1)x1 + ... + pn(tn)xn)/(q 0 + q1x1 + ... + qnxn).<br />
<br />
Chia vế trái bất đẳng thức trên cho q Ty* = y (q0 + q1 x1 + ... + q n x ) = 1 ta nhận được<br />
0<br />
n<br />
<br />
<br />
p 0 ( t 0 ) p1 ( t 1 ) x 1 p n ( t n ) x <br />
n<br />
<br />
q 0 q1 x 1<br />
<br />
qnx<br />
n<br />
<br />
≤<br />
<br />
p 0 ( t 0 ) p1 ( t 1 ) x 1 p n ( t n ) x n<br />
.<br />
q 0 q1x n q n x n<br />
<br />
∎<br />
<br />
Đó là điều cần chứng minh.<br />
2. BÀI TOÀN QUI HOẠCH TUYẾN TÍNH TƯƠNG ĐƯƠNG<br />
<br />
Ký hiệu k = min p k ( t ) , k = max p k ( t ) , k = 0, 1, ... , n (ak, bk tồn tại do p k(t) liên tục).<br />
a k t bk<br />
<br />
a k t b k<br />
<br />
Khi đó, các ràng buộc cuối của (Q) có thể viết lại dưới dạng<br />
pk(tk) = k + (k - k)k với 0 ≤ k ≤ 1, k = 0, 1, ... , n,<br />
<br />
7 U<br />
<br />
u Q J<br />
<br />
9 L<br />
<br />
K e F<br />
<br />
7 K<br />
<br />
Q J<br />
<br />
/ R Q J<br />
<br />
(1)<br />
<br />
73<br />
<br />
. •<br />
<br />
\ W X<br />
<br />
F { Q J<br />
<br />
W U u Q K<br />
<br />
N K R D<br />
<br />
K e F<br />
<br />
qk = ck + (dk - ck)k với 0 ≤ k ≤ 1, k = 0, 1, ... , n.<br />
Thay pk(tk), qk theo (1) - (2) vào (Q) ta nhận được bài toán:<br />
(R)<br />
<br />
(2)<br />
<br />
(0 + (0 - 0)0)y0 + (1 + (1 - 1)1)y1 + ... + (n + ( n - n)n)yn → min,<br />
(c0 + (d0 - c0)0)y0 + (c1 + (d 1 - c1)1)y1 + ... + (cn + (d n - cn)n)yn = 1,<br />
(3)<br />
- by0 + A1 y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
0 ≤ k ≤ 1, 0 ≤ k ≤ 1, k = 0, 1, . . . , n.<br />
<br />
Ràng buộc đẳng thức (3) có thể viết lại thành<br />
(d0 - c0)0 y0 + (d1 - c1)1 y1 + ... + (dn - cn)nyn + c0 y0 + c1 y1 + ... + cnyn = 1,<br />
Do yk ≥ 0, 0 ≤ k ≤ 1, ck - dk ≤ 0 với mọi k = 0, 1, ... , n, nên ta có<br />
1 ≥ 1 + (c0 - d0)0 y0 + (c1 - d1)1y1 + ... + (cn - dn)n yn ≥<br />
≥ 1 + (c0 - d0)y0 + (c1 - d1)y1 + ... + (cn - d n)yn.<br />
Thay só 1 ở biểu thức giữa của (5) bằng biểu thức (4) ta nhận được<br />
1 ≥ c0 y0 + c1 y1 + ... + cnyn ≥ 1 + (c0 - d0)y0 + (c1 - d1)y1 + ... + (cn - d n)yn.<br />
Từ bất đẳng thức đầu và bất đẳng thức cuối của (6) cho thấy<br />
c0 y0 + c1 y1 + ... + cnyn ≤ 1,<br />
d0 y0 + d1 y1 + ... + dnyn ≥ 1.<br />
<br />
(4)<br />
<br />
(5)<br />
(6)<br />
(7)<br />
(8)<br />
<br />
Ngược lại, nếu có y = (y0, y1, ... , yn)T thoả mãn (7) - (8) thì đặt k = ∀k, trong đó<br />
<br />
<br />
0<br />
khi c T y 1<br />
<br />
1<br />
khi d T y 1 ,<br />
= <br />
<br />
1 (c 0 c1 y1 c n y n )<br />
<br />
(d 0 c 0 ) (d1 c1 ) y1 (d n c n ) y n<br />
<br />
(9)<br />
<br />
ta nhận được q = c + (d - c) và qTy = 1, tức y, q sẽ thoả mãn (3).<br />
Do vậy bằng cách sử dụng (7) - (8) thay cho (3), bài toán (R) biến đổi thành bài toán qui<br />
hoạch phi tuyến:<br />
(S)<br />
<br />
(0 + (0 - 0)0)y0 + (1 + (1 - 1)1)y1 + ... + (n + ( n - n)n)yn → min,<br />
c0 y0 + c1 y1 + ... + cnyn ≤ 1,<br />
d0 y0 + d1 y1 + ... + dnyn ≥ 1.<br />
- by0 + A1y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
0 ≤ k ≤ 1, k = 0, 1, . . . , n.<br />
<br />
Hàm mục tiêu của bài toán này có dạng đặc biệt. Ta sẽ tìm cách thay nó bằng một hàm<br />
mục tiêu tuyến tính.<br />
<br />
Thật vậy, giả sử y = ( y 0 , y1 , ... , y n ) là một lời giải chấp nhận được bất kỳ của (S) với<br />
0 ≤ k ≤ 1, k - k ≥ 0 với mọi k = 0, 1, ... , n. Khi đó giá trị hàm mục tiêu tại y có đánh giá<br />
(0 + (0 - 0)0) y 0 + (1 + (1 - 1)1) y1 + ... + (n + (n - n)n) y n =<br />
= 0 y0 + 1 y1 + ... + n y n + (0 - 0)0 y0 + (1 - 1)1 y1 + ... + (n - n)n y n ≥<br />
≥ 0 y 0 + 1 y1 + ... + n y n (do y k , k, k - k ≥ 0 ∀k = 0, 1, ... , n).<br />
<br />
74<br />
<br />
7 U<br />
<br />
u Q J<br />
<br />
9 L<br />
<br />
K e F<br />
<br />
7 K<br />
<br />
Q J<br />
<br />
/ R Q J<br />
<br />
. •<br />
<br />
\ W X<br />
<br />
F { Q J<br />
<br />
W U u Q K<br />
<br />
N K R D<br />
<br />
K e F<br />
<br />
Điều này chứng tỏ lời giải tối ưu của (S) đạt được khi mọi k = 0. Chính vì thế có thể<br />
thay thế bài toán tối ưu phi tuyến (S) bằng qui hoạch tuyến tính:<br />
0 y0 + 1 y1 + ... + n yn → min,<br />
c0 y0 + c1y1 + ... + cnyn ≤ 1,<br />
d 0 y0 + d1y1 + ... + d nyn ≥ 1.<br />
- by0 + A1y1 + ... + Anyn ≤ 0,<br />
y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
Như vậy, bài toán qui hoạch phân thức (P) qui được về bài toán qui hoạch tuyến tính<br />
(LP). Từ nghiệm tối ưu của bài toán tuyến tính này cùng với p k(tk) = k, tức tk = argmin pk(t)<br />
(tương ứng với k = 0), q k = ck + (d k - ck)k, k = tính theo (9), ta thu được nghiệm tối ưu<br />
của bài toán (Q). Từ đó, theo Định lý 1 ta tính ra nghiệm tối ưu của bài toán ban đầu (P).<br />
(LP)<br />
<br />
3. THUẬT TOÁN GIẢI<br />
Để đưa ra thuật toán giải, ta nhắc lại tóm tắt lập luận trên như sau.<br />
Bài toán qui hoạch phân thức:<br />
<br />
(P)<br />
<br />
min<br />
xk , tk , q k<br />
<br />
p 0 ( t 0 ) p1 ( t 1 ) x 1 p n ( t n ) x n<br />
,<br />
q 0 q1x1 q n x n<br />
<br />
A1x1 + ... + Anxn ≤ b, x1 ≥ 0, ... , xn ≥ 0.<br />
ak ≤ tk ≤ b k, ck ≤ qk ≤ dk, k = 0, 1, ... , n,<br />
trong đó ak, bk, ck, d k ∈ ℝ, Ak ∈ ℝm (k = 1, ... , n), b ∈ ℝm cho trước; pk(t) là hàm liên tục<br />
theo t ∈ [ak, bk]. Gỉa thiết:<br />
a) X = {x ∈ ℝn : A1x1 + ... + Anxn ≤ b, x ≥ 0} ≠ ∅, compac và<br />
b) q 0 + q1x1+ ... + qnxn > 0 ∀x = (x1, ... , xn)T ∈ X, ∀qk ∈ [ck, d k].<br />
1. Thực hiện phép biến đổi Charnes - Cooper<br />
1<br />
y0 =<br />
, yk = y0xk, k = 1, ... , n<br />
q 0 q1 x 1 q n x n<br />
bài toán ban đầu được đưa về dạng (các biến yk, tk, q k, k = 0, 1, ... , n)<br />
(Q)<br />
p0(t0)y0 + p1(t1)y1 + ... + p n(tn)yn → min,<br />
q0 y0 + q1 y1 + ... + qnyn = 1,<br />
- by0 + A1y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
ak ≤ tk ≤ b k, ck ≤ qk ≤ d k, k = 0, 1, . . . , n.<br />
2. Gỉa sử k = min p k ( t ) , k = max p k ( t ) . Thực hiện phép đổi biến số<br />
a k t bk<br />
<br />
a k t b k<br />
<br />
pk = k + (k - k)k, qk = ck + (d k - ck)k, k = 0, 1, . . . , n<br />
đưa bài toán (Q) về dạng (các biến yk, k, k, k = 0, 1, ... , n)<br />
(R)<br />
(0 + (0 - 0)0)y0 + (1 + (1 - 1)1)y1 + ... + (n + (n - n)n)yn → min,<br />
(c0 + (d 0 - c0)0)y0 + (c1 + (d1 - c1)1)y1 + ... + (cn + (d n - cn)n)yn = 1,<br />
- by0 + A1y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
0 ≤ k ≤ 1, 0 ≤ k ≤ 1, k = 0, 1, . . . , n.<br />
<br />
7 U<br />
<br />
u Q J<br />
<br />
9 L<br />
<br />
K e F<br />
<br />
7 K<br />
<br />
Q J<br />
<br />
/ R Q J<br />
<br />
75<br />
<br />
. •<br />
<br />
\ W X<br />
<br />
F { Q J<br />
<br />
W U u Q K<br />
<br />
N K R D<br />
<br />
K e F<br />
<br />
3. Thay ràng buộc đẳng thức trong (R) bởi hai bất đẳng thức tương đương ta có bài toán<br />
(S)<br />
(0 + (0 - 0)0)y0 + (1 + (1 - 1)1)y1 + ... + (n + (n - n)n)yn → min,<br />
c0 y0 + c1 y1 + ... + cnyn ≤ 1,<br />
d 0 y0 + d 1 y1 + ... + dnyn ≥ 1.<br />
- by0 + A1 y1 + ... + Anyn ≤ 0, y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
0 ≤ k ≤ 1, k = 0, 1, . . . , n.<br />
4. Cho mọi k = 0 ta đi đến bài toán qui hoạch tuyến tính (các biến yk, k = 0, 1, ... , n)<br />
(LP)<br />
0 y0 + 1 y1 + ... + n yn → min,<br />
c0 y0 + c1y1 + ... + cnyn ≤ 1,<br />
d 0 y0 + d1y1 + ... + d nyn ≥ 1.<br />
- by0 + A1y1 + ... + Anyn ≤ 0,<br />
y0 ≥ 0, y1 ≥ 0, ... , yn ≥ 0.<br />
• Tóm lại, thuật toán là lập và giải qui hoạch tuyến tính này.<br />
Giả sử nhận được lời giải tối ưu:<br />
<br />
y* = ( y , y1 , ... , y )T.<br />
0<br />
n<br />
Khi đó, lời giải tối ưu của bài toán qui hoạch phân thức ban đầu là<br />
<br />
x* = ( x1 , ... , x )T với x = y / y ∀k = 1, ... , n.<br />
0<br />
n<br />
k<br />
k<br />
tk = arg min p k (t ) , qk = ck + (dk - ck)k, với k xác định theo (9).<br />
a k t b k<br />
<br />
4. VÍ DỤ MINH HOẠ<br />
Giải bài toán qui hoạch phân thức phi tuyến:<br />
<br />
min<br />
xk , t k , qk<br />
<br />
p 0 ( t 0 ) p1 ( t 1 ) x 1 p 2 ( t 2 ) x 2<br />
q 0 q1 x1 q 2 x 2<br />
<br />
với các điều kiện<br />
- x1 + x2 ≤ 2, x1 + 2x2 ≤ 10, x1 - 4x2 ≤ 4, x1 ≥ 0, x2 ≥ 0,<br />
2<br />
p0(t0) = t0 + 5, p 1(t1) = t 1 + 2, p 2(t2) = t 3 ,<br />
2<br />
0 ≤ t0 ≤ 3, - 1 ≤ t1 ≤ 2, - 1 ≤ t2 ≤ 3,<br />
1 ≤ q 0 ≤ 5, 2 ≤ q1 ≤ 4, 1 ≤ q2 ≤ 3.<br />
Miền chấp nhận được X của bài toán được vẽ ở Hình 1.<br />
Ta thấy 0 = min {p 0(t0)} = 5, 1 = min {p1(t1)} = 2, 2 = min {p2(t2)} = - 1.<br />
Thay bài toán cần giải bằng bài toán qui hoạch tuyến tính:<br />
5y0 + 2y1 - y2 → min,<br />
y0 + 2y1 + y2 ≤ 1, 5y0 + 4y1 + 3y2 ≥ 1,<br />
- 2y0 - y1 + y2 ≤ 0, - 10y0 + y1 + 2y2 ≤ 0, - 4y0 + y1 - 4y2 ≤ 0,<br />
y0 ≥ 0, y1 ≥ 0, y2 ≥ 0.<br />
<br />
Lời giải tối ưu của bài toán này là y = 0,04; y1 = 0,08; y = 0,16 với giá trị mục tiêu<br />
0<br />
2<br />
tối ưu = 0,2.<br />
<br />
76<br />
<br />
7 U<br />
<br />
u Q J<br />
<br />
9 L<br />
<br />
K e F<br />
<br />
7 K<br />
<br />
Q J<br />
<br />
/ R Q J<br />
<br />