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

(Tiểu luận) 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 (981.36 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

h


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 TỐ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

h



Ứ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à a1, 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

Thu đủ hàng

𝑛

∑ 𝑥𝑖𝑗 = 𝑏𝑗 (𝑗 = 1, 𝑛)
𝑗=1

Ràng buộc biên: 𝑥𝑖𝑗 ≥ 0 ∀ 𝑖, 𝑗

3

h


Cân bằng thu phát
Khi tổng số hàng dự trữ m ở điểm phát (cung) là ∑𝑚
𝑖 𝑎𝑖 và tổng số nhu cầu của n điểm
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:
𝑏1

Thu

𝑏2



𝑏𝑛

Phát
𝑎1


𝑐11

𝑐12

𝑐1𝑛

𝑥11
𝑎2

𝑐21

𝑥12
𝑐22

𝑥1𝑛
𝑐2𝑛

𝑥21

𝑥22

𝑥2𝑛

...
𝑎𝑚

𝑐𝑚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à am
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à cij
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

h


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

h


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

h


Đị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

30

5

7

9

3

50

20

9

30

6

20
10
4

6

10
1

5

40
40
1

2

3

5

50

20

7

h

30


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

30

9

12

100

70
9

8

30
7

11

80
60
11

20
7

6

10

20
20

8

h


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 quá 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

h



Thêm vào các trạm phát/ thu giả có cước phí 𝐶𝑖𝑛+1 = 0 để chuyển bài toán thành cân bằng.
 Trường hợp phát > thu → thêm trạm thu giả 𝑏𝑛+1 với lượng hàng = ∑ 𝑝ℎá𝑡 − ∑ 𝑡ℎ𝑢
 Trường hợp phát < thu → thêm trạm phát giả 𝑎𝑚+1 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 𝑢𝑖 và 𝑣𝑗 cịn lại phải thỏa mãn
𝑢𝑖 + 𝑣𝑗 + 𝑐𝑖𝑗 = 0
Với mọi (i, j) là các ơ chọn (chỉ tính tại các ô chọn)
Bước 7: Tính ∆𝑖𝑗 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 → Phương án đang xét tối ưu → Tính fmin
10

h



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
• Tìm q = min{𝒙𝒊𝒋 } với 𝒙𝒊𝒋 thuộc các ơ đánh dấu (–)
➢ Ơ 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 đó trừ thêm q
➢ Ơ chọn nào khơng có dấu cộng (+) và trừ (–) thì giữ ngun giá trị 𝒙𝒊𝒋
• 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

h


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

h


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

h


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

h


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


h


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

h


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

h



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
if x22(ieliminate,j)
x22(ieliminate,j)>0

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)<inf && 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

h


%% 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


h


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

h


end
CostLoop(ibas,jbas)=sumloop;
end
%% Loop controller
countcontrol=0;
for j=1:n
for i=1:m
if CostLoop(i,j)>=0
countcontrol=countcontrol+1;
end
end

end
if countcontrol==m*n
return
end

%% Searching the absolute smallest improvement index
minindex=0;
for j=1:n
for i=1:m
if CostLoop(i,j)<=0
if CostLoop(i,j)<=minindex
minindex=CostLoop(i,j);
ismall=i;
jsmall=j;
end
end
end
end
%% Construct a new stepping stone loop using add the new basic variable to
change in x matrix
% Construct the equivalent basic cell matrix
x33=zeros(m+1,n+1);
x44=zeros(m+1,n+1);
for j=1:n
for i=1:m

if x(i,j)>0

21


h


x33(i,j)=x(i,j);
x44(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
x33(ismall,jsmall)=inf;
x44(ismall,jsmall)=inf;
end
end
% Count the number of the basic cell on each row and column

for j=1:n
countcol1=0;
for i=1:m
if x33(i,j)>0
countcol1=countcol1+1;
end
end
x33(m+1,j)=countcol1;
x44(m+1,j)=countcol1;
end
for i=1:m
countrow1=0;
for j=1:n

if x33(i,j)>0
countrow1=countrow1+1;
end
end
x33(i,n+1)=countrow1;
x44(i,n+1)=countrow1;
end
% Eliminate the basic variables that has only one on each row
iterationloop1=0;
for i=1:m

22

h


iterationloop1=iterationloop1+1;
for i=1:m
if x44(i,n+1)==1
ieliminate3=i;
for j=1:n
if x44(ieliminate3,j)
x44(ieliminate3,j)>0

jeliminate3=j;
x44(ieliminate3,jeliminate3)=0;% Eliminate the basic variable on
row
x44(ieliminate3,n+1)=x44(ieliminate3,n+1)-1; % decrease the
number of the basic variable on row one unit

x44(m+1,jeliminate3)=x44(m+1,jeliminate3)-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 x44(m+1,j)==1
jeliminate4=j;
for i=1:m
if x44(i,jeliminate4)<inf && x44(i,jeliminate4)>0
ieliminate4=i;
x44(ieliminate4,jeliminate4)=0;% Eliminate the basic variable
on row
x44(m+1,jeliminate4)=x44(m+1,jeliminate4)-1; % decrease the
number of the basic variable on column one unit
x44(ieliminate4,n+1)=x44(ieliminate4,n+1)-1;% decrease the
number of the basic variable on row one unit
end
end
end
end

23

h



%% Control the constructing loop path
for j=1:n
for i=1:m

if (x44(i,n+1)==0 || x44(i,n+1)==2) && (x44(m+1,j)==0 ||
x44(m+1,j)==2)
break

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

(x44(ismall,j)~=0 && x44(ismall,j)
jneg=j;
x44(ismall,jneg)=(-1)*x44(ismall,jneg);
x44(m+1,jneg)=1;
x44(ismall,n+1)=1;
for i=1:m

if (x44(i,jneg)>0 && x44(m+1,jneg)==1)
ineg=i;

end
end

end
end
for p=1:n

for j=1:n

24

h


if (j~=jneg && x44(ineg,j)>0 && x44(ineg,n+1)==2)

jneg1=j;
x44(ineg,jneg1)=(-1)*x44(ineg,jneg1);
x44(ineg,n+1)=1;
x44(m+1,jneg1)=1;

for i=1:m
if (x44(i,jneg1)>0 && x44(m+1,jneg1)==1)
ineg1=i;
ineg=ineg1;
jneg=jneg1;
end

end
end
end
% Control loop
if

jneg1==jsmall

% return
end
end
% Eliminate

column j that

has the number of basic variables =2

for j=1:n
if x44(m+1,j)==2
for i=1:m
if x44(i,j)>0
x44(i,j)=0;
end
end
x44(m+1,j)=0;
end

end
%Eliminate row i that has the number of basic variables =2
for i=1:m

if x44(i,n+1)>=2
for j=1:n

25

h


×