intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Áp dụng giải thuật di truyền cho một bài toán mới của giao thông vận tải

Chia sẻ: Comam1902 Comam1902 | Ngày: | Loại File: PDF | Số trang:9

66
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong bài báo này chúng tôi đặt ra một bài toán giao thông vận tải mới chưa được khảo sát từ trước đến nay. Bài toán nghiên cứu một mạng có n đỉnh và m cạnh với một đỉnh nguồn và một đỉnh đích cùng với m đội vận tải cho trước. Mục tiêu bài toán đặt ra là tìm một cách phân công cho mỗi đội vận tải một cung đường sao cho có thể vận tải một lượng hàng lớn nhất từ đỉnh nguồn s tới đỉnh đích t.

Chủ đề:
Lưu

Nội dung Text: Áp dụng giải thuật di truyền cho một bài toán mới của giao thông vận tải

HNUE JOURNAL OF SCIENCE<br /> Natural Sciences 2018, Volume 63, Issue 3, pp. 90-98<br /> This paper is available online at http://stdb.hnue.edu.vn<br /> <br /> DOI: 10.18173/2354-1059.2018-0009<br /> <br /> ÁP DỤNG GIẢI THUẬT DI TRUYỀN CHO MỘT BÀI TOÁN MỚI<br /> CỦA GIAO THÔNG VẬN TẢI<br /> <br /> Vũ Đình Hòa1 và Đỗ Tuấn Hạnh2<br /> Khoa Công nghệ Thông tin, Trường Đại Học Sư Phạm Hà Nội<br /> Trường Đại Học Kinh Tế Kĩ Thuật Công Nghiệp, Trường Đại Học Bách Khoa Hà Nội<br /> 1<br /> <br /> 2<br /> <br /> Tóm tắt. Các bài toán giao thông và vận tải được quan tâm khá sớm trên thế giới từ vài thế kỉ<br /> trước [1, 2] như bài toán người du lịch và bài toán luồng. Hiện nay, các bài toán giao thông<br /> vận tải được nghiên cứu dưới nhiều cách tiếp cận khác nhau [3]. Trong bài báo này chúng tôi<br /> đặt ra một bài toán giao thông vận tải mới chưa được khảo sát từ trước đến nay. Bài toán<br /> nghiên cứu một mạng có n đỉnh và m cạnh với một đỉnh nguồn và một đỉnh đích cùng với m<br /> đội vận tải cho trước. Mục tiêu bài toán đặt ra là tìm một cách phân công cho mỗi đội vận tải<br /> một cung đường sao cho có thể vận tải một lượng hàng lớn nhất từ đỉnh nguồn s tới đỉnh đích t.<br /> Trong bài báo này, chúng tôi chứng minh bài toán phân công vận tải là một bài toán NPH, và<br /> đưa ra một cách tiếp cận và giải quyết bài toán này bằng giải thuật di truyền.<br /> Từ khóa: Bài toán luồng, bài toán phân công vận tải, giải thuật di truyền.<br /> <br /> 1.<br /> <br /> Mở đầu<br /> <br /> Những khái niệm cơ bản dưới đây có thể tham khảo từ [1, 2] hoặc từ các cuốn sách chuyên<br /> môn khác về đồ thị. Một mạng được hiểu là một đồ thị có hướng G  (V , E) gồm n đỉnh, m cung<br /> với một đỉnh nguồn s (nhiều khi được qui ước là chỉ có cung đi ra) và một đỉnh thu t (nhiều khi<br /> được qui ước là chỉ có cung đi vào). Mỗi cung e  (u, v)  E được gán với một số không âm<br /> c(e)  c(u, v) gọi là khả năng thông qua của cung đó. Đôi khi, để thuận tiện cho việc trình bày, ta<br /> gọi hàm c : E  R đó là hàm thông luồng và qui ước rằng nếu không có cung (u, v) thì ta coi<br /> như có cung này và khả năng thông qua c(e)  c(u, v) của nó được gán bằng 0. Nếu có mạng<br /> G  (V , E) , ta gọi luồng p trong mạng G là một phép gán cho mỗi cung e  (u, v)  E một số tự<br /> nhiên p(e)  p(u, v) (gọi là luồng trên cung e ), thoả mãn các điều kiện sau:<br /> - Luồng trên mỗi cung không vượt quá khả năng thông qua của nó: 0  p(u, v) <br /> <br /> c(u, v) ,   u, v   E ,<br /> - Với mọi đỉnh v không trùng với đỉnh nguồn s và đỉnh thu t , tổng luồng trên các cung đi<br /> vào v bằng tổng luồng trên các cung đi ra khỏi v :  p(u, v)   p(u, v) . Trong đó:<br /> u ( v )<br /> <br /> w ( v )<br /> <br /> Ngày nhận bài: 12/4/2017. Ngày sửa bài: 12/3/2018. Ngày nhận đăng: 20/3/2018.<br /> Tác giả liên hệ: Vũ Đình Hòa. Địa chỉ e-mail: hoavd@hnue.edu.vn.<br /> <br /> 90<br /> <br /> Áp dụng giải thuật di truyền cho một bài toán mới của giao thông vận tải<br /> <br /> K   v   {u V |  u, v   E} ,<br /> K   v   {w V |  v, w  E} .<br /> <br /> * Bài toán luồng cực đại trên mạng<br /> Cho mạng G  (V , E) với đỉnh s , đỉnh thu t và thông luồng c : E  N . Hãy tìm luồng p *<br /> trong mạng G  (V , E) sao cho p *(e)  c(e),  E và giá trị  p* (s, v)   p* (v, s) (được gọi là<br /> v ( s )<br /> <br /> v ( s )<br /> <br /> giá trị của luồng) lớn nhất có thể. Luồng như vậy gọi là luồng cực đại trong mạng và bài toán này<br /> gọi là bài toán tìm luồng cực đại trên mạng.<br /> Bài toán luồng cực đại trên mạng được quan tâm từ rất sớm do tầm quan trọng của nó. Đã có<br /> nhiều giải thuật được đề xuất để giải quyết bài toán này, mà một trong các giải thuật quan trọng<br /> quen biết nhất là giải thuật của Ford-Fulkerson [1, 2]. Thuật toán này được cải tiến trong một số<br /> năm sau đó để đạt được độ phức tạp thuật toán là O(nm2 ) [4].<br /> Trong đời sống thực tế thì khả năng thông qua của các luồng trên các cạnh được thể hiện là<br /> khả năng vận tải của đội vận tải phụ trách tuyến đường đó. Khi có một sự phân công các đội vận<br /> tải trên các cung đường thì chúng ta phải giải quyết bài toán luồng cực đại trên sơ đồ mạng tương<br /> ứng, trong đó khả năng thông qua của mỗi cung chính là khả năng vận tải của đội phụ trách cung<br /> đường đó. Trong bài toán này chúng ta xem xét vấn đề phân công mỗi đội vận tải phụ trách một<br /> cung đường để luồng cực đại tương ứng với phân công đó lớn hơn luồng cực đại ứng với các phân<br /> công khác.<br /> * Bài toán phân công vận tải<br /> Cho một mạng G  (V , E) gồm n đỉnh, m cung, đỉnh nguồn s , đỉnh thu t và một tập hợp<br /> <br /> m số tự nhiên c1 , c2 ,..., cm . Hãy tìm một song ánh c : E  C sao cho luồng cực đại của<br /> mạng G  (V , E) , với khả năng thông qua của cạnh e là c(e) , lớn nhất có thể.<br /> C gồm<br /> <br /> Bài toán này có ý nghĩa thực tế rất lớn, nhưng cho đến nay chưa được nghiên cứu [3].<br /> Ví dụ: Ta xét một mạng như trong Hình 1.<br /> Mạng G  (V , E) có 3 đỉnh s, t và u với hàm<br /> thông luồng c : E  {1, 2,3} . Xét hai phương<br /> án phân công khác nhau:<br /> (i) Nếu ta phân bố<br /> <br /> c(e1 )  1, c(e2 )  2, c(e3 )  3,<br /> thì luồng cực đại là p  4.<br /> *<br /> <br /> (ii) Nếu ta phân bố<br /> <br /> c(e1 )  3, c(e2 )  2, c(e3 )  1,<br /> Hình 1<br /> <br /> thì luồng cực đại chỉ đạt giá trị p  3.<br /> *<br /> <br /> 91<br /> <br /> Vũ Đình Hòa và Đỗ Tuấn Hạnh<br /> <br /> * Đánh giá độ khó của bài toán phân công vận tải<br /> "Bài toán luồng cực đại trên mạng" được nghiên cứu và có nhiều giải thuật giải quyết bài<br /> toán này. Có nhiều thuật toán giải quyết bài toán này, và các thuật toán này đều là giải thuật hiệu<br /> quả. Giải thuật Ford-Fulkerson cải tiến (chọn đường tăng luồng là đường ít cạnh nhất) có độ phức<br /> tạp đa thức [4]. Độ khó của bài toán phân công vận tải tối ưu chưa được nghiên cứu trên thế giới.<br /> Chúng ta sẽ chứng minh bài toán này là bài toán NPH [5]. Để chứng minh được điều đó, ta dẫn<br /> bài toán PAR, là một bài toán NPC [5], về bài toán phân công vận tải.<br /> Bài toán Partition (PAR)<br /> Instance: Cho trước số nguyên dương n và một tập hợp A  {a1 , a2 ,..., an }  N .<br /> Question: Tồn tại hay không một phân hoạch A  A1  A2 sao cho<br /> <br /> a  a<br /> <br /> ai A1<br /> <br /> i<br /> <br /> ai A2<br /> <br /> i<br /> <br /> .<br /> <br /> "Bài toán phân công vận tải" được phát biểu dưới dạng bài toán quyết định như sau.<br /> * Bài toán phân công vận tải<br /> Instance: mạng G  (V , E ) gồm n đỉnh, m cung, đỉnh nguồn s , đỉnh thu t và một tập hợp<br /> <br /> C gồm m số tự nhiên c1 , c2 ,..., cm và một số tự nhiên B .<br /> Question: Tồn tại hay không song ánh c : E  C sao cho luồng lớn nhất từ s đến t , với khả<br /> năng thông qua của cạnh e là c(e) , không nhỏ hơn B .<br /> Định lí. Bài toán phân công vận tải là bài toán NPH .<br /> Chứng minh: Ta sử dụng bài toán PAR, là một bài toán NPC [5], để dẫn về bài toán PCVT.<br /> Ta xây dựng phép dẫn thời gian đa thức biến mỗi instance của bài toán PAR thành một instance<br /> của bài toán phân công vận tải như sau: Với mỗi số nguyên dương n và một tập hợp<br /> A  {a1 , a2 ,..., an }  N , ta xây dựng một mạng G  (V , E) với 3 đỉnh s, t và u và m  2n<br /> cung, bao gồm n cung kép ( s, u ) , và n cung kép (u, t ) , như trong hình vẽ sau:<br /> <br /> Hình 2.<br /> n<br /> n<br /> Ta chọn C  A {an1 ,..., a2 n } với ai  0 cho mọi i  n  1 và B   ai   ai / 2 ở<br /> 1<br />  1<br /> <br /> đó [a ] kí hiệu số nguyên lớn nhất không vượt quá a . Với mỗi hàm thông luồng c : E  C Đặt<br /> <br /> A1 là tập hợp các giá trị của A ứng với các cung đi từ s đến u và A2  A  A1 . Dễ dàng thấy<br />  n <br />   ai <br /> luồng đi từ s đến t đạt giá trị B   1<br />  (  a  ký hiệu số nguyên nhỏ nhất không nhỏ hơn a )<br />  2 <br /> <br /> <br /> khi và chỉ khi có phân hoạch A  A1  A2 sao cho  ai   ai .<br /> ai A1<br /> <br /> 92<br /> <br /> ai A2<br /> <br /> Áp dụng giải thuật di truyền cho một bài toán mới của giao thông vận tải<br /> <br /> Ngoài ra cũng dễ dàng thấy phép xây dựng một mạng G  (V , E ) như vậy từ một instance<br /> của bài toán PAR thực hiện được trong thời gian đa thức. Do đó, phép dẫn của chúng ta là một<br /> phép dẫn thời gian đa thức từ bài toán PAR đến bài toán PCVT.<br /> Vậy PCVT là một bài toán NPH .<br /> <br /> 2. Nội dung nghiên cứu<br /> 2.1. Sử dụng giải thuật di truyền tìm phân công tối ưu<br /> 2.1.1. Lát cắt, đường tăng luồng, định lí Ford - Fulkerson<br /> Định nghĩa: Ta gọi lát cắt  S , F  là một cách phân hoạch tập đỉnh V của mạng thành hai<br /> tập rời nhau S và F , trong đó S chứa đỉnh phát s và F chứa đỉnh thu t . Khả năng thông<br /> qua của lát cắt  S , F  là tổng tất cả các khả năng thông qua của các cung  u, v  có u  S và<br /> <br /> v  F . Lát cắt với khả năng thông qua nhỏ nhất gọi là lát cắt hẹp nhất.<br /> Định lí Ford-Fulkerson:<br /> Giá trị luồng cực đại trên mạng đúng bằng khả năng thông qua của lát cắt hẹp nhất.<br /> Ford- Fulkerson xây dựng được một thuật toán tìm luồng cực đại trên mạng:<br /> Giả sử p là một luồng trong mạng G <br /> <br /> Gp  V , E p  như sau:<br /> Xét những cạnh e <br /> <br />  u, v   E , c  u , v <br /> <br /> V , E <br /> <br /> . Ta xây dựng đồ thị có trọng số<br /> <br />  0:<br /> <br /> - Nếu p(u, v)  c(u, v) thì ta thêm cung  u, v  vào E p với trọng số c(u, v)  p(u, v) ,<br /> cung đó gọi là cung thuận. Về ý nghĩa, trọng số cung này cho biết còn có thể tăng luồng p trên<br /> cung này một lượng không quá trọng số đó.<br /> - Xét tiếp nếu như p(u, v)  c(u, v) thì ta thêm cung  v, u <br /> <br /> vào E p<br /> <br /> với trọng số<br /> <br /> p(u, v)  c(u, v) , cung đó gọi là cung nghịch. Về ý nghĩa, trọng số cung này cho biết còn có thể<br /> giảm luồng p trên cung  u, v  một lượng không quá trọng số đó.<br /> Đồ thị G p được gọi là đồ thị tăng luồng.<br /> Giả sử R là một đường đi cơ bản từ đỉnh phát s tới đỉnh thu t . Gọi d là giá trị nhỏ nhất<br /> của các trọng số của các cung trên đường đi R . Ta sẽ tăng giá trị của luồng p bằng cách đặt:<br /> - p(u, v) : p(u, v)  d , nếu  u, v  là cung trong đường R và là cung thuận,<br /> - p(u, v) : p(u, v)  d , nếu  u, v  là cung trong đường R và là cung nghịch,<br /> - Còn luồng trên những cung khác giữ nguyên.<br /> Có thể kiểm tra luồng p mới xây dựng vẫn là luồng trong mạng và giá trị của luồng p mới<br /> được tăng thêm d so với giá trị luồng p cũ. Ta gọi thao tác biến đổi luồng như vậy là tăng<br /> luồng dọc đường R , đường đi cơ bản R từ s tới t được gọi là đường tăng luồng. Đến đây ta có<br /> thể hình dung ra được thuật toán tìm luồng cực đại trên mạng: khởi tạo một luồng bất kỳ, sau đó<br /> cứ tăng luồng dọc theo đường tăng luồng, cho tới khi không tìm được đường tăng luồng nữa.<br /> 93<br /> <br /> Vũ Đình Hòa và Đỗ Tuấn Hạnh<br /> <br /> Các bước của thuật toán tìm luồng cực đại trên mạng có thể mô tả như sau:<br /> Bước 1: Khởi tạo.<br /> Một luồng bất kì trên mạng, chẳng hạn như luồng 0 (luồng trên các cung đều bằng 0), sau đó:<br /> Bước 2: Lặp hai bước sau.<br /> - Tìm đường tăng luồng R đối với luồng hiện có  Tìm đường đi cơ bản từ s tới t trên đồ<br /> thị tăng luồng, nếu không tìm được đường tăng luồng thì bước lặp kết thúc.<br /> - Tăng luồng dọc theo đường R<br /> Bước 3: Thông báo giá trị luồng cực đại tìm được.<br /> Gán nhãn trong cài đặt thuật toán Ford - Fulkerson (L.R.Ford & D.R.Fulkerson - 1962)<br /> bằng cách sau:<br /> Mỗi đỉnh v được gán nhãn Trace  v  , d v  . Trong đó  Trace  v   là đỉnh liền trước<br /> <br /> v trong đường đi từ s tới v , Trace v  âm hay dương tuỳ theo (| Trace v |, v) là cung<br /> nghịch hay cung thuận trên đồ thị tăng luồng, d  v  là trọng số nhỏ nhất của các cung trên đường<br /> đi từ s tới v trên đồ thị tăng luồng. Bước lặp sẽ tìm đường đi từ s tới t trên đồ thị tăng luồng<br /> đồng thời tính luôn các nhãn Trace  v  , d v  . Sau đó tăng luồng dọc theo đường tăng luồng<br /> nếu tìm thấy.<br /> 2.1.2. Giải thuật di truyền<br /> Theo Định lí 1, Bài toán “Phân Công Vận Tải Tối ưu” là một bài toán NPH do đó ta không<br /> thể có lời giải tối ưu. Ta có thể sử dụng phương pháp vét cạn để có thể giải quyết bài toán trên tuy<br /> nhiên vì độ phức tập quá lơn không đáp ứng được, do đó chúng tôi đề xuất sử dụng giải thuật di<br /> truyền để giải quyết bài toán trên. Người được xem đặt nền móng đầu tiên cho giải thuật di truyền<br /> là John Holland [6], lần đầu nghiên cứu thuật giải này không có tên. Do nguồn gốc của phương<br /> pháp này từ gen di truyền nên nó có tên là giải thuật di truyền. GA (Genetic Algorithms) được đặc<br /> trưng bởi các chiến lược tìm kiếm dựa trên quần thể và các toán tử di truyền như là chọn lọc, đột<br /> biến và trao đổi chéo.<br /> Mã hoá dữ liệu mới cho bài toán phân công vận tải<br /> Bài toán có m đội vận tải đánh số từ 1 đến m và đồng thời đánh số các cung đường từ 1 đến m<br /> Khi đó mỗi một hoán vị từ 1 đến m là một cách phân công đội vận tải tương ứng với một<br /> cung đường. Sử dụng phương pháp mã hóa dữ liệu gen chuyển từ nhị phân 0 và 1 mã hóa gen<br /> dưới dạng thập phân [8, 9]. Ví dụ có 9 đội vận tải 9 cung đường là: (1,2); (1,3); (2,3); (2,4); (3,2);<br /> (3,5); (4,6); (5,4); (5,6) và có 6 địa điểm điểm xuất phát là 1 và kết thúc là 6. Có giá trị vận<br /> chuyển của 9 đội vận tại lầ lượt nhận các giá trị là 16; 16; 14; 4; 14; 12; 7; 4; 20<br /> Với phương pháp mã hóa trên ta có gen phân công là:134569872.<br /> Toán tử đột biến<br /> Chúng tôi áp dụng phương pháp đột biến đảo ngược như sau:<br /> Pháp sinh ngẫu nhiên 2 vị trí H1 và H2 (1
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2