Professional Documents
Culture Documents
Bao Cao Simplex
Bao Cao Simplex
Nhóm: 20.36
Giảng viên: TS. Trần Thị Minh Dung
Sinh viên thực hiện:Lê Đức Thắng
Mã SV: 105200385
Lớp: 20TDHCLC1
I.GIỚI THIỆU VỀ PHƯƠNG PHÁP SIMPLEX:
Phương pháp đơn giản còn được gọi là kỹ thuật đơn giản hoặc thuật toán đơn giản được
phát triển bởi G.B. Dantzeg, Một nhà toán học người Mỹ. Phương pháp Simplex phù hợp để
giải các bài toán quy hoạch tuyến tính với số lượng biến lớn. Phương pháp này thông qua
một quá trình lặp đi lặp lại, dần dần tiếp cận và cuối cùng đạt đến giá trị tối đa hoặc tối thiểu
của hàm mục tiêu.
Không thể có được lời giải đồ họa cho bài toán LP có nhiều hơn hai biến. Vì những lý do
này, quy trình lặp toán học được gọi là 'Phương pháp đơn giản' đã được phát triển. Phương
pháp đơn hình có thể áp dụng cho bất kỳ bài toán nào có thể được xây dựng dưới dạng hàm
mục tiêu tuyến tính tuân theo một tập hợp các ràng buộc tuyến tính.
Phương pháp đơn hình cung cấp một thuật toán dựa trên định lý cơ bản của quy hoạch tuyến
tính. Điều này nói lên rằng “lời giải tối ưu cho một bài toán quy hoạch tuyến tính nếu nó tồn
tại, luôn xảy ra ở một trong các điểm góc của không gian lời giải khả thi”.
Phương pháp đơn hình cung cấp một thuật toán có hệ thống bao gồm việc chuyển từ giải
pháp khả thi cơ bản này sang giải pháp khả thi cơ bản khác theo cách quy định sao cho giá
trị của hàm mục tiêu được cải thiện. Quá trình nhảy từ đỉnh này sang đỉnh khác được lặp lại.
Thuật toán đơn giản là một thủ tục lặp đi lặp lại để giải các bài toán LP.
Nó bao gồm:
(i) Có nghiệm cơ bản khả thi thử nghiệm phương trình ràng buộc
(ii) Kiểm tra xem đó có phải là giải pháp tối ưu hay không,
(iii) Cải tiến giải pháp thử nghiệm đầu tiên bằng cách lặp lại quy trình cho đến khi thu được
giải pháp tối ưu.
Thuật toán đơn giản (dạng tối thiểu hóa) Từng bước với Tableaus có thể được tóm tắt bằng
các bước sau:
Bước 0. Hình thành một hoạt cảnh tương ứng với một giải pháp khả thi cơ bản (BFS). Ví
dụ: nếu chúng ta giả sử các biến cơ bản là (theo thứ tự) x 1, x2, . . . xm, bảng đơn giản có dạng
ban đầu được hiển thị bên dưới:
x1 x2 ... xm xm+1 xm+2 ... xj ... xn RHS
1 0 ... 0 a¯ 1,m+1 a¯1,m+2 . . . a¯1j ... a¯1n ¯b1
0 1 ... 0 a¯2,m+1 a¯2,m+2 . . . a¯2j ... a¯2n ¯b2
.
0 0 ... 0 a¯i,m+1 a¯i,m+2 ... a¯ij ... a¯in ¯bi
.
0 0 ... 1 a¯m,m+1 a¯m,m+ ... a¯ ... a¯mn ¯bm
2 mj
0 0 ... 0 c¯m+1 c¯m+2 ... c¯j ... c¯n (−z)
Bước 1. Nếu mỗi c¯j ≥ 0 thì dừng; giải pháp cơ bản khả thi hiện nay là tối ưu
Bước 2. Chọn q sao cho c¯q < 0 để xác định biến không cơ bản nào trở thành biến cơ bản.
ước 3. Tính các tỉ số ¯bi/a¯iq cho a¯iq > 0, i = 1, 2, . . . , tôi . Nếu không có a¯iq > 0, dừng
lại: vấn đề không bị giới hạn. Ngược lại, chọn p làm chỉ số i tương ứng với tỷ lệ tối thiểu,
tức là
−¿ −¿
bp bi −¿¿
−¿ ¿ =min ¿,a >0
a pq ¿ ai q−¿ ¿ iq
Bước 4. Xoay quanh phần tử thứ pq, cập nhật tất cả các hàng, bao gồm cả hàng z. Quay lại
Bước 1.
Ví dụ
Max 6x1 + 14x2 + 13x3
S.T
x≥0
Quan sát: Ở dạng chuẩn, tất cả các biến đều không âm và RHS cũng không âm.
Phương pháp đơn hình được thực hiện từng bước cho bài toán này trong bảng dưới đây.
Hàng và cột xoay được biểu thị bằng các mũi tên; phần tử trụ được in đậm. Chúng ta sử
dụng quy tắc tham lam để chọn biến vào, tức là chọn biến có hệ số âm nhất để vào cơ sở.
Tableau I
BASIS
x1 x2RHS
x3 x4 x5 Ratio Pivot
x2 1/6 1 60 2/3 -1/6 36.0 →
x3
1/6 0 1 -1/3 1/3 12 72
(−z) -1.5 0 0 5 2 24
Pivot ↑
Tableau IV
BASIS x1 x2 x3 x4 x5 RHS
x1 1 6 0 4 -1 36
x3 0 -1 1 -1 0.5 6
(−z) 0 9 0 11 0.5 294
Do đó, giá trị tối ưu của công thức tối thiểu là z = 294. Điều này có nghĩa là giá trị tối
ưu của công thức tối đa hóa ban đầu là z = 294. Lời giải tối ưu là x = (36, 0, 6, 0, 0).
IV.CODE MATLAB
clc;close all ;
% Khởi tạo bảng Simplex ban đầu (Tableau I)
tableau = [
0.5, 2, 1, 1, 0, 24;
1, 2, 4, 0, 1, 60;
-6, -14, -13, 0, 0, 0;
];
% Bước 2: Chọn cột pivot (theo greedy rule: chọn hệ số âm lớn nhất)
[entering_col, entering_col_index] = min(tableau(end, 1:end-1));
if exitflag == 1
disp('Tìm thấy giải pháp tối ưu:');
disp('Giá trị biến:');
disp(x);
disp('Giá trị tối ưu:');
disp(-fval); % Đổi dấu về giá trị tối ưu thực sự
else
disp('Không tìm thấy giải pháp tối ưu');
end
VI.NHẬN XÉT