hình học
2.4.1. Mô hình toán học
Xét bài toán quy hoạch tuyến tính hai biến
min{f(x) = hc, xi|x∈D}, trong đó c= (c1, c2)T ∈R2
\ {0} vàD ⊂R2 là tập lồi đa diện.
Như đã biết, qua mỗi điểm x = (x1, x2)T ∈ R2 chỉ có duy nhất một đường mức L(α, f) = {x ∈ R2
| hc, xi = α} của hàm f(x) = hc, xi với mức α = hc, xi. Do f(x) là hàm tuyến tính nên gradient ∇f(x) =c tại mọi x∈ R2 và c là vector pháp tuyến của mọi đường mức.
Bài toán có thể được phát biểu theo ngôn ngữ hình học như sau: Trong số các đường mức cắt tập D, hãy tìm đường mức có giá trị mức nhỏ nhất.
Thuật toán hình học giải bài toán trên dựa trên hai sự kiện: i) Các đường mức của hàm tuyến tính song song với nhau;
ii) Giá trị hàm f(x) =hc, xi tăng theo hướng vector gradient ∇f(x) =c và giảm theo hướng ngược vector c.
2.4.2. Thuật toánThuật toán 3.2: Thuật toán 3.2:
Bước 1. Vẽ tập chấp nhận được D, vector c và đường mức L(0, f) ={x∈R2
| hc, xi= 0}
đi qua điểm gốc 0 và vuông góc với c.
Bước 2. Lấy một điểm bất kì x∈D. Vẽ đường thẳng L đi qua x và song song các đường mức L(α, f). (Đường thẳng L là đường mức {x∈R2
| hc, xi=hc, xi}).
Bước 3. Dịch chuyển song song đường mức L theo hướng ngược với hướng vector
c đến khi việc dịch chuyển tiếp theo làm cho đường mức không còn cắt D nữa thì dừng. Các điểm của D nằm trên đường mức cuối cùng này là các nghiệm tối ưu của bài toán, còn giá trị mức này chính là giá trị tối ưu của bài toán.
Nhận xét. Trong trường hợp bài toán quy hoạch tuyến tính hai biến có dạng
max{f(x) =hc, xi|x∈D}, với D ⊂ R2 là tập lồi đa diện khác rỗng và c ∈ R2
\ {0} thì ta sẽ sử dụng các bước giống như thuật toán trên nhưng thayBước 3 bởi Bước 3’ như sau:
Bước 3’: Dịch chuyển song song đường mức L theo hướng vector c đến khi việc dịch chuyển tiếp theo làm cho đường mức không còn cắt D nữa thì dừng. Các điểm củaD nằm trên đường mức cuối cùng này là các nghiệm tối ưu của bài toán, còn giá trị mức này chính là giá trị tối ưu của bài toán.
Để hiểu rõ thuật toán trên ta đến với các bài toán sau:
2.4.3. Ví dụ cho thuật toán
Bài toán 2.21. Xét bài toán quy hoạch tuyến tính
minf(x) =−2x1+x2
với điều kiện −x1+ 2x2 64 x1+x2 65 x1 64 x1, x2 >0.
Lời Giải:Tập chấp nhận được của bài toán này là đa diện D=conv{v1, ..., v4} với v1 = (0,0)T, v2 = (0,2), v3 = (2,3)T, v4 = (4,0)T; hướng của vector c= (−2; 1)T đường mức L0 và L (đi qua một điểm x∈D) của hàm mục tiêu được minh họa ở hình dưới. Theo Thuật toán 3.2, dịch chuyển song song đường mứcLtheo hướng ngược vector c ta thấy đường mức cuối cùng của hàm f mà còn cắt tập D là đường mức đi qua đỉnh (4,0)T. Vậy bài toán này có nghiệm tối ưu duy nhất là đỉnh (4,0)T và giá trị tối ưu fmin=−8. (Hình a).
Nếu thay hàm mục tiêu của bài toán này bởi f′
(x) =x1−2x2 thì ta nhận được tập nghiệm tối ưu là cả cạnh {(0,2)T,(2,3)T}. Trường hợp này bài toán có vô số nghiệm. Ta có thể lấy một nghiệm tối ưu đại diện là đỉnh (0,2)T. (Hình b)
Hình 2.15
Phương pháp này rất hữu hiệu trong việc giải các bài toán quy hoạch tuyến tính hai biến, và thực tế là nhiều bài toán sản xuất với nhiều ràng buộc có thể giải được thông qua phương pháp này.
Trong chương trình toán phổ thông cũng đã trình bày phương pháp này để giải một số bài toán đó, nhưng vì tính sư phạm nên cơ sở lí thuyết của phương pháp chưa được trình bày một cách kĩ lưỡng. Cho nên qua đây chúng chúng tôi đã trình bày lại một cách tổng quát và đầy đủ về việc giải bài toán quy hoạch tuyến tính bằng phương pháp hình học.
Ngoài ra đối với bài toán quy hoạch tuyến tính hai biến còn có thể dễ dàng giải được thông qua hàm linprog.m trong Matlab như sau:
Ta nhập các input như sau: » f = [−2 1]; » A= [−1 2; 1 1; 1 0]; » b= [4 5 4]; » lb= [0 0]; » ub= [4 inf]; » options=optimset(′ display′ ,′ of f′ );
» [x f val] =linprog (f, A, b,[],[], lb, ub,[], options)
Ta được kết quả như hình 3.4 dưới đây.
Ta được output làx= (4,0)và f val=−8Từ đó kết luận được nghiệm tối ưu cần tìm là đỉnh (4,0) và giá trị tối ưu là fmin =−8.
Hình 2.16