Giải thuật đơn hình cơ bản

Chương này trình bày một phương pháp để giải bài toán quy hoạch tuyến tính đó là phương pháp đơn hình. Phương pháp đơn hình được George Bernard Dantzig đưa ra năm 1947 cùng lúc với việc ông khai sinh ra quy hoạch tuyến tính. Đây là một phương pháp thực sự có hiệu quả để giải những bài toán quy hoạch tuyến tính cở lớn trong thực tế. Với cách nhìn hiện đại ý tưởng của phương pháp đơn hình rất đơn giản. Có nhiều cách tiếp cận phương pháp đơn hình, chương này trình bày một trong các cách đó.

Cơ sở xây dựng giải thuật đơn hình cơ bản

Xét bài toán quy hoạch tuyến tính chính tắc :

Giả sử rằng B0 là một cơ sở khả thi xuất phát của bài toán ( không nhất thiết là m cột đầu tiên của ma trận A ) . Thuật toán đơn hình cơ bản được xây dựng dựa trên các bước sau :

Về mặt hình học, giải thuật này được hiểu như là một quá trình duyệt qua các điểm cực biên của đa diện lồi S các phương án khả thi của bài toán.

Về mặt đại số, giải thuật này được hiểu như là một quá trình xác định một chuỗi các ma trận cơ sở kề B0 B1 B2 ......... mà các phương án cơ sở tương ứng x0 x1 x2........ là ngày càng tốt hơn, tức là :

z(x0) < z(x1) < z(x2) .............

Chú ý :

Nếu cơ sở ban đầu B0 chính là m cột đầu tiên của ma trận A thì trong giải thuật trên t chính là r .

Định lý về sự hội tụ

Với giả thiết bài toán không suy biến, giải thuật đơn hình trên đây sẽ hội tụ về phương án tối ưu sau một số hữu hạn lần lặp.

Bằng sự thống kê người thấy rằng nói chung giải thuật đơn hình sẽ hội tụ với số lần lặp ít nhất phải là từ m đến 3m ( m là số ràng buộc ) .

Giải thuật đơn hình cơ bản

Xét bài toán quy hoạch tuyến tính chính tắc

Giả sử rằng sau khi hoán vị các cột trong A ta chọn được ma trận cơ sở B thoả sự phân hoạch sau đây :

Giải thuật đơn hình cơ bản được thực hiện như sau :

a- Tính ma trận nghịch đảo B-1

b- Tính các tham số :

. Phương án cơ sở khả thi tốt hơn

. Giá trị hàm mục tiêu z(x)=cBTxB size 12{z \( x \) =c rSub { size 8{B} } rSup { size 8{T} } x rSub { size 8{B} } } {}

{} . Ma trận N__ size 12{ {N} cSup { size 8{"__"} } } {}= B-1N

c- Xét dấu hiệu tối ưu :

d- Xác định chỉ số của phần tử pivot trong ma trận N¯ size 12{ {overline {N}} } {}

e- Thực hiện các hoán vị :

. Cột thứ s trong ma trận N với cột thứ r trong ma trận B

. Phần tử thứ s trong cNT size 12{c rSub { size 8{N} } rSup { size 8{T} } } {} với phần tử thứ r trong cBT size 12{c rSub { size 8{B} } rSup { size 8{T} } } {}

. Biến xs trong xNT size 12{x rSub { size 8{N} } rSup { size 8{T} } } {} với biến xr trong xBT size 12{x rSub { size 8{B} } rSup { size 8{T} } } {}

f- Quay về (a)

Ví dụ : Tìm phương án tối ưu cho bài toán quy hoạch tuyến tính chính tắc sau đây bằng giải thuật đơn hình cơ bản

Lần lặp1

a- Tính ma trận nghịch đảo B-1

b- Tính các tham số

. Phương án cơ sở khả thi tốt hơn :

c- Xét dấu hiệu tối ưu :

Chuyển sang bước d

d- Xác định chỉ số của pivot

. Xác định chỉ số cột pivot s :

c ¯ s = max c ¯ k > 0 c ¯ N size 12{ {overline {c}} rSub { size 8{s} } = "max"" " left lbrace {overline {c}} rSub { size 8{k} } >0 in {overline {c}} rSub { size 8{N} } right rbrace } {} = max 2 , 1 = 2 = c __ 1 size 12{ {}="max " left lbrace " 2 , 1 " right rbrace =2= {c} cSup { size 8{"__"} } rSub { size 8{1} } } {}

Vậy s=1

Ma trận cột s=1 trong ma trận N¯ size 12{ {overline {N}} } {}111righN¯1= size 12{ {overline {N}} rSub { size 8{1} } =alignl { stack { left [" "1 {} # right ] left [" "1 {} # right ] left [ - 1 {} # righ]} } \[ \] } {}

. Xác định chỉ số dòng pivot r :

Vậy r = 1

e- Hoán vị

. Cột thứ s=1 trong ma trận N và cột thứ r=1 trong ma trận B

. Phần tử thứ s=1 trong cNT size 12{c rSub { size 8{N} } rSup { size 8{T} } } {} với phần tử thứ r=1 trong cBT size 12{c rSub { size 8{B} } rSup { size 8{T} } } {}

. Biến thứ s=1 trong xNT size 12{x rSub { size 8{N} } rSup { size 8{T} } } {} với biến thứ r=1 trong xBT size 12{x rSub { size 8{B} } rSup { size 8{T} } } {}

f- Quay về bước a

Lần lặp 2

a. Tính ma trận nghịch đảo B-1

b- Tính các tham số

. Phương án cơ sở khả thi tốt hơn :

. Giá trị hàm mục tiêu :

. Tính ma trận :

c- Xét dấu hiệu tối ưu :

Chuyển sang bước d

d- Xác định chỉ số của pivot

. Xác định chỉ số cột pivot s :

e- Hoán vị

. Cột thứ s=2 trong ma trận N và cột thứ r=2 trong ma trận B

. Phần tử thứ s=2 trong cNT size 12{c rSub { size 8{N} } rSup { size 8{T} } } {} với phần tử thứ r=2 trong cBT size 12{c rSub { size 8{B} } rSup { size 8{T} } } {}

. Biến thứ s=2 trong xNT size 12{x rSub { size 8{N} } rSup { size 8{T} } } {} với biến thứ r=2 trong xBT size 12{x rSub { size 8{B} } rSup { size 8{T} } } {}

f- Quay về bước a

Lần lặp 3

a. Tính ma trận nghịch đảo B-1

b- Tính các tham số

. Phương án cơ sở khả thi tốt hơn :

. Giá trị hàm mục tiêu :

{}

. Tính ma trận :

{}

c- Xét dấu hiệu tối ưu :

: dừng

Vậy phương án tối ưu sẽ là :

Giá trị hàm mục tiêu là z(x) = 9 với x1 = 4 và x2 = 1

Chú ý trong trường hợp suy biến

Trong trường hợp bài toán suy biến, nghĩa là b¯r=0 size 12{ {overline {b}} rSub { size 8{r} } =0} {}, ta có :

x s = b ¯ r a ¯ rs = 0 size 12{ {x} cSup { size 8{ and } } rSub { size 8{s} } = { { {overline {b}} rSub { size 8{r} } } over { {overline {a}} rSub { size 8{ ital "rs"} } } } =0} {}

cho nên giá trị của hàm mục tiêu không thay đổi khi thay đổi cơ sở, vì :

z ( x ) = z ( x ) + c ¯ s x s = z ( x ) size 12{z \( {x} cSup { size 8{ and } } \) =z \( x \) + {overline {c}} rSub { size 8{s} } {x} cSup { size 8{ and } } rSub { size 8{s} } =z \( x \) } {}

Vậy thì, có thể sau một số lần thay đổi cơ sở lại quay trở về cơ sở đã gặp và lặp như vậy một cách vô hạn. Người ta có nhiều cách để khắc phục hiện tượng này bằng cách xáo trộn một chút các dữ liệu của bài toán, sử dụng thủ tục từ vựng, quy tắc chọn pivot để tránh bị khử.