Tải bản đầy đủ - 0 (trang)
Ý tưởng thuật toán

Ý tưởng thuật toán

Tải bản đầy đủ - 0trang

Kết quả thu được thấy rằng: Tuyến đường 1 thăm ba khách hàng 5, 2 và 1.

Đường 2 là không hiệu quả vì khơng thăm bất kỳ khách hàng nào. Tuyến đường 3

lần lượt thăm 6 khách hàng 4, 9, 6, 3, 7, 8 và được sạc lại trước khi trở về kho.



3.



Tính giá trị thích nghi

Tính giá trị thích nghi của từng nhiễm sắc thể trong P(gen). Để xác định hàm



thích nghi ta có thể chọn hàm f(x) = 1/S (S: là tổng các chi phí theo các lộ trình

được mơ tả của các nhiễm sắc thể). Khi f(x) càng lớn thì độ thích nghi của cá thể

đó càng cao. Cứ sau mỗi thế hệ được hình thành, chúng ta cần tính lại độ thích

nghi cho từng cá thể để chuẩn bị cho một thế hệ mới.

Trong bước này, chúng tơi áp dụng thuật tốn Dijkstra để tìm được đường đi

có chi phí ngắn nhất giữa hai đỉnh liền kề.

Có những giao lộ lớn trong một mạng lưới đường thực sự. Điều đó phản ánh

rằng các lái xe có thể không di chuyển trên đường thẳng giữa hai nút. Do đó, làm

thế nào để tìm ra những con đường ngắn nhất giữa hai nút liền kề dọc theo các

tuyến đường là một vấn đề trong mơ hình EVRP-CTVTT. Vấn đề đường dẫn ngắn

nhất (Shortest path - SP) trong bài này được đề cập và giải pháp của nó được sử

dụng trong mơ hình EVRP-CTVTT. SP là để có được một con đường với tối thiểu

chi phí trong một đồ thị có hướng và đầy đủ. Phương pháp phổ biến nhất giải

quyết SP là thuật toán Dijkstra cổ điển [8] đó là một phương pháp để sửa một nút

đơn làm nút nguồn, có được các đường dẫn ngắn nhất từ nguồn tới tất cả các nút

khác trong biểu đồ và tạo ra một cây đường đi ngắn nhất. Trong cổ điển Thuật

tốn Dijkstra, trọng lượng liên kết ln được coi là khoảng cách(giá trị không đổi).

Tuy nhiên, khi di chuyển trong điều kiện giao thông phức tạp, các phương tiện

mất nhiều thời gian hơn. Phần lớn lái xe quan tâm nhiều hơn đến thời gian thay vì

khoảng cách. Do đó, thời gian di chuyển thay vì khoảng cách được coi là trọng số

liên kết. Do môi trường giao thông động, thời gian di chuyển của mỗi liên kết

không phải lúc nào cũng không đổi và thay đổi theo thời gian thực. Do đó, trọng

lượng liên kết cũng là năng động. Để giải quyết SP với thời gian đi lại thay đổi,

chúng tôi đề cập đến việc xây dựng và lý thuyết của thuật toán Dijkstra cổ điển và

thực hiện một số cải tiến so với thuật toán Dijkstra cổ điển để đề xuất một thuật

toán Dijkstra động, nơi thời gian di chuyển giữa hai nút bất kỳ trong đồ thị cần

33



được tính lại một lần nữa để trọng lượng liên kết được cập nhật theo thời gian thực

khi một nút chọn nút kết nối tiếp theo. Theo tính tốn thời gian đi lại tại mục 2.2,

khoảng thời gian xe đến nút bắt đầu của liên kết hiện tại phải được biết.

Dựa trên ý tưởng của thuật toán Dijkstra động, mã giả của thuật tốn Dijkstra

động (Hình 16) được mơ tả như sau: đồ thị là mạng lưới đường bộ, source là đỉnh

nguồn, target là đỉnh đến, S là dãy của đường đi ngắn nhất từ nguồn tới đích,

cost(u,v) đại diện trọng lượng liên kết của liên kết (u,v). Chiếc xe đến nút i tại thời

điểm time[i]



Hình 16: Mã giả của thuật toán Dijkstra động



34



4.



Lựa chọn

Hai cặp nhiễm sắc thể (cha mẹ) được lựa chọn dựa trên điểm số thể lực của



họ. Dùng phương pháp chọn lựa bánh xe roulette với độ thích nghi của các cá thể

trong quần thể được tính bằng hàm f(x). Như đã mơ tả ở chương II, một điểm cố

định được chọn trên bánh xe và bánh xe được quay. Vùng bánh xe nằm trước điểm

cố định được chọn là cha mẹ. Áp dụng tương tự khi lựa chọn cha mẹ thứ hai. Theo

cách này, các nhiễm sắc thể có thể lực cao hơn sẽ có nhiều cơ hội được lựa chọn

để sinh sản hơn.



5.



Lai ghép

Sau bước lựa chọn được hai nhiễm sắc thể cha mẹ, thực hiện lai ghép một



điểm cắt như sau: mỗi nhiễm sắc thể tách làm hai phần, được hoán đổi cho nhau

tạo thành hai nhiễm sắc thể mới. Mỗi cá thể mới sinh ra phải thỏa mãn tất cả các

ràng buộc, nếu khơng hai nhiễm sắc thể mới đó vơ nghĩa, thực hiện lai ghép lại

một lần nữa. Với màu đen, đỏ và xanh lá tượng trưng cho kho, khách hàng và trạm

sạc, chúng tơi đưa ra một ví dụ như sau:

NST cha mẹ



NST sau khi lai ghép



| 0 7 2 5 4 6 10 0 |

| 0 3 1 12 8 11 9 0 |



6.



| 0 7 2 5 8 11 9 0|

| 0 3 1 12 4 6 10 0|



Đột biến

Đột biến là hiện tượng nhiễm sắc thể con mang một số đặc tính khơng có



trong mã di truyền của cha mẹ và nó được sử dụng để duy trì sự đa dạng trong

quần thể di truyền. Các bước cơ bản của đột biến như sau:

 Chọn ngẫu nhiên một nhiễm sắc thể trong quần thể

 Tạo một số ngẫu nhiên k trong khoảng từ 1 tới m, 1<=k<=m;

 Thay đổi bit thứ k. Đưa nhiễm sắc thể này vào quần thể để tham gia q

trình tiến hóa ở thế hệ tiếp theo.



35



Trong đột biến hốn vị, chúng tơi lựa chọn ngẫu nhiên hai vị trí trên nhiễm sắc

thể và trao đổi các giá trị. Với màu đen, đỏ và xanh lá tượng trưng cho kho, khách

hàng và trạm sạc, chúng tơi đưa ra một ví dụ như sau:

NST



NST sau khi đột biến



| 0 7 3 6 4 10 5 9 8 0|



| 0 9 3 6 4 10 5 7 8 0|



Tham số



Miêu tả



N



Số lượng cá thể



T



Số lượng thế hệ



Ne



Số lượng các cá nhân ưu tú



Pc



Tỷ lệ lai ghép



Pm



Tỷ lệ đột biến



Bảng 2. Các giá trị tham số của thuật tốn

Các thơng số của GA ( số lượng cá thể, số lượng thế hệ, số lượng các phần tử

ưu tú, tỷ lệ lai ghép, tỷ lệ đột biến) có thể tác động đến giá trị giải pháp. Tất cả các

tham số của GA được liệt kê trong bảng 1. Hai biến quyết định y jk ( các tuyến

đường ) và xijk (kế hoạch sạc) có thể thu được từ các cá thể trong kết quả.



36



Chương IV: Thực nghiệm

Trong chương này, chúng tôi đưa ra dũ liệu thực nghiệm của mình và chạy

chương trình trên nhiều thí nghiệm trên một bộ dữ liệu thực nghiệm giống nhau,

để từ đó đưa ra sự so sánh , kết luận được hiệu suất giải pháp tốt nhất



1



Dữ liệu thực nghiệm

Để chạy thuật tốn, chúng tơi đưa ra một bộ dữ liệu đầu vào ngẫu nhiên gồm

kho, các đỉnh khác hàng và các trạm sạc . Chỉ có một kho duy nhất, tuyến đường

bắt đầu từ kho và kết thúc tuyến đường cũng tại kho, các đỉnh là khách hàng sẽ

được phục vụ và các trạm sạc được phân phối ngẫu nhiên tại các nút của đồ thị



11. Cài đặt thuật toán

Trong phần này, chúng tôi sẽ giới thiệu về ngôn ngữ Python mà được chúng

tôi phát triển để áp dụng giải bài tốn

2.1. Giới thiệu về Python

Python là một ngơn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,

do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết

kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngơn ngữ có hình

thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Ngôn

ngữ này được tạo ra bởi Guido van Rossum vào năm 1991. Google, Microsoft, và

nhiều tập đồn, cơng ty tin học sử dụng để vận hành hệ thống dịch vụ của mình.

Các nhà nghiên cứu khóa học, phân tích dữ liệu lớn cũng thích sử

dụng Python cho cơng việc của mình, vì nó được việc, khơng màu mè, học nhanh,

dùng luôn

2.2. Ưu điểm của Python

 Cực mạnh trong việc xử lý các loại dữ liệu chuỗi, tập hợp. Thích hợp với

ứng dụng bóc tách, chuyển đổi, phân tích dữ liệu: big data - data mining

 Dễ học - dễ làm - dễ cài đặt

 Chạy trên đa nền tảng: MacOSX, Windows, Linux

 Lập trình gần như mọi thứ: Web (Django, Tornado), Game (pygame, kivy,

piglet)

37



 Nhiều thư viện có sẵn. Ví dụ thư viện data mining Scikit-learn, Pandas...

 Dễ dàng sử dụng Python để tạo ra các sản phẩm demo một cách nhanh

chóng. Hơn nữa, các cơng ty, hoặc lập trình viên chuyên nghiệp luôn ưu

tiên sử dụng Python cho việc phát triển những sản phẩm chất lượng.

 Tốc độ xử lý cực nhanh, python có thể tạo ra những chương trình từ

những script siêu nhỏ tới những phần mềm cực lớn

2.3. Nhược điểm của Python

Ngơn ngữ lập trinh Python có rât nhiều ưu điểm nổi trội nhưng bên cạnh đó

còn một vài nhược điểm như sau:

 Khơng có các thuộc tính như : protected, private hay public, khơng có

vòng lặp do…while và switch….case.

 Mặc dù tốc độ xử lý của Python nhanh hơn PHP nhưng không bằng JAVA

và C++

2.4. Một số điểm đặc biệt trong cú pháp python so với các ngơn ngữ lập trình khác

 Python được thiết kế tối ưu cho việc dễ đọc, dễ hiểu. Có nhiều điểm tương

đồng với tiếng Anh và chịu ảnh hưởng từ các thuật ngữ toán học.

 Đối với Python, việc xuống dòng rất quan trọng. Vì mỗi câu lệnh trong

Python tương ứng với 1 dòng code, khác với các ngơn ngữ khác sử dụng

dấu phẩy chấm hoặc dấu ngoặc để ngăn cách các câu lệnh.

 Bên cạnh đó, quy tắt thụt đầu dòng cũng quan trọng khơng kém. Đối với

những ngơn ngữ lập trình khác, lập trình viên sử dụng cặp dấu ngoặc nhọn

để định nghĩa các khối lệnh, vòng lặp, hàm, lớp, v.v... Nhưng với Python,

chúng ta sử dụng khoảng cách đầu dòng để gộp các khổi lệnh lại. Có

nghĩa là những dòng code có chung khoảng cách đầu dòng sẽ được Python

xem là một khối lệnh. Hình 17 dưới đây là một ví dụ so sánh đơn giản

giữa Python và các ngôn ngữ lập trinh khác.



38



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Ý tưởng thuật toán

Tải bản đầy đủ ngay(0 tr)

×