Tập nút đã khảo sát permanent set được nối trực tiếp đến 1 hoặc nhiều nút chưa khảo sát nào đó sẽ cung cấp một ứng viên cho nút gần nhất thứ n.. Nhãn của nút j là [uj, n] với n là nút j
Trang 1CHƯƠNG 5
QUY HOẠCH MẠNG (NET-NETWORKS PROGRAMMING)
* MỤC TIÊU HỌC TẬP
Sau khi hoàn tất học tập chương 5, sinh viên sẽ có khả năng:
1 Mô tả các thuật ngữ chính trong mạng
2 Nhận biết 3 dạng bài toán cơ bản trong quy hoạch mạng
3 Sử dụng các công cụ tin học để giải bài toán quy hoạch mạng
+ Bài toán tìm đường đi ngắn nhất (Shorest-Route Problem);
+ Bài toán đường dây mắc loa (Minimal-Spanning Tree);
+ Bài toán cực đại lưu lượng (Maximal Flow Problem)
Trong xây dựng, 3 mô hình của quy hoạch mạng có thể dùng để
Trang 2nhằm giúp bạn đọc dễ hiểu và áp dụng các thuật toán Đối với những quy hoạch mạng nhỏ và đơn giản, chúng ta có thể tìm ra ngày lời giải tối ưu bằng cách xem xét trực quan và suy đoán Đối với những bài toán quy hoạch mạng lớn và phức tạp có hàng trăm, hàng ngàn nút, chúng ta sẽ gặp khó khăn trong việc tìm lời giải bằng trực giác Vì vậy, chúng ta phải áp dụng các thuật toán được trình bày trong chương này để giải quyết vấn đề dù giải bằng tay hay trên máy tính
Mạng (Network): bao gồm các điểm và các đường nối các điểm này lại với nhau
+ Các điểm này được gọi là các Nút (Node)
• Nút cung Nút cấp: có đặc điểm là lượng chuyển tải ra khỏi nút đó
lớn hơn lượng đi vào nút đó
• Nút cầu: lượng nhận vào lớn hơn lượng chuyển tải ra khỏi nút
• Nút trung tính: lượng đi vào và đi ra khỏi nút bằng nhau
+ Các đường nối các nút được gọi là các cung/nhánh (Arc)
• Cung có hướng: Cho phép đi từ 1 nút A đến nút B và không cho
phép đi theo hướng ngược lại (ký hiệu AB)
• Cung vô hướng: cho phép di chuyển theo cả hai hướng
a) Cung có hướng AB b) Cung vô hướng AB
Hình 5.1 Cung có hướng và cung vô hướng
+ Mạng có hướng: chỉ bao gồm các cung có hướng
Trang 3Tuyến: nối giữa hai nút và có thể bao gồm nhiều cung khác nhau
+ Tuyến có hướng từ nút i đến nút j là một chuỗi các cung có
hướng từ i sang j, do đó cho phép đi từ i sang j
+ Tuyến vô hướng từ nút i sang nút j là một chuỗi các cung vô
hướng từ i đi đến j
Trang 4Ví dụ: Tuyến OT, đường đi từ O sang T có thể đi qua các cung OB -
Mạng liên thông: là mạng mà tất cả các cặp nút đều liên thông
Mạng nhánh cây: bao gồm tất cả các nút nhưng không được nối thành vòng
Ví dụ: Xét 1 mạng lưới như trong Hình 8.3 như sau, trong đó:
+ xij = lượng chuyển tải từ nút i đến nút j;
+ cij = chi phí chuyển tải đơn vị từ nút i đến nút j
Trang 5
Hình 8.3 Sơ đồ mạng
Bài toán tìm đường đi ngắn nhất (Route/
Shortest-Path Problem) là bài toán tìm lộ trình di chuyển (của người, xe máy hay hàng hóa) từ một địa điểm này đến một địa điểm khác trên hệ thống nhiều đường giao thông có sẵn sao cho tổng chiều dài đường đi
là ngắn nhất Nói cách khác, nó tìm đường đi ngắn nhất xuất phát từ 1 điểm nguồn ban đầu đến một chuỗi các điểm đích khác nhau
Ví dụ:
+ Tìm đường đi ngắn nhất từ nhà máy cung cấp bê tông tươi đến các công trường xây dựng
+ Tìm đường đi ngắn nhất để vận chuyển công nhân, máy móc thiết
bị từ công ty xây dựng đến các công trường xây dựng
+ Tìm đường đi ngắn nhất từ một thành phố này đến một thành phố khác trên hệ thống đường giao thông
+ Tìm đường đi ngắn nhất từ nhà máy sản xuất đến nhà kho chứa hàng
+ Tìm đường đi ngắn nhất (thời gian ít nhất) từ nhà máy sản xuất đến nơi tiêu thụ sản phẩm
Thế vị của 1 nút: là khoảng cách bé nhất từ nút đầu (Nút 1) đến
nút đó:
u =min u +d
Trang 63.2 Các giải thuật cho bài toán tìm đường đi ngắn nhất
Giải thuật tổng quát:
+ Giải thuật tiến;
+ Giải thuật Dijkstra;
+ Giải thuật Floyd
Giải thuật đệ quy: Giải thuật chỉ dùng cho mạng có hướng, không mạch vòng
Giải theo bài toán QHTT nguyên
Chú ý: Một số ứng dụng của bài toán tìm đường đi ngắn nhất
liên quan đến tiêu chuẩn thời gian hoặc chi phí thay vì khoảng cách
Do đó, ta có các dạng bài toán như sau:
1- Cực tiểu quãng đường đi
2- Cực tiểu tổng chi phí của một chuỗi các thao tác
3- Cực tiểu lượng thời gian của một chuỗi các thao tác
Bởi vì bài toán tìm đường đi ngắn nhất là bài toán cực tiểu hóa nên chúng ta không thể áp dụng các giải thuật nêu ở trên nếu bài toán
có giá trị ở các cung là âm Mặc dù trong thực tế, giá trị trên các cung
có thể là chi phí âm (tức lợi nhuận dương) Chúng ta cần các giải thuật nâng cao hơn để giải các bài toán dạng này
Trang 7- Bước 3: Xác định tất cả các nút chưa khảo sát nằm gần tập nút đã khảo sát
Tập nút đã khảo sát (permanent set) được nối trực tiếp đến 1 hoặc
nhiều nút chưa khảo sát nào đó sẽ cung cấp một ứng viên cho nút gần nhất thứ n
- Bước 4: Tìm nút nằm gần tập nút đã khảo sát (permanent set) nhất,
và ghi khoảng cách ngắn nhất đến nút này từ nút gốc (giá trị này gọi là thế vị của nút)
Lưu ý: Với mỗi nút đã khảo sát và các ứng viên của nó, cộng khoảng cách giữa chúng và khoảng cách ngắn nhất từ nút gốc đến nút đã khảo sát đó Nút nào có khoảng cách ngắn nhất sẽ là nút gần nhất thứ n và tuyến đường ngắn nhất sẽ là tuyến đường tạo ra khoảng cách này
- Bước 5: Lặp lại bước 3 và 4:
+ Tiếp tục lặp lại quá trình xác định thế vị của các nút trong mạng (bằng cách cộng thế vị của nút gần nhất và khoảng cách giữa 2 nút) theo công thức:
i
u =min u +d ) + Giá trị thế vị ghi ở nút cuối cùng chính là khoảng cách ngắn nhất
Trang 8Gọi x 0
1ij
nếu không có đường nối từ nút i đến nút j nếu có đường nối từ nút i đến nút j
Gọi uj = khoảng cách ngắn nhất từ nút 1 đến nút j với u1 = 0
Các giá trị của uj, j = 1,2 , n được tính tốn đệ quy dùng cơng
thức sau:
Trang 9Trong đó:
+ uj = Khoảng cách ngắn nhất từ nút 1 đến nút j với u1 = 0;
+ ui = Khoảng cách ngắn nhất từ nút 1 đến nút i
+ dij = Khoảng cách giữa nút j và nút i trước nó
Lưu ý: uj chỉ được tính sau khi ui đã được tính
Nhãn của nút j là [uj, n] với n là nút j tạo ra khoảng cách ngắn nhất:
Giải thuật Dijkstra được sử dụng để tìm đường đi ngắn nhất từ
nút nguồn và các nút khác trong mạng, dùng cho cả bài toán có hay không có mạch vòng Giải thuật này có thể áp dụng cho các bài toán mạng có vòng (Cyclic)
Giải thuật Dijkstra sử dụng 1 quy trình gắn nhãn đặc biệt, do đó
nó còn có tên gọi là giải thuật gắn nhãn
Gọi:
+ ui là khoảng cách ngắn nhất từ nút 1 đến nút i; và
+ dij ≥ 0 là chiều dài cung (i, j);
+ i thể hiện nút trước trên con đường từ nút 1 đến nút j;
⇒ Nhãn của nút j được định nghĩa là: [u j , i] = [ u i + d ij , i] với d ij ≥ 0
Trang 10Ký hiệu nhãn tạm thời: [u j , i] hay (u j , i)
+ Nhãn cố định (Permanent Label): khi không tìm được 1 đường
đi nào ngắn hơn nữa thì nhãn tạm thời được chuyển thành nhãn
cố định
Ký hiệu nhãn cố định: [u j , i]* hay [u j , i]
3.6.2 Giải Thuật Dijkstra
Giả sử chúng ta có một mạng gồm n nút Giải thuật Dijkstra sẽ tìm đường đi ngắn nhất từ nút nguồn 1 đến các nút khác trong mạng như sau:
- Bước 1: Gắn cho nút nguồn 1 nhãn cố định [0, -]* hoặc [0, S]*
+ Nếu i =1: Tính các nhãn tạm thời (d1j, 1) của các nút j mà từ nút
1 có thể đi đến được, biết rằng j là các nút chưa được gắn nhãn cố định và nút 1 là nút nguồn, d1j là giá trị khoảng cách từ nút 1 đến nút j
+ Nêu i > 1: Tính các nhãn tạm thời (uj + dij, i) của các nút j mà từ nút i có thể đi đến được, biết rằng j là các nút chưa được gắn nhãn cố định và i là nút đã gắn nhãn cố định Nút j cho chúng ta giá trị khoảng cách uj + dij nhỏ nhất sẽ là nút được gắn nhãn cố định [uj + dij, i]
+ Nếu nút j đã được gắn 1 nhãn tạm thời (uj, k) đến từ 1 nút k nào
đó, và nếu khoảng cách đến từ nút i là ui + dij < uj (khoảng cách đến từ nút k), chúng ta thay thế nhãn tạm thời (uj, k) bằng (ui +
Trang 11- Bước 3:
+ Nếu tất cả các nút đã được gắn nhãn cố định Ta dừng và đọc kết quả tìm đường đi ngắn nhất từ nút 1 đến nút k bằng cách theo chiều ngược dòng
+ Ngược lại, chọn 1 nút r nào đó chưa được gắn nhãn cố định [ur, s]
có ur bé nhất trong các nút được gắn nhãn tạm thời Gán i = r, lặp lại bước 2
Chú ý:
- Chúng ta phải tính (n-1) vòng lặp để tìm khoảng cách ngắn nhất đến tất cả các nút
- Nếu chúng ta chỉ muốn tìm đường đi ngắn nhất từ nút nguồn 1 đến một nút k nào đó thì chúng ta có thể dừng khi nút k được gắn nhãn cố định
- Nếu chúng ta muốn tìm đường đi ngắn nhất từ một nút k bất kỳ đến các nút trong mạng thì chúng ta sẽ bắt đầu từ nút này bằng cách gán
nó nhãn cố định [0, -]* hoặc [0, S]* Sau đó, tiến hành các bước tiếp
theo của giải thuật Dijkstra
Hàng ngày công ty sản xuất nội thất Phương Nam phải vận chuyển các sản phẩm nội thất (bàn, ghế, tủ…) từ nhà máy sản xuất đến nhà kho chứa hàng Ông Nam, giám đốc công ty, muốn tìm đường
đi ngắn nhất từ nhà máy sản xuất (nút 1) đến nhà kho (nút 6) Cho biết
sơ đồ mạng lưới đường giao thông được thể hiện như trong hình 8.4 sau đây (với chiều dài tuyến đường tính theo đơn vị km)
Trang 12Hình 5.4 Sơ đồ các tuyến đường giao thông từ nhà máy đến nhà
kho
Giải bài toán bằng Giải thuật tiến
Cách 1: Giải bằng hình vẽ
Quan sát hình 8.4, chúng ta thấy rằng nút nằm gần nút gốc (nút 1-nhà máy sản xuất) nhất là nút 2, với khoảng cách là 100 km Như vậy, chúng ta có thể nối nút 1 và nút 2 và ghi vào giá trị 100 Khi đó, nút 2 sẽ là nút vào tập nút đã khảo sát
Trang 13Có 1 đường đi xuất phát từ nút 1 là tuyến đường 1-3; và 3 đường
đi xuất phát từ nút 2 là tuyến đường 2-3, tuyến đường 2-4 và tuyến đường 2-5 Đường đi có khoảng cách ngắn nhất là theo tuyến đường 1-2-3 (100+50 = 150 km) Vì vậy, nút 3 sẽ trở thành nút vào trong tập nút đã khảo sát Và ta ghi giá trị 150 là thế vị của nút 3
Trang 14Hình 5.6 Vòng lặp thứ hai
Tương tự, chúng ta lặp lại quá trình để xác định thế vị cho nút 4
và 5 Tập nút đã khảo sát lúc này gồm có nút 1, 2 và 3 Tiếp theo, ta phải xác định nút tiếp theo vào trong tập nút đã khảo sát Lúc này, chúng ta có nút 4, 5 là các nút nằm gần tập tập nút đã khảo sát (xuất phát từ nút 2 và nút 3) Có 3 đường đi xuất phát từ tập nút đã khảo sát (nút 1, 2, và 3) đến các nút 4 và 5 là các tuyến đường 2-4, 2-5 và 3-5 Khoảng cách ngắn nhất là lộ trình 1-3- 5 (150 + 40 = 190 km) Vì vậy, nút 5 sẽ là nút tiếp theo vào trong tập nút đã khảo sát
Trang 15Hình 5.7 Vòng lặp thứ ba
Tập nút đã khảo sát lúc này gồm có nút 1, 2 , 3 và 5 Tiếp theo, ta phải xác định nút tiếp theo vào trong tập nút đã khảo sát Lúc này, chúng ta có nút 4 và nút 6 là các nút nằm gần tập tập nút đã khảo sát (xuất phát từ nút 5) Có 3 đường đi xuất phát từ tập nút đã khảo sát (nút 1, 2 , 3 và 5) đến các nút 4 và 6 là các tuyến đường 2-4 5-4 và 5-
6 Khoảng cách ngắn nhất là lộ trình 1-3- 5-6 (190 + 100 = 290 km)
Vì vậy, nút 6 sẽ là nút tiếp theo vào trong tập nút đã khảo sát
Trang 16Hình 5.7 Vòng lặp thứ tư (cuối cùng)
- Như vậy, đường đi có khoảng cách ngắn nhất từ nút 1 đến nút 6 là
290 km theo tuyến đường 1-3-5-6
Tuyến đường khảo sát
Tổng khoảng cách (Thế vị nút chưa khảo sát)
Khoảng cách ngắn nhất
Nút gần nhất thứ n
Đoạ
n nút nối
200 100+ 50=150 100+200=300 100+100=200
300 200 150+40=190 190 Nút 5 3-5 {1, 2,3,5}
300 190+150=3401 90+100=290 290 Nút 6 5-6
3.7.1 Giải bằng giải Thuật Dijkstra
(100, 1)
Trang 213.8 Sử dụng các phần mềm để giải bài toán Tìm đường đi ngắn nhất (Shortest-Route Problem)
Công ty Stagecoach Shipping cần phải vận chuyển cam bằng 6
xe tải từ thành phố Los Angeles đến nơi tiêu thụ tại 6 thành phố khác
ở phía Tây và Trung Tây của nước Mỹ Cho biết khoảng cách và thời gian (tính bằng giờ) đối với 1 xe tải di chuyển từ thành phố Los Angeles đến các thành phố khác được thể hiện ở hình vẽ sau
Hình Hệ thống đường giao thông từ Los Angeles đến các thành
Trang 223.8.1 Phần mềm QM
Bước 1
- Menu Module→ chọn Networks:
- Menu File-New- chọn 2 Shortest Route (Bài toán tìm đường đi
ngắn nhất):
- Hộp thoại Creat data set for Networks/ Shortest Route (Nhập dữ
Trang 23- Title: Nhập tên Bài toán
- Number of Branches: Nhập số đường đi (bằng cách kéo mouse
sang phải)
- Row names: chọn kiểu tên cho cung (đường đi)
- Network type:
+ Undirected: Giá trị (Khoảng cách/Chi phí/Thời gian) đi và về
trên các tuyến đường là như nhau (đường 2 chiều/không phải đường 1
chiều)
+ Directed: Đường 1 chiều
Bước 2 Bảng nhập số liệu (Khoảng cách/Chi phí/Thời gian từ một
nút đến một nút) sẽ xuất hiện
Trang 24- Origin: chọn nút đầu tiên (nút nguồn)
- Destination: Chọn nút cuối cùng (nút đích)
- Khai báo thông số của đường đi:
+ Start node: nút đầu
+ End node: nút cuối
+ Distance: khoảng cách/thời gian/chi phí
Bước 3 Bấm chọn (Giải bài toán)
→ Bảng kết quả cho biết Đường đi ngắn nhất từ nút 1 đến nút 7 là 43
giờ với lộ trình 1-3-4-7
* Lưu ý:
Ta có thể xác định đường đi ngắn nhất trong sơ đồ mạng lưới bởi 2
nút bất kỳ bằng cách lựa chọn Origin: chọn nút đầu tiên (nút nguồn)
và Destination: Chọn nút cuối cùng (nút đích) Ví dụ như khoảng
Trang 25
3.8.2 Phần mềm Win QSB
Bước 1 Double Click vào biểu tượng NET (Network Modeling)
Bước 2 Menu File→ chọn New Problem→ Hộp thoại NET
Problem Specification xuất hiện:
- Problem Type: chọn Shortest Path Problem (Bài toán Tìm đường
đi ngắn nhất)
- Objective Criterion: chọn Minimization (Cực tiểu hàm mục tiêu,
Trang 26+ Symmetric Arc Coeficients: Nếu chọn thì Giá trị (Khoảng
cách/Chi phí/Thời gian) đi và về trên các tuyến đường là như nhau
(đường 2 chiều/không phải đường 1 chiều)
- Problem Title: Nhập tên Bài toán
- Number of Nodes: Nhập số nút
→ Click nút OK
Bước 3 Bảng nhập số liệu (Khoảng cách/Chi phí/Thời gian từ một
nút đến 1 nút) sẽ xuất hiện
- Khi chọn Symmetric Arc Coeficients, ta chỉ cần nhập số liệu cho
nửa ma trận phía trên đường chéo Số liệu còn lại đối xứng qua đường
chéo của ma trận sẽ tự động xuất hiện
- Nhập số nào xong → bấm Enter liền
Bước 4 Chọn menu Solve and Analyze→ chọn Solve the
Problem→ Hộp thoại Select Start and End Notes (Lựa chọn nút đầu
và nút cuối) xuất hiện:
+ Click to select a start note: Nhấn phím chuột để chọn nút đầu;
+ Click to select an end note:Nhấn phím chuột để chọn nút cuối
→ Bấm nút Solve (Giải bài toán)
→ Bảng kết quả cho biết Đường đi ngắn nhất từ nút 1 đến nút 7 là 43
giờ với lộ trình 1-3-4-7
Trang 27
(MINIMAL-SPANNING TREE PROBLEM)
Bài toán đường dây mắc loa/Bài toán cây bao trùm tối thiểu
(Minimal Spanning Tree Problem/Greedy Problem), là bài toán xác
định đường đi nối tất cả các điểm (nút) trên mạng (mặt bằng) lại với
nhau sao cho tổng chiều dài (khoảng cách nối liền giữa các nút) là nhỏ
Trang 28+ Khi các điểm (nút) là vị trí các trụ đèn chiếu sáng, thuật toán này được dùng để tìm ra cách bố trí hệ thống đường dây dẫn điện sao cho tổng chiều dài đường dây là nhỏ nhất
+ Khi các điểm (nút) là nơi lắp đặt điện thoại cố định, thuật toán này được dùng để tìm ra cách bố trí hệ thống đường dây cáp điện thoại của công ty viễn thông sao cho tổng chiều dài đường dây cáp là nhỏ nhất
Một số ứng dụng của bài toán đường dây mắc loa liên quan đến tiêu chuẩn thời gian hoặc chi phí thay vì khoảng cách
- Bước 1: Chọn một nút bất kỳ trong mạng
- Bước 2: Nối liền nút đã chọn với một nút liền kề gần nhất sao cho
tổng khoảng cách giữa các nút là nhỏ nhất Hai nút này được gọi là nút
đã được kết nối (connected nodes), và các nút còn lại được gọi là các nút chưa được kết nối (unconnected nodes)
- Bước 3: Xem xét tất cả các nút đã được nối liền, tìm và nối những
nút này với một nút liền kề gần nhất chưa kết nối
Chú ý: Nếu như có 2 nút liền kề có khoảng cách như nhau đến các nút
đã được nối liền, chúng ta có thể tùy ý chọn một nút bất kỳ để nối liền Khi này, bài toán có thể có nhiều hơn một lời giải tối ưu
- Bước 4: Lặp lại bước 3 cho đến khi tất cả các nút đã được nối liền
Chú ý: Nếu mạng gồm n nút thì bài toán cây bao trùm phải có n-1 cung
Công ty xây dựng An Bình đang triển khai thi công xây dựng một dự án khu căn hộ cao cấp ở thành phố Nha Trang Ông Bình, giám đốc kỹ thuật của công ty, đang muốn xác định hệ thống đường ống ngắn nhất nối liền các căn hộ nằm rải rác trong khu vực sao cho
Trang 29cấp là ít nhất Cho biết mạng lưới thể hiện khoảng cách (đơn vị 100 m) của 8 căn hộ trong dự án được thể hiện ở hình 5.8 sau:
Hình 5.8 Sơ đồ mạng lưới tìm hệ thống đường ống thoát nước
ngắn nhất
Giải:
Chúng ta bắt đầu giải bài toán bằng cách chọn một nút bất kỳ trong mạng, giả sử là nút 1 Bởi vì nút 3 gần với nút 1 nhất với khoảng cách là 2 (100 m), chúng ta nối liền nút 1 và nút 3 như trong hình 5.9
Trang 30Hình 5.9 Vòng lặp thứ nhất tìm hệ thống đường ống thoát nước
ngắn nhất
Xem xét các nút đã được nối liền lúc này là nút 1 và nút 3, chúng
ta tiếp tục tìm nút gần nút 1 và nút 3 nhất Nút được chọn là nút 4 nằm gần nút 3 nhất với khoảng cách là 2 (100m) Chúng ta nối liền các nút
đã chọn với nhau như hình 5.10
Trang 31Hình 5.10 Vòng lặp thứ hai tìm hệ thống đường ống thoát nước
ngắn nhất
Tương tự, chúng ta tiếp tục tìm nút chưa được kết nối nằm gần nút 1, nút 3 và nút 4 nhất Nút được chọn là nút 2 hoặc nút 6 với cùng khoảng cách đến nút là 3 (100m) Chọn nút 2 và nối liền nút 2 và nút 3 như hình 5.11
Hình 5.11 Vòng lặp thứ ba tìm hệ thống đường ống thoát nước
ngắn nhất
Tương tự, chúng ta tiếp tục tìm nút chưa được kết nối nằm gần nút 1, nút 2, nút 3 và nút 4 nhất Chúng ta lại có 2 nút liền kề có khoảng cách như nhau ngắn nhất đến các nút đã được nối liền là 3 (100m) Đó là từ nút 2 đến nút 5 và nút 3 đến nút 6 Lưu ý rằng khoảng cách giữa nút 1 và nút 2 cúng là 3 (100m).nhưng chúng ta không kể đến bởi vì cả hai nút này (nút 1 và nút 2) đã được nối liền
Trang 32Hình 5.12 Vòng lặp thứ tư tìm hệ thống đường ống thoát nước
ngắn nhất
Nút liền kề gần nhất với các nút đã được nối liền là nút 6, chúng
ta nối liền nút 3 với nút 6 như hình 5.13
Hình 5.13 Vòng lặp thứ năm tìm hệ thống đường ống thoát nước
ngắn nhất