Tải bản đầy đủ (.docx) (24 trang)

Phương thức đơn hình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (248.78 KB, 24 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
----------------------------------------

BÁO CÁO ĐỀ TÀI
ĐỀ TÀI: TÌM HIỂU THUẬT TOÁN ĐƠN
HÌNH (SIMPLEX METHOD)

GV hướng dẫn: Thầy Tô Văn Khánh
Môn học: Các vấn đề hiện đại của CNPM
Sinh viên: Nguyễn Đức Toàn
Nguyễn Trí Tuyến
Nguyễn Hữu Quý

Hà Nội, tháng 11 năm 2013


MỤC LỤC


THUẬT TOÁN ĐƠN HÌNH

I.

Giới thiệu chung

Thuật toán đơn hình là một thuật toán cổ điển được dùng để tối ưu hóa một
số. Nó được sử dụng để tìm giá trị tối ưu cho một hàm mục tiêu đã được xác
định trước cùng với các ràng buộc tuyến tính trên các biến thực. Hàm mục tiêu
và các ràng buộc tuyến tính đó kết hợp với nhau được gọi là bài toán quy hoạch
tuyến tính. Tuy nhiên ở đây chúng ta không đề cập tới việc tối ưu hàm mục tiêu.


Vì thế trong phần này ta sẽ thảo luận về một biến thể của phương pháp đơn hình
chỉ gồm các ràng buộc tuyến tính đơn thuần mà không có hàm mục tiêu.

1. Giới thiệu về thuật toán
Thuật toán đơn hình (The Simplex) được đóng góp và phát triển mới bởi
George Bernard Danzig vào năm 1947, quyết định tính “Satisfiable” của liên
kết trong bất đẳng thức tuyến tính yếu. Tập hợp các ràng buộc thông thường đi
cùng bởi một hàm mục tiêu tuyến tính trong giới hạn biến của công thức. Nếu
tập hợp các ràng buộc không thỏa mãn(Unsatisfiable), thuật toán đơn hình cung
cấp một phép gán thỏa mãn biến cực đại của hàm mục tiêu. Thuật toán đơn hình
là trường hợp xấu nhất của hàm mũ. Mặc dù có nhiều thuật toán về độ phức tạp
để giải quyết vấn đề tối ưu hóa hàm mục tiêu này (thuật toán về độ phức tạp đầu
tiên được biết đến bởi Khachiyan vào năm 1979 được gọi là phương thức
Ellipsoid), nhưng thuật toán đơn hình vẫn được xem như là một phương thức có
hiệu quả trong thực hành và được phổ biến rộng rãi nhất, rõ ràng là vì sự cần
thiết trong một số bước của một số hàm mũ là rất ít trong các vấn đề hiện đại.
Thuật toán nằm trong danh sách 10 thuật toán tiêu biểu của thế kỷ 20 do tờ
báo “Computing in Science and Engineering” bình chọn.

2. Giới thiệu về tác giả Dantzig
George Bernard Dantzig sinh ngày 8 tháng 11 năm 1914 và mất vào ngày
13 tháng 5 năm 2005. Ông là nhà khoa học người Mỹ đã có những đóng góp
quan trọng về vận trù học, khoa học máy tính, kinh tế và thống kê.
Ông được biết đến với việc phát triển thuật toán đơn hình sau khi nó được phát
minh bởi nhà toán học và kinh tế người Liên Xô Leonid Kantorovich, để giải
quyết các vấn đề lập trình tuyến tính từ công việc của mình trong lực lượng

3



THUẬT TOÁN ĐƠN HÌNH

không quân Mỹ. Ông từng là Giáo sư danh dự Khoa học Giao thông vận tải và
giáo sư ngành Vận trù học và Khoa học máy tính của Đại học Stanford.

II.

Thuật toán đơn hình – Simplex Method

1. Tổng quan về SMT solver
Trong khoa học máy tính và logic toán học, bài toán SMT (Satisfiability
Modulo Theories) là một bài toán quyết định cho các công thức logic liên quan
đến sự kết hợp của lý thuyết nền được thể hiện trong logic cổ điển đầu tiên với
sự tương đương hiện tại. Ví dụ của các thuyết học phổ biến sử dụng trong khoa
học máy tính là thuyết số thực, thuyết số nguyên và thuyết cấu trúc dữ liệu khác
nhau như danh sách (list), mảng (array), … SMT có thể được coi như là một
hình thức của bài toán tìm ẩn thỏa mãn các ràng buộc liên quan đến nó và đó là
một cách tiếp cận chính thức lập trình ràng buộc.
a. Thuật ngữ cơ bản
Chính thức mà nói, phiên bản SMT là một công thức trong logic học đầu
tiên, nơi mà một số công thức và các kí tự vị từ (predicates) có cách diễn giải bổ
sung và SMT là bài toán xác định liệu một công thức như vậy có thỏa mãn. Nói
cách khác, hình dung thể hiện của bài toán SAT trong đó các biến nhị phân
được thay thế bằng các vị từ trên tập hợp các biến không nhị phân thích hợp. Vị
từ về cơ bản là một hàm có giá trị nhị phân của các biến không nhị phân. Các vị
từ được khai báo trong các bất đẳng thức tuyến tính hoặc các đẳng thức liên
quan đến số hạng không xác định và các hàm kí tự. Vị từ được phân loại theo lí
thuyết chúng thuộc về.
b. Ý nghĩa
Phiên bản SMT là sự suy rộng của phiên bản Boolean SAT trong đó tập

hợp các ẩn khác nhau thì được thay thế bởi vị từ (predicates) từ một loạt các
thuyết cơ sở. Hiển nhiên, các công thức SMT cung cấp một mô hình ngôn ngữ
phong phú hơn nhiều so với các công thức Boolean SAT. Ví dụ, một công thức

4


THUẬT TOÁN ĐƠN HÌNH

SMT cho phép chúng ta mô hình hóa phép toán “Datapath” của 1 bộ vi xử lý ở
kiểu chữ chứ không phải cấp độ bit.
Khi so sánh, bộ câu trả lời lập trình cũng dựa trên vị từ (chính xác hơn thì
các mệnh đề nguyên tử được tạo ra từ công thức nguyên tử). Không giống như
SMT, bộ câu trả lời lập trình không có phép lượng hóa, và không dễ để thể hiện
các ràng buộc như là số học tuyến tính hoặc logic khác biệt. ASP là thích hợp
nhất cho các bài toán về tính đúng đắn để rút gọn các hàm không được lý giải
của thuyết tự do.
Việc cài đặt số nguyên 32 bit trong bit-vecto ASP chịu ảnh hưởng từ một số
bài toán tương tự nhau mà SMT solvers phải đối mặt: “tính rõ ràng” như là
x+y=y+x, rất khó để kết luận.
Lập trình ràng buộc logic cung cấp khả năng hỗ trợ cho ràng buộc số học
tuyến tính, nhưng trong phạm vi lý thuyết hoàn toàn khác nhau.
c. Ứng dụng
SMT solvers rất có ích cho việc xác minh và chứng minh tính đúng đắn của
chương trình, và để tổng hợp, sinh ra các đoạn chương trình bằng cách tìm kiếm
trong không gian của các chương trình có khả năng.

2. Thuật toán đơn hình
a. Các vấn đề quyết định và bài toán quy hoạch tuyến tính
Như đã nói ở trên, chúng ta chỉ quan tâm đến vấn đề quyết định chứ không

phải là vẫn đề tối ưu bài toán. Chúng ta sẽ làm ẩn đi một biến của thuật toán
đơn hình thông thường gọi là thuật toán đơn hình tổng quát (General Simplex)
mà không cần đến hàm mục tiêu. Thuật toán đơn hình tổng quát chấp nhận hai
yêu cầu bắt buộc cho đầu vào:
1.

Đẳng thức mẫu:
a1x1 + … + anxn = 0

2.

5

Giới hạn trên và giới hạn dưới của ẩn:
l i ≤ xi ≤ u i

(2)


THUẬT TOÁN ĐƠN HÌNH

với li và ui là các ràng buộc tương ứng với các giới hạn trên và giới
hạn dưới của xi. Giới hạn là tùy chọn như các thuật toán hỗ trợ biến
không bị chặn.
*(2): Điều này trái ngược với các thuật toán đơn hình cổ điển, trong
đó tất cả các ẩn ràng buộc không âm.
Phép biểu diễn của công thức đầu vào được gọi dạng tổng quát (General
form). Câu lệnh của bài toán thì không phụ thuộc vào độ mạnh yếu của các ràng
buộc tuyến tính, chúng ta có thể ánh xạ một ràng buộc tuyến tính yếu tùy ý
L⊲⊳R với ⊲⊳ ∈ { =, ≤, ≥} vào các dạng trên như sau. Đặt m là số ràng buộc

của ràng buộc thứ i, 1 ≤ i ≤ m:
1. Di chuyển tất cả các số hạng trong R sang bên tay trái để thu được
L’⊲⊳ b, trong đó b là một ràng buộc.
2. Khai báo một ẩn mới si thêm vào các ràng buộc
L’ − si = 0 và si ⊲⊳ b

(2.1)

Nếu ⊲⊳ là toán tử tương đương, ta viết lại si = b sao cho si ≥ b và si ≤ b.
Nguồn gốc và ánh xạ liên hợp của các ràng buộc là hiển nhiên đáp ứng
được.
Ví dụ 2.1: Xét các ràng buộc liên hợp sau:
x+y≥2∧
2x – y ≥ 0 ∧
-x + 2y ≥ 1.
Viết lại theo dạng tổng quát vấn đề này như sau:
6

(2.2)


THUẬT TOÁN ĐƠN HÌNH

x + y – s1= 0 ∧
2x – y – s2 = 0 ∧
-x + 2y – s3 = 0 ∧

(2.3)

s1 ≥ 2 ∧

s2 ≥ 0 ∧
s3 ≥ 1 .
Các ẩn s1,…., sm gọi là ẩn mới được thêm vào. Các ẩn x1,…,xn trong ràng
buộc gốc gọi là các ẩn bài toán. Do đó, chúng ta có n ẩn bài toán và m ẩn mới,
với m là số ràng buộc của các ẩn cũ của bài toán. Trong phương án tối ưu ở
trên, ẩn mới chỉ được thêm vào nếu L’ không là ẩn bài toán hoặc đã được chỉ
định là ẩn mới trước đó.
b. Cơ bản về thuật toán đơn hình
Nó phổ biến và thuận lợi cho việc thể hiện tính thỏa mãn (satisfaction) của
bài toán ràng buộc tuyến tính cũng như bài toán hình học. Về khía cạnh hình
học, mỗi ẩn tương ứng 1 chiều, và mỗi ràng buộc xác định 1 không gian con lồi:
đặc biệt, bất đẳng thức xác định nửa không gian và xác định 1 siêu mặt phẳng
(hyperplanes – Siêu mặt phẳng trong không gian d-chiều là không gian con với
d-1 kích thước. Chẳng hạn như trong không gian 2 chiều, siêu mặt phẳng là 1
đường thẳng, và trong 1 chiều là 1 điểm.). Không gian con (đóng) của phép gán
thoả mãn được xác định bằng giao của 1 nửa không gian và siêu mặt phẳng, và
có dạng 1 đa diện lồi. Điều này được hiểu là giao nhau giữa các không gian con
lồi là 1 không gian con lồi khác. Biểu diễn hình học của bài toán gốc trong ví dụ
trên xuất hiện trong hình 2.1 dưới đây

7


THUẬT TOÁN ĐƠN HÌNH

y
3

2x - y ≥ 0


2

-x + 2y ≥ 0
C

1

B
A

1

2
x+y≥2

3

4

x

Hình 2.1: Biểu diễn đồ thị hình học của bài toán 2.2. Vùng được gạch
chéo là tập hợp các phép gán thỏa mãn ràng buộc liên quan.
Các điểm (A), (B), (C) minh họa tiến bộ của thuật toán đơn hình và nó được
giải thích rõ hơn ở những mục tiếp theo.
Chúng ta biểu diễn hệ số đầu vào của các ràng buộc liên quan trong bài toán
trên bằng ma trận A có m hàng, m + n cột với m là số ràng buộc ẩn cơ
bản(tương ứng với số ẩn không cơ bản) và n là số ẩn cơ bản. Các ẩn x1, x2,…, xn,
s1,...,sm được viết là một vector x. Theo đó thì vấn đề bài toán tương đương với
tồn tại một vector x sao cho:


Với là giới hạn dưới của và

(2.4)
là giới hạn trên của . Giá trị vô cùng trong

giới hạn không đươc thiết lập.
Ví dụ 2.2: Tiếp tục xét bài toán ở ví dụ 2.1.

8


THUẬT TOÁN ĐƠN HÌNH

Dùng các ẩn x, y, s1, s2, s3 biểu diễn ma trận 3x5 cho đẳng thức ràng buộc
(2.3) ta được:
(2.5)

Chú ý rằng phần lớn các phần tử ở trong ví dụ 2.2 rất cân đối nhau ở các cột
thêm vào các ẩn không cơ bản s1, …, sm. Đó là một ma trận đường chéo m-bym trong đó các hệ số đường chéo không phải bằng 1 mà là -1. Điều đó là kết
quả của việc sử dụng thuật toán tổng quát.
Trong khi ma trận A thay đổi dần ở các bước tiếp theo của thuật toán, thì số
cột của ẩn không cơ bản của nó không bao giờ giảm. Tập hợp các ẩn m thỏa
mãn những cột này trong A gọi là ẩn cơ bản và kí hiệu ma trận do nó tạo nên là
Ɓ. Chúng cũng được gọi là những ẩn phụ thuộc, khi giá trị của chúng được xác
định từ những ẩn không cơ bản. Ẩn không cơ bản này được kí hiệu là N. Điều
này thuận lợi cho việc lưu giữ và điều khiển một đại diện trong A được gọi là
lớp động (tableau), chỉ đơn giản là A không có đường chéo ma trận con. Tóm
lại rằng lớp động là một ma trận m-by-n, trong đó các cột tương ứng với ẩn
không cơ bản, và các hàng biểu diễn các ẩn cơ bản (giống như ẩn cơ bản có ‘-1’

ở cuối hàng đó trong đường chéo ma trận con A). Vì thế, thông tin mới lưu trữ
trong đường chéo ma trận bây giờ được biểu diễn bằng các ẩn ghi nhãn của
hàng.
Ví dụ 2.4: Ta tiếp tục sử dụng ví dụ 2.1 để ví dụ về lớp động:

s1
s2
s3

9

x
1
2
-1

y
1
-1
-2


THUẬT TOÁN ĐƠN HÌNH

Với

2 ≤ s1
0 ≤ s2
1 ≤ s3


Lớp động đơn giản là biểu diễn sự khác nhau trong A, vì Ax = 0 có thể viết
lại
(2.6)
Khi viết dưới dạng tổng quát của ma trận, tổng bên phải của (2.6) tương ứng
chính xác với lớp động.
c. Thuật toán đơn hình với cận trên, cận dưới
Thuật toán đơn hình tổng quát bảo toàn phép cộng trong lớp động, một phép
gán α: Ɓ ∪ N → Q. Thuật toán khởi tạo cấu trúc dữ liệu như sau:
Tập hợp các ẩn cơ bản là tập hợp các ẩn mới.
Tập hợp các ẩn không cơ bản là tập hợp các ẩn của bài toán.
Cho xi thỏa mãn α(xi) = 0 trong đó i ∈ {1, . . . , n + m}
Nếu phép gán ban đầu của tất cả các ẩn bằng không thì đưa ra các giới hạn
trên và dưới của các ẩn cơ bản đó, tiếp đó dung công thức có thể khai báo để
thỏa mãn (gọi lại các ẩn không cơ bản lúc đầu không có giới hạn rõ ràng). Nếu
ngược lại, thuật toán bắt đầu với một tiến trình thay đổi phép gán này.




Thuật toán 2.1: Thuật toán đơn hình tổng quát
Input: Một hệ thống ràng buộc tuyến tính
Output: Trả về “Satisfiable” nếu chương
“Unsatisfiable” nếu ngược lại.
• Ánh xạ hệ thống thành dạng tổng quát




10


Đặt là tập hợp các ẩn mới s1, …, sm
Khởi tạo lớp động cho

trình

thỏa

mãn,


THUẬT TOÁN ĐƠN HÌNH







Nếu không có ẩn cơ bản nào vi phạm giới các hạn biên của nó thì
trả về “Satisfiable”. Ngược lại, đặt xi là ẩn cơ bản đầu tiên theo
thứ tự vi phạm các giới hạn. (*)
Tìm ẩn không cơ bản xj đầu tiên phù hợp theo thứ tự quanh x i. Nếu
không có biến như vật trả về “Unsatisfiable”.
Thực hiện các phép toán trục xi và xj.
Quay trở lại bước (*).

Tóm tắt các bước của phương pháp đơn hình tổng quát trong thuật toán 2.1.
Thuật toán trên bảo toàn 2 tính bất biến:
• In-1.
• In-2. Giá trị của ẩn không cơ bản cùng với giới hạn của chúng:

(2.7)

Rõ ràng tính bất biến được giữ lại giống ban đầu kể từ khi tất cả các ẩn trong
x được đặt giá trị 0, và ẩn không cơ bản không có các giới hạn.
Vòng lặp chính của thuật toán sẽ kiểm tra nếu tồn tại ẩn cơ bản vi phạm các
giới hạn của nó. Nếu không có ẩn nào như vậy thì tất cả gồm ẩn không cơ bản
và ẩn cơ bản đều thỏa mãn giới hạn của chúng. Theo tính bất biến In-1, thì điều
này có nghĩa rằng phép gán α hiện tại thỏa mãn (2.4) thuật toán trả về
“Satisfiable”.
Mặt khác, cho xi là ẩn cơ bản vi phạm các giới hạn của nó, và không mất
tính tổng quát giả sử ta có α(xi) > ui, i.e., giới hạn trên của xi bị vi phạm. Làm
thế nào để thay đổi phép gán cho xi để cho nó thỏa mãn giới hạn của nó? Chúng
ta cần tìm cách giảm giá trị của xi. Gọi là giá trị đã có sẵn:
xi =

(2.8)

Giá trị của xi có thể bị giảm xuống bởi việc giảm giá trị của một ẩn không cơ
bản xj như là aịj > 0 và phép gán hiện tại cao hơn giới hạn dưới lj, hoặc việc tăng
giá trị ẩn cơ bản xj nếu aij < 0 và phép gán hiện tại thấp hơn giới hạn trên uj của
nó. Một ẩn xj sẽ thực hiện một điều kiện nào đó sao cho phù hợp. Nếu không có
giá trị nào phù hợp, bài toán sẽ trả về “Unsatisfiable” và thuật toán kết thúc.

11


THUẬT TOÁN ĐƠN HÌNH

Đặt là giá trị chúng ta phải làm tăng (hoặc làm giảm) α(xj) bao nhiêu sao
cho thỏa mãn giới hạn trên của xi:

(2.9)
Việc tăng (hoặc giảm) xj bởi đặt xj trong các giới hạn của nó. Mặt khác khác
xj không nhất thiết phải thỏa mãn các giới hạn của nó nữa, và do đó nó có thể vi
phạm tính bất biến In-2. Chúng ta đổi giá trị xi và xj trong lớp động, nghĩa là xi
là ẩn không cơ bản còn xj là ẩn cơ bản. Điều này đòi hỏi một ánh xạ từ lớp
động, nó được gọi là phép toán trục (Pivot Operation). Phép toán trục lặp đi lặp
lại cho đến khi một phép gán thỏa mãn được tìm thấy, hoặc hệ thống được xác
định là không thỏa mãn.

Phép toán trục (The Pivot Operation)
Phép toán hỗ trợ chúng ta khi muốn đổi chỗ xi cho xj. Chúng ta phải cần
những định nghĩa sau:
Định nghĩa 5.5 (phần tử trục, cột và hàng): Cho hai ẩn xi và xj, hệ số aij
được gọi là phần tử trục. Cột của xj được gọi là cột trục, hàng i được gọi là
hàng trục.
Điều kiện trước tiên cho việc đổi chỗ 2 ẩn xi và xj là phần tử trục của chúng
phải khác không, nghĩa là aij ≠ 0. Phép toán trục (hoặc pivoting) được thực hiện
như sau:


Giải hàng i cho xj.



Đối với tất cả hàng l ≠ i, loại bỏ xj bằng cách sử dụng công thức cho
xj đã thu được từ hàng i.

Chúng ta có thể nhận thấy rằng phép toán trục cũng là phép toán cơ bản
trong được biết đến là phương pháp khử ẩn Gauss.


12


THUẬT TOÁN ĐƠN HÌNH

Ví dụ 2.5: Chúng ta tiếp tục làm một ví dụ. Như đã nói ở trên, chúng ta thiết
lập α(xi) = 0. Việc này tương ứng với điểm A ở hình 5.1. Gọi lớp động và các
giới hạn:

s1
s2
s3

x
1
2
-1

y
1
-1
2

Với
2 ≤ s1
0 ≤ s2
1 ≤ s3

Giới hạn dưới của s1 là 2, điều này là vi phạm. Ẩn không cơ bản phải là
thấp nhất trong x. Ẩn x là hệ số dương nhưng không có giới hạn trên, do đó phù

hợp với phép toán trục. Chúng ta cần tăng s1 lên 2 để chạm giới hạn dưới, điều
này có nghĩa là x cũng phải được tăng lên 2 (θ =0). Bước đầu tiên của phép toán
trục là giải hàng s1 cho x:
s1 = x + y <=> x = s1 – y.

(2.10)

Thay x vào hàng còn lại ta được:
s2 = 2(s1 – y) - y <=> s2 = 2s1 – 3y.

(2.11)

s3 = - (s1 – y) + 2y<=> s3 = -s1 + 3y.

(2.12)

Viết ra lớp động, kết quả của phép toán trục là:

x
13

s1
1

y
-1


THUẬT TOÁN ĐƠN HÌNH


s2
s3

2
-1

-3
3

α(x) = 2
α(y) = 0
α(s1) = 2
α(s2) = 4
α(s3) = -2
Điều này tương đương với điểm B trong hình 2.1.
Giới hạn dưới của s3 là vi phạm ở ẩn sau ẩn cơ bản đã được chọn. Chỉ có
ẩn phù hợp với phép toán trục là y. Chúng ta cần thêm 3 vào s3 để chạm giới
hạn dưới. Do đó:
(2.13)
Sau khi thực hiện phép toán trục với s3 và y, lớp động cuối cùng là:

x
s2
y

s1
2/3
1
1/3


α(x) = 1
α(y) = 1
α(s1) = 2
α(s2) = 1
α(s3) = 1

14

s3
-1/3
-1
1/3


THUẬT TOÁN ĐƠN HÌNH

Phép gán α thỏa mãn các giới hạn, do đó {x → 1, y → 1} là thỏa mãn phép
gán. Nó tương đương với điểm C trong hình 2.1
Chọn phần tử trục theo thứ tự đã thay đổi cho ẩn cơ bản và ẩn không cơ bản
sao cho tập hợp các ẩn không cơ bản không bị lặp lại và kết thúc. Trong phép
chứng minh trang 71, cách chọn phần tử trục này được gọi là định luật Bland.
d. Vấn đề về gia tăng (Incremental)
Sự quyết định của các bài toán thường được xây dựng từ phương pháp gia
tăng. Thật vậy, công thức được làm mạnh thêm từ những liên kết bổ sung. Điều
này có thể làm thỏa mãn một công thức không thỏa mãn. Một chuỗi sự kiện
trong phương pháp gia tăng quyết định có ích là DPLL(T) framework, điều mà
chúng ta học ở chương 11.
Thuật toán đơn hình tổng quát rất phù hợp cho các bài toán gia tăng. Đầu
tiên, nhận thấy rằng mọi ràng buộc có thể được vô hiệu hóa bằng cách loại bỏ
các giới hạn trên và dưới tương ứng của nó. Đẳng thức trong lớp động là không

cần thiết sau này, nhưng sẽ không làm thỏa mãn một công thức không thỏa
mãn. Điều thứ hai, điểm mấu chốt của phép toán thực hiện trong lớp động là sự
biến đổi tương đương. Nó bảo toàn tập hợp các giải pháp. Do đó chúng ta có thể
bắt đầu phương án với lớp động mà chúng ta thu được từ những tập hợp giới
hạn trước đó.
Việc bổ sung giới hạn trên và giới hạn dưới được thực hiện như sau:
• Nếu giới hạn của ẩn không cơ bản được thêm vào, thì cập nhật các giá trị


của các ẩn không cơ bản theo lớp động để khôi phục In-2.
Gọi đến thuật toán 2.1 để xác định nếu bài toán mới thỏa mãn. Bắt đầu ở
bước (*).

Hơn thế nữa, nó thường để loại bỏ các ràng buộc sau khi chúng được thêm
vào. Nó cũng phù hợp trong phạm vi của DPLL(T) bởi vì thuật toán này sẽ kích
hoạt và vô hiệu các ràng buộc. Thông thường, các ràng buộc (hay đúng hơn là

15


THUẬT TOÁN ĐƠN HÌNH

các giới hạn) được loại bỏ khi tập hợp các ràng buộc hiện tại không được thỏa
mãn. Sau khi loại bỏ các phép gán ràng buộc thì phải khôi phục lại được một
điểm mà nó thỏa mãn 2 bất biến của thuật toán đơn hình tổng quát. Điều này có
thể thực hiện bằng cách khôi phục lại phép gán α để thỏa mãn phép gán cuối đã
biết. Việc này thì không cần thiết cho việc thay đổi lớp động.

3. Ví dụ cụ thể về thuật toán đơn hình



Hệ bất phương trình tuyến tính 2 ẩn số

với
Hay có thể viết

Biểu diễn dưới dạng ma trận

Chúng ta thiết lập a() = 0
Gọi lớp động và các giới hạn:
x
1
5
-1

y
1
-1
5

với
Giới hạn dưới của là 5, điều này là vi phạm. Ẩn không cơ bản phải là thấp
nhất trong x. Ẩn x có hệ số dương nhưng không có giới hạn trên, do đó phù hợp

16


THUẬT TOÁN ĐƠN HÌNH

với phép toán trục. Chúng ta cần tăng lên 5 để chạm giới hạn dưới, điều này có

nghĩa là x cũng phải được tăng lên 5 (θ = 0). Bước đầu tiên của phép toán trục
là giải hàng cho x.

Thay x cho các hàng còn lại ta được :

Kết quả của phép toán trục

x

1
5
-1

y
-1
-6
6

Giới hạn dưới của bị vi phạm. Chỉ có ẩn phù hợp với phép toán trục là ẩn y.
Chúng ta cần thêm 18 vào để cham giới hạn dưới. Do đó :

Tiếp tục giải hàng cho y

Thay y vào các hang còn lại ta được

17


THUẬT TOÁN ĐƠN HÌNH


Kết quả của phép toán trục lần 2

x

5/6
4
1/6

y

-1/6
-1
1/6

Phép gán thoả mãn các giới hạn , do đó là thoả mãn phép gán.


Hệ bất phương trình tuyến tính với 4 ẩn

với
Biểu diễn ma trận

Chúng ta thiết lập a() = 0

Gọi lớp động và các giới hạn

18


THUẬT TOÁN ĐƠN HÌNH


với
Giới hạn dưới của là 10, điều này là vi phạm. Ẩn không cơ bản phải là thấp
nhất trong x. Ẩn x có hệ số dương nhưng không có giới hạn trên, do đó phù hợp
với phép toán trục. Chúng ta cần tăng lên 10 để chạm giới hạn dưới, điều này
có nghĩa là x cũng phải được tăng lên 10 (θ = 0). Bước đầu tiên của phép toán
trục là giải hàng cho x.

Thay x cho các hàng còn lại ta được

Kết quả của phép toán trục
x

19


THUẬT TOÁN ĐƠN HÌNH

Giới hạn dưới của bị vi phạm. Có 3 ẩn phù hợp để thực hiên phép toán trục
là y,z,w. Ta chọn ẩn z để thực hiện. Chúng ta cần thêm 21 vào để chạm giới
hạn dưới. Do đó :

Thực hiện tương tự như trên ta được :

Kết quả của phép toán trục

20


THUẬT TOÁN ĐƠN HÌNH


x
z

Giới hạn dưới của bị vi phạm. Có 2 ẩn phù hợp để thực hiên phép toán trục
là y,w. Ta chọn ẩn y để thực hiện. Chúng ta cần thêm 21 vào để chạm giới hạn
dưới. Do đó :

Thực hiện tương tự như trên ta được :

x
z
y

21


THUẬT TOÁN ĐƠN HÌNH

Giới hạn dưới của bị vi phạm. Chỉ còn ẩn w phù hợp với phép toán trục.
Chúng ta cần thêm vào để chạm giới hạn dưới. Do đó :

Thực hiện tương tự như trên ta được :

x
z
w
y

Phép gán thoả mãn các giới hạn , do đó là thoả mãn phép gán.


22


THUẬT TOÁN ĐƠN HÌNH

III. Kết luận và hướng phát triển
1. Kết quả đạt được
Hiểu được cơ bản thuật toán đơn hình là một trong những bài toán lập
trình tuyến tính.
• Giải bài toán với nhiều ẩn số ban đầu từ những ví dụ đã có. Nếu số lượng
biến nhiều thì lời giải rất dài (khoảng n lần thực hiện pivot operation với n là
số ẩn ban đầu của ràng buộc).


2. Hướng phát triển

23


THUẬT TOÁN ĐƠN HÌNH

TÀI LIỆU THAM KHẢO

[1]

Cuốn sách Kroening Decision Procedures

[2]


Website />
[3]

Website />
[4]

Website />
24



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×