Upload
tienthanh
View
285
Download
11
Embed Size (px)
DESCRIPTION
Maxflow và Shortest path
Citation preview
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 1
TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BÀI TẬP LỚN
KỸ THUẬT RA QUYẾT ĐỊNH CHO KỸ SƯ
GVHD : ThS. HỒ THANH PHƯƠNG
Sinh viên : Bùi Tiến Thành
MSSV : 41203385
Nhóm : A03
TP. HỒ CHÍ MINH
HỌC KỲ I NĂM HỌC 2015-2016
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 2
ỨNG DỤNG PHẦN MỀM MATLAB GIẢI QUYẾT BÀI TOÁN
MAX FLOW VÀ SHORTEST PATH
Mục tiêu của việc giải các bài toán là tìm được phương án tối ưu và vận dụng
phương án đó vào thực tiễn. Tuy nhiên, trong thực tế công việc này lại khá phức
tạp, gây không ít khó khăn cho người kỹ sư. Bài viết này nhằm giới thiệu cách sử
dụng 1 công cụ rất hữu ích đó là phần mềm Matlab để giải bài toán MAX FLOW
và SHORTEST PATH một cách dễ dàng và nhanh chóng.
Để giải bài toán MAX FLOW và SHORTEST PATH dựa trên phần mềm
Matlab cần thực hiện theo trình tự sau:
Các bước thực hiện
Bước 1: Lập mô hình và nhập thông số bài toán (nếu bài toán chưa lập mô
hình);
Bước 2: Vận dụng phần mềm ứng dụng Matlab để giải dựa trên mô hình ở bước
1;
Bước 3: Kết luận phương án tối ưu và giá trị của hàm mục tiêu (nếu có).
Tất nhiên, để thực hiện được bước 2 bạn cần phải có một máy tính có cài đặt sẵn
phần mềm này.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 3
I. Giới thiệu 1 số hàm trong Matlab:
1. [MaxFlow, FlowMatrix ] = graphmaxflow(G, SNode, TNode)
Hàm graphmaxflow là hàm giúp chúng ta tìm thông lượng cực đại
trên mạng từ nút S tới nút T dựa trên ma trận G.
Ma trận G: là ma trận có trọng số biểu diễn thông lượng tối đa có thể
truyền giữa các nút trong mạng.
MaxFlow : thông lượng cực đại cần tìm.
FlowMatrix : ma trận trọng số ứng với thông lượng cực đại cần tìm.
2. G = SPARSE (i,j,s,m,n)
Hàm sparse là hàm nhập ma trận với :
G(i(k),j(k)) = s(k)
m,n : kích thước của ma trận.
3. [Dist,Path] = Graphshortestpath(G,S,D)
Hàm graphshortestpath là hàm giúp chúng ta tìm đường đi ngắn nhất
trên mạng từ nút S tới nút D dựa trên ma trận G.
Ma trận G: là ma trận có trọng số biểu diễn độ dài đường đi giữa các
nút trong mạng.
Dist: độ dài đường đi ngắn nhất từ nút S tới nút D cần tìm.
Path: đường đi ngắn nhất từ nút S tới nút D.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 4
II. GIẢI BÀI TOÁN MAX FLOW BẰNG MATLAB
Code MATLAB:
n=input('Nhap so nut : ')
disp('Nhap ma tran thong luong toi da: ')
a=input('cot cac nut dau: ')
b=input('cot cac nut duoi: ')
c=input('thong luong: ')
p=sparse(a,b,c,n,n)
h = view(biograph(p,[],'ShowWeights','on'))
x=input('Nhap nut dau : ')
y=input('Nhap nut dich: ')
[M,F] =graphmaxflow(p,x,y)
view(biograph(F,[],'ShowWeights','on'))
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 5
Để hiểu rõ hơn , ta sẽ giải 1 ví dụ sau:
Ví dụ1 : Tìm lượng hàng hóa cực đại được chuyển từ điểm 1 tới điểm 4.
Sơ đồ được cho như hình sau:
Các thông số bài toán :
Số nút: 4
Ma trận thông lượng tối đa qua các nút:
Hàng hóa vận chuyển từ điểm 1 điểm 4
Nút đầu Nút Đuôi Thông lượng tối
đa
1 2 7
1 3 9
2 3 4
2 4 9
3 4 8
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 6
Đầu tiên ta nhập thông số bài toán vào Matlab:
>> maxflow
Nhap so nut : 4
n =
4
Nhap ma tran thong luong toi da:
cot cac nut dau: [1 1 2 2 3]
a =
1 1 2 2 3
cot cac nut duoi: [2 3 3 4 4]
b =
2 3 3 4 4
thong luong: [7 9 3 9 8]
c =
7 9 3 9 8
p =
(1,2) 7
(1,3) 9
(2,3) 3
(2,4) 9
(3,4) 8
Biograph object with 4 nodes and 5 edges.
Lúc này ta có được sơ đồ như hình trên.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 7
Tiếp tục nhập nút nguồn và nút đích:
Nhap nut nguon : 1
x =
1
Nhap nut dich: 4
y =
4
M =
15
F =
(1,2) 7.0000
(1,3) 8.0000
(2,4) 7.0000
(3,4) 8.0000
Kết luận: Thông lượng tối đa truyền từ nút 1 tới nút 4 là 15. Đường truyền như
trong hình.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 8
Ví dụ 2 : Tìm lượng hàng hóa cực đại được chuyển từ điểm 1 tới điểm 10 với
sơ đồ nút như hình:
Dữ liệu bài toán:
Số nút : 10
Nút đầu Nút Đuôi Thông lượng tối
đa
1 2 20
1 5 20
2 3 10
2 4 20
3 6 15
4 3 5
4 6 10
4 7 5
5 4 5
5 7 5
5 8 5
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 9
Đầu tiên ta cũng nhập thông số bài toán vào Matlab:
>> maxflow
Nhap so nut : 10
n =
10
Nhap ma tran thong luong toi da:
cot cac nut dau: [1 1 2 2 3 4 4 4 5 5 5 6 7 7 8 8 9]
a =
1 1 2 2 3 4 4 4 5 5 5 6 7 7 8 8 9
cot cac nut duoi: [2 5 3 4 6 3 6 7 4 7 8 10 6 9 7 9 10]
b =
2 5 3 4 6 3 6 7 4 7 8 10 6 9 7 9 10
thong luong: [20 20 10 20 15 5 10 5 5 5 5 15 5 10 10 10 20]
c =
20 20 10 20 15 5 10 5 5 5 5 15 5 10 10 10 20
p =
(1,2) 20
(2,3) 10
(4,3) 5
(2,4) 20
(5,4) 5
(1,5) 20
(3,6) 15
(4,6) 10
(7,6) 5
(4,7) 5
6 10 15
7 6 5
7 9 10
8 7 10
8 9 10
9 10 20
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 10
(5,7) 5
(8,7) 10
(5,8) 5
(7,9) 10
(8,9) 10
(6,10) 15
(9,10) 20
Biograph object with 10 nodes and 17 edges.
Nhap nut nguon : 1
x =
1
Nhap nut dich: 10
y =
10
M =
30
F =
(1,2) 15
(2,3) 5
(4,3) 5
(2,4) 10
(5,4) 5
(1,5) 15
(3,6) 10
(4,6) 5
(4,7) 5
(5,7) 5
(5,8) 5
(7,9) 10
(8,9) 5
(6,10) 15
(9,10) 15
Kết luận: Thông lượng tối đa truyền từ nút 1 tới nút 10 là 30. Đường truyền như
trong hình.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 11
III. GIẢI BÀI TOÁN SHORTEST PATH BẰNG MATLAB
Code MATLAB:
n=input('Nhap so nut : ')
disp('Nhap ma tran khoang cach: ')
a=input('cot cac nut dau: ')
b=input('cot cac nut duoi: ')
c=input('khoang cach : ')
DG=sparse(a,b,c,n,n)
h = view(biograph(DG,[],'ShowWeights','on'))
x=input('Nhap nut dau : ')
y=input('Nhap nut dich: ')
[dist,path] = graphshortestpath(DG,x,y)
set(h.Nodes(path),'Color',[1 0.4 0.4])
edges =
getedgesbynodeid(h,get(h.Nodes(path),'ID'));
set(edges,'LineColor',[1 0 0])
set(edges,'LineWidth',1.5)
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 12
Để hiểu rõ hơn , ta sẽ giải 1 ví dụ sau:
Ví dụ 3 : Tìm đường đi ngắn nhất từ điểm 1 tới điểm 4.
Sơ đồ được cho như hình sau:
Các thông số bài toán :
Số nút: 4
Ma trận thông lượng tối đa qua các nút:
Tìm đường đi từ điểm 1 điểm 4
Ta nhập thông số bài toán vào Matlab:
>> shortestpath
Nhap so nut : 4
Nút đầu Nút Đuôi Độ dài quãng
đường
1 2 7
1 3 9
2 3 4
2 4 9
3 4 8
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 13
n =
4
Nhap ma tran khoang cach:
cot cac nut dau: [1 1 2 2 3]
a =
1 1 2 2 3
cot cac nut duoi: [2 3 3 4 4]
b =
2 3 3 4 4
khoang cach : [7 9 3 9 8]
c =
7 9 3 9 8
DG =
(1,2) 7
(1,3) 9
(2,3) 3
(2,4) 9
(3,4) 8
Biograph object with 4 nodes and 5 edges.
Nhap nut dau : 1
x =
1
Nhap nut dich: 4
y =
4
dist =
16
path =
1 2 4
>>
Kết luận: Đường đi ngắn nhất từ nút 1 tới nút 4 có độ dài là 16. Đường đi như
trong hình.
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 14
Ví dụ 4 : Tìm đường đi ngắn nhất từ điểm 1 tới điểm 6.
Sơ đồ được cho như hình sau:
Các thông số bài toán :
Số nút: 6
Ma trận thông lượng tối đa qua các nút:
Nút đầu Nút Đuôi Độ dài đường đi
1 2 3
1 3 7
1 4 4
2 1 3
2 3 2
2 6 9
3 1 7
3 2 2
3 4 1
3 5 3
3 6 6
4 1 4
4 3 1
4 5 3
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 15
Tìm đường đi từ điểm 1 điểm 6
Đầu tiên ta nhập thông số bài toán vào Matlab:
>> shortestpath
Nhap so nut : 6
n =
6
Nhap ma tran khoang cach:
cot cac nut dau: [1 1 1 2 2 2 3 3 3 3 3 4 4 4 5 5 5 6 6 6]
a =
1 1 1 2 2 2 3 3 3 3 3 4 4 4 5 5 5 6
6 6
cot cac nut duoi: [2 3 4 1 3 6 1 2 4 5 6 1 3 5 3 4 6 2 3 5]
b =
2 3 4 1 3 6 1 2 4 5 6 1 3 5 3 4 6 2
3 5
khoang cach : [3 7 4 3 2 9 7 2 1 3 6 4 1 3 3 3 3 9 6 3]
c =
3 7 4 3 2 9 7 2 1 3 6 4 1 3 3 3 3 9
6 3
DG =
(2,1) 3
(3,1) 7
(4,1) 4
(1,2) 3
(3,2) 2
(6,2) 9
5 3 3
5 4 3
5 6 3
6 2 9
6 3 6
6 5 3
Kỹ thuật ra quyết định cho kỹ sư
Bùi Tiến Thành- 41203385 Page 16
(1,3) 7
(2,3) 2
(4,3) 1
(5,3) 3
(6,3) 6
(1,4) 4
(3,4) 1
(5,4) 3
(3,5) 3
(4,5) 3
(6,5) 3
(2,6) 9
(3,6) 6
(5,6) 3
Biograph object with 6 nodes and 20 edges.
Nhap nut dau : 1
x =
1
Nhap nut dich: 6
y =
6
dist =
10
path =
1 4 5 6
>>
Kết luận: Đường đi ngắn nhất từ nút 1 tới nút 4 có độ dài là 10. Đường đi như
trong hình.( được tô đỏ).