Từ thời cổ đại, khi thực hiện các công việc của mình, loài người đã luôn hướng tới cách làm tốt nhất trong các cách làm có thể được (tìm phương án tối ưu trong các phương án). Khi toán học phát triển, người ta đã mô hình hóa toán học các việc cần làm, nghĩa là biểu thị các mục tiêu cần đạt được, các yêu cầu hay các điều kiện cần thỏa mãn bằng ngôn ngữ toán học để tìm lời giải tối ưu cho nó. Từ đó hình thành nên các bài toán tối ưu. Quy hoạch tuyến tính (QHTT) là lĩnh vực toán học nghiên cứu các bài toán tối ưu với hữu hạn biến, trong đó mục tiêu và các điều kiện cần thỏa mãn được biểu thị bằng các hàm số, các phương trình hay bất phương trình tuyến tính. Lý thuyết Quy hoạch tuyến tính bắt đầu phát triển từ năm 1939 khi nhà toán học người Nga L.V. Kantorovich (Giải thưởng Nobel về Kinh tế năm 1975) đề xuất thuật toán đầu tiên để giải bài toán QHTT trong một loạt các công trình nghiên cứu về kế hoạch hóa sản xuất. Tuy nhiên QHTT chỉ được nhiều người biết đến vào năm 1947, khi G.B. Dantzig công bố thuật toán đơn hình để giải các bài toán QHTT cho quân lực Mỹ. Cũng năm đó Koopmans đã chỉ ra rằng QHTT là công cụ tuyệt vời để phân tích lý thuyết kinh tế cổ điển. Từ năm 1952, người Mỹ đã bắt đầu lập trình, giải các bài toán QHTT trên máy tính. Hiện nay QHTT vẫn được tiếp tục nghiên cứu nhằm tìm ra các thuật toán tốt hơn.
Trang 1C hương 9
_
Từ thời cổ đại, khi thực hiện các công việc của mình, loài người đã luôn hướng tới cách làm tốt nhất trong các cách làm có thể được (tìm phương án tối ưu trong các phương án) Khi toán học phát triển, người ta đã mô hình hóa toán học các việc cần làm, nghĩa là biểu thị các mục tiêu cần đạt được, các yêu cầu hay các điều kiện cần thỏa mãn bằng ngôn ngữ toán học để tìm lời giải tối ưu cho
nó Từ đó hình thành nên các bài toán tối ưu
Quy hoạch tuyến tính (QHTT) là lĩnh vực toán học nghiên cứu các bài toán tối ưu với hữu hạn biến, trong đó mục tiêu và các điều kiện cần thỏa mãn được biểu thị bằng các hàm số, các phương trình hay bất phương trình tuyến tính
Lý thuyết Quy hoạch tuyến tính bắt đầu phát triển từ năm 1939 khi nhà toán học người Nga L.V Kantorovich (Giải thưởng Nobel về Kinh tế năm 1975) đề xuất thuật toán đầu tiên để giải bài toán QHTT trong một loạt các công trình nghiên cứu về kế hoạch hóa sản xuất Tuy nhiên QHTT chỉ được nhiều người biết đến vào năm 1947, khi G.B Dantzig công bố thuật toán đơn hình để giải các bài toán QHTT cho quân lực Mỹ Cũng năm đó Koopmans đã chỉ ra rằng QHTT là công cụ tuyệt vời để phân tích lý thuyết kinh tế cổ điển Từ năm 1952, người Mỹ đã bắt đầu lập trình, giải các bài toán QHTT trên máy tính Hiện nay QHTT vẫn được tiếp tục nghiên cứu nhằm tìm ra các thuật toán tốt hơn
9.1 BÀI TOÁN QUY HOẠCH TUYẾN TÍNH Một số ví dụ thực tế dẫn đến bài toán Quy hoạch tuyến tính
Bài toán bố trí máy trong sản xuất Một phân xưởng có hai máy đặc chủng M1, M2 sản xuất hai loại sản phẩm ký hiệu là I và II Một tấn sản phẩm loại I lãi 2 triệu đồng, một tấn sản phẩm loại II lãi 1.6 triệu đồng Muốn sản xuất 1 tấn sản phẩm loại I phải dùng máy M1 trong 3 giờ và máy M2
trong 1 giờ Muốn sản xuất 1 tấn sản phẩm loại II phải dùng máy M1 trong 1 giờ và máy M2 trong 1 giờ Một máy không thể dùng để sản xuất đồng thời hai loại sản phẩm Máy M1 làm việc không quá
6 giờ trong một ngày, máy M2 một ngày chỉ làm việc không quá 4 giờ Hãy đặt kế hoạch sản xuất sao cho tổng số tiền lãi cao nhất
Lập mô hình toán Gọi x i là số tấn sản phẩm loại i sản xuất trong một ngày
Số giờ làm việc (mỗi ngày) của máy M1 là 3x1 + x2 và máy M2 là x1 + x2
Số tiền lãi mỗi ngày là 2x1 + 1.6x2 (triệu đồng)
Ta phải tìm vectơ x = (x1, x2) sao cho
f (x) = 2x1 + 1.6x2 → max
và thỏa mãn các điều kiện
Trang 2
≥
≤ +
≤ +
0 , 4
6 3
2 1
2 1
2 1
x x
x x
x x
☺
Bài toán về chế độ dinh dưỡng Người ta cần một lượng chất dinh dưỡng A, B, C do các thức ăn
α, β, γ, δ cung cấp Hàm lượng chất dinh dưỡng có trong 1 đơn vị thức ăn cho như sau
A B C
α : 20 5 0.5
β : 15 8 0
γ : 5 2 2
δ : 10 25 0
Nhu cầu về loại dinh dưỡng: chất A không dưới 250g, chất B không dưới 170g, chất C không vượt quá 30g Giá mua một đơn vị thức ăn α, β, γ, δ tương ứng là 2, 2.5, 0.8, 1.5 nghìn đồng/g Hãy lập một thực đơn sao cho bữa ăn có giá thành rẻ nhất mà vẫn đáp ứng được yêu cầu về dinh dưỡng ☺
Lập mô hình toán Gọi khối lượng thức ăn α, β, γ, δ cần mua tương ứng là x1, x2, x3, x4
Tổng hàm lượng chất dinh dưỡng A trong bữa ăn là 20x1+ 15x2 + 5x3 + 10x4
Tổng hàm lượng chất dinh dưỡng B trong bữa ăn là 5x1+ 8x2 + 2x3 + 25x4
Tổng hàm lượng chất dinh dưỡng C trong bữa ăn là 0.5x1+ 2x3
Giá thành bữa ăn là 2x1+ 2.5x2 + 0.8x3 + 1.5x4
Ta phải tìm vectơ x = (x1, x2, x3, x4) sao cho
f (x) = 2x1+ 2.5x2 + 0.8x3 + 1.5x4 → min
và thỏa mãn các điều kiện
≥
≤ +
≥ + + +
≥ + + +
0 , , ,
30 2 5 0
170 25
2 8 5
250 10
5 15 20
4 2 2 1
3 1
4 3 2 1
4 3 2 1
x x x x
x x
x x x x
x x x x
☺
Bài toán vận tải Biết số lượng hàng có trong kho Ai là a i (i = 1, 2), yêu cầu của cửa hàng B j là b j (j
= 1, 2), cước phí vận chuyển một đơn vị hàng từ Ai đến Bj tương ứng là c ij Lập kế hoạch vận chuyển hàng sao cho các cửa hàng đều nhận đủ hàng và tổng cước phí vận chuyển là nhỏ nhất
Lập mô hình toán Gọi x' j là số lượng hàng vận chuyển từ A1 đến cửa hàng Bj Gọi x" j là số lượng hàng vận chuyển từ A2 đến cửa hàng Bj
Tổng lượng hàng chuyển từ A1 đến hai cửa hàng là x'1 + x'2
Tổng lượng hàng chuyển từ A2 đến hai cửa hàng là x"1 + x"2
Tổng lượng hàng B1 nhận được từ hai kho là x'1 + x"1
Tổng lượng hàng B2 nhận được từ hai kho là x'2 + x"2
Tổng cước phí phải trả là c11x'1 + c12x'2 + c21x"1 + c22x"2
Ta phải tìm vectơ x = (x'1, x'2, x"1, x"2) sao cho
f (x) = c11x'1 + c12x'2 + c21x"1 + c22x"2 → min
và thỏa mãn các điều kiện
x'1 + x'2 ≤ a1
x"1 + x"2 ≤ a2
x'1 + x"1 = b1
x'2 + x"2 = b2
x'1, x'2, x"1, x"2 ≥ 0 ☺
Trang 3Bài toán Quy hoạch tuyến tính dạng tổng quát
Bài toán QHTT dạng tổng quát là: Tìm vectơ x = (x1, x2, , x n) ∈Rn sao cho
f (x) = ∑
=
n i i
i x c
1 → min (max) với các điều kiện
=
∈
=
≤
=
≥
=
=
+
=
≤
=
≥
∑
∑
∑
=
=
=
) , , (
) , , (
0
) , , 1 ( 0
) , , (
) , , 1 (
) , , 1 (
1 1 1
n k j R x
k h j x
h j
x
m s i b x a
s r
i b x a
r i
b x a
j j j
n j
i j ij
n j
i j ij
n j
i j ij
Nếu ký hiệu D là tập tất cả các vectơ x thỏa mãn hệ bất phương trình trên, thì đây chính là bài toán tìm min (max) của hàm f(x) trên D Ta gọi D là miền thừa nhận được Vectơ x* ∈D sao cho f(x)
đạt min (max) được gọi là một phương án tối ưu, hay là một nghiệm của bài toán này
Chú ý Bài toán Quy hoạch tuyến tính có thể có một nghiệm duy nhất, vô nghiệm hoặc có vô số
nghiệm
Ta gọi
a ) f(x) là hàm mục tiêu
b)
=
=
+
=
≤
=
≥
∑
∑
∑
=
=
=
n
j
i
j
ij
n
j
i
j
ij
n
j
i
j
ij
m s i b
x
a
s r
i b
x
a
r i
b
x
a
1
1
1
) , , (
) , , 1 (
) , , 1 (
là hệ ràng buộc.
=
∈
=
≤
=
≥
) , , (
) , , (
0
) , , 1 ( 0
n k j R x
k h j x
h j
x
j j
j
là điều kiện tất yếu
Dễ thấy rằng
1) f(x*) = min{f(x) | x∈D} ⇔ -f(x*) = max{-f(x) | x∈D}
n
j
i
ij x b
a ≥
∑
=1
n j
i
ij x b
a ≤−
−
∑
=1 ) (
n
j
i
ij x b
a ≤
∑
=1
1
≥
= +
∑
=
y b y x
n j i ij
n
j
i
ij x b
a ≥
∑
=1
1
≥
=
−
∑
=
y b y x
n j i ij
(y được gọi là biến chênh lệch)
5) Nếu biến x jkhông bị ràng buộc về dấu, thì có thể thay thế bằng hiệu của hai biến không âm
Trang 4Từ các nhận xét trên thấy rằng bất kỳ một bài toán QHTT nào cũng có thể đưa về dạng sau đây, được gọi là dạng chính tắc
f (x) = ∑
=
n i i
i x c
1 → min
=
≥
=
=
∑
=
) , , 1 ( 0
) , , 1 ( 1
n j
x
m i
b x a
j
n j
i j ij
trong đó tất cả các b i không âm
Ký hiệu c = (c1, c2, , c n ), x = (x1, x2, , x n ), b = (b1, b2, , b m ), A = (a ij)m ×n, và quy ước
rằng x ≥ 0 có nghĩa là x j ≥ 0 (j = 1, , n), ta có thể viết bài toán QHTT chính tắc dưới dạng ma trận
f (x) = c⋅⋅⋅⋅x →→→ min
≥
= 0
x
b Ax
Ví dụ Đưa bài toán sau đây về dạng chính tắc
f (x) = -3x1 - 2x2 → max
≥
−
≥
−
≥ +
0
;
1
4 2
2 1
2 1
2 1
x x
x x
x x
Ta đưa thêm vào hai biến chênh lệch x3, x4, sau đó nhân hai vế của phương trình thứ hai trong hệ ràng buộc mới với (-1), thu được dạng chính tắc như sau
g (x) = -f(x) = 3x1 + 2x2 → min
≥
= + +
−
=
− +
0
;
1
4 2
2 1
4 2 1
3 2 1
x x
x x x
x x x
9.2 PHƯƠ ƯƠ ƯƠNG PHÁP ĐƠ ĐƠ ĐƠN HÌNH
Ta giải bài toán bố trí máy trong sản xuất ở 9.1 bằng phương pháp hình học Trước hết ta biểu diễn
miền thừa nhận D trên mặt phẳng tọa độ bằng cách vẽ các đường thẳng
(d1) : 3x1 + x2 = 6, (d2) : x1 + x2 = 4, (d3) : x1 = 0, (d4): x2 = 0
Vì điểm M0(1; 1) có tọa độ thỏa mãn hệ
≥
≤ +
≤ +
0 , 4
6 3
2 1
2 1
2 1
x x
x x
x x
nên ta tô đậm các nửa mặt phẳng bờ (d1), (d2), (d3), (d4) không chứa điểm M0 Miền không bị tô đậm là tứ giác OCIA
Trang 5Cho m tăng dần từ 0, ta thấy các đường thẳng có dạng m = 2x1 + 1.6x2 song song với nhau và quét
toàn bộ miền D Vị trí I(1; 3) là điểm chung cuối cùng của chúng với D Do đó f(x) lớn nhất khi x =
(1; 3) (đây là phương án tối ưu)
Nếu trong bài toán này, ta lấy hàm mục tiêu khác, nhưng vẫn giữ nguyên miền D, thì bằng cách trên ta thấy rằng hàm mục tiêu luôn luôn đạt max (min) tại một trong bốn đỉnh của D Người ta
đã mở rộng khái niệm đỉnh cho miền thừa nhận D ⊂ R n thành khái niệm điểm cực biên Chẳng hạn mỗi đỉnh của đa diện là một điểm cực biên Trong một bài toán QHTT, ta gọi mỗi điểm cực biên của miền thừa nhận là một phương án cực biên của bài toán Cũng như trong ví dụ vừa rồi, người
ta đã chứng minh được rằng trong bài toán QHTT hàm mục tiêu đạt min(max) trong tập hợp các phương án cực biên
Xét bài toán QHTT chính tắc:
f (x) = c⋅⋅⋅⋅x →→→ min
≥
= 0
x
b Ax
với c, x ∈R n , b∈R m , A là ma trận m×n
Ta không thể dùng phương pháp hình học để giải bài toán này Dantzig đã đề xuất một thuật toán, gọi là thuật toán đơn hình (simplex method), như sau: Xuất phát từ một phương án cực
biên v0 Kiểm tra xem v0 có phải là phương án tối ưu hay chưa Nếu v0 chưa phải là phương án tối
ưu thì tìm cách cải tiến nó để được một phương án cực biên khác là v1 tốt hơn v0 theo nghĩa f(v1) <
f (v0) Quá trình này lặp lại nhiều lần cho đến khi tìm thấy phương án cực biên tối ưu x*
Để thực hiện thuật toán nói trên, ta cần phải làm rõ ba điều:
1 Cách tìm một phương án cực biên xuất phát v0
2 Làm thế nào để biết một phương án cực biên đã cho là tối ưu hay chưa, tức là cần tìm được "dấu
hiệu tối ưu"
3 Làm thế nào để từ một phương án cực biên chưa tối ưu tìm được một phương án cực biên mới tốt
hơn nó
Trang 6George Bernard Dantzig (1914 - 2005)
a Trường hợp A có một ma trận con là ma trận hoán vị P cỡ m××m
Ta chọn phương án cực biên xuất phát v0 như sau: Ta chọn biến mà các hệ số nằm trong P làm biến trụ, biến mà hệ số nằm ngoài P làm biến tự do Gán giá trị 0 cho các biến tự do rồi giải các biến trụ,
ta được v0 Rõ ràng những giá trị vừa tìm của các biến trụ quét hết những thành phần của hệ số tự
do b Ký hiệu J = (α, β, , γ) là dãy số chỉ số của các biến trụ mà xα = b1, xβ = b2, , xγ = b m Ký
hiệu c' = (cα, cβ, , cγ)∈Rm với cα, cβ, , cγ lần lượt là hệ số của xα, xβ, , xγ
f (v0) = c⋅⋅⋅⋅v0 = c' ⋅b, ∆ j = c'⋅a j - c j (j = 1, , n)
Người ta đã chỉ ra được dấu hiệu tối ưu "Nếu ∆j ≤ 0 ∀ j = 1, , n, thì v0 là một phương án tối ưu"
Vì vậy, gọi ∆j ≤ 0 (j = 1, , n) là số kiểm tra
Để thuận tiện cho tính toán theo thuật toán đơn hình, người ta sắp xếp các số liệu thành một bảng, gọi là bảng đơn hình như dưới đây
Biến
trụ
c1 c2 c n
xα cα b1 a11 a12 a 1n
xγ cγ b m a m1 a m2 a mn
Nếu phương án cực biên v0 chưa tối ưu, ta đi xây dựng phương án cực biên v1 tốt hơn bằng cách xây
dựng bảng đơn hình mới sau đây: Chọn chỉ số s sao cho ∆ s = max{ ∆1, , ∆n } Trên hàng thứ i của cột tỉ số ta sẽ điền b i /a is nếu a is > 0 Chọn chỉ số r sao cho b r /a rs là số bé nhất trong cột tỉ số Gọi a rs
là trụ Thay x r bởi x s , c r bởi c s Chia hàng r của ma trận [b A] cho trụ, sau đó cộng vào các hàng còn lại của [b A] bội của hàng thứ r mới này sao cho cột thứ s của A trở thành vec tơ e s (vectơ thứ s
trong cơ sở chính tắc của Rm ) Ta cũng tính được f(x) và các số kiểm tra mới bằng cách cộng vào hàng cũ (f(x), ∆1, , ∆n ) bội của hàng thứ r mới sao cho ∆ s bị khử đi Nếu tất cả các số kiểm tra mới
đều không dương, thì v1 là phương án tối ưu Còn nếu v1 chưa phải là phương án tối ưu, ta lặp lại thủ tục vừa rồi để lập bảng đơn hình thứ ba Ta cứ lặp lại thủ tục như thế này cho đến khi tất cả các số kiểm tra đều không dương thì dừng Khi ấy phương án cuối cùng là tối ưu
Trang 7Ví dụ 1 Giải bài toán QHTT sau:
f (x) = x4 - x5 → min
=
≥
= + +
= +
−
=
− +
) 5
; 1 ( 0
3 3
2 2
1 2
5 4 3
5 4 2
5 4 1
j x
x x x
x x x
x x x
j
Giải
Bảng 1
Biến
trụ
x2 0 2 0 1 0 -2 1• 2/1
Chú thích: Ta đánh dấu trụ bởi dấu "•"
Bảng 2
Biến
trụ
x5 -1 2 0 1 0 -2 1
Bảng 3
Biến
trụ
f (x) =
-11/5
Các số điều kiện đều không dương, nên ta có phương án tối ưu x* = (28/5; 0; 0; 1/5; 12/5) và minf(x) = -11/5
Chú ý Nếu có một số kiểm tra ∆k mang dấu dương, nhưng cột thứ k của ma trận hệ số của hệ ràng
buộc gồm toàn những số không dương, thì bài toán vô nghiệm (Khi ấy hàm mục tiêu giảm vô hạn)
Trang 8b Trường hợp A không chứa ma trận con là ma trận hoán vị P cỡ m××m
Ta thêm một số biến để tạo ra bài toán mới có dạng như ở trường hợp a Từ nghiệm của bài toán
mới sẽ suy luận ra nghiệm của bài toán ban đầu Cách làm này được gọi là Phương pháp M vô cùng lớn (BIG M-Method)
Ví dụ 2 Giải bài toán quy hoạch tuyến tính sau:
f (x) = 3x1 + 2x2 → min
=
≥
= + +
−
=
− +
) 4
; 1 ( 0
1
4 2
4 2 1
3 2 1
j x
x x x
x x x
j
Giải
Ta thêm biến y (gọi là biến giả) để đưa về bài toán
g(x,y) = 3x1 + 2x2 + My→ min
=
=
≥
= + +
−
= +
− +
0 );
4
; 1 ( 0
1
4 2
4 2 1
3 2 1
y j
x
x x x
y x x x
j
Ở đây M là một hằng số dương rất lớn Lúc này ma trận hệ số của hệ ràng buộc chứa ma trận
P =
0 1
1 0 ,
nên ta có bài toán như ở a
Bảng 1
Biến
trụ
g (x,y) =
4M
Bảng 2
Biến
trụ
x2 2 1 -1 1 0 1 0
g (x,y) =
2 + 2M
Trang 9Bảng 3
Biến
trụ
g (x,y) =
16/3
Các số điều kiện đều không dương (do M rất lớn), nên trong bài toán mới ta có phương án tối ưu
(x*,y) = (2/3; 5/3; 0; 0; 0)
và ming(x, y) = 16/3
Trong phương án này y = 0, nên bài toán ban đầu có phương án tối ưu
x* = (2/3; 5/3; 0; 0)
và minf(x) = 16/3
Chú ý Nếu ở bảng đơn hình cuối cùng biến giả nhận giá trị khác 0, ta kết luận hàm mục tiêu
không có giá trị nhỏ nhất
Ta còn có cách làm khác như sau: Trước hết dùng phép khử biến đổi hệ ràng buộc thành hệ tương đương mà ma trận hệ số chứa ma trận hoán vị
= + +
−
=
− +
1
4 2
4 2 1
3 2 1
x x x
x x x
⇔
= +
−
=
− +
5 3
4 2
4 3 2
3 2 1
x x x
x x x
Bài toán đã cho được đưa về bài toán mới tương đương sau đây
f (x) = 3x1 + 2x2 → min
=
≥
= +
−
=
− +
) 4
; 1 ( 0
5 3
4 2
4 3 2
3 2 1
j x
x x x
x x x
j
Ta giải bài toán mới này theo Thuật toán Đơn hình
Bảng 1
Biến
trụ
x1 3 4 1 2 -1 0 4/2
x4 0 5 0 3• -1 1 5/3
Trang 10Bảng 2
Biến
trụ
f (x) =
16/3
Các số điều kiện đều không dương, nên ta có phương án tối ưu x* = (2/3; 5/3; 0; 0) và minf(x) =
16/3
NHỮNG Ý CHÍNH TRONG BÀI GIẢNG TUẦN 12
1 Bài toán QHTT tổng quát Bài toán QHTT chính tắc
2 Phương án tối ưu Thuật toán Đơn hình