Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
_______________________

BÀI TẬP 4
MÔN HỌC: CÔNG NGHỆ 4.0 TRONG LÃNH VỰC CƠ KHÍ
CHỦ ĐỀ: TABU RESEARCH

HỌC KỲ 222 / NĂM HỌC 2022-2023


LỚP: L05
NHÓM: 6
GIẢNG VIÊN HƯỚNG DẪN: THẦY TRẦN QUANG PHƯỚC

Thành phố Hồ Chí Minh – 2023


PHÂN CÔNG CÔNG VIỆC

Họ và tên MSSV Nội dung


Bùi Trung Kiên 1910285 Sơ đồ, Khung giải thuật, Ví dụ, Tổng hợp,
Powerpoint
Kiều Trung Tín 1910610 Kiểm tra nội dung, Tổng hợp, Powerpoint
Huỳnh Nhật Trường 1910652 Tìm hiểu về giải thuật, Khái niệm, Các loại bộ nhớ
Lê Gia Khánh 1913734 Tiêu chí xác lập, bộ nhớ tần số
Ngô Trần Quang Châu 1912766 Danh sách Tabu, Chu kì Tabu
Huỳnh Lê Hữu Tuấn 1915762 Thuật toán, Ưu và nhược điểm
MỤC LỤC

1. Khái quát về Tabu Search ............................................................................................ 1


2. Một số khái niệm liên quan tới Tabu Search ............................................................... 1
4. Danh sách Tabu ............................................................................................................ 5
5. Chu kì Tabu .................................................................................................................. 5
6. Sơ đồ giải thuật ............................................................................................................ 9
7. Khung của giải thuật .................................................................................................... 9
8. Ví dụ giải thuật .......................................................................................................... 10
1. Khái quát về Tabu Search
Tìm kiếm Tabu (TS) là một kỹ thuật tìm kiếm dựa trên quy định về luật cấm kết
hợp đối với các cá thể có ”quan hệ gần” nhằm tránh suy thoái và tăng tính đa dạng của
quần thể.
Từ một lời giải ban đầu, tìm kiếm TABU sẽ lặp đi lặp lại quá trình tìm kiếm
nhằm cải thiện dần lời giải tốt nhất hiện có (ta sẽ gọi tắt là kỷ lục) của bài toán. Tại mỗi
bước lặp, thuật toán sẽ duyệt trong một miền lân cận (cũng có thể là toàn bộ lân cận)
của lời giải hiện tại để chọn ra lời giải tốt nhất, lời giải này sẽ thay thế cho lời giải hiện
tại ở bước lặp kế tiếp. Mỗi lời giải trong lân cận của lời giải hiện tại được gọi là một lân
cận (neighborhood) của lời giải hiện tại. Quá trình tác động lên lời giải hiện tại để biến
nó thành một lân cận của lời giải hiện tại được gọi là một bước chuyển (move).
Để tránh việc duyệt trở lại những lời giải đã từng được khảo sát, tìm kiếm TABU
sử dụng một danh sách để lưu trữ một số bước chuyển đã từng được sử dụng, gọi là
danh sách TABU; danh sách này sẽ chứa một số bước chuyển vừa được thực hiện trong
một số bước lặp ngay trước đó, các bước chuyển nằm trong danh sách TABU được gọi
là các bước chuyển TABU. Các bước chuyển này sẽ bị cấm sử dụng lại chừng nào nó
còn nằm trong danh sách TABU. Mỗi bước chuyển TABU sẽ nằm trong danh sách
TABU trong khoảng thời gian t bước lặp, sau đó, bước chuyển này sẽ được loại khỏi
danh sách TABU và nó có thể lại được sử dụng. Số t vừa nêu được gọi là giá trị TABU
tenure của bước chuyển. Giá trị t có thể cố định cho tất cả các bước chuyển hoặc cũng
có thể là một số ngẫu nhiên được chọn cho từng bước chuyển.
Hiệu quả của thuật toán tìm kiếm TABU phụ thuộc vào các yếu tố như: Cách
thức tạo lời giải ban đầu, cách thức lựa chọn miền lân cận của lời giải hiện tại, tiêu
chuẩn mong đợi cụ thể, các chiến lược bổ sung cụ thể, chiều dài danh sách TABU, giá
trị TABU tenure.

2. Một số khái niệm liên quan tới Tabu Search


Tạo lời giải ban đầu
Lời giải ban đầu có thể được khởi tạo bằng một heuristic đơn giản hoặc phương
pháp ngẫu nhiên.
Chọn miền lân cận
Tùy thuộc vào không gian tìm kiếm của bài toán mà có các cách thức chọn miền
lân cận phù hợp. Thường thì hai cách thức sau được sử dụng: Thứ nhất là xét toàn bộ
lân cận của lời giải hiện tại và từ đó chọn ra lời giải tốt nhất; cách này sẽ không hiệu
quả khi số lượng lân cận của lời giải là đủ lớn. Thứ hai là xét một tập con lân cận ngẫu
nhiên của lời giải hiện tại (trong bài báo này chúng tôi sử dụng cách thứ hai này).
Chọn lân cận
Nếu bước chuyển tốt nhất trong miền lân cận có thể cải thiện được kỷ lục thì tất
nhiên bước chuyển đó sẽ được chọn, ngược lại thì bước chuyển đó sẽ được chọn với
xác suất p nào đó, nếu sau phép thử xác suất mà bước chuyển này vẫn không được chọn
thì sẽ chuyển sang thực hiện bước lặp tiếp theo với lời giải hiện tại được giữ nguyên.
Tiêu chuẩn mong đợi
Một vấn đề có thể xảy ra là một bước chuyển dù đang bị cấm nhưng nó lại có
khả năng cải thiện kỷ lục; do đó để tránh bỏ sót các bước chuyển tốt này, thuật toán tìm
kiếm TABU đưa ra khái niệm tiêu chuẩn mong đợi (aspiration criteria). Tiêu chuẩn
mong đợi thường được áp dụng là: Nếu một bước chuyển TABU có thể cải thiện được
kỷ lục thì bước chuyển này vẫn được chọn và nó sẽ được loại khỏi danh sách TABU.
Chiến lược bổ sung
Nhằm nâng cao chất lượng tìm kiếm, thuật toán tìm kiếm TABU đưa ra hai chiến
lược tìm kiếm bổ sung là: chiến lược đa dạng hóa và chiến lược tăng cường hóa.
Đa dạng hóa lời giải (diversifying)
Mục đích của việc đa dạng hóa là hướng đến những miền không gian tìm kiếm
mới. Có thể thực hiện việc đa dạng hóa lời giải bằng cách cho xáo trộn ngẫu nhiên một
số phần tử của lời giải.
Tăng cường hóa lời giải (intensifying)
Mục đích của việc tăng cường hóa là tập trung tìm kiếm sâu hơn ở những vùng
không gian tìm kiếm có triển vọng chứa lời giải tốt. Có thể thực hiện việc tăng cường
hóa lời giải bằng cách là: Nếu sau một số bước lập nhất định mà kỷ lục vẫn không được
cải thiện; khi đó quá trình tìm kiếm TABU sẽ được khởi động lại với lời giải ban đầu
chính là lời giải ứng với kỷ lục.

3. Bộ nhớ Tabu Search

2
Cấu trúc bộ nhớ trong TS hoạt động bằng việc tham khảo bốn chiều chính sau:

- Tính chất mới xảy ra (Recency).


- Tính chất thường xuyên (Frequency).
- Tính chất chất lượng (Quality).
- Tính chất ảnh hưởng (Infuence).
Bộ nhớ Recency – based và Frequency– based hỗ trợ lẫn nhau. Chiều chất lượng
thể hiện khả năng phân biệt chất lượng của các lời giải đƣợc tìm thấy trong quá trình
tìm kiếm. Trong ngữ cảnh này, bộ nhớ có thể sử dụng để nhận dạng các thành phần
hoặc các con đường dẫn tới lời giải tốt. Tính chất lượng hướng tới việc tạo ra các thành
phần khích lệ để cung cấp các hƣớng dẫn đến lời giải tốt và các thành phần vi phạm
(Penalty) để ngăn chặn các hướng dẫn đến lời giải kém. Khái niệm chất lượng được sử
dụng trong tìm kiếm Tabu rộng hơn so với cái đƣợc sử dụng trong phương pháp tối ưu
chuẩn. Chiều thứ tư là tính ảnh hưởng xem việc ảnh hưởng của các lựa chọn đƣợc tạo
trong quá trình tìm kiếm không nhưng trên chất lượng mà còn trên cấu trúc (có thể xem
tính chất chất lượng là một dạng đặc biệt của tính chất ảnh hưởng).

Bộ nhớ sử dụng trong tìm kiếm Tabu là bộ nhớ hiện (Explicit Memory) và bộ
nhớ thuộc tính (Attributive Memory). Bộ nhớ hiện ghi nhận toàn bộ lời giải, thường là
chứa các lời giải tốt trong quá trình tìm kiếm. Những lời giải tốt đã ghi nhận sẽ được
dùng để mở rộng tìm kiếm cục bộ. Những ứng dụng của loại bộ nhớ này giới hạn ở chỗ,
vì cần phải thiết kế cấu trúc dữ liệu để không tốn quá nhiều bộ nhớ. Thay vào đó, tìm
kiếm Tabu sử dụng bộ nhớ thuộc tính. Loại bộ nhớ này lƣu lại thông tin về các thuộc
tính của lời giải khi có thay đổi từ lới giải này sang lời giải khác. Ví dụ, trong đồ thị hay
mạng, các thuộc tính có thể bao gồm các nút hoặc các cung được thêm vào hoặc bớt đi
bởi phép chuyển.

Ví dụ minh hoạ

Đây là một minh họa cho thấy các thuộc tính có thể được sử dụng như thế nào
trong cấu trúc bộ nhớ Recency – based. Xem một vấn đề tìm cây tối ưu trên đồ thị với
các nút được đánh số từ 1 đến 7. Và ba đồ thị thể hiện cho đồ thị ở bước k, k+1, k+2
trong quá trình tạo ra các trạng thái để tìm lời giải. Với quy định là khi một phép chuyển
được thực hiện sẽ bao gồm một cạnh được lấy ra và một cạnh được thêm vào để giữ
nguyên cây.

Phép chuyển áp dụng ở bước k để tạo ra một cây ở bước k+1 bao gồm việc gỡ
cạnh (1,3) và thêm vào cạnh (4,6). Được thể hiện ở hình 2.2, là cạnh đƣợc đánh dấu và
cạnh đứt nét. Ở bƣớc k, cạnh (1,3) và cạnh ảo (4,6) trong cây được xem là hai thuộc
tính lời giải (Solution attribute) khác nhau và cạnh được gọi là (1,3) trong và cạnh (4,6)
ngoài. Các thuộc tính này đƣợc xem là Tabu – active, được dùng để định nghĩa ra trạng
thái Tabu (Tabu status) của các phép chuyển ở các bước tiếp theo.

Ví dụ trong bộ nhớ Recency – based ta có thể chọn cạnh (1,3) trong là Tabu –
active trong 3 bước, để giữ cho cạnh (1,3) không bị thêm lại vào cây hiện tại trong
những bước này. Do đó cạnh (1,3) chỉ có thể thêm vào cây ở bước gần nhất là bước
k+4. Tương tự, nếu cạnh (4,6) ngoài Tabu – active, trong 1 bước để giữ cho cạnh (4,6)
khỏi bị gỡ ra trong 1 bước. Những điều kiện này giúp cho việc thực hiện các phép
chuyển tránh lặp lại những lần chuyển ở những bước trước

Số bước mà một cạnh trong trạng thái Tabu – active được gọi là Tabu tenure.
Nếu giá trị Tabu tenure quá lớn sẽ làm cho chất lượng của lời giải không được cải thiện.
Nhưng nếu Tabu tenure quá nhỏ sẽ làm cho hàm mục tiêu lặp lại theo chu kỳ

4
Trong ví vụ trên, khi bộ nhớ hiện mở rộng các lời giải lân cận trong khi tìm kiếm
cục bộ (bằng cách nhớ các lời giải tốt) thì bộ nhớ thuộc tính làm giảm các lời giải đó
(bằng cách giữ hoặc cấm các phép chuyển có chọn lọc).

4. Danh sách Tabu


Danh sách Tabu là nền tảng của việc sử dụng trí nhớ ngắn hạn. Danh sách này
lưu trữ một lượng cố định các bước di chuyển được thực hiện gần đây. Trong một số
triển khai, các giải pháp hoàn chỉnh được sử dụng thay vì các bước di chuyển được sử
dụng nhưng điều này không lý tưởng nếu các giải pháp hoàn chỉnh rất lớn do giới hạn
về không gian. Một số ví dụ về những động thái này là:
- Trao đổi các nút trong biểu đồ/chuyến tham quan
- Chuyển đổi một chút giữa 0 và 1
- Chèn hoặc xóa các cạnh trong biểu đồ
- Tất cả các cấu hình bị ẩn hoặc thuộc tính cấu hình được lưu trữ từng bước trong
cấu trúc dữ liệu
Bộ nhớ rõ ràng: Một lựa chọn hiển nhiên là lưu giữ bộ nhớ của tất cả các cấu
hình đã truy cập
- Kích thước của danh sách tabu sẽ tăng tuyến tính theo thời gian
- Chọn mọi lúc cấu hình không tốt nhất trong vùng lân cận hiện tại có nghĩa là
kiểm tra mọi cấu hình khả thi trong vùng lân cận so với các cấu hình trong danh
sách tabu → rất tốn kém (bản đồ băm là một cách hiệu quả để thực hiện lưu trữ
và truy xuất)
Bộ nhớ thuộc tính: Việc di chuyển từ cấu hình giải pháp st sang cấu hình st+1
có thể được thể hiện về một hoặc nhiều thuộc tính (nghĩa là các tính năng của nước đi)
- Lưu trữ các thuộc tính thay vì toàn bộ giải pháp, nó cho phép giữ trong danh sách
tabu nhỏ gọn hơn đại diện của lịch sử tìm kiếm
- Điều này giúp giảm yêu cầu bộ nhớ và tìm kiếm nhanh hơn trong danh sách
- Sử dụng các thuộc tính thay vì toàn bộ giải pháp có nghĩa là mất thông tin: có
thể tạo ra các chu kỳ.

5. Chu kì Tabu
Chu kì Tabu là số lần lặp lại mà một nước đi nằm trong Danh sách Tabu. Các
lượt đi trong Danh sách Tabu là những lượt đi không thể thực hiện lại vì nó đã được
truy cập gần đây. Có hai cách để thực hiện Chu kì Tabu (T):
- Tĩnh: chọn T là hằng số (thường là sqrt(T))
- Động: chọn T ngẫu nhiên giữa một số T_min và T_max

Ý tưởng chung của thuật toán tìm kiếm TABU:

Từ một lời giải ban đầu, tìm kiếm TABU sẽ lặp đi lặp lại quá trình tìm kiếm
nhằm cải thiện dần lời giải tốt nhất hiện có (ta sẽ gọi tắt là kỷ lục) của bài toán. Tại mỗi
bước lặp, thuật toán sẽ duyệt trong một miền lân cận (cũng có thể là toàn bộ lân cận)
của lời giải hiện tại để chọn ra lời giải tốt nhất, lời giải này sẽ thay thế cho lời giải hiện
tại ở bước lặp kế tiếp. Mỗi lời giải trong lân cận của lời giải hiện tại được gọi là một lân
cận (neighborhood) của lời giải hiện tại. Quá trình tác động lên lời giải hiện tại để biến
nó thành một lân cận của lời giải hiện tại được gọi là một bước chuyển (move). Điểm
khác biệt căn bản của tìm kiếm TABU so với các thuật toán tìm kiếm địa phương khác
chẳng hạn LS là tại mỗi bước lặp; để tránh việc duyệt trở lại những lời giải đã từng được
khảo sát, tìm kiếm TABU sử dụng một danh sách để lưu trữ một số bước chuyển đã
từng được sử dụng, gọi là danh sách TABU; danh sách này sẽ chứa một số bước chuyển

6
vừa được thực hiện trong một số bước lặp ngay trước đó, các bước chuyển nằm trong
danh sách TABU được gọi là các bước chuyển TABU. Các bước chuyển này sẽ bị cấm
sử dụng lại chừng nào nó còn nằm trong danh sách TABU. Mỗi bước chuyển TABU sẽ
nằm trong danh sách TABU trong khoảng thời gian t bước lặp, sau đó, bước chuyển
này sẽ được loại khỏi danh sách TABU và nó có thể lại được sử dụng. Số t vừa nêu
được gọi là giá trị TABU tenure của bước chuyển. Giá trị t có thể cố định cho tất cả các
bước chuyển hoặc cũng có thể là một số ngẫu nhiên được chọn cho từng bước chuyển.

Tiêu chuẩn xác lập

Một vấn đề có thể xảy ra là một bước chuyển dù đang bị cấm nhưng nó lại có
khả năng cải thiện kỷ lục; do đó để tránh bỏ sót các bước chuyển tốt này, thuật toán tìm
kiếm TABU đưa ra khái niệm tiêu chuẩn mong đợi (aspiration criteria). Tiêu chuẩn
mong đợi thường được áp dụng là: Nếu một bước chuyển TABU có thể cải thiện được
kỷ lục thì bước chuyển này vẫn được chọn và nó sẽ được loại khỏi danh sách TABU.

Ví dụ:

Xem xét một bước chuyển tabu m; nếu nước đi này đưa ra một giải pháp mới tốt
hơn giải pháp tốt nhất được tìm thấy cho đến nay, thì người ta sẽ muốn bỏ trạng thái
tabu của m và chấp nhận nước đi. Điều này có thể được thực hiện bằng cách nói rằng
m (áp dụng cho s) có thể được chấp nhận nếu nó có mức nguyện vọng a(s,m) cho giá
trị tốt hơn ngưỡng A(s,m). Tổng quát hơn, chúng ta có thể quan niệm A(s,m) là định
nghĩa một tập hợp các giá trị ưu tiên (đối với các phần tử) cho một hàm (hoặc ánh xạ)
a(s,m) và nguyện vọng có thể được biểu diễn dưới dạng:

a;(s,m) eA;(s,m) (i = 1, . . . , /). [1]

Sau đó, trạng thái tabu của nước đi m sẽ bị vô hiệu hóa nếu ít nhất một (hoặc một
số cụ thể) các điều kiện [1] được thỏa mãn. Nếu nhiều điều kiện nguyện vọng được thỏa
mãn đồng thời bởi nhiều nước đi, quy tắc lựa chọn phải được xác định.

Bộ nhớ tần số

Bộ nhớ này chứa tổng số lần lặp lại mà mỗi giải pháp đã được chọn kể từ khi bắt
đầu tìm kiếm. Các giải pháp được truy cập nhiều hơn ít có khả năng được chọn lại và
sẽ thúc đẩy các giải pháp đa dạng hơn. Có hai cách tiếp cận chính để đa dạng hóa:
Khởi động lại đa dạng hóa: cho phép các thành phần hiếm khi xuất hiện trong
giải pháp hiện tại bằng cách khởi động lại tìm kiếm từ những điểm này

Đa dạng hóa liên tục: làm sai lệch việc đánh giá các động thái có thể xảy ra với
tần suất của các động thái này. Các nước đi không xuất hiện thường xuyên sẽ có xác
suất được thực hiện cao hơn.

1 số ví dụ về bộ nhớ tần số:

Đo số lần xuất hiện Đo số lần biến đổi

Số lần biến i đã được gán Số lần biến i thay đổi giá


Bài toán nhị phân
giá trị là 1 trị.

Số lần công việc j ở vị trí Số lần công việc i đã trao


p. đổi vị trí với công việc j.
Trình tự công việc Giá trị hàm mục tiêu trung Số lần công việc j đã được
bình khi công việc j chiếm di chuyển đến vị trí trước
vị trí p. đó trong trình tự.

Số lần cung i được thêm


Giá trị hàm mục tiêu trung
vào trong quá trình cải
bình khi cung i là một phần
thiện di chuyển.
Đồ thị của nghiệm.
Số lần cung i bị xóa khỏi
Số lần cung i là một phần
giải pháp hiện tại khi cung
của giải pháp hiện tại.
j được thêm vào.

8
6. Sơ đồ giải thuật

7. Khung của giải thuật


• Khởi tạo lời giải ban đầu s0 ; s = s0 ; sbest = s0 ;

• tabulist = ∅; // danh sách TABU cho bằng rỗng while (điều kiện dừng chưa thỏa)

• M = ∅; // M là tập các bước chuyển

• Với ∀ s’ ∈ Ns (là miền lân cận của s):

- p = move (s, s’);

- if (p ∉ tabulist) M = M ∪ p;

- if (p ∈ tabulist và p thỏa tiêu chuẩn mong đợi) M = M ∪ p;

• Chọn bước chuyển p tốt nhất trong tập M.

- Tạo s’t từ bước chuyển p của giải pháp s;

- s = s’t ;

- if (s’t tốt hơn sbest) sbest = s’t ;

• Cập nhật tabulist;

• Thực hiện đa dạng hóa lời giải;

• Thực hiện tăng cường hóa lời giải


8. Ví dụ giải thuật
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

Các khái niệm

- Tuần (Week): chu kỳ lặp lại của thời khóa biểu, có thể gồm nhiều tuần.
- Ngày (Day): các ngày dạy trong một tuần.
- Tiết học (Period): tiết dạy trong ngày.
- Môn học (Subject): môn học được giảng dạy trong trường.
- Giáo viên (Teacher): giáo viên tham gia vào thời khóa biểu.
- Lớp học (Class): lớp học tham gia vào thời khóa biểu.
- Buổi học (Lesson): buổi học của một lớp do một giáo viên được phân côngdạy
môn nào đó.
- Phòng học (Room): phòng học để sắp lịch cho các buổi học.
- Tài nguyên (Resource): các tài nguyên cung cấp cho thời khóa biểu. Baogồm:
như micro, máy chiếu…
Lớp học và môn học là khác nhau: một giảng viên có thể dạy một môn, ví dụ như
môn Cơ sở dữ liệu là ánh xạ 1-1, còn giảng viên này dạy 3 lớp hiện đang học môn Cơ sở dữ
liệu là ánh xạ 1-m. Vậy trong mô hình ta đã biết trước giảngviên này dạy môn gì, dạy lớp
nào thì bài toán sẽ trở nên đơn giản hơn.

Hình 5 – Mối quan hệ giữa Giảng viên, Lớp học và Môn học

10
Chi tiết hơn ta có thể dễ dàng nhận thấy rằng việc xếp thời khóa biểu là việc sắp các buổi
học có các thông tin gồm:

- Class: lớp nào


- Subject: học môn gì
- Teacher: ai dạy
- Room: học ở đâu
- Week-Day-Period: học khi nào
Nhưng khi sắp lịch thì người giáo vụ, Trưởng/Phó phòng Đào tạo thường sẽ biết trước,
có sẵn thông tin về nghiệp vụ của họ rằng “tuần tiếp theo / tháng tiếp theo / học kỳ tiếp theo
thì lớp X sẽ học môn Y và do giáo viên Z giảng dạy.

Biết trước, không cần xếp lịch Phải xếp lịch


Class Room
Subject Week-Day-Period
Teacher
Trong thực tế thì kết quả của việc sắp lịch sẽ giúp cho họ và giảng viên giảng dạy
biết lớp mình sẽ phụ trách, giúp cho sinh viên các lớp biết mình sẽ học môn gì, ở đâu, thầy
cô nào dạy và mục đích chính là để phục vụ các đối tượng này.

 Rút ra kết luận là việc sắp lịch học cho các lớp và sắp lịch dạy chogiảng viên
là tương đương nhau qua phép ánh xạ trên.

Vậy ta có thể xây dựng mô hình theo 2 cách hoàn toàn tương đương và chỉ còn lại
3 chiều là:

 Lớp học, phòng học, tiết học


 Giảng viên, phòng học, tiết học.
Sau khi tìm hiểu sơ bộ về một số vấn đề trên chúng ta sẽ cùng nhau xây dựng
mô hình bài toán cho trường hợp thứ nhất (lớp học, phòng học, tiết học):
Mô hình của bài toán

T – là tập các giảng viên (gồm giảng viên cơ hữu và giảng viên part time) L – là

tập các buổi học cần xếp lịch

𝐿!(𝑡 ∈ 𝑇) – là tập các buổi học mà giảng viên T dạy

P – là tổng số tiết học có thể sắp lịch trong tuần: P ≤ 5 ca x 6 ngày = 30 ca R – là

tập các phòng học

Rl (l ∈ L) – là số phòng học còn trống có thể sắp lịch được cho buổi học l.

𝑅! (𝑝 ∈ 𝑃) – là số phòng học còn trống có thể sắp lịch được trong tiết học p. Ta có

biến quyết định

𝜕 > 0 − 𝑝ℎò𝑛𝑔 𝑟 𝑐ó 𝑏𝑢ổ𝑖 ℎọ𝑐 𝑙 𝑣à𝑜 𝑡ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑝


𝑋
!!! =
0 − 𝑝ℎò𝑛𝑔 𝑟 𝑘ℎô𝑛𝑔 𝑐ó 𝑏𝑢ổ𝑖 ℎọ𝑐 𝑙 𝑣à𝑜 𝑡ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑝

(r ∈ R, l ∈ L, p ∈ P)

Trong đó giá trị 𝜕 của biến quyết định Xrlk được tính qua các ràng buộc, ta có 2 loại
ràng buộc chính để mô tả buổi học l do giảng viên t dạy vào giờ p tại phòng học r nếu không
thỏa mãn mỗi:

 Ràng buộc cứng: nếu vi phạm 1 tiêu chí + 100 điểm

 Ràng buộc mềm: nếu vi phạm 1 tiêu chí + 1 → 10 điểm [41]

Việc lựa chọn trọng số cho mỗi ràng buộc dựa theo nhu cầu thực tế khi ta xây dựng
hệ thống. Nếu ràng buộc quan trọng, cần ưu tiên cao và có ảnh hưởng lớntới quá trình lập
thời khóa biểu thì ta nên đặt trọng số cao. Còn nếu ràng buộckhông quá quan trọng ta
có thể thiết lập trọng số nhỏ hơn cho phù hợp.

Từ đó ta xây dựng hàm mục tiêu sau đây và nhiệm vụ chính là xây dựng giải thuật
để hàm mục tiêu này đạt MIN:

𝑋!!!
! ! !

12
Qua đây có thể thấy rằng với các trọng số có các giá trị khác thì nhau ngoài việc
giúp ta phân loại mức ưu tiên cho các ràng buộc, việc này còn giúp ta đưa ra chiến lược tốt
hơn để tìm MIN cho hàm mục tiêu bằng cách ưu tiên giải quyết các ràng buộc có trọng số
cao để hàm mục tiêu tiệm cận MIN nhanh hơn.

Cụ thể hơn giải thuật sẽ ưu tiên giải quyết các ràng buộc cứng trước do có trọng số
cao sau đó sẽ sắp xếp thêm để tối ưu kết quả sắp lịch.

4.1 Các ràng buộc cứng

 ! ! 𝑋!!! = 1(𝑙 ∈ 𝐿) – ràng buộc mô tả mỗi buổi học l chỉ học vào 1 tiết
học p trong tuần tại 1 phòng học r cụ thể - Class conflict
 𝑋!!! = 0(𝑟 ∉ 𝑅! , 𝑙 ∈ 𝐿! , 𝑝 ∈ 𝑃) – mô tả việc giáo vụ sẽ không lên lịch cho lớp l
vào tiết học p nếu hiện phòng học r đang có lớp học – Period conflict.
 𝑋!!! = 0 (𝑟 ∉ 𝑅! , 𝑙 ∈ 𝐿! , 𝑝 ∈ 𝑃) – mô tả sẽ không sắp lịch được cho buổi
học l vào tiết học p nếu hiện phòng học r không đủ điều kiện cơ sở vật chất
– Room conflict.
 𝑋!!! = 0 𝑟 ∈ 𝑅! 𝑟 ∈ 𝑅! , 𝑙 ∉ 𝐿! , 𝑝 ∈ 𝑃) – mô tả không thể lên lịch cho buổi
học l vào tiết học p tại phòng học r do giảng viên t hiện đang bận – Teacher
conflict

4.2 Các ràng buộc mềm

 S – là tập các môn học


 𝑆!(𝑡 ∈ 𝑇) – là tập các môn mà giảng viên t có thể dạy
 Rl (l ∈ L) – số phòng học còn trống có thể sắp lịch được cho buổi học l.
 𝑅! (𝑝 ∈ 𝑃) – số phòng học còn trống có thể sắp lịch trong tiết học p.
 𝐿!(𝑡 ∈ 𝑇) – số lớp tối đa mà giảng viên t có thể dạy được (Lt ≤ 30)
 0 ≤ ! ! 𝑋!!! ≤ (𝑡 ∈ 𝑇) – ràng buộc giáo viên có thể không dạy lớp
𝐿!

nào và số lớp dạy không quá Lt (có thể dạy quá do thiếu giảng viên)
 ! ! 𝑋!!! ≤ 𝑅! (𝑝 ∈ 𝑃) – ràng buộc để kiểm tra với một tiết học p thì có
các phòng học nào còn trống
 ! ! 𝑋!!! ≤ 𝑅! (𝑙 ∈ 𝐿) – ràng buộc để kiểm tra với một môn học l thì có
các phòng học nào còn trống
1 − 𝑃𝑇𝑈
 ! 𝑋!!! 4 − 𝑁𝐼𝐼𝑇 (𝑡 ∈ 𝑇, 𝑘 ∈ 𝐾) – mô tả một giảng viên
≤ 3 − 𝑐á𝑐 𝑘ℎó𝑎 𝑛𝑔ắ𝑛 ℎạ𝑛

t dạy một buổi học l không quá số buổi qui định/tuần (có thể tăng hoặc giảm)

4.3 Ví dụ minh họa:


Xét ví dụ sau đây: giảng viên Nguyễn Tiến Cường là giảng viên dạy bộ môn
mạng máy tính, hiện giảng viên này dạy lớp N0902 và yêu cầu dạy tại phòng lab cho lớp
mạng có thiết bị thực hành (ràng buộc cứng) vào thứ 2 thứ 4 hàng tuần (ràng buộc mềm).

Nếu ta xếp được lịch cho giảng viên Cường dạy đúng như yêu cầu thì:

Y=0+0+0=0

Nếu ta chỉ xếp được lịch dạy cho giảng viên Cường dạy ở phòng lab nhưng vào thứ
2 và thứ 5 thì:

Y=0+0+3=3

Nếu ta chỉ xếp được lịch dạy cho giảng viên Cường dạy ở phòng lab nhưng vào thứ
3 và thứ 4 thì:

Y=0+5+0=5

Nếu ta chỉ xếp được lịch dạy cho giảng viên Cường dạy ở phòng lab vào thứ 3 và
thứ 4 thì:

Y=0+5+3=8

Còn trong các trường hợp khác khi không thỏa mãn ràng buộc cứng đều không
được chấp nhận (Y ≥ 100).

Ta có thể dễ dàng thống kê các trường hợp trong ví dụ trên theo bảng dưới
đây:

14
Ràng buộc cứng Ràng buộc Ràng buộc Hàm mục tiêu Kết quả
(phòng lab) mềm (thứ 2) mềm (thứ 4) Y
0 0 0 0 Tốt nhất
0 0 3 3
Chấp nhận
0 5 0 5
được
0 5 3 8
100 0 0 100
100 0 3 103
Loại
100 5 0 105
100 5 3 108
Bảng 1 - Mô tả cách tính của hàm mục tiêu
Lý do ta đưa việc tính toán giá trị Y vào cho biến X ở đây là để tiện cho việc
áp dụng thuật toán tabu search tìm ra giải pháp tối ưu nhất là giải pháp mà trong đó mọi
Xrlp đạt giá trị MIN có thể (thỏa mãn nhiều ràng buộc nhất).

Thuật toán tìm kiếm Tabu sẽ xuất phát từ 1 đáp án bất kỳ, đáp án này có thể tạo nên
bằng cách đơn giản là cứ xếp tuần tự để tìm được một lời giải mà không cần quan tâm
đến chất lượng lời giải, sau đó sẽ tìm kiếm lời giải tốt hơn dựa trênlời giải ban đầu. Cách
khác tốt hơn là đưa ra 1 đáp án sắp xếp mà thỏa mãn cácràng buộc chặt trước, sau đó ta
sẽ cải tiến đáp án cho tốt hơn bằng cách thay đổi việc sắp lịch cho các giảng viên để thỏa
mãn được càng nhiều ràng buộc lỏng càng tốt, nếu sau khi thay đổi mà X rlp mới có giá trị
nhỏ hơn Xrlp cũ thì đương nhiên ta cógiải pháp tốt hơn.

4.4 Hướng tiếp cận cho bài toán


Thuật toán gồm 2 bước chính:

Bước 1: Khởi tạo lời giải ban đầu ngẫu nhiên

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
Bước 1: Khởi tạo lời giải ban đầu ngẫu nhiên
Khởi tạo ban đầu giúp ta tạo ra một danh sách các buổi học được sắp lịch một cách
ngẫu nhiên bằng cách duyệt qua danh sách các lớp, mỗi lớp học một số môn nhất định, mỗi
môn có thể học một vài buổi. Do đó ta sẽ duyệt từng buổi học / từng môn / từng lớp. Quy tắc
khởi tạo giá trị ban đầu hoặc ngẫu nhiên cho lớp học này theo quy tắc như sau:

- Buổi học:
- Lớp: lớp hiện đang duyệt
- Môn học: môn hiện đang xét
- Giờ học, ngày học, phòng học, giáo viên ta sẽ chọn ngẫu nhiên
Sơ đồ khối
Start

ScheduleLesson ← Ø

class ∈ listClasses false End

false
true

module ∈ listModules

true false

module ∈ classlessons

false
true

true

newLesson ← constructInitialLesson()
newLessonclass ← class
newLessonmodule ← module
newLessonroom ← randomRoom()
newLessonhour ← randomHour()
← randomWeekday()
newLessonteacher ← randomTeacher()
Schedulelessons ← newLesson

Hình 6 – Khởi tạo lời giải ngẫu nhiên ban đầu

16
Việc sinh ra lời giải ban đầu ngẫu nhiên này có thể vi phạm nhiều ràngbuộc, thậm
chí không thỏa mãn một số ràng buộc cứng – hard constraints - nhưng lưu ý rằng đây chỉ là
lời giải ban đầu mà từ đó ta sẽ dùng giải thuật tìm kiếm Tabu để tìm ra phương án sắp xếp tối
ưu thỏa mãn tất cả các ràng buộc cứng và cố gắng giảm tối đa số lượng vi phạm các ràng buộc
mềm – soft constraints
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
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.

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)
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ậpsmartSearch =
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

18
True

Hình 7 – Sơ đồ cài đặt giải thuật


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 Hình 8 – Phép chuyển mới

candidate ← Ø
candidateTotalPoint ← scheduleTotalPoint
choice ← randomChoice()

choice is Weekday

true

candidateUnitBefore ← lessonWee kday


candidateUnitAfter ← randomWeekday()

choice is Hour

true false

candidateUnitBefore ← lessonHo ur
candidateUnitAfter ← randomHour()

false

choice is Room

true
false

candidateUnitBefore ← lessonRoom
candidateUnitAfter ← randomRoom()

choice is Teacher false

true

candidateUnitBefore ← lessonTeacher
return candidate End
candidateUnitAfter ← randomTeacher()

20
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*)

Đ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

You might also like