2.3.3.1. Cấu trúc chung
Thuật toán có thể áp dụng cho đồng thời hai mô hình: mô hình chia sẻ tĩnh và mô hình chia sẻ động. Trường hợp mô hình chia sẻ tĩnh thì thuật toán áp dụng cho một chu kỳ. Thuật toán cho mô hình chia sẻ phương tiện sẽ được xử lý qua hai bước chính:
● Bước 1: Xây dựng dữ liệu từ tập dữ liệu đầu vào và tiền xử lý dữ liệu bản đồ sử dụng kỹ thuật phân cấp đỉnh giản lược CH;
● Bước 2: Tại điểm kết thúc của mỗi chu kỳ:
o Tổng hợp các yêu cầu vận tải và cập nhật trạng thái của tất cả xe taxi;
o Áp dụng thuật toán tham lam để tìm ra lời giải đầu tiên (chi tiết tại mục 2.3.3.2); o Áp dụng các thuật toán tìm kiếm địa phương để cải thiện chất lượng lời giải hiện
tại (chi tiết tại mục 2.3.3.3);
Giá trị chu kỳ là tham số được tùy chỉnh theo các trường hợp khác nhau của mô hình chia sẻ. Tham số chu kỳ không phải là tham số của bài toán. Trong bước thực nghiệm, luận án tiến hành thực nghiệm các thuật toán đối với hai trường hợp: mô hình chia sẻ tĩnh và mô hình chia sẻ động. Trong mô hình chia sẻ tĩnh, giá trị chu kỳ được thiết lập là một ngày. Trong mô hình chia sẻ động, giá trị chu kỳ được lựa chọn là 10 phút.
2.3.3.2. Thuật toán tham lam
Thuật toán tham lam sẽ được sử dụng để tìm ra lời giải ban đầu. Trong bước đầu tiên, thuật toán tham lam sắp xếp các yêu cầu đón hành khách và nhận hàng hóa theo giá trị linh hoạt của yêu cầu đó. Thuật toán sử dụng hàm số 𝑓𝑟 đại diện cho độ linh hoạt của một yêu cầu đón hành khách hoặc nhận hàng hóa, cụ thể:
𝑓𝑟(𝑖) = 𝜇(ℓ𝑖+𝑠− 𝑒𝑖) − 𝜐𝜆𝑚𝑖𝑛𝑖 với
● 𝑒𝑖: là thời điểm sớm nhất để đón hành khách hoặc nhận hàng hóa i;
● ℓ𝑖+𝑠: là thời điểm muộn nhất để trả hành khách hoặc trả hàng hóa tương ứng với yêu cầu đón hành khách hoặc nhận hàng hóa i;
36
● 𝜆𝑖𝑚𝑖𝑛: là thời gian di chuyển giữa điểm đón hành khách hoặc nhận hàng hóa i với bãi đỗ xe gần nhất;
● 𝜇, 𝜐: là các tham số tùy chỉnh.
Tham số 𝜐 phụ thuộc vào mật độ xe taxi phân bố trên bản đồ giao thông và tham số 𝜇 phụ thuộc vào mật độ yêu cầu vận tải trong ngày. Hai tham số này sẽ được điều chỉnh dựa vào thực nghiệm. Yêu cầu vận tải có giá trị linh hoạt càng lớn thì càng có khả năng được ưu tiên phục vụ. Với khung thời gian phục vụ rộng, các yêu cầu nhận hàng thường có giá trị linh hoạt cao hơn yêu cầu đón hành khách. Từng cặp yêu cầu đón và yêu cầu trả sẽ được thử đưa vào từng hành trình của các xe taxi để tính toán lợi nhuận thu được để tìm ra trường hợp đem lại lợi nhuận tốt nhất. Mô hình chia sẻ phương tiện được miêu tả trong thuật toán 2.2.
Thuật toán 2.2. Thuật toán tham lam cho mô hình chia sẻ phương tiện Đầu vào: Đồ thị G=(V, E);
𝑉𝑝𝑜: danh sách yêu cầu đón hành khách;
𝑉𝑓𝑜: danh sách yêu cầu nhận hàng hóa;
[𝑒𝑖, ℓ𝑖]: khung thời gian cho phép của yêu cầu 𝑖, ∀𝑖 ∈ 𝑉𝑝𝑜∪ 𝑉𝑝𝑑∪ 𝑉𝑓𝑜∪ 𝑉𝑓𝑑;
𝐾: tập hợp các xe taxi.
(Chi tiết các đầu vào trình bày tại 2.2.1)
Đầu ra: 𝑓: tổng lợi nhuận;
Giá trị của các biến.
(Chi tiết các biến trình bày tại 2.2.2)
1. Sắp xếp tất cả yêu cầu đón 𝑖 ∈ 𝑉𝑝𝑜∪ 𝑉𝑓𝑜 tăng dần theo giá trị 𝑓𝑟(𝑖) vào tập hợp 𝑅′; 2. foreach yêu cầu 𝑖 ∈ 𝑅′do
3. if tìm thấy xe taxi 𝑘′∈ 𝐾 có thể phục vụ yêu cầu i mà đạt được tổng lợi nhuận tốt nhất;
then
4. Đưa yêu cầu i vào hành trình hiện tại của xe taxi 𝑘′; 5. Cập nhật tổng lợi nhuận 𝑓;
6. else
7. Từ chối vận tải yêu cầu i; 8. end if
9. end for
Trong bước đầu tiên của thuật toán, các yêu cầu đón sẽ được sắp xếp tăng dần theo giá trị độ linh hoạt của chúng (dòng 1). Sau đó, thực hiện duyệt từng yêu cầu đón theo thứ tự đã được sắp xếp (dòng 2). Với mỗi yêu cầu, sẽ thực hiện tìm kiếm xe taxi có thể phục vụ yêu cầu và đạt được tổng lợi nhuận tốt nhất (dòng 3). Xe taxi có thể phục vụ yêu cầu nếu thỏa mãn đồng thời:
37
• Xe taxi đảm bảo yêu cầu về tải trọng trong trường hợp phục vụ yêu cầu này;
• Xe taxi đảm bảo tuân thủ các yêu cầu vận tải hành khách là phục vụ trực tiếp trong trường hợp phục vụ yêu cầu này;
• Tổng thời gian hoạt động của xe taxi không vượt quá thời gian hoạt động cho phép trong trường hợp phục vụ yêu cầu này.
Trường hợp có thể tìm thấy xe taxi có thể phục vụ yêu cầu đang xem xét thì sẽ đưa yêu cầu này vào hành trình của xe taxi (dòng 4). Trường hợp có nhiều xe taxi cùng đáp ứng yêu cầu thì lựa chọn xe taxi đầu tiên thỏa mãn. Sau đó, cập nhật giá trị tổng lợi nhuận (dòng 5). Ngược lại, trong trường hợp không tìm thấy xe taxi đáp ứng yêu cầu thì yêu cầu này bị từ chối, không được phục vụ (dòng 7).
Thuật toán bao gồm hai mô-đun chính. Mô-đun thực hiện sắp xếp các yêu cầu đón hành khách hoặc nhận hàng hóa theo giá trị linh hoạt có độ phức tạp Ο(𝑠 log 𝑠). Bước tìm kiếm ở trong vòng lặp chính của thuật toán có độ phức tạp Ο(|𝐾|). Do đó, độ phức tạp của thuật toán tham lam là Ο(|𝐾|𝑠 log 𝑠).
2.3.3.3. Thuật toán tìm kiếm địa phương
Để cải thiện chất lượng lời giải hiện tại, một tập hợp nhỏ các yêu cầu kém hiệu quả sẽ bị loại bỏ khỏi hành trình xe taxi hiện tại và thử đưa vào lại các lộ trình khác nhằm cải thiện chất lượng lời giải. Tương tự tư tưởng thuật toán tham lam, luận án sử dụng một hàm số tính giá trị hiệu quả của yêu cầu vận tải.
Giả sử yêu cầu r được phục vụ bởi taxi k. Hành trình của taxi k được thể hiện bởi danh sách các điểm 𝑢0, 𝑢1, … , 𝑢ℓ, 𝑢ℓ+1≡ 𝑢0 (𝑢0, …,𝑢ℓ+1 ∈ 𝑉 và 𝑢0 là kho đỗ xe của taxi k). Trong đó (𝑢𝑖, 𝑢𝑗) là điểm đón và điểm trả của yêu cầu r (0 < 𝑖 < 𝑗 < ℓ + 1) và 𝜆𝑢,𝑣𝑚𝑖𝑛 là thời gian di chuyển ngắn nhất từ điểm u đến điểm v. Giá trị hiệu quả của yêu cầu vận tải r được định nghĩa như sau:
𝑔(𝑟) = (𝜆𝑚𝑖𝑛𝑢𝑖−1,𝑢𝑖+ 𝜆𝑚𝑖𝑛𝑢𝑖,𝑢𝑗− 𝜆𝑢𝑚𝑖𝑛𝑖−1,𝑢𝑗) + (𝜆𝑢𝑚𝑖𝑛𝑖,𝑢𝑗+ 𝜆𝑚𝑖𝑛𝑢𝑗,𝑢𝑗+1− 𝜆𝑢𝑚𝑖𝑛𝑖,𝑢𝑗+1)
Có thể thấy, giá trị hiệu quả của một yêu cầu vận tải được tính dựa vào chi phí phục vụ yêu cầu này trên hành trình hiện tại và chi phí trong trường hợp hành trình hiện tại không phục vụ yêu cầu này. Trong thực nghiệm của mô hình chia sẻ phương tiện, số lượng yêu cầu vận tải bị loại bỏ và thực hiện đưa vào lại là 10% trên tổng số các yêu cầu chưa được phục vụ. Thuật toán tìm kiếm địa phương để cải thiện lời giải được trình bày trong thuật toán 2.3.
Thuật toán 2.3. Thuật toán tìm kiếm địa phương Đầu vào: Đồ thị G=(V, E);
38
𝑉𝑓𝑜, 𝑉𝑓𝑑: danh sách yêu cầu nhận và trả hàng hóa;
[𝑒𝑖, ℓ𝑖]: khung thời gian cho phép của yêu cầu 𝑖, ∀𝑖 ∈ 𝑉𝑝𝑜∪ 𝑉𝑝𝑑∪ 𝑉𝑓𝑜∪ 𝑉𝑓𝑑;
𝐾: tập hợp các xe taxi. Lời giải bài toán:
• 𝑓1: tổng lợi nhuận;
• Giá trị của các biến.
(Chi tiết các đầu vào trình bày tại 2.2.1)
Đầu ra: Lời giải bài toán:
• 𝑓2: tổng lợi nhuận;
• Giá trị của các biến.
(Chi tiết các biến trình bày tại 2.2.2)
1. 𝑝𝑠𝑖𝑧𝑒 là tỷ lệ phần trăm số lượng yêu cầu vận tải bị loại bỏ; 2. repeat
3. Tính toán giá trị hiệu quả 𝑔(𝑖) của tất cả yêu cầu 𝑖 ∈ 𝑉𝑝𝑜∪ 𝑉𝑓𝑜; 4. Sắp xếp tất cả yêu cầu 𝑖 ∈ 𝑉𝑝𝑜∪ 𝑉𝑓𝑜 theo thứ tự tăng dần theo 𝑔(𝑖);
Lấy 𝑝𝑠𝑖𝑧𝑒 các yêu cầu đầu tiên đã được sắp xếp đưa vào tập hợp 𝑉′; 5. foreach yêu cầu 𝑖 ∈ 𝑉′do
6. Cập nhật trạng thái của tất cả xe taxi K tại thời điểm 𝑒𝑖;
Cập nhật trạng thái của tất cả điểm đỗ xe taxi 𝑝 ∈ 𝑉𝑝𝑎 tại thời điểm 𝑒𝑖; 7. Gọi 𝑘1∈ 𝐾 là xe taxi đang phục vụ yêu cầu vận tải i;
8. if tìm thấy xe taxi gần nhất 𝑘2∈ 𝐾 có thể phục vụ yêu cầu i và tăng tổng lợi nhuận tốt nhất hiện tại then
9. Đưa yêu cầu i vào hành trình hiện tại của taxi 𝑘2; 10. Cập nhật tổng lợi nhuận tốt nhất hiện tại;
11. end if
12. end for
13. until không thể đạt được tổng lợi nhuận tốt hơn;
Mô-đun thực hiện sắp xếp yêu cầu đón hành khách và yêu cầu nhận hàng hóa theo giá trị hiệu quả có độ phức tạp Ο(𝑠 log 𝑠). Vòng lặp chính của thuật toán tìm kiếm địa phương có độ phức tạp Ο(|𝐾| ∗ |𝑉|log|𝑉|).
Do đó, độ phức tạp của thuật toán trên là Ο(𝑞 ∗ |𝐾| ∗ 𝑠 log 𝑠∗ |𝑉|log|𝑉|) với q là số bước lặp của thuật toán tìm kiếm địa phương và K là tập hợp các xe taxi.
39