Mô phỏng tôi luyện

Một phần của tài liệu Giải thuật bầy kiến giải bài toán VRP với hạn chế thời gian (VRPMTW) (Trang 41 - 44)

Mô phỏng tôi luyện (SA) là một kỹ thuật giảm hỗn độn tìm nguyên bản theo một cơ chế thống kê [6]. Nguyên lý của SA tương tự như quá trình luyện kim. Để tránh các trạng thái siêu - ổn định do nhúng kim loại nóng vào nước lạnh, kim loại thường được làm lạnh rất chậm để cho phép tự vào trạng thái ổn định, cấu trúc tốt, hình thể năng lượng thấp. Quá trình này gọi là tôi luyện. Sự giống nhau này có thểđược sử dụng trong tối ưu tổ hợp với các trạng thái của chất rắn tương ứng với lời giải chấp nhận được, năng lượng tại mỗi trạng thái là sự cải tiến trong hàm mục tiêu và năng lượng tối thiểu chính là lời giải tối ưu. SA liên quan tới quá trình làm giảm dần dần nhiệt độ. Thông thường, trước tiên hệ thống được làm nóng sau đó làm lạnh. Do vậy, hệ thống được cung cấp cơ hội để vượt qua các rào cản năng lượng trong một lần tìm kiếm các hình thể có năng lượng thấp hơn năng lượng tối thiểu cục bộ tìm được bằng việc tối thiểu hóa năng lượng. Không giống λ – interchange, SA là mẹo tối ưu hóa tổng thể dựa trên xác suất, do vậy có thể khắc phục được tối ưu cục bộ.

Tại mỗi bước của thuật toán mô phỏng, một trạng thái mới của hệ thống được xây dựng từ trạng thái hiện tại bằng việc cung cấp một dịch chuyển ngẫu nhiên đối với một phần tửđược chọn ngẫu nhiên. Nếu năng lượng tương

ứng với trạng thái mới này nhỏ hon năng lượng của trạng thái hiện tại với khoảng dịch chuyển chấp nhận được này thì trạng thái mới trở thành trạng thái hiện tại. Nếu trạng thái có năng lượng cao hơn d jun thì xác suất thay đổi trạng thái hiện tại sang trạng thái mới là

) exp(

kT d

− (2.15) với k là hằng số Boltzmann, và T là nhiệt độ tuyệt đối hiện tại. Bước cơ bản này có thể lặp vô hạn và được gọi là bước thủ phủ (metropolis step). Thủ tục này được gọi là vòng lặp thủ phủ (metropolis loop). Như vậy có thể thấy rằng, phương thức tạo trạng thái mới này dẫn tới một phân phối trạng thái mà ở đó xác suất của một trạng thái có năng lượng ei so với trạng thái hiện tại là

∑ − − j j i kT e kT e ) / exp( ) / exp( (2.16) Hàm xác suất này được gọi là hàm mật độ Boltzmann. Một trong số các đặc điểm của nó là với nhiệt độ rất cao, cơ hội để mỗi trạng thái trở thành trạng thái hiện tại là bằng nhau. Tại nhiệt độ thấp, chỉ các trạng thái với năng lượng thấp có xác suất trở thành trạng thái hiện tại cao. Các xác suất này được dẫn xuất để không bao giờ kết thúc việc thực hiện vòng lặp thủ phủ. Ưu điểm của lược đồ này là:

• SA có thể giải quyết với các hệ thống và hàm chi phí bất kỳ; • SA đảm bảo tìm được một lời giải tối ưu;

• SA tương đối dễ viết mã, thậm chí cho các bài toán phức tạp; • Nói chung, SA đưa ra một lời giải tốt.

Tuy nhiên phiên bản SA gốc này có một số nhược điểm: • Việc tôi luyện lặp đi lặp lại với một lược đồ

k

log 1

là rất chậm, đặc biệt nếu việc tính toán hàm chi phí là đắt;

• Với các bài toán mà vùng năng lượng là trơn hoặc có ít điểm tối thiểu cục bộ, SA là một phương pháp đơn giản hơn, các phương nhanh hơn sẽ làm việc tốt hơn nhưng thông thường ta không biết trước vùng năng lượng;

• Các phương pháp mẹo thông thường, đã có đủ thông tin hoặc cần thêm thông tin về hệ thống, sẽ tốt hơn các phương pháp tổng quát. Nhưng SA thường được so sánh với mẹo;

• Phương pháp này không thể chỉ ra được là nó đã tìm ra một lời giải tối ưu hay chưa. Ta cần dùng một số phương pháp khác (ví dụ nhánh cận) để làm việc này.

Giải thuật bắt đầu với một lời giải tương đối tốt thu được từ PFIH. Nhiệt độ ban đầu được đặt tại Ts = 100 và giảm chậm theo công thức

1 1 1 − − + = k k k T T T τ (2.17)

Với Tk là nhiệt độ hiện thời tại bước lặp k và τ là hằng số thời gian nhỏ. Căn bậc hai của Tk được đưa ra trong mẫu số để tăng tốc quá trình làm lạnh. Ởđây ta sử dụng một hàm đơn điệu giảm đơn giản để thay thế lược đồ 1/logk. Giải thuật tìm lời giải trong các làng giềng của lời giải hiện tại một cách ngẫu nhiên hoặc hệ thống và tính xác xuất của việc di chuyển các lời giải này theo công thức: P(chấp nhận một di chuyển) = exp( ) k T ∆ − (2.18) Công thức này là một phiên bản của công thức (2.15) với ∆ = C’(S) – C(S),

C(S) là chi phí của lời giải hiện tại và C’(S) là chi phí của lời giải mới. Nếu ∆ < 0, di chuyển luôn được đảm bảo. Ta có thể thấy rằng khi nhiệt độ lạnh dần, xác suất chấp nhận một di chuyển không tiết kiệm chi phí nhỏ hơn. Khi nhiệt độ chuyển tới nhiệt độ cuối cùng Tf = 0.001 hoặc không có di chuyển nào chấp nhận được nữa trong láng giềng, ta thiết lập lại nhiệt độ thành:

Tr= Max(Tr/2, Tb) (2.19) với Tr là nhiệt độ thiết lập lại, ban đầu đặt bằng TsTb là nhiệt độ của lời giải tốt nhất hiện thời. Nhiệt độ cuối cùng không được đặt bằng không vì nhiệt độ giảm tới vô cùng gần không. Để tìm một láng giềng cục bộ, ta sử dụng tiếp cận 2 – interchange. Mỗi khi tìm được một lời giải tổng thể tốt nhất, thực hiện thủ tục GB để tìm các lời giải có thể xung quanh nó. Thủ tục dừng sau một số lần thiết lập lại. Sau đây là một thủ tục chi tiết của SA sử dụng FB để tìm láng giềng với một số ký hiệu:

Ts = Nhiệt độ bắt đầu của phương pháp SA = 100

Tf = Nhiệt độ cuối cùng của phương pháp SA = 0.001

Tb = Nhiệt độ mà tại đó tìm được lời giải tốt nhất

Tr = Nhiệt độ thiết lập lại của phương pháp SA, ban đầu bằng Ts

Tk = Nhiệt độ của lời giải hiện thời

S = Lời giải hiện thời

Sb = Lời giải tốt nhất hiện thời

R = Số lần thực hiện thiết lập lại

τ = Hằng số thời gian trong khoảng (0, 1).

Bảng 2.3: Giải thuật Mô phỏng tôi luyện (SA) (adsbygoogle = window.adsbygoogle || []).push({});

Step SA – 1: Sử dụng PFIH đểđưa ra các lời giải chấp nhận được. Step SA – 2: Dùng 2 – interchange LSD với chiến lược GB cải thiện S.

Step SA – 3: Đặt các tham số làm lạnh: Ts = Tb = Tr = Tk = 100, τ = 0.5. Step SA – 4: Tạo S’N2(S) bằng thao tác (2, 0) và (1, 0).

Tính ∆ = C(S’) – C(S).

Step SA – 5: If {( ∆≤ 0) or (∆ > 0 and exp(-∆/Tk) ≥θ) với θ là số ngẫu nhiên giữa [0,1] } then

đặt S = S’.

If {C(S) < C(Sb)} then

Cải thiện S sử dụng 2 – interchange LSD (GB). Cập nhật Sb = STb = Tk.

Step SA – 6: Đặt k = k + 1. Cập nhật nhiệt độ sử dụng công thức (6). If {N2(S) không có di chuyển nào chấp nhận được} then

Đặt lại Tr = max (Tr / 2, Tb), và Tk = Tr.

Step SA – 7: If {đã đặt lại R lần từ khi tìm thấy Sb lần cuối} then Go to Step SA – 8.

Else

Go to Step SA – 4. Step SA – 8: Dừng SA và in kết quả.

Nói chung, giải thuật SA ở trên là giải thuật đơn giản, nhanh để giải VRPTW với kết quả gần tối ưu. Do sử dụng GB trong tìm kiếm láng giềng cục bộ, giải thuật có thể tìm được lời giải tối ưu cục bộ ổn định trong hầu hết các trường hợp, đặc biệt nếu tối ưu tổng thểđặt rất xa lời giải ban đầu dùng PFIH.

Một phần của tài liệu Giải thuật bầy kiến giải bài toán VRP với hạn chế thời gian (VRPMTW) (Trang 41 - 44)