Xuất phát từ cơ sở của giải thuật tìm kiếm Tabu, luận văn sẽ đi vào triển khai cài đặt thực tế cho mô hình được đề cập bên trên để từ đó xây dựng ra một phần mềm nhằm giải quyết nhu cầu thực tế hiện nay tại cơ quan tác giả đang làm việc.
Mã giả giải thuật tìm kiếm Tabu – Pseudocode [40] s ← s0
sBest ← s
tabuList ← null
while (not stoppingCondition()) candidateList ← null
for (sCandidate in sNeighborhood)
if (not containsTabuElements(sCandidate,
tabuList))
candidateList ← candidateList + sCandidate end
end
sCandidate ← LocateBestCandidate(candidateList) if(fitness(sCandidate) > fitness(sBest))
tabuList ← featureDifferences(sCandidate, sBest) sBest ← sCandidate while(size(tabuList) > maxTabuListSize) ExpireFeatures(tabuList) end end end return(sBest)
4.6.2.1 Tính hàm mục tiêu đánh giá chất lượng của lời giải
Với mỗi biến quyết định Xrlp như đã đề cập trong mô hình bài toán 𝑋!"#
! ! !
Hàm mục tiêu đánh giá chất lượng của lời giải dựa trên hai yếu tố: o Vi phạm mỗi ràng buộc cứng: + 100 điểm
o Vi phạm mỗi ràng buộc mềm: + 1 → 10 điểm
Dưới đây là một số hàm xây dựng phục vụ việc cài đặt giải thuật tìm kiếm Tabu trong việc đưa ra lời giải cho bài toán sắp xếp thời khóa biểu:
• evaluate(): tính toán tổng số điểm phạt cho mỗi ràng buộc
o có một cờ generateCandidates dùng để sinh ra một buổi học mới – proposedCandidates – cho các ràng buộc cứng khi thiết lập smartSearch = true và số bước lặp của smartSearch < số bước lặp dừng trong giải thuật để ưu tiên tìm kiếm các lời giải mới không vi phạm các ràng buộc cứng giúp ta nhanh chóng hạ số điểm phạt của hàm mục tiêu.
• stopCriteriaReach(): đánh giá tiêu chí dừng của giải thuật o hàm mục tiêu bằng 0 – đạt giá trị MIN
o sau 1000 bước lặp
o sau 100 bước lặp mà chất lượng lời giải không được cải thiện • generateNextCandidate(): hàm sinh phép chuyển có
o input : buổi học – lesson – hiện đang xét
o output: một phép chuyển ngẫu nhiên có thể thay đổi ngày / giờ / phòng học / giáo viên cho buổi học hiện tại
• getNeighborhood() – trả về một danh sách các phép chuyển lân cận • calculateTotalEvaluation() – tính tổng số điểm phạt cho một lời giải
Dưới đây là sơ đồ mô tả luồng xử lí khi ta cài đặt giải thuật tìm kiếm Tabu cho mô hình bài toán sắp thời khóa biểu đã được đề cập từ đầu đến nay trong luận văn
initialize
!stopCriteriaReach()
getSurrounding() True
For Change in listChange
Evaluate() bestTotalPoint = currentTotalPoint currentTotalPoint < bestTotalPoint True True generateNextChange() TaboList ← currentChange End Start False False False
4.6.2.2 Phép chuyển
Như đã đề cập, bên trên yếu tố cốt lõi để giải thuật tìm được lời giải mới tốt hơn các lời giải trước đó dựa trên kỹ thuật cài đặt phép chuyển nhằm sinh ra một lời giải mới, hiện nay có nhiều tác giã đã đưa ra các phép chuyển khác nhau nhằm mục tiêu giải quyết bài toán lập lịch. Trong thời gian học tập, nghiên cứu tại trường Đại học Công nghệ và công tác tại cơ quan, tác đã đề xuất một cách sinh phép chuyển đơn giản để sinh ra các lời giải mới. Phép chuyển này có thể chưa phải là tốt nhất, tối ưu nhất nhưng cũng đã cho ra kết quả tốt phù hợp với mô hình bài toán đề ra. Sau đây là sơ đồ khối phép chuyển sinh ra một lời giải mới
Start
lesson
choice is Weekday
choice is Hour
choice is Room
choice is Teacher true true true true false false false false End candidate ← Ø
candidateTotalP oint ← scheduleTotalP oint choice ← randomChoice()
candidateUnitBefore ← lessonWee kday candidateUnitAfter ← randomWeekday() return candidate candidateUnitBefore ← lessonHour candidateUnitAfter ← randomHour() candidateUnitBefore ← lessonRoom candidateUnitAfter ← randomRoom() candidateUnitBefore ← lessonTeacher candidateUnitAfter ← randomTeacher() Hình 8 – Phép chuyển mới
4.6.2.3 Hàm mong đợi (Aspiration Function)
Xét một phép chuyển m: • Gọi S là lời giải hiện tại
• S’ là lời giải mới tạo thành sau khi thực hiện phép chuyển m lên S’ • S* là lời giải tốt nhất hiện tại
• f(S) là hàm mục tiêu
• phép chuyển m được gọi là thỏa hàm mong đợi chỉ khi f(S) < f(S*)
4.6.2.4 Điều kiện dừng của thuật toán
Thuật toán dừng khi một trong các điều kiện sau đây được thỏa mãn – hàm stopCriteriaReach:
• Sau 1000 bước lặp.
• Hàm mục tiêu của lời giải tốt nhất hiện tại đạt MIN = 0 (đã thỏa hết tất cả các ràng buộc cứng và mềm).
• Sau một số bước lặp nhất định (ví dụ 100 bước lặp) liên tiếp mà chất lượng lời giải tốt nhất hiện tại không đổi