16
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 LN KTHUT RA QUYẾT ĐỊNH CHO KGVHD : ThS. HTHANH PHƯƠNG Sinh viên : Bùi Tiến Thành MSSV : 41203385 Nhóm : A03 TP. HCHÍ MINH HC KI NĂM HỌC 2015-2016

Maxflow và Shortest path

Embed Size (px)

DESCRIPTION

Maxflow và Shortest path

Citation preview

Page 1: Maxflow và Shortest path

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

Page 2: Maxflow và Shortest path

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.

Page 3: Maxflow và Shortest path

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.

Page 4: Maxflow và Shortest path

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'))

Page 5: Maxflow và Shortest path

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

Page 6: Maxflow và Shortest path

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.

Page 7: Maxflow và Shortest path

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.

Page 8: Maxflow và Shortest path

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

Page 9: Maxflow và Shortest path

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

Page 10: Maxflow và Shortest path

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.

Page 11: Maxflow và Shortest path

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)

Page 12: Maxflow và Shortest path

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

Page 13: Maxflow và Shortest path

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.

Page 14: Maxflow và Shortest path

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

Page 15: Maxflow và Shortest path

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

Page 16: Maxflow và Shortest path

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ô đỏ).