Cụ thể, khách hàng từ tuyến đườngi r0sẽ được loại bỏ khỏir0và chèn vào tuyến đườngr1tại vị trí , nơi màp r0=r1và0 ≤ p ≤ |r1|.Ví dụ, trong Hình 0.7, khách hàngc4được di chuyển từ tuyến đ
Trang 10.1 Back tracking with branch and bound
Ý tưởng: Sử dụng 2 mảngxvàyđể lưu thứ tự khách hàng được phục vụ Trong đó,
•ykchỉ khách hàng đầu tiên được phụ vụ bởi nhân viênk, vớik= 1, , K
•xichỉ khách hàng sau được phục vụ sau khách hàngi, vớii= 1, N
Hình 0.1: Ví dụ cho biểu diễn phương pháp quay lui.
Thuật toán:
• Sử dụng thuật toán quy lui để duyệt qua lân lượt các phần tử trong mảngYvới điều kiện giá trị các phần tử tăng dần
• Sau khi chọn xong phần tử thứKthì duyệt qua mảngXtheo thứ tự các khách hàng được bảo trì từ các nhân viên
• Sau khi nhân viên điểm 0 tức kho hàng Thì chuyển qua xét nhân viên tiếp theo
1
Trang 2Algorithm 1: Backtracking for Vehicle Routing Problem
Input: Cost matrix , Number of vehicles , Number of customersC K N
Output: Optimal routes for vehicles
Initialize arrays X, Y , andvisited;
Setfbest← ∞;
Set initial routes in ;Y
whilenot all configurations trieddo
Generate new configurations for ;Y
for k ∈ {1, 2, , K} do: TryY(k);
for i ∈ Y do: TryX(i, k whereY[k] = i);
Update fbestif a better solution is found;
Procedure TryY( );k
foreachi∈ {0, 1, , N }do:
ifCheckY (i, k)then
Y[k] ← i;
visited i[ ] ← 1;
TryY(k+ 1);
visited i[ ] ← 0;
Procedure TryX(i, k);
foreachv∈ {0, 1, , N }do:
ifCheckX (v, i, k)then
X[i] ← v;
visited[v] ← 1;
TryX(v, k);
visited[v] ← 0;
Return Optimal routes as determined by X and ;Y
2
Trang 30.2 Local search
0.2.1 Relocate operator
Phép toán này bao gồm việc di chuyển một khách hàng từ một tuyến đường này sang một tuyến đường khác Cụ thể, khách hàng từ tuyến đườngi r0sẽ được loại bỏ khỏir0
và chèn vào tuyến đườngr1tại vị trí , nơi màp r0=r1và0 ≤ p ≤ |r1|
Ví dụ, trong Hình 0.7, khách hàngc4được di chuyển từ tuyến đườngr1sang tuyến đường r0
Hình 0.2: Ví dụ cho relocate operator.
0.2.2 Swap operator
Phép toán này bao gồm việc đổi chỗ hai khách hàng từ hai tuyến đường khác nhau
Nó có thể được xem như một sự di chuyển kép, trong đó các khách hàng được chèn vào
vị trí tương ứng của nhau trong tuyến đường Một cách chính thức hơn, khách hàngcitại
vị trípitrong tuyến đườngr0được di chuyển đến vị trípjtrong tuyến đường , trong khir1 khách hàngcjtại vị trípjtrong tuyến đườngr1được di chuyển đến vị trípitrong tuyến đường r0
Trong hình 0.7, khách hàngc6từ tuyến đườngr1và khách hàngc5từ tuyến đườngr0 được đổi chỗ theo vị trí tương ứng của họ
3
Trang 4Hình 0.3: Ví dụ cho swap operator.
0.2.3 K-Exchange operator
Phép toán này, còn được gọi là k-opt, bao gồm việc loại bỏkcạnh trong cùng một tuyến đường và sau đó kết nối lại các đoạn đường còn lại bằng các cạnh khác Kết quả
là, một số đoạn có thể được đảo ngược Một cách chính thức, nó bao gồm việc loại bỏ
kcạnh mà các điểm cuối của chúng nằm ở các vị trí< p0p1 pk>trên tuyến đường Mục tiêu là kết nối lại các đoạn đường theo một trật tự khác nhau Phép toán này có thể được định nghĩa cho bất kỳ số lượng cạnh nào bắt đầu từ hai Tuy nhiên, việc tính toán tất cả các sự trao đổi có thể đòi hỏi rất nhiều tài nguyên Vì vậy, phép toán thường được giới hạn ở sự trao đổi 2-cạnh hoặc 3-cạnh
Ví dụ về phép toán trao đổi 2-cạnh và trao đổi 3-cạnh được mô tả trong Hình 0.8 Trong trường hợp đầu tiên, hai cạnh được loại bỏ vớic1vàc7là điểm cuối Tuyến đường kết quả là một tuyến đường mới chứa đoạn bắt đầu từc1và kết thúc ởc3theo hình thức đảo ngược
Trong trường hợp thứ hai, các cạnh này cóc1,c4vàc6là điểm cuối Do đó, chúng ta thu được hai đoạn đường bắt đầu từc1vàc4và kết thúc tạic2vàc7tương ứng Đoạn thứ hai được theo dõi trước tiên theo cùng một trật tự Sau đó, đoạn đầu tiên được theo dõi theo trật tự đảo ngược
4
Trang 5Hình 0.4: Ví dụ cho relocate operator.
0.2.4 Cross operator
Phép toán này cắt hai tuyến đường khác nhau thành hai phần và tái cấu trúc chúng bằng cách sử dụng các cạnh chéo Một cách chính thức, nó trao đổi các đoạn từ tuyến đườngr1vàr2bắt đầu từ khách hàngcivàcjtương ứng và kết thúc ở kho, nơir1= r2
Hình 0.5: Ví dụ cho relocate operator.
5
Trang 60.3 Constraints programming
0.3.1 Biến
•ykđể chỉ trạng thái hoạt động của nhân viên k, nếuyk= 1tức là nhân viên hoạtk động, ngược lại,yk= 0nhân viênkkhông hoạt động
•pk
iđể chỉ thứ tự của khách hàng thứ trong hành trình của nhân viên i k
•xk
i,jchỉ cung(i, j)có thuộc hành trình của nhân viênkhay không Nếuxk
i,j = 1 thì cung(i, j)thuộc hành trình của nhân viên Ngược lại,k xk
i,j= 0thì cung(i, j) không thuộc hành trình của nhân viên k
•max_work time_ Thời gian làm việc lớn nhất của một nhân viên nào đó
0.3.2 Ràng buộc
• Mỗi khách hàng chỉ được bảo trì bởi một nhân viên
K X k=1
N X i=0
• Đến và rời khỏi khách hàng bởi cùng một nhân viên
N X i=0
xi,jk =
N X i=0
xkj,i,∀j = 0, , N; k= 1, , K (2)
• Mỗi nhân viên bắt đầu từ 0 và kết thúc tại 0
N X j=1
xk0,j= yk
N X j=1
xk
• Nhân viên cần di chuyển đến các khách hàng
xk i,i= 0,∀i= 0, , N; ∀k= 1, , K (5)
• Loại bỏ sub-tour (Nếu cung(i, j)thuộc hành trình của nhân viên thì khách hàngk
jđược bảo trì sau khách hàngi)
Nếuxk i,j= 1thìpjk≥ pi
k+ 1,
∀ i= j;i= 0, , N j = 1; , , N; k= 1, , K (6)
• Để tối ưu thời gian chạy code, giả sử các nhân viên được sắp xếp sao cho nếu nhân viên k hoạt động thì nhân viên k+1 cũng phải hoạt động (dồn tất cả nhân viên không hoạt động lên đầu, để tránh trường hợp hoán vị)
6
Trang 7y ≤y ,∀k = 1, , K − 1 (7)
• Thời gian làm việc lớn nhất
max work_ _time≥
N X i=0
N X i=0
xki,j× (dj+ ti,j) , ∀k = 1, , K (8)
• Miền giá trị của các biến
xki,j∈ {0 1, },
∀i = 0, , N; j= 0, , N; k= 1, , K (9)
pk
ii∈ {0, ∞} ∀, i= 0, , N; k = 1, , K (11)
0.3.3 Hàm mục tiêu
• Cực tiểu hóamax_work_time
0.4 MIP
0.4.1 Biến
•ykđể chỉ trạng thái hoạt động của nhân viên k, nếuyk= 1tức là nhân viên hoạtk động, ngược lại,yk= 0nhân viênkkhông hoạt động
•pikđể chỉ thứ tự của khách hàng thứ trong hành trình của nhân viên i k
•xk
i,jchỉ cung(i, j)có thuộc hành trình của nhân viênkhay không Nếuxk
i,j = 1 thì cung(i, j)thuộc hành trình của nhân viên Ngược lại,k xk
i,j= 0thì cung(i, j) không thuộc hành trình của nhân viên k
•max_work time_ Thời gian làm việc lớn nhất của một nhân viên nào đó
0.4.2 Ràng buộc
• Mỗi khách hàng chỉ được bảo trì bởi một nhân viên
K X k=1
N X i=0
xk
• Đến và rời khỏi khách hàng bởi cùng một nhân viên
N X i=0
xk i,j=
N X i=0
xk j,i,∀j = 0, , N; k= 1, , K (14)
7
Trang 8N X j=1
xk 0,j= yk
N X j=1
• Nhân viên cần di chuyển đến các khách hàng
xk i,i= 0,∀i= 0, , N; ∀k= 1, , K (17)
• Loại bỏ sub-tour (Nếu cung(i, j)thuộc hành trình của nhân viên thì khách hàngk
jđược bảo trì sau khách hàngi)
M xi,jk− 1 + pik+ 1 ≤ pk
j
∀ i= j; j = 1, , N; i= 1, , N; k= 1, , K (18)
• Để tối ưu thời gian chạy code, giả sử các nhân viên được sắp xếp sao cho nếu nhân viên k hoạt động thì nhân viên k+1 cũng phải hoạt động (dồn tất cả nhân viên không hoạt động lên đầu, để tránh trường hợp hoán vị)
• Thời gian làm việc lớn nhất
max work_ _time≥
N X i=0
N X i=0
xk i,j× (dj+ ti,j) , ∀k = 1, , K (20)
• Miền giá trị của các biến
xki,j∈ {0 1, },
∀i = 0, , N; j= 0, , N; k= 1, , K (21)
pkii∈ {0, ∞} ∀, i= 0, , N; k = 1, , K (23)
0.4.3 Hàm mục tiêu
• Cực tiểu hóamax_work_time
8
Trang 90.5 Tham lam
0.5.1 Greedy 1
• Ý tưởng: Tập các khách hàng chưa được phục vụ được sắp xếp theo thứ tự tăng dần
về thời gian (thời gian di chuyển + thời gian bảo trì) so với công ty0("gần") Sau
đó các khách hàng được thêm vào các tuyến của nhân viên sao cho làm giá trị của hàm mục tiêu tăng ít nhất Nếu không làm tăng giá trị hàm mục tiêu, khách hàng được thêm vào tuyến của nhân viên đang có thời gian làm việc ngắn nhất
• Sơ đồ giải thuật
Algorithm 2: Greedy 1
P← tập khách hàng;
Sắp xếp theo thứ tự "gần" công ty;
while P khác rỗng do
Lấy khách hàng đầu c trong ;P
Q← tập các nhân viên có hành trình làm tăng ít giá trị hàm mục tiêu nhất nếu thêm
cvào hành trình;
Lựa chọn nhân viên đang có thời gian làm việc nhỏ nhất trongk Q;
Thêm c vào hành trình của ;k
Loại bỏ c khỏi ;P
0.5.2 Greedy 2
• Ý tưởng: Tại mỗi bước, mỗi nhân viên sẽ chọn khách hàng tốn ít thời gian nhất để
đi đến Thứ tự chọn khách hàng của nhân viên được thực hiện lần lượt
• Sơ đồ giải thuật
Algorithm 3: Greedy 2
Khởi tạo hành trình của mỗi nhân viên bắt đầu tại 0;
k← 1;
while Tồn tại khách hàng chưa được phục vụ do
Lựa chọn khách hàng tốn ít thời gian nhất thêm vào hành trình của ;k
k← (k + 1)%K;
0.6 Tìm kiếm cục bộ
0.6.1 Relocate operator
Phép toán này bao gồm việc di chuyển một khách hàng từ một tuyến đường này sang một tuyến đường khác Cụ thể, khách hàng từ tuyến đườngi r0sẽ được loại bỏ khỏir0
và chèn vào tuyến đườngr1tại vị trí , nơi màp r0=r1và0 ≤ p ≤ |r1|
Ví dụ, trong Hình 0.7, khách hàngc4được di chuyển từ tuyến đườngr1sang tuyến
9
Trang 10đường r0
Hình 0.6: Ví dụ cho relocate operator.
0.6.2 Swap operator
Phép toán này bao gồm việc đổi chỗ hai khách hàng từ hai tuyến đường khác nhau
Nó có thể được xem như một sự di chuyển kép, trong đó các khách hàng được chèn vào
vị trí tương ứng của nhau trong tuyến đường Một cách chính thức hơn, khách hàngcitại
vị trípitrong tuyến đườngr0được di chuyển đến vị trípjtrong tuyến đường , trong khir1 khách hàngcjtại vị trípjtrong tuyến đườngr1được di chuyển đến vị trípitrong tuyến đường r0
Trong hình 0.7, khách hàngc6từ tuyến đườngr1và khách hàngc5từ tuyến đườngr0 được đổi chỗ theo vị trí tương ứng của họ
Hình 0.7: Ví dụ cho swap operator.
10
Trang 110.6.3 K-Exchange operator
Phép toán này, còn được gọi là k-opt, bao gồm việc loại bỏkcạnh trong cùng một tuyến đường và sau đó kết nối lại các đoạn đường còn lại bằng các cạnh khác Kết quả
là, một số đoạn có thể được đảo ngược Một cách chính thức, nó bao gồm việc loại bỏ
kcạnh mà các điểm cuối của chúng nằm ở các vị trí< p0p1 pk>trên tuyến đường Mục tiêu là kết nối lại các đoạn đường theo một trật tự khác nhau Phép toán này có thể được định nghĩa cho bất kỳ số lượng cạnh nào bắt đầu từ hai Tuy nhiên, việc tính toán tất cả các sự trao đổi có thể đòi hỏi rất nhiều tài nguyên Vì vậy, phép toán thường được giới hạn ở sự trao đổi 2-cạnh hoặc 3-cạnh
Ví dụ về phép toán trao đổi 2-cạnh và trao đổi 3-cạnh được mô tả trong Hình 0.8 Trong trường hợp đầu tiên, hai cạnh được loại bỏ vớic1vàc7là điểm cuối Tuyến đường kết quả là một tuyến đường mới chứa đoạn bắt đầu từc1và kết thúc ởc3theo hình thức đảo ngược
Trong trường hợp thứ hai, các cạnh này cóc1,c4vàc6là điểm cuối Do đó, chúng ta thu được hai đoạn đường bắt đầu từc1vàc4và kết thúc tạic2vàc7tương ứng Đoạn thứ hai được theo dõi trước tiên theo cùng một trật tự Sau đó, đoạn đầu tiên được theo dõi theo trật tự đảo ngược
Hình 0.8: Ví dụ cho relocate operator.
11
Trang 120.6.4 Cross operator
Phép toán này cắt hai tuyến đường khác nhau thành hai phần và tái cấu trúc chúng bằng cách sử dụng các cạnh chéo Một cách chính thức, nó trao đổi các đoạn từ tuyến đườngr1vàr2bắt đầu từ khách hàngcivàcjtương ứng và kết thúc ở kho, nơir1= r2
Hình 0.9: Ví dụ cho relocate operator.
0.7 Tham lam kết hợp tìm kiếm cục bộ
• Ý tưởng: Sử dụng Giải thuật 2 hoặc Giải thuật 3 để tạo ra lời giải ban đầu, sau đó
tiến hành tìm kiếm các lời giải láng giếng bằng việc hoán đổi một đoạn hành trình của nhân viên đang có thời gian dài nhất cho một nhân viên khác bất kì
• Sơ đồ giải thuật
Algorithm 4: GLS1
Khởi tạo lời giải ban đầuSbằng Giải thuật 2;
while Điều kiện dừng chưa thỏa mãn do
r1← chuyến có thời gian nhiều nhất trong ;S
r2← chuyến bất kì khác r1trong ;S
sub1← đoạn hành trình trên r1;
sub2← đoạn hành trình trên r2;
Hoán đổi sub1và sub2tạo thành lời giải mớiS′;
if S′tốt hơn S then
Thay thế S bởiS′;
0.8 Giải thuật di truyền (GA)
0.8.1 Mã hóa lời giải
Mỗi cá thể được biểu diễn bởi một mảng có kích thước(N + K − 1)gồm các số từ1 đếnN+ K − 1, trong đó, các số từ1đếnNchỉ khách hàng, các số còn lại điểm ngăn
12
Trang 13Algorithm 5: GLS2
Khởi tạo lời giải ban đầuSbằng Giải thuật 3;
while Điều kiện dừng chưa thỏa mãn do
r1← chuyến có thời gian nhiều nhất trong ;S
r2← chuyến bất kì khác r1trong ;S
sub1← đoạn hành trình trên r1;
sub2← đoạn hành trình trên r2;
Hoán đổi sub1và sub2tạo thành lời giải mớiS′;
if S′tốt hơn S then
Thay thế S bởiS′;
cách giữa các tuyến Hình 0.10 minh hoạ cho một cá thể hợp lệ vớiN= 5, K= 2, cá thể tương ứng với lời giải:0− − 2 − 01 và0− − − 4 − 03 5
Hình 0.10: Ví dụ biểu diễn của một các thể
0.8.2 Toán tử di truyền
Trong báo cáo này, hai toán tử di truyền được sử dụng là: lai ghép thứ tự và đột biến đổi vị trí Việc áp dụng hai toán tử này đảm bảo cá thể con sinh ra là một cá thể hợp lệ Hình 0.11 và 0.12 minh họa cho hai toán tử
Hình 0.11: Lai ghép thứ tự
13
Trang 14Hình 0.12: Đột biến hoán điểm
0.8.3 Tham số
Tham số của giải thuật được trình bày trong Bảng 1
Kích thước quần thể 100
Bảng 1: Tham số cho giải thuật di truyền.
14