Bước 2: Cải thiện chất lượng lời giải bằng giải thuật tìm kiếm Tabu 40

Một phần của tài liệu Giải bài toán lập lịch theo tín chỉ sử dụng giải thuật tìm kiếm Tabu (Trang 40)

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

Một phần của tài liệu Giải bài toán lập lịch theo tín chỉ sử dụng giải thuật tìm kiếm Tabu (Trang 40)

Tải bản đầy đủ (PDF)

(53 trang)