Hàm đánh giá độ thích nghi

Một phần của tài liệu Nghiên cứu thuật toán di truyền cho bài toán xếp Thời khóa biểu THPT (Trang 44 - 48)

3.1. Phát biểu bài toán

3.1.4. Các phép toán di truyền

3.1.4.4. Hàm đánh giá độ thích nghi

Do các ràng buộc đa dạng, ta nên xét từng ràng buộc và xây dựng các hàm đánh giá tương ứng, sau đó tổ hợp lại thành hàm đánh giá chung cho cá thể. Tùy theo tính chất cứng, mềm và tính cần thiết của các ràng buộc, ta sẽ gán cho chúng các tham số lớn nhỏ khác nhau trong hàm đánh giá tổng thể của cá thể.

Ta xây dựng tổ hợp các hàm đánh giá thành phần của cá thể v gồm k ràng buộc như sau:

- Ràng buộc về lớp học:

+ Phải học đủ số tiết đã quy định trong mỗi khối.

+ Không quá một giáo viên dạy trong một tiết.

+ Các tiết học phải liên tục.

- Ràng buộc môn học:

+ Các môn cố định: Chào cờ, Sinh hoạt, Nghỉ phải đảm bảo đúng vị trí.

+ Các môn kép nếu học cùng một buổi thì phải học liên tục.

+ Học đủ số lượng tiết và buổi trong một tuần.

- Ràng buộc giáo viên:

+ Không dạy quá số lượng tiết quy định.

+ Chỉ dạy 1 lớp tại một thời điểm.

- Ràng buộc mềm khác:

+ Đàm bảo thời gian di chuyển của giáo viên.

+ Tránh các tiết mà một giáo viên thường đi họp hoặc làm các công việc chuyên môn khác.

+ Hạn chế các tiết trống giữa các tiết cho giáo viên.

Tựu trung lại chúng ta có các ràng buộc sau:

'Ràng buộc Giáo viên trùng tiết For k = 0 To tongtiet - 1 vTKBOK(9, k) = 0 Next

For k = 0 To tongtiet - 2

ss = vTKBOK(3, k) & vTKBOK(7, k) & vTKBOK(8, k) For kk = k + 1 To tongtiet - 1

sss = vTKBOK(3, kk) & vTKBOK(7, kk) & vTKBOK(8, kk) If (vTKBOK(9, k) = 0) And ss = sss Then

vTKBOK(9, kk) = 1 'Đánh dấu tiết vừa so sánh Gttn = Gttn + 1

End If Next

vTKBOK(9, k) = 1 Next

'Ràng buộc Một giáo viên không dạy 5 tiết trong 1 buổi If x5tiet = True Then

k = 0 hs = 0

tiet = False

Do While k < tongtiet - 1 For thu = 2 To 7

cscot = 5 * (thu - 1) + 30 * hs - 1

If (vTKBOK(3, cscot) = vTKBOK(3, cscot - 1)) And (vTKBOK(3, cscot) = vTKBOK(3, cscot - 2)) And (vTKBOK(3, cscot) = vTKBOK(3, cscot - 3)) And (vTKBOK(3, cscot) = vTKBOK(3, cscot - 4)) Then kt = True Next

If kt = True Then Gttn = Gttn + 1 kt = False

k = k + tonglop hs = hs + 1 Loop

End If

'Ràng buộc cho Môn Thể dục dạy tiết 5 If xThe = True Then

For k = 0 To tongtiet - 2

If vTKBOK(8, k) = Str(5) Then

If vTKBOK(2, k) = Str(21) Then Gttn = Gttn + 1 End If

Next End If

'Ràng buộc cho Môn Giáo dục Quốc phòng dạy tiết 5 If xThe = True Then

For k = 0 To tongtiet - 2

If vTKBOK(8, k) = Str(5) Then

If vTKBOK(2, k) = Str(24) Then Gttn = Gttn + 1 End If

Next End If

'Ràng buộc cho Môn Toán có 2 tiết liền If xToan = True Then

k = 0 hs = 0 kt = False

Do While k < tongtiet - 1 For thu = 2 To 7

For tiet1 = 1 To 4

For tiet2 = tiet1 + 1 To 5

cscot1=tiet*(thu - 1) + (5-tiet) * (thu-2) + 30

* hs-1

cscot2=tiet2*(thu - 1) + (5-tiet2) * (thu-2) + 30 * hs-1

If(vTKBOK(2,cscot1)=Str(16))&(vTKBOK(2,cscot2)=

Str(12))

Then kt = True Next

Next Next

If kt = True Then Gttn = Gttn + 1 kt = False

k = k + tonglop hs = hs + 1 Loop

End If

'Ràng buộc cho Môn Văn có 2 tiết liền If xVan = True Then

k = 0 hs = 0 kt = False

Do While k < tongtiet - 1 For thu = 2 To 7

For tiet1 = 1 To 4

For tiet2 = tiet1 + 1 To 5

cscot1=tiet*(thu - 1) + (5-tiet) * (thu-2) + 30

* hs-1

cscot2=tiet2*(thu - 1) + (5-tiet2) * (thu-2) + 30 * hs-1

If(vTKBOK(2,cscot1)=Str(16))&(vTKBOK(2,cscot2)=

Str(16))

Then kt = True Next

Next Next

If kt = True Then Gttn = Gttn + 1 kt = False

k = k + tonglop hs = hs + 1 Loop

End If

'Ràng buộc Một Môn không quá 2 tiết trong 1 buổi If x2tiet = True Then

k = 0 hs = 0 kt2 = 0

Do While k < tongtiet - 1 For thu = 2 To 7

For tiet1 = 1 To 4

For tiet2 = tiet1 + 1 To 5

cscot1=tiet*(thu - 1) + (5-tiet) * (thu-2) + 30

* hs-1

cscot2=tiet2*(thu - 1) + (5-tiet2) * (thu-2) + 30 * hs-1

If vTKBOK(2, cscot1) = vTKBOK(5,cscot2) Then kt2

= kt2+1

Next Next Next

If kt2 > 1 Then Gttn = Gttn + 1 kt = False

k = k + tonglop hs = hs + 1 Loop

End If

'Ràng buộc Các tiết cùng môn rời rạc trong 1 buổi - có từ 2 tiết trở lên mà không xếp liền

If x2tietlien = True Then k = 0

Do While k < tongtiet - 1 For thu = 2 To 7

For tiet1 = 1 To 3

For tiet2 = tiet1 + 2 To 5

cscot1=tiet*(thu - 1) + (5-tiet) * (thu-2) + 30

* hs-1

cscot2=tiet2*(thu - 1) + (5-tiet2) * (thu-2) + 30 * hs-1

If vTKBOK(2,cscot1) = vTKBOK(2,cscot2) Then Gttn=Gttn +1

Next

Next Next

k = k + tonglop Loop

End If

'Ràng buộc Các tiết của 1 GV trống trong 1 buổi - có từ 1 tiết trống trở lên mà không xếp liền

If xTrong = True Then k = 0

Do While k < tongtiet - 1 For thu = 2 To 7

For tiet1 = 1 To 3

For tiet2 = tiet1 + 2 To 5

cscot1=tiet*(thu - 1) + (5-tiet) * (thu-2) + 30

* hs-1

cscot2=tiet2*(thu - 1) + (5-tiet2) * (thu-2) + 30 * hs-1

If vTKBOK(3,cscot1)=vTKBOK(3,cscot2) Then Gttn=Gttn + 1

Next Next Next

k = k + tonglop Loop

End If

Việc xây dựng hàm thích nghi cho cá thể từ các hàm thích nghi toàn phần giúp ta dễ dàng thay đổi các tham số để có thể điều khiển hướng hội tụ của bài toán theo định hướng của người sử dụng. Tuy nhiên, những thay đổi này cần phải bảo đảm tiêu chuẩn cơ bản của hàm thích nghi trong mỗi pha tiến hóa, nghĩa là hàm thích nghi phải phân biệt được độ thích nghi của từng cá thể, để cá thể tương ứng với lời giải tốt hơn sẽ có giá trị hàm thích nghi lớn hơn.

Một phần của tài liệu Nghiên cứu thuật toán di truyền cho bài toán xếp Thời khóa biểu THPT (Trang 44 - 48)

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

(64 trang)
w