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

Báo cáo bài tập lớn môn đại số tuyến tính đề tài ứng dụng của đại số tuyến tính trong qui hoạch tuyến tính với bài toán vận tải

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 (874.19 KB, 36 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA


BÁO CÁO BÀI TẬP LỚN
Mơn: Đại số tuyến tính

Đề tài: ỨNG DỤNG CỦA ĐẠI SỐ TUYẾN TÍNH TRONG
QUI HOẠCH TUYẾN TÍNH VỚI BÀI TOÁN VẬN TẢI
GVHD: Ph.D Đặng Văn Vinh
Lớp: L05
STT

Mã số SV

Họ

Tên

1

2211739

Võ Trung

Kiên

2

2212597


Phạm Thành

Phú

3

2213546

Hà Huy

Toại

4

2213941

Lê Nhật Khánh

Việt

5

2214059

Phạm Lư

Vỹ

6


2214063

Đào Ngọc Đông

Xuân

Thành Phố Hồ Chí Minh, Tháng 12 – 2022


MỤC LỤC
I. BÀI TOÁN VẬN TẢI CÂN BẰNG THU PHÁT.............................................................3
1. Mơ hình bài tốn..................................................................................................................................3
2. Phương án vận chuyển......................................................................................................................3
3. Bảng vận tải............................................................................................................................................4
II. CÁC ĐỊNH NGHĨA VÀ ĐỊNH LÝ, TÍNH CHẤT.......................................................4
III. CÁC PHƯƠNG PHÁP GIẢI BÀI TOÁN VẬN TẢI................................................9
1. Phương pháp cước phí thấp nhất..................................................................................................9
2. Phương pháp góc Tây - Bắc............................................................................................................9
IV. CÁC BƯỚC GIẢI BÀI TOÁN VẬN TẢI CÂN BẰNG THU PHÁT..............9
V. CODE MATHLAB GIẢI BÀI TỐN CÂN BẰNG THU PHÁT......................11
VI. VÍ DỤ CỤ THỂ.............................................................................................................................34
DANH MỤC TÀI LIỆU THAM KHẢO................................................................................36

2


ỨNG DỤNG CỦA ĐẠI SỐ TUYẾN TÍNH TRONG QUY HOẠCH TUYẾN TÍNH
VỚI BÀI TỐN VẬN TẢI
Bài tốn vận tải (transportation problem) là bài toán quan trọng nhất trong các bài tốn
qui hoạch tuyến tính. Người ta tổng kết rằng 85% các bài tốn qui hoạch tuyến tính gặp

trong ứng dụng là bài tốn vận tải hoặc mở rộng của nó. Thuật ngữ bài toán vận tải
thường được hiểu là bài tốn vận chuyển sao cho cước phí nhỏ nhất.

I.

BÀI TỐN VẬN TẢI CÂN BẰNG THU PHÁT
1. Mơ hình bài tốn
Có m nơi 1, 2, … cung cấp cùng một một loại hàng hóa với khối lượng tương ứng là a 1, a2,....,am. . Hàng được cung cấp cho n nơi B1, B2,...., Bn với khối lượng tiêu thụ
tương

ứng là b1, b2,....,bn. Cước phí chuyên chở một đơn vị hàng từ điểm phát Ai đến điểm thu
Bj là cij . Hãy lập phương án vận chuyển sao cho tổng chi phí vận chuyển là nhỏ nhất.
2.

Phương án vận chuyển
Hàm mục tiêu: tổng cước phí vận chuyển là nhỏ nhất.
=1 =1

=∑∑



Các hàm ràng buộc:
Phát hết hàng



=

(=1, )




=

( = 1, )

=1

Thu đủ hàng
Ràng buộc biên:

=1

≥0∀ ,

3


Cân bằng thu phát
và tổng số nhu cầu của n điểm

Khi tổng số hàng dự trữ m ở điểm phát (cung) là ∑

thu (cầu) là ∑

bằng nhau ta nói rằng cân bằng cung cầu (hay cân bằng thu phát).

3. Bảng vận tải
Người ta thường trình bày bài tốn vận tải dưới dạng bảng như sau:

Thu

1

2



Phát
1

11

12

1

11

2

21

12

22

1

2


21

22

...

1

2

1

2

Trong đó:
Có n trạm thu hàng và khối lượng hàng tiêu thụ tương ứng là bn
Có m trạm phát hàng và khối lượng hàng cung cấp tương ứng là a m
Khối lượng chở từ trạm phát đến trạm thu là xij
Cước phí chuyên chở một đơn vị hàng từ trạm phát đến trạm thu là c ij
Với = 1,
à = 1,

II. CÁC ĐỊNH NGHĨA VÀ ĐỊNH LÝ, TÍNH CHẤT
Định nghĩa ơ chọn, ơ loại
+

Ta viết (i ; j ) là ơ ở dịng i cột j

+


Trong bảng vận tải, những ơ có xij > 0 được gọi là ơ chọn, những ơ có xij = 0
4

2


gọi là ô loại.
Định nghĩa đường đi
Đường đi là tập hợp các ơ chọn sao cho:



Trên cùng một dịng hay một cột khơng có q hai ơ chọn.



Hai ơ chọn liên tiếp thì nằm trên cùng một dịng hay một cột.
Ví dụ 1. Dãy các ơ chọn sau tạo thành một đường đi:

Định nghĩa chu trình
Một đường đi khép kín được gọi là một chu trình
Ví dụ 2. Dãy các ơ chọn sau tạo thành một chu trình

Tính chất 1: Một bảng vận tải có m dịng, n cột thì tập các ơ chọn khơng chứa chu
trình có tối đa m + n - 1 ô.
5


Tính chất 2: Với một phương án có đủ m + n - 1 ơ chọn khơng chứa chu trình, thì với

bất kỳ một ơ loại nào được đưa vào phương án thì sẽ tạo thành một chu trình và chu
trình này là duy nhất.
Ví dụ 3. Xét bảng vận tải 3 dịng, 4 cột với một phương án có 3+4-1= 6 ô chọn cho như
sau:

Khi ta thêm một ô loại bất kỳ thì ơ loại này kết hợp với một số ơ chọn này tạo thành
chu trình. Chẳng hạn, ta thêm ơ loại (1,2) vào phương án thì ơ này sẽ kết hợp với các ô
(3,2); (3,3); (2,3); (2,1); (1;1) tạo thành chu trình.

6


Định lý 1: Một phương án được gọi là phương án cực biên của bài toán vận tải khi và
chỉ khi tập các ơ chọn của nó khơng chứa chu trình.
Định lý 2: Một phương án cực biên có m + n - 1 ô chọn được gọi là phương án cực
biên không suy biến. Ngược lại, một phương án cực biên có ít hơn m + n - 1 ô chọn
được gọi là phương án cực biên suy biến.
Ví dụ 4. Phương án sau là phương án cực biên không suy biến
Thu

20

Phát

40

1

70


4

50

3

5

20

7

30

9

6

20
10
4

10

6

1

40
40

1
50

7

2

5


Ví dụ 5. Phương án sau là phương án cực biên suy biến:
Thu

60

Phát

70

12

6

40

3

9

12


7

11

100
70
9

8

80

60
11

20
7

6

10

20
20

8


III. CÁC PHƯƠNG PHÁP GIẢI BÀI TOÁN VẬN TẢI

1. Phương pháp cước phí thấp nhất
Chọn ơ có cước phí bé nhất. Điền vào ơ đó giá trị lớn nhất có thể
Loại bỏ các ô mà trạm phát hàng hết khả năng cung cấp hoặc trạm thu hàng hết nhu cầu.

Xác định lại ơ có chi phí bé nhất trong các ô còn lại và tiếp tục làm giống như 2 bước trên
cho tới khi nào hết khả năng phân phối.
Trong q trình chọn ơ phân phối có nhiều ơ chọn có chi phí nhỏ nhất giống nhau thì phân
phối vào ô nào cũng được. Phương án thu được bằng phương pháp này là phương án cực
biên.
2. Phương pháp góc Tây - Bắc
Ta ưu tiên phân phối lượng hàng nhiều nhất vào ơ ở góc Tây - Bắc trên bảng vận tải. Khi đó
nếu:
Trạm phát nào đã hết hàng thì ta xóa dịng chứa trạm phát đó.
Trạm thu nào đã nhận đủ hàng thì ta xóa cột chứa trạm thu đó.
Sau đó lặp lại q trình trên đối với những ơ cịn lại. Phương án được thành lập bằng
phương pháp góc Tây - Bắc là phương án cực biên.

IV. CÁC BƯỚC GIẢI BÀI TOÁN VẬN TẢI CÂN BẰNG THU PHÁT
Bước 1: Kiểm tra cân bằng thu phát


Nếu ∑= ∑thì bài tốn cân bằng thu phát → chuyển sang bước 3



Nếu ∑≠ ∑ thì bài tốn khơng cân bằng thu phát → tiếp tục bước 2

Bước 2: Đưa bài toán về cân bằng thu phát
9



Thêm vào các trạm phát/ thu giả có cước phí
 Trường hợp phát > thu → thêm trạm thu giả


Trường hợp phát < thu → thêm trạm phát giả

+1

+1

với lượng hàng = ∑ ℎá − ∑ ℎ

+1 =

0 để chuyển bài toán thành cân bằng.

với lượng hàng = ∑ ℎ − ∑ ℎá

Bước 3: Tìm phương án xuất phát
Thành lập phương án cực biên ban đầu theo nguyên lý phân bổ tối đa với các ô chọn phân
bổ bằng các phương pháp: góc Tây Bắc, cước phí thấp nhất,…
Bước 4: Kiểm tra phương án suy biến hay khơng suy biến


Phương án khơng suy biến là phương án có số ơ chọn đúng bằng số ô trạm phát + số ô trạm thu –1 → chuyển tới bước 6



Phương án suy biến là phương án có số ơ chọn < số ô trạm phát + số ô trạm thu –1 → tiếp tục bước 5


Bước 5: Đưa về phương án không suy biến
Bổ sung thêm các ơ loại bất kì của bảng làm ô chọn giả (lượng hàng phân bổ = 0) cho đủ ( + − 1) ô chọn và đảm bảo khơng tạo thành chu trình.

Bước 6: Tính các thế vị

,



Chọn một = 0 hoặc = 0 (tương ứng với hàng hoặc cột nào mà có nhiều ơ chọn nhất).



Các

Bước 7: Tính ∆

∆=



+



cịn lại phải thỏa mãn

+


+

Với mọi (i, j) là các ơ chọn (chỉ tính tại các ơ chọn)
tại các ô loại và kết luận

+

,∀(i, j)

Kiểm tra dấu hiệu tối ưu của phương án:
Nếu mọi ∆

=0

≥ 0 → Phương án đang xét tối ưu → Tính fmin

10


-

Nếu có ∆ < 0 → Phương án khơng tối ưu và chuyển sang bước 8.

Bước 8: Xây dựng phương án mới tốt hơn (lập bảng mới):


Tìm một ơ (r,s) là ơ có ∆ < 0 à ℎỏ ℎấ




Tìm một chu trình xuất phát từ ơ (r,s)

-

Tìm chu trình: từ ô (r,s) kẻ các đường thẳng ngang hoặc dọc nối tới các ơ chọn
trong bảng, rồi từ ơ chọn đó nối tới các ô chọn khác cho đến khi quay trở lại ô (r,s);
các đường nối này phải thỏa mãn:
. Trên mỗi hàng hoặc cột chỉ có hai ơ chọn
. Hai ô liên tiếp luôn trên cùng hàng hoặc cùng cột




Đánh dấu (+) vào ơ (r,s); dấu trừ (–) vào ô kế tiếp, rồi dấu (+),… cho đến hết vòng
thuộc các ơ đánh dấu (–)
Tìm q = min{ } với



Ơ chọn nào là ơ có dấu cộng (+) thì giá trịtại đó cộng thêm q



Ơ chọn nào là ơ có dấu cộng (–) thì giá trịtại



Ơ chọn nào khơng có dấu cộng (+) và trừ (–) thì giữ nguyên giá trị




đó trừ thêm q

Quay lại Bước 6 và thực hiện cho đến khi tìm được phương án tối ưu.

V. CODE MATHLAB GIẢI BÀI TOÁN CÂN BẰNG THU PHÁT
clc;
c = input('Nhap ma tran chi phi:\n');
s = input('Nhap ma tran cung cap (dang cot):\n'); d = input('Nhap ma tran nhu
cau (dang d):\n'); [m,n] = size(c);
r = 0.01;
x = zeros(m+1,n+1);
s1 = zeros(m,1);
d1 = zeros(1,n);
sumd = 0;
sumd1 = 0;

11


for j = 1 : n
sumd = sumd + d(j);
d1(j) = d(j);
sumd1 = sumd1 + d1(j);
end
sums = 0;
sums1 = 0;
for i = 1 : m
sums = sums + s(i);
s1(i) = s(i);

sums1 = sums1 + s1(i);
end
if sums ~= sumd
disp('Bai toan cung khac cau!');
return
end
for j = 1 : n
while d1(j) > 0
for i = 1 : m
if s1(i) > 0 && d1(j) > 0
t = i;
k = j;
break
end
end
if d1(k) > s1(t)
d1(k) = d1(k) - s1(t);
x(t,k) = s1(t);
s1(t) = 0;
elseif d1(k) < s1(t)
s1(t) = s1(t) - d1(k);
x(t,k) = d1(k);
d1(k) = 0;
elseif d1(k) == s1(t)

12


x(t,k) = d1(k);
d1(k) = 0;

s1(t) = 0;
end
end
end
disp('Loi giai ban dau:');
disp(x);
cost = 0;
for i = 1 : m
for j = 1 : n
if x(i,j) > 0
cost = cost + x(i,j)*c(i,j);
end
end
end
NonBasic = 0;
for i = 1 : m
for j = 1 : n
if x(i,j) > 0
NonBasic = NonBasic + 1;
end
end
end
Check = m + n - 1;
if NonBasic >= Check
disp('Tong Chi Phi:');
disp(cost);
degen = 0;
else
disp('Tong Chi Phi:');
disp(cost);

degen = 1;
end

13


if degen == 1
NumDegen = Check - NonBasic;
CountDegen = 0;
for A = 1 : NumDegen
CountDegen = CountDegen + 1;
for j = 1 : n
CountCol = 0;
for i = 1 : m
if x(i,j) > 0
CountCol = CountCol + 1;
end
end
x(m+1,j) = CountCol;
end
for i = 1 : m
CountRow = 0;
for j = 1 : n
if x(i,j) > 0
CountRow = CountRow + 1;
end
end
x(i,n+1) = CountRow;
end
for j = 1 : n - 1

if x(m+1,j) == 1
jEnter = j;
for i = 1 : m - 1
if x(i,n+1) == 1
iEnter = i;
break
end
end
end
end
if x(iEnter,jEnter) == 0
x(iEnter,jEnter) = r;

14


break
end
end
for j = 1 : n
for i = 1 : m
if x(i,j) == r
d(j) = d(j) + r;
end
end
end
for i = 1 : m
for j = 1 : n
if x(i,j) == r
s(i) = s(i) + r;

end
end
end
end
countxdegen=0;
for i = 1 : m
for j = 1 : n
if x(i,j) > 0
countxdegen = countxdegen + 1;
end
end
end
if countxdegen >= Check;
else
disp('Do not correct Degeneracy VAM');
end
CountStep = 0;
for A = 1 : m*n
CountStep = CountStep + 1;
nonx = zeros(m,n);
for j = 1 : n
for i = 1 : m

15


if x(i,j) == 0
nonx(i,j) = 1;
end
end

end
CostLoop = zeros(m,n);
for j = 1 : n
for i =1 : m
if x(i,j) > 0
CostLoop(i,j) = inf;
end
end
end
for k = 1 : (m*n)
countnon=0;
for j=1:n
for i=1:m
if nonx(i,j)==1
ibas=i;
jbas=j;
countnon=1;
end
if countnon==1
nonx(ibas,jbas)=inf;
break
end
end
if countnon==1
break
end
end
%

Construct the equivalent basic cell matrix x11=zeros(m+1,n+1);

x22=zeros(m+1,n+1);

16


for j=1:n
for i=1:m
if x(i,j)>0
x11(i,j)=x(i,j);
x22(i,j)=x(i,j);
end
end
end
%

Construct stepping stone path for searching the improvement index

for j=1:n
for i=1:m
x11(ibas,jbas)=inf;

x22(ibas,jbas)=inf;
end
end
% Count the number of the basic cell on each row and column

for j=1:n
countcol=0;
for i=1:m
if x11(i,j)>0

countcol=countcol+1;
end
end;
x11(m+1,j)=countcol;
x22(m+1,j)=countcol;
end
for i=1:m
countrow=0;
for j=1:n
if x11(i,j)>0
countrow=countrow+1;
end
end
x11(i,n+1)=countrow;
x22(i,n+1)=countrow;

17


end
%% Eliminate the basic variables that has only one on each row

iterationloop=0;
for i=1:m
iterationloop=iterationloop+1;
for i=1:m
if x22(i,n+1)==1
ieliminate=i;
for j=1:n
x22(ieliminate,j)>0


if x22(ieliminate,j)
jeliminate=j;
x22(ieliminate,jeliminate)=0;% Eliminate the basic variable on

row

x22(ieliminate,n+1)=x22(ieliminate,n+1)-1; % decrease the number
of the basic variable on row one unit
x22(m+1,jeliminate)=x22(m+1,jeliminate)-1; % decrease the number
of the basic variable on column one unit
end
end
end
end
%

Eliminate the basic variables that has only one on each column for j=1:n
if x22(m+1,j)==1
jeliminate1=j;

for i=1:m
if x22(i,jeliminate1)x22(i,jeliminate1)>0 ieliminate1=i;
x22(ieliminate1,jeliminate1)=0;% Eliminate the basic variable

on row

x22(m+1,jeliminate1)=x22(m+1,jeliminate1)-1; % decrease the

number of the basic variable on column one unit
x22(ieliminate1,n+1)=x22(ieliminate1,n+1)-1;% decrease the
number of the basic variable on row one unit
end
end
end
end

18


%

Control the constructing loop path for j=1:n
for i=1:m
if (x22(i,n+1)==0 || x22(i,n+1)==2) && (x22(m+1,j)==0 || x22(m+1,j)==2)
break
else

end
end
end
end
%% Make +/-sign on basic variables in the loop path (x2)
%1. Add - sign on basic variable on row(imax) and on basic variable on
%column (jmax)
for j=1:n
if

(x22(ibas,j)~=0 && x22(ibas,j)

jneg=j;
x22(ibas,jneg)=(-1)*x22(ibas,jneg);
x22(m+1,jneg)=1;
x22(ibas,n+1)=1;
for i=1:m
if (x22(i,jneg)>0 && x22(m+1,jneg)==1)
ineg=i;
end
end

end
end
for p=1:n
for j=1:n
if (j~=jneg && x22(ineg,j)>0 && x22(ineg,n+1)==2)

19


jneg1=j;
x22(ineg,jneg1)=(-1)*x22(ineg,jneg1);
x22(ineg,n+1)=1;
x22(m+1,jneg1)=1;
for i=1:m
if (x22(i,jneg1)>0 && x22(m+1,jneg1)==1)
ineg1=i;
ineg=ineg1;
jneg=jneg1;
end
end

end
end
%

Control loop if jneg1==jbas

%break
end
end
%% Compute the improvement index (based on the unit cost of each basic cell)

sumloop=0;
for i=1:m
for j=1:n
if

x22(i,j)~=0
icost=i;
jcost=j;
if x22(icost,jcost)>0
sumloop=sumloop+c(icost,jcost);
elseif x22(icost,jcost)<0 sumloop=sumloop+
(-1)*c(icost,jcost);

end

end
end

20




×