Site logoTungTT

Khóa luận tốt nghiệp và những câu chuyện - Phần 3: Mô hình hóa bài toán

9 phút đọc
1612 từ

1. Mô hình bài toán gốc#

1.1. Biến quyết định#

Gọi E,P,RE, P, R lần lượt là tập môn thi, ca thi, phòng thi.

Biến xếp ca thi. Với mỗi môn thi eEe \in E và ca thi pPp \in P

x(e,p)={1neˆˊu moˆn thi e được xeˆˊp vaˋo ca thi p0ngược lạix(e, p) = \begin{cases} 1 & \text{nếu môn thi } e \text{ được xếp vào ca thi } p \\ 0 & \text{ngược lại} \end{cases}

Biến xếp phòng thi. Với mỗi môn thi eEe \in E và phòng thi rRr \in R

y(e,r)={1neˆˊu moˆn thi e được xeˆˊp vaˋo phoˋng thi r0ngược lạiy(e, r) = \begin{cases} 1 & \text{nếu môn thi } e \text{ được xếp vào phòng thi } r \\ 0 & \text{ngược lại} \end{cases}

Biến liên kết ca thi - phòng thi. Với mỗi eEe \in E, pPp \in P, rRr \in R

z(e,p,r)={1neˆˊu moˆn thi e được xeˆˊp vaˋo ca thi p vaˋ phoˋng thi r0ngược lạiz(e, p, r) = \begin{cases} 1 & \text{nếu môn thi } e \text{ được xếp vào ca thi } p \text{ và phòng thi } r \\ 0 & \text{ngược lại} \end{cases}

Biến zz liên hệ với x,yx, y qua z(e,p,r)=x(e,p)y(e,r)z(e, p, r) = x(e, p) \cdot y(e, r), tuyến tính hóa bằng

{z(e,p,r)x(e,p)+y(e,r)x(e,p)z(e,p,r)y(e,r)z(e,p,r)eE,pP,rR\begin{cases} z(e, p, r) \leq x(e, p) + y(e, r) \\ x(e, p) \leq z(e, p, r) \\ y(e, r) \leq z(e, p, r) \end{cases} \quad \forall e \in E, p \in P, r \in R

1.2. Các ràng buộc#

  • Mỗi môn thi xếp vào đúng một ca thi
pPx(e,p)=1,eE\sum \limits_{p \in P} x(e, p) = 1, \quad \forall e \in E
  • Tại một ca thi, mỗi sinh viên thi tối đa một môn (SS: tập sinh viên, EsE_s: các môn thi của sinh viên ss)
eEsx(e,p)1,sS,pP\sum \limits_{e \in E_s} x(e, p) \leq 1, \quad \forall s \in S, p \in P
  • Môn thi không xếp vào ca thi không phù hợp (PeP_e: các ca không phù hợp với môn ee)
x(e,p)=0,eE,pPex(e, p) = 0, \quad \forall e \in E, p \in P_e
  • Thời gian ôn tập tối thiểu (kek_e: số tín chỉ môn ee, f(k)f(k): thời gian ôn tối thiểu của môn kk tín chỉ, P(p,f(ke))P(p, f(k_e)): các ca đứng trước pp không quá f(ke)f(k_e) ca)
x(e,p)+qP(p,f(ke))x(e,q)1,sS,eeEs,pPx(e, p) + \sum \limits_{q \in P(p, f(k_e))} x(e', q) \leq 1, \quad \forall s \in S, e \neq e' \in E_s, p \in P
  • Môn thi không xếp vào phòng không phù hợp (ReR_e: các phòng không phù hợp với môn ee)
y(e,r)=0,eE,rRey(e, r) = 0, \quad \forall e \in E, r \in R_e
  • Đủ chỗ cho môn thi (crc_r: sức chứa phòng rr, qeq_e: số sinh viên đăng ký môn ee)
rRcry(e,r)qe,eE\sum \limits_{r \in R} c_r \cdot y(e, r) \leq q_e, \quad \forall e \in E
  • Một phòng chỉ phân cho tối đa một môn tại một ca thi
eEz(e,p,r)1,rR,pP\sum \limits_{e \in E} z(e, p, r) \leq 1, \quad \forall r \in R, p \in P

1.3. Hàm mục tiêu#

Gọi g(e)g(e) là thời gian ôn tập lý tưởng của môn ee, và t(e,e,n)t(e', e, n) là biến nhị phân thỏa mãn

t(e,e,n)={1neˆˊu moˆn thi e xeˆˊp trước moˆn thi e đuˊng n ca0ngược lạit(e', e, n) = \begin{cases} 1 & \text{nếu môn thi } e' \text{ xếp trước môn thi } e \text{ đúng } n \text{ ca} \\ 0 & \text{ngược lại} \end{cases}

tuyến tính hóa mối quan hệ của biến này với các biến quyết định như sau

x(e,p)+x(e,p+n)1+t(e,e,n),pP,p+nPx(e', p) + x(e, p + n) \leq 1 + t(e', e, n), \quad \forall p \in P, p + n \in P

(với mọi sSs \in S, eeEse \neq e' \in E_s, f(ke)n<g(e)f(k_e) \leq n < g(e)).

Thành phần 1 - hạn chế thời gian ôn tập ngắn. Với hằng số γ>1\gamma > 1, mỗi lần môn ee' xếp trước môn ee đúng n<g(e)n < g(e) ca, hàm phạt tăng thêm γg(e)n\gamma^{g(e) - n} - thời gian ôn càng ngắn thì phạt càng nặng

minimizesSeee,eEsn=f(ke)g(e)1γg(e)nt(e,e,n)\text{minimize} \quad \sum \limits_{s \in S} \sum \limits_{\substack{e \neq e' \\ e, e' \in E_s}} \sum \limits_{n = f(k_e)}^{g(e) - 1} \gamma^{g(e) - n} \cdot t(e', e, n)

Thành phần 2 - hạn chế môn nhiều tín chỉ vào ca cuối ngày. Với PlP_l là tập các ca cuối ngày, môn thi được coi là nhiều tín chỉ nếu keσk_e \geq \sigma

minimizepPleEkeσkeqex(e,p)\text{minimize} \quad \sum \limits_{p \in P_l} \sum \limits_{\substack{e \in E \\ k_e \geq \sigma}} k_e \cdot q_e \cdot x(e, p)

Hàm mục tiêu tổng hợp. Kết hợp 2 thành phần trên với trọng số α,β0\alpha, \beta \geq 0

minimizeαsSeee,eEsn=f(ke)g(e)1γg(e)nt(e,e,n)+βpPleEkeσkeqex(e,p)\text{minimize} \quad \alpha \sum \limits_{s \in S} \sum \limits_{\substack{e \neq e' \\ e, e' \in E_s}} \sum \limits_{n = f(k_e)}^{g(e) - 1} \gamma^{g(e) - n} \cdot t(e', e, n) + \beta \sum \limits_{p \in P_l} \sum \limits_{\substack{e \in E \\ k_e \geq \sigma}} k_e \cdot q_e \cdot x(e, p)

2. Phá tính đối xứng#

Vấn đề: Nhìn lại biến y(e,r)y(e, r) ở trên - solver phải quyết định chính xác phòng nào trong số RR được dùng cho môn ee. Nhưng nếu 2 phòng r1,r2r_1, r_2 cùng loại, cùng sức chứa thì việc dùng r1r_1 hay r2r_2 cho môn ee không khác gì nhau về mặt kết quả - đổi chỗ 2 phòng này cho nhau ta vẫn có đúng một lịch thi đó. Solver không biết điều đó, nó vẫn coi kk phòng giống hệt nhau là k!k! phương án khác nhau và phải xét hết - không gian tìm kiếm phình to một cách vô nghĩa.

Giải pháp: Thay vì hỏi "phòng nào", ta chỉ cần hỏi "bao nhiêu phòng của một nhóm". Gọi một nhóm phòng là tập các phòng cùng loại, cùng sức chứa; GG là tập các nhóm phòng, qgq_gcgc_g lần lượt là số phòng và sức chứa của nhóm gg. Thay vì y(e,r)y(e, r), z(e,p,r)z(e, p, r), ta dùng 2 biến nguyên không âm

u(e,g)=soˆˊ phoˋng nhoˊg phaˆn cho moˆn thi eu(e, g) = \text{số phòng nhóm } g \text{ phân cho môn thi } e v(e,p,g)=soˆˊ phoˋng nhoˊg phaˆn cho moˆn thi e vaˋo ca thi pv(e, p, g) = \text{số phòng nhóm } g \text{ phân cho môn thi } e \text{ vào ca thi } p

Như vậy, mối liên hệ giữa các biến mới là v(e,p,g)=x(e,p)u(e,g)v(e, p, g) = x(e, p) \cdot u(e, g), tuyến tính hóa bằng

{v(e,p,g)+qgqgx(e,p)+u(e,g)qgx(e,p)v(e,p,g)u(e,g)v(e,p,g)eE,pP,gG\begin{cases} v(e, p, g) + q_g \leq q_g \cdot x(e, p) + u(e, g) \\ q_g \cdot x(e, p) \leq v(e, p, g) \\ u(e, g) \leq v(e, p, g) \end{cases} \quad \forall e \in E, p \in P, g \in G

Viết lại ràng buộc phòng thi. Ba ràng buộc về phòng thi ở Mục 1.2 được viết lại thành

u(e,g)=0,eE,gGeu(e, g) = 0, \quad \forall e \in E, g \in G_e gGcgu(e,g)qe,eE\sum \limits_{g \in G} c_g \cdot u(e, g) \leq q_e, \quad \forall e \in E eEv(e,p,g)qg,gG,pP\sum \limits_{e \in E} v(e, p, g) \leq q_g, \quad \forall g \in G, p \in P

3. Mô hình hoàn chỉnh#

Gộp toàn bộ biến, ràng buộc và hàm mục tiêu ta có mô hình gốc của bài toán là

minimizeαsSeee,eEsn=f(ke)g(e)1γg(e)nt(e,e,n)+βpPleEkeσkeqex(e,p)subject topPx(e,p)=1,eEeEsx(e,p)1,sS,pPx(e,p)=0,eE,pPex(e,p)+qP(p,f(ke))x(e,q)1,sS,eeEs,pPu(e,g)=0,eE,gGegGcgu(e,g)qe,eEeEv(e,p,g)qg,gG,pPv(e,p,g)+qgqgx(e,p)+u(e,g),eE,pP,gGqgx(e,p)v(e,p,g),eE,pP,gGu(e,g)v(e,p,g),eE,pP,gGx(e,p)+x(e,p+n)1+t(e,e,n),p,p+nP,sS,eeEs,f(ke)n<g(e)x(e,p){0,1},eE,pPu(e,g),v(e,p,g)Z0,eE,pP,gGt(e,e,n){0,1},sS,eeEs,f(ke)n<g(e)\begin{aligned} \text{minimize} \quad & \alpha \sum \limits_{s \in S} \sum \limits_{\substack{e \neq e' \\ e, e' \in E_s}} \sum \limits_{n = f(k_e)}^{g(e) - 1} \gamma^{g(e) - n} \cdot t(e', e, n) + \beta \sum \limits_{p \in P_l} \sum \limits_{\substack{e \in E \\ k_e \geq \sigma}} k_e \cdot q_e \cdot x(e, p) \\[0.9em] \text{subject to} \quad & \sum \limits_{p \in P} x(e, p) = 1, \quad \forall e \in E \\[0.6em] & \sum \limits_{e \in E_s} x(e, p) \leq 1, \quad \forall s \in S, p \in P \\[0.6em] & x(e, p) = 0, \quad \forall e \in E, p \in P_e \\[0.6em] & x(e, p) + \sum \limits_{q \in P(p, f(k_e))} x(e', q) \leq 1, \quad \forall s \in S, e \neq e' \in E_s, p \in P \\[0.6em] & u(e, g) = 0, \quad \forall e \in E, g \in G_e \\[0.6em] & \sum \limits_{g \in G} c_g \cdot u(e, g) \leq q_e, \quad \forall e \in E \\[0.6em] & \sum \limits_{e \in E} v(e, p, g) \leq q_g, \quad \forall g \in G, p \in P \\[0.6em] & v(e, p, g) + q_g \leq q_g \cdot x(e, p) + u(e, g), \quad \forall e \in E, p \in P, g \in G \\[0.6em] & q_g \cdot x(e, p) \leq v(e, p, g), \quad \forall e \in E, p \in P, g \in G \\[0.6em] & u(e, g) \leq v(e, p, g), \quad \forall e \in E, p \in P, g \in G \\[0.6em] & x(e', p) + x(e, p + n) \leq 1 + t(e', e, n), \quad \forall p, p + n \in P, s \in S, e \neq e' \in E_s, f(k_e) \leq n < g(e) \\[0.6em] & x(e, p) \in \{0, 1\}, \quad \forall e \in E, p \in P \\[0.6em] & u(e, g), v(e, p, g) \in \mathbb{Z}_{\geq 0}, \quad \forall e \in E, p \in P, g \in G \\[0.6em] & t(e', e, n) \in \{0, 1\}, \quad \forall s \in S, e \neq e' \in E_s, f(k_e) \leq n < g(e) \end{aligned}

Đây là mô hình mô tả đúng và đủ bài toán xếp lịch thi. Khi viết xong mô hình này mình tràn đầy hi vọng vào kết quả khi đưa vào máy tính để giải, và đó cũng chính là lúc vấn đề lớn nhất của nghiên cứu xuất hiện. Hãy đọc phần tiếp theo để biết vấn đề đó là gì và mình đã giải quyết nó như thế nào nhé.

Đọc tiếp Phần 4