You are on page 1of 114

THI KHO BIU A.

Li cm n
Bi ton thi kho biu l mt bi ton thc t c t ra t kh lu v cha c li gii thc s ti u. Trong khun kh bi bo co bi tp ln ny chng em cng khng tham vng s gii quyt c tt c mi vn trong thc t m chng em ch c gng thc hin c nhng g trong kh nng c th ca chng em. V trong bo co ny chng em xin chn thnh cm n s gip v h tr ca tt c mi ngi bn b, thy c v nhng ngi khc ng gp cho chng em c th hon thnh chng trnh. Trong xin c bit cm n nhng c vn v tng ti ca : Thy Nguyn Thanh Thu (Gio vin b mn Tr Tu Nhn to, trng b mn H Thng Thng Tin i Hc Bch Khoa H Ni) K S Huy Lc (Team Leader, trng phng Union cty Tinh Vn) S h tr k thut v thut ton ca : Thy gio Nguyn Trung Huy (Khoa Ton ng Dng) K S Huy Lc H tr ti liu v tm hiu yu cu: Thy gio Vn Uy (gio vin b mn cng ngh phn mm i Hc Bch Khoa H Ni) V chng em nhm Sinh Vin Thc Hin: Nguyn c Khnh Nguyn Th Xun Hoa o Th Bch Giang

B.Tm hiu chung


1. o to nc ngoi & Cuc thi Time Tabling ca Hip hi Metaheuristics
i vi mi ngi chng ta hin nay th my tnh khng cn phi l mt ci g qu gh gm m chng ta khng th hiu c. Khng nhng th ngy cng nhiu cc ng dng ca my tnh c a vo hin thc, phc v cho cuc sng thng ngy ca chng ta. Vi my tnh hin ti chng ta c th qun i nhng lo lng khi phi tnh ton vi cc con s ln, chng ta c th tit kim c nhiu thi gian hn, khng phi lo lng nh cc con s nhc u m thay vo chng ta cho my tnh c th tnh h. Xt v mt mt no chng ta c th ni rng my tnh khng thng minh hn chng ta khng nhng th chng ta cn c th n l chng dt hn b no con ngi chng ta rt nhiu. Tuy nhin ci mnh m my tnh c th thc hin hn c chng ta l tc tnh ton nhanh v kh nng nh. Chnh v th c rt nhiu chng trnh h tr qun l cc cng tc o to c thc hin v em li hiu qu to ln i vi ngnh gio dc. Tuy nhin cho n hin nay th mt chng trnh c th tr gip cc gio vin c th rt ngn thi gian trong cng vic xp lch hc tp l cha c. Vi khun kh ca mt bi tp ln b mn tr tu nhn to chng em nhm sinh vin tin1 K45 i Hc Bch Khoa hy vng s c th em nhng g hc hi c t trn lp, sch v v t cc thy gio bin thnh hin thc, thc s hnh thnh mt phn mm nho nh c kh nng tr gip ti a c th cho cc gio vin phi lm cng vic nhm chn l phn phi lch hc tp v cc ti nguyn lin quan. im kho st u tin ca chng em l cuc thi timetabling do hng Metaheuristics thc hin. hng Metaheuristics l mt t chc th gii chuyn cung cp cc thut ton ton hc, cc gii thut mo c tm hiu k cng v ci t y , thc thi c. V 18 thng 11 nm 2002 t chc ny xut mt bi ton m t lu khng my ai gii quyt n ni n chn. l bi ton lp thi kho biu. V chng trnh gio dc mi ni mi khc thnh th t chc Metaheuristics a ra mt mu d liu chun cho qu trnh xp lch nh sau: Tp hp cc s kin cn xp lch trong 45 khong thi gian ca mt tun Mt tun theo gio trnh ca nc ngoi th s hc 5 ngy v hai ngy cui tun l ngh hc v cc sinh vin c th tham gia cc hot ng ngoi kho khc, v mi mt ngy th mi sinh vin s hc 9 tit lin tip. Trong iu ng ch l thc cht ch c 8 tit l cho php thc s ch khng phi l c 9 tit. Trong 9 tit k trn th

c 1 tit l tit cui trong ngy (ca ti) v qu trnh xp lch s b coi l c li nu nh chng trnh xp lch xp cho mt s kin no sy ra trong thi gian tra ny. Tuy nhin nu khng cn kh nng no khc th vn phi dng khong thi gian khn my ph hp ny xp lch. Mi tit di l 1h. v qu trnh xp lch ny l qu trnh xp cho 1 tun, c mi tun qu trnh ny li c thc hin thm 1 ln na. Tp hp th hai chnh l tp hp cc phng m cc s kin c th t ch. Trong cc phng c dung lng khc nhau Tp hp cc sinh vin, mi sinh vin ng k tham gia tp cc s kin cho trc. Tp hp th 4 l cc dng c hc tp. nc ta qu trnh hc tp khng nht thit cn quan tm n vn v dng c hc tp m qu trnh hc ch ch yu l do cc gio vin ging bi trn lp ch khng cn n phng tin sinh vin c th thc hnh. Tuy nhin vi nc ngoi th iu ny l kh quan trng. Mt thi kho biu gi l chp nhn c nu nh c xp sao cho cc s kin c th xp vo phng, thi im thch hp sao cho cc li sau y khng b vi phm: Rng Buc cng (li nghim trng) Khng sinh vin no tham gia 2 s kin trong cng 1 thi im Phng rng c th cha tt c cc sinh vin ca s kin v cc yu cu v dng c i vi mi phng l c tho mn. Mt s kin t ti mt phng trong mt thi im Rng buc mm (li c th th chp nhn c) Sinh vin phi hc vo ba tit cui ngy ( y ngi ta qui nh rng tit th 9 l ca ti v vi phm ny cng kh chp nhn c) Sinh vin phi hc 2 lp lin tip nhau Sinh vin ch c 1 tit trong 1 ngy Vi bi nh trn sau 2 thng th hip hi Metaheuristics nhn c rt nhiu bi gii gi v. V tp hp cc bo co thut ton, phng n chnh l c s u tin v thut ton ca chng em.

2. o to trong nc
l m t v bi ton thi kho biu cc trng i hc nc ngoi cn vi cc trng i hc ti Vit Nam chng ta th thc cht c nhiu im khc bit so vi h. Th nht chng ta khng hc theo tng tit hc ring bit m l hc theo nhm cc tit lin tip. Vi chng ta ai tng l hc sinh cng u bit rng chng ta hc cc mn hc theo nhm 2, 3, 4 tit lin tip ch khng phi l ch 1 tit. V chng ta c mt bng m t s qua v mt thi kho biu ca mt trng cp 3 tiu biu di y: Chng ta bit rng vi mt trng cp 3 nh th chng ta c qung 8 lp cho tng nm 10A, 10B, 10C, 10H, 10I. tng t nh th chng ta s c qung 8 lp 11

v 8 lp 12, tng cng chng ta s c 3x8 = 24 lp. Tng ng vi 24 lp ny l mt tp hp cc gio vin. S lng cc gio vin l mt con s rt bin ng kh m c th on c chnh xc xem gi tr l bao nhiu. Tuy nhin chng ta bng tnh tay c th on c con s ti thiu. Nu chng ta cho rng cc gio vin c th ti nng c th dy c tt c cc mn hc trong chng trnh o to th nh th chng ta c th thy l ti thiu s c 24 gio vin tng ng. V nh vy chng ta c th chc chn rng s lng gio vin l ln hn so vi s lp, tham gia. Tip theo tng ng vi s lng gio vin chng ta s c ti thiu 24 phng hc c th cha tt c cc hc sinh vo . Nh vy th vi mt con s nho nh 24 gio vin, phng hc v gio vin th cng vic xp lch ca phng o to cho mt trng cp 3 nh th ny l kh vt. Bi v chng ta bit c th thc hin mt bi ging th chng ta cn c 4 yu t: T chc ti phng no Lp no hc Gio vin no dy dy mn g, bi ging th bao nhiu. Bao nhiu tit hc lin tip Nh th th trung bnh trong 1 tun chng ta s c ti a l 36 tit (6 ngy mi ngy 6 tit). Nu chng ta coi rng trung bnh mi lp trong 1 tun hc 30 tit. V trung bnh l mi nhm tit (mi s kin) l 3 tit lin tip th chng ta s c khong 30 / 3 * 24 = 240 s kin. Thc s y l mt con s qu nh so vi con s thc t cc trng i hc. Vi mt trng i hc th con s lp khng ch thu nh c 24 m c th ln n 100 hoc nhiu hn na.

C.Cc dng khc nhau ca cc trng trnh o to i hc


C rt nhiu dng khc nhau ca cc chng trnh o to i hc. C trng s th hin o to theo m hnh tn ch. Cn cc trng khc li o to theo c ch nin ch. C trng th o to theo c ch na tn ch. V vi mi c ch o to chng ta li c mt dng khc cho cng vic lp thi kho biu.

1. o to theo tn ch
o to theo tn ch l cch o to theo phong cch ging cc nc phng ty. l cho php cc sinh vin c th tu chn chng trnh o to, chng trnh hc tp trong nm hc cho chnh mnh. Tuy nhin vn c nhng gii hn c th. Do chng trnh o to i hc dng ny hin ti cha c Vit Nam

nn chng ta khng cp su vo vn ny. Bi v cng vic o to hon ton theo tn ch c rt nhiu yu cu, nht l v c s h tng, v cng ngh v nhiu iu kin khc chng ta mi c th thc hin cng tc o to theo cch ny.

2. o to theo bn tn ch
Chng trnh o to tn ch ny l mt chng trnh o to c ng dng ti Vit Nam v trng s dng phng php ny c th nu tn ra y chnh l i hc Xy Dng H Ni. Qui cch o to ca trng tun theo nguyn tc sau y: Chng trnh hc ca mi sinh vin bao gm 2 phn, l phn bt buc v phn t chn. Phn bt buc l cc mn bt buc trong hc k sinh vin phi hon thnh v tr im li cho trng. Phn th hai l phn t chn phn ny th nh trng s a ra mt s mn hc m sinh vin c th chn tu theo s thch v kh nng ca mi sinh vin . Thng thng th phn bt buc (cc mn cng) s nhiu hn mt cht so vi cc mn khng bt buc. Thng thng th tron mt hc k c 7 mn hc th qung 4 mn bt buc v 3 mn cn li l t chn cho mi sinh vin. Tuy nhin cng c th rng s mn m sinh vin chn trong k l 4-5 tc l t l bt buc / khng bt buc s l 4/4 hoc 5/4 hoc l 3/4 tu theo sinh vin. V nh th mt sinh vin c th xc nh cho mnh ra trng sm hay mun tu vo kh nng ca chnh mnh. Sau qu trnh t chn ca mi sinh vin th tip n l qu trnh thu thp y thng tin v cc mong mun ca mi sinh vin v tp hp cc sinh vin li v bt u qu trnh phn lp. Trong cng tc phn lp i vi qu trnh la chn ca sinh vin nh th ny nu khng c s h tr ca my tnh th qu tht l mt cng vic v cng gian nan v vt v. V trong qu trnh ny th thc cht c s an xen sinh vin gia cc lp vi nhau ch khng phi l cc lp ring bit v lng t ho, n v ho cc lp , cc nhm sinh vin hc sao cho cng vic lp lch l v cng kh khn. Sau qu trnh hnh thnh lp (nhm cc sinh vinc cng chung s thch hc mt mn no ) l qu trnh cn i li cc n xin. V d nh cc gio vin xc nh trc rng trong k hc ny s c 3 lp t chn hc mn trit tuy nhin s SV ng k mn trit li nhiu qu nh th s c mt s thay i. l cc gio vin phi thng bo li vi cc sinh vin ca mnh rng mt s ngi ng k chng trnh hc qu mun v nh trng kho s iv vi mn hc ny. Thc cht qu trnh ny yu cu cn i gia cc mn hc sao cho hp l vi s phng v s tit thc ti ca trng. Bi l cc ti nguyn v s gio vin v phng hc dnh cho sinh vin khng phi l v hn, v c th tho mn c tt c mi yu cu. Vi u ra l mt tp hp cc lp c nh trc nh th th cng vic xp lch cng khng h n gin v l rng cc sinh vin tham gia trong qu trnh xplch y l ring bit ch khng theo n v lp. V khi s sinh vin ln n con s vi trm th s an xen l v cng ln v tm mt thi kho biu c th hp mi b l c mt vn . Vn ln nht sy ra l nu t mn A hc ti thi im T ca ngy N th liu tt c cc sinh vin

trong lp A tham gia mt mn no ti thi im T ca ngy N ny cha. V nhiu khi l qu trnh khng th tm c li gii thch hp!

3. o to nin ch
y l loi hnh o to c s dng nhiu nht trong nc ta hin nay l quy trnh o to m chng trnh o to c nh trc bi phng o to. V cc mn trong mt hc k l khng thay i nhiu theo thi gian. Hoc chng c thay i th thay i cht t. Chng trnh o to s thay i nu nh trng i hc mun thay i cht t trong cng tc o to inh hng ca mnh i vi tng th h sinh vin. V d nh kho 1,2,3 th trng o to theo mt chng trnh nhng bt u t kho th 4 tr i chng hn cc gio vin mun rng cc sinh vin ca mnh khi ra trng s c thm nhiu hn kh nng thc hnh hoc suy lun th trong chng trnh dnh cho kho 4 s c mt cht thay i p ng vi nhu cu . Tuy nhin qu trnh thay i ny l khng nhiu v c th thy ngay trng ta cc chng trnh o to t kho 41, 42 .. n 45 l khng bin ng g ln. Cc mn hc cng nh s trnh. Nh vy chng ta c th ni rt ngn gn rng o to theo nin ch l qui trnh o to m cc chng trnh hc tp s c a xung t phng o to. Cng vic xp lch s tu thuc vo chng trnh o to ny. Tuy nhin y cng c mt s vn sy ra l. Trong trng hp khi m gio vin khng hoc l cc phng khng , hoc cc dng c hc tp khng th chng trnh o to s phi thay i i cht l mt vi lp no s khng hc chng trnh o to chnh m s phi hc chng trnh o to ph, chng trnh o to thay th. Chng trnh o to ny phi m bo cc tiu ch l kin thc cho sinh vin ra trng v ph hp vi iu kin v ti nguyn gio vin cng nh phng hc hin ti ca trng.

4. Tng kt
Nu chng ta nhn li ton b cc chng trnh o to trn th chng ta s thy cc phong cch, quy tc t chc o to nc ta l rt a dng v phong ph v khng c mt chun no c. i vi mi trng phi xp lch hc tp theo mt qui tc khc nhau. Thnh th cc chng trnh xp lch t ng l gn nh kh c th ng dng cho mt s ln cc trng hp. iu ny cng l kh khn i vi cc trng i hc v trung hc khc nc ngoi ch khng phi ch l vn vi nc ta. Thc cht nc ngoi vi iu kin v tin hc ha tt hn chng ta rt nhiu th qu trnh lp lch t ng hon ton cng ch chim mt con s rt nh qung 2% cn li th cc trng s lp lch theo kiu bn t ng tc l c s tr gip ca my tnh l qung 5% s cn li cng vic lp lch vn cn hon ton lm bng tay hoc bng kinh nghim ca nhng ngi chuyn mn. V i vi cc trng i hc v cao ng ti Vit Nam th nhiu khi l vn tin hc ho cn cha gnh ti ni g ti chuyn c cn xp lch t ng hay khng? Ni

nh th th thc s cng hi qu nhng cho n hin nay th (theo nhng thng tin chng em nhn c) th ch c mt ngi (khng r l sinh vin hay gio vin) trong thnh ph H Ch Minh thc hin thnh cng chng trnh qun l gio dc trong trng i hc. V c l phong cch gio dc ca min nam v min bc nc ta cng khng ging nhau nn cho n thi im hin ti th chng trnh vn cha c p dng ti min bc. V mt thng tin na l nm 2003 th gii thng tin hc tui tr ln th hai ca i Hc Bch Khoa H Ni trao cho Trng Nguyn Ngc C Tin 2 K46. Tuy nhin cng mi ch l l mt chng trnh lp thi kho biu cho cc trng ph thng ch khng phi l TKB cho cc trng i hc v cao ng.

5. Kiu o to cun chiu v ng u theo k:


y l mt kiu o to c kh nhiu trng i hc ti Vit Nam thc hin. Kiu o to ny c th m t nh sau: Vi mi mt chng trnh o to th mi mn hc s c hc trong mt khong thi gian lin tip ca mt k. C th c th rng mi mn hc s ko di trong khong 1 thng iu c ngha rng mn hc c th t hn hoc nhiu hn tu theo mn hc l di hay ngn. Sau qu trnh hc th cc sinh vin s phi thi ngay. Kiu o to ng u theo k th cc mn hc khng phi hc dn vo mt khong thi gian ri thi m chia u ra. Tc l trong 1 tun c th th sinh vin s phi hc nhiu hn 1 mn ch khng phi l c tun u hc mt mn nh phong cch cun chiu. Nh th nhn v tng quan th hc theo kiu o to cun chiu s lm cho cc sinh vin mt mi hn trong giai on thi. V h khng phi thi dn vo mt khong thi gian xc nh. M qu trnh thi s c chia u ra trong 1 nm. Tuy nhin xt v gc tip thu kin thc th c v nh phong cch o to ny sinh vin s kh tip thu hn l phng cch chia u. Bi v ai cng bit rng hc c tun ch c mt mn th cng hi nhc u, v 6 tit trong 1 ngy u l 1 mn hc th cng qu l kh nng.

D.Cc trng i hc
Chng ta xt 5 in hnh o to vi cc phong cch khc bit hon ton. l 5 phong cch hon ton khc nhau l i Hc Bch Khoa, i Hc Lut v i Hc Ngoi Ng, i Hc Xy Dng, i Hc An Ninh.

1.i Hc Xy Dng
C th tham kho phn trn, vi qui trnh lp thi kho biu theo cc yeu cu kh phc tp ca mt trng o to theo tn ch

2.i Hc Ngoi ng:


Th nguyn tc o to khng ging cc trng i hc khc m qu trnh o to l o to theo phong cch cun chiu. Vi phong cch ny th yu cu xp lch (xp thi kho biu t ng) s c nhiu xo trn v chng ta yu cu xt qu trnh dy ca gio vin trong khong thi gian di. V yu cu cn l tm v hi xem trong khong thi gian ny th gio vin dy lp no hay khng. Khong thi gian m chng ta ni y s khng chi tit ra tng tit hc trong ngy na m ch cn chnh xc n cc ngy. Cn vi phong cch hc ng u theo k th chng ta cn xc nh chnh xc xem l tit my v trong thi gian no.

3.i Hc Bch Khoa & i Hc Lut & i Hc Kinh T:


in hnh theo phong cch o to theo nin ch. c im : DHBK l mt trng i hc ln v do th cc yu cu v c s vt cht c th coi l khng cn phi suy ngh nhiu lm. Tc l ti nguyn phng hc v dng c l c kh y . V vn l lm sao xp lch cho cc gio vin ph hp vi yu cu xp l chnh. Sau cc yu cu nh trc ca gio vin l tnh mm do v cc yu cu mm, cc rng buc mm. Chnh v DHBK l mt trng ln nn nguyn tc o to ca DHBK cng khc, khi xp lch th n v hc tp nh nht khng phi l tng c nhn sinh vin m cng khng phi l lp m n v l nhm lp. Nhm lp y chng ta nn quan nim chnh l lp m. Trc ht hiu th no l mt lp m chng ta hy nh ngha th no l mt lp c nh. Lp c nh l n v bao gm mt s c nh cc thnh vin (sinh vin). V mi sinh vin trc thuc mt lp, khng thuc hai. Mt lp m bao gm c th l mt lp nh v cng c th bao gm nhiu hn mt lp nh l 2, 3, 4hay 5 chng hn. V chng ta c rt nhiu v d thc t. l trong cc k i cng th qu trnh ghp lp ca chng ta l 5 lp ghp li lm 1 tuy nhin n giai on chuyn ngnh th s lp hnh thnh nn mt nhm lp khng cn l 5 na m chuyn thnh 3 lp ghp li lm 1 vi khoa CNTT chng hn. Nh th thc cht chng ta c th ghp 1, 2, 3, 4, 5 lp c nh li thnh mt lp m. i vi cc trng i hc khc th khi nim lp m ny quay li thnh mt lp con, v c th thy ngay trong trng i hc Lut. Quy m DHBK cng l qui m ln, vi u vo l 3000 Sinh Vin trung bnh trong mt kho th vi 5 kho trong 1 nm chng ta s c khong 5 * 3000 = 15,000 sinh vin. Vi trung bnh mi lp khong 40 sinh vin th chung ta s c 375 lp hc. Tuy nhin con s thc t s ln hn nh vy tc l vo khong 400 lp. Vi qui m ca i Hc Lut th qui m ca n nh hn kh nhiu. vi khong 1000 sinh vin trong 1 nm hc th s lp ca i hc Lut s l qung 400. Mt im khc bit khc kh ln gia hai trng l vi i Hc Bch Khoa chng ta quan tm n lp m (nhm lp). Cn i Hc Lut th chng ta

quan tm n lp ch khng quan tm n lp m. Thc ra th chung ta gi n l lp m th vn c tuy nhin nh th th c v hi tn km v mi lp m mc nhin ch c mt lp. Qu trnh xp lch th gia hai trng i Hc Bch Khoa v i Hc Lut c mt s khc bit ln l trng i Hc Bch Khoa th chng ta ch cn xp lch cho tun u tin v sau th nhn ln cho 12 tun cn li th l xong. Tuy nhin i vi i Hc Lut th tun no s phi xp lch cho tun . V qu trnh xp lch chng ta bt u qui nh ti y chnh l qu trnh xp lch cho tng tun. i Hc Kinh T th trng ny c quy m trung bnh v s lng sinh vin cng khng phi l mt con s nh. Vi u vo mi nm 3000 sinh vin tng s 4 nm hc th i Hc Kinh T c s Sinh Vin nm trong khong 12000. V nh th tng ng chng ta s c s lp l 300 330 lp, tu. Con s ny khng lm chng ta hong v thc t th qu trnh xp lch cho i Hc Kinh T l d nht v nguyn tc ca i Hc Kinh T nh sau. Cc lp s hc n, khng theo qui tc lp m, v mi lp xc nh mt phng v nh th c ngha l chng ta khng cn phi xp lch theo phng cho cc nhm tit (cc s kin) na.V nh th th thc cht qu trnh xp lch cho trng i Hc Kinh T ch n gin l qu trnh phn b ti nguyn gio vin cho cc s kin. i vi i Hc Bch Khoa th qu trnh din ra kh hn mt cht l v cc lp s khng hc n nh 1 phng m cc phng c th thay i. L d nhin l nu c thay i th nhng s thay i ny cng nn t thi gim s mt mi ca cc sinh vin. Ch trn thc t nu cc sinh vin phi hc 2 mn lin tip trong ngay m khong cch gia cc phng hc l 700m hoc ln hn th cng nhn l cng c kh nhiu ngi s b hc v l do .

4.i hc An Ninh
Trng i Hc An Ninh ny th c nhiu im khc bit hn hn so vi cc trng i Hc khc. Cc sinh vin trong i Hc Anh Ninh cng u c mt chng trnh o to c a xun t phng o to i hc. (o to theo nin ch) . Tuy nhin khng phi l chnh xc mt thy s m nhim mt mn hc nh cc trng i Hc khc. M mi thy i Hc An Ninh thc cht ch c kh nng ging dy mt s bi ging no trong mn hc ca lp m thi. Nh th c rt nhiu vn sy ra. l hin tng trong mt tun c th mt lp hc mt mn vi 2 gio vin tham gia ging dy. Ch khng nht thit l 1 gio vin vi mi mn nh l cc trng i hc khc. V nh th th qu trnh xp lch cn phi thng minh bit cc gio vin trong tun s c cc s kin no yu cu. V nh th th qu trnh sinh, hnh thnh to s kin l kh kh khn v khng h n gin cht no.

V sau qu trn kho st cc trng i hc khc nhau nh th chng ta i vo chi tit ho trng i Hc Bch Khoa, trng hc chng ta s vit m phng.thut ton

E.Qu trnh pht trin


im u vo ca chng em trong qu trnh tm hiu v cc thut ton bt u t cuc thi timtetable competition nn hu ht cc thut gii m chng em hc c l t cc thut gii c a ra trong cc chng trnh tham gia cuc thi. Tuy khng gim khng nh rng chng em bit hon ton cc thut ton c a ra trong cuc thi. Nhng chng em c th chc nhng ci hc c l khng t. V thut ton chng em la chn tham kho l thut ton ca th sinh ng th nht kostuch v th sinh ng th hai l Jaumard. kim tra thut ton chng em cng vit mt chng trnh chy th, l d nhin rng chng trnh ca chng em khng th tham gia c cuc thi v qu hn. Hn np chng trnh dnh cho cuc thi l 31/3/2003 (Ngy bt u l 1/11/2002). V cng bi mt l do khc l hnh thc, phng php o to nc ngoi v trong nc l hon ton khng ging nhau v do cai chng em quan tm nht khi vit chng trnh m phng v thc hin li thut ton l tm hiu thut ton v kim th. Kt qu l chng trnh kim th chy kh thnh cng.

1. Time Tabling Competition


u tin chng ta m t u vo v yu cu ca chng trnh. Chng ta bit rng y khng phi chnh thc l m hnh o to ca cc nc phng ty, m thc cht th ban t chc (hip hi Meta heruistics) c gng ct b cc thng tin bn ngoi tha i c c mt chun cho cng tc xp lch th chng ta c th m t u vo ngn gn bao gm cc thng s sau:

a. M t bi ton
Tp cc s kin Tp cc phng hc bao gm cc thng tin v dng c hc tp m phng c v s sinh vin ti a c th cha Tp cc sinh vin mi sinh vin s tham gia mt s cc s kin cho trc. Tp cc timeslot 45 timeslot/tun. Mi tun c 5 ngy hc v mi ngy c 9 tit (mi tit ko di 1h) V cc rng buc yu cu chng trnh cn tho mn

b. Rng buc cng:


Cc sinh vin khng c tham gia cng lc 2 s kin Cc phng l rng, cc iu kin v dng c hc tp cho s kin

Mi s kin sy ra trong 1 phng ti 1 thi im

c. Cc rng buc mm:


Sinh vin c gi hc vo tit cui ngy (tit s 9 last timeslot ca ti) Sinh vin c 2 tit hc lin tip nhau Sinh vin ch c 1 tit hc trong 1 ngy

d. D liu u vo:
Dng u tin ca file d liu vo ghi cc thng s au: S lng s kin, s lng phng, s lng dng c (features), s sinh vin Cc dng tip theo l dung lng ca cc phng. i vi mi dng chng ta ghi mt s 0/1 m t sinh vin c mong mun tham s kin khng. Tiu biu i vi bng gm 3 sinh vin v 4 s kin chng ta s c u vo nh sau 0 1 0 0 1 1 0 0 0 0 1 0 S to cho chng ta mt ma trn kt qu l: Event 0 1 0 0 student 1 1 0 0 0 0 1 0 iu c ngha l sinh vin s 0 quan tm n s kin 1 , sinh vin s 2 quan tm n 2 s kin 0 v 1, cn sinh vin s 2 quan tm n s kin s 2. Tip theo chng ta s c cc m t v ma trn u vo ca phng / dng c (rooms/ feature) v bng s kin/dng c (events/feature) ging kt qu di y. 0 1

0 0 1 1 0 0 0 0 1 0 would give this roomfeatures matrix: Feature 0 1 0 0 room 1 1 0 0 0 0 1 0

V bng s kin/dng c (events/feature) 0 1 0 0 1 1 0 0 0 0 1 0 would give this eventfeatures matrix: feature

event e

0 1 1 1 0 0

0 0 0 0 1 0

e. nh dng d liu u ra:


D liu ra c ghi trong file c ui l .slntheo nh dng sau: Mi dng trong file ch thng tin v 1 s kin v mi dng s phi ghi ra cc thng tin sau: S hiu timeslot, s hiu phng Trong timeslot l mt s nm trong khong 0 44. Xc nh xem s kin oc thc hin trong khong thi gian no trong tun.v ch s th hai xc nh xem phng no s c chn t s kin. Cc phng cng nh s bt u t 0.

f. Nguyn tc nh im
Tt c mi vi phm trn u b nh im tun theo 3 qui tc sau: Sinh vin c 1 bi ging (1 s kin) trong 1 ngy (1im) Sinh vin c cc bi ging lin tip - 3 bi ging lin tip 1 im - 4 bi ging lin tip 2 im - 5 bi ging lin tip 3 im - Mt bi ging cui ngy hm nay v 1 bi ging u ngy mai cng c coi l 2 bi ging lin tip S lng ca vi phm tit cui gi (ca ti lastslot) Tng s ca 3 rng buc trn s l s im m bi thi ca cc th sinh nhn c. Chnh v th nn ban t chc khuyn co nn s dng thng xuyn chng trnh checkcpp hiu r hn v cc rng buc mm m ban t chc yu cu. Nh vy c ngha rng bn cng cng t im th c ngha l thut ton ca bn cng tuyt vi v chng trnh ca bn cng l hon ho. L d nhin rng khng chng trnh no trnh khi vic sinh TKB khng c mt li no. Chng trnh nh score (im) i km vi th mc ny (trong ti liu m chng em cung cp th l TaiLieu\Timtable Competition\checksln_cpp.htm). y l 1 chng trnh c vit bng C++: ----------------------------------------------------#include <stdio.h> #include <iostream.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <fstream.h> #include <string.h>

main(int argc, char * argv[]) { int norooms,nostudents, noevents; int nofeatures; bool * * roomfeatures; bool * * eventfeatures; int * roomsizes; int * eventrooms; int * eventslots; bool * * attends; //attends[event][student] bool * * studentavailability; //studentavailability[slot][student] int * eventtypes; char filename[100]; char timfilename[100]; char slnfilename[100]; if(argc!=2){cout<<"Usage: checksln filename"<<endl;cout<<"Press return to continue"<<endl; char key; cin.get(key);exit(0);} sscanf(argv[1],"%s",&filename); int len = strlen(filename); strcpy(timfilename,filename) ; timfilename[len]='.'; timfilename[len+1]='t'; timfilename[len+2]='i'; timfilename[len+3]='m'; timfilename[len+4]='\0'; strcpy(slnfilename,filename) ; slnfilename[len]='.'; slnfilename[len+1]='s'; slnfilename[len+2]='l'; slnfilename[len+3]='n'; slnfilename[len+4]='\0';

ifstream tim; tim.open(timfilename); if (!tim ) { cout<< "Couldn't open the file "<<timfilename<<endl; cout<<"Press return to continue"<<endl; char key; cin.get(key); exit(1); } tim>>noevents; tim>>norooms; tim>>nofeatures; tim>>nostudents; roomsizes = new int[norooms]; eventrooms = new int[noevents]; eventslots = new int[noevents]; eventtypes = new int[noevents]; roomfeatures = new bool*[norooms] ; for(int i=0;i<norooms;i++) roomfeatures[i] = new bool[nofeatures]; eventfeatures = new bool*[noevents] ; for(int i=0;i<noevents;i++) eventfeatures[i] = new bool[nofeatures]; attends = new bool *[noevents]; for(int t=0;t<noevents;t++)attends[t] = new bool [nostudents]; studentavailability = new bool *[45]; for(int i=0;i<45;i++) studentavailability[i]=new bool[nostudents];

for(int i=0;i<norooms;i++)tim>>roomsizes[i]; for(int i=0;i<nostudents;i++)for(int j=0;j<noevents;j++)tim>>attends[j][i]; for(int i=0;i<norooms;i++)for(int j=0;j<nofeatures;j++)tim>>roomfeatures[i][j];

for(int i=0;i<noevents;i++)for(int j=0;j<nofeatures;j++)tim>>eventfeatures[i][j]; tim.close(); ifstream sln; sln.open(slnfilename); if (!sln) { cout<< "Couldn't open the file "<<slnfilename<<endl; cout<<"Press return to continue"<<endl; char key; cin.get(key); exit(1); } long unplaced=0; long endofday=0; for(int i=0;i<noevents;i++) { sln>>eventslots[i]>>eventrooms[i]; if ((eventslots[i])== -1)cout<<"Event "<<i<<" does not have a timeslot assigned"<<endl; if ((eventrooms[i])== -1)cout<<"Event "<<i<<" does not have a room assigned"<<endl; if (((eventrooms[i])== -1)|| ((eventrooms[i])== -1)) unplaced++ ; } sln.close(); long unsuitablerooms=0; for(int e=0;e<noevents;e++) { int size =0; bool badroom=false; for(int g=0;g<nostudents;g++)if(attends[e][g])size++; if((eventrooms[e]!=-1)&& (roomsizes[eventrooms[e]]<size)) { cout<<"Event "<<e<<" requires a room of size "<<size<<endl; cout<<"It has been assigned a room ("<<eventrooms[e]<<") of size "<<roomsizes[eventrooms[e]]<<endl; badroom=true; } for(int f=0;f<nofeatures;f++) if((eventrooms[e]!=-1)&&eventfeatures[e][f]&&! roomfeatures[eventrooms[e]][f])

{ cout<<"Event "<<e<<" requires feature "<<f<<endl; cout<<"It has been assigned a room ("<<eventrooms[e]<<") without feature "<<f<<endl; badroom=true; } if(badroom)unsuitablerooms++; } long studentclashes=0; long roomclashes=0; for(int i=0;i<nostudents;i++)for(int e=0;e<45;e++)studentavailability[e][i]=true; for(int g = 0; g<nostudents;g++) for(int e=0;e<noevents;e++) { for(int f=0;f<e;f++) if((eventslots[e]!=-1) &&(eventslots[f]!=-1) &&attends[e][g] &&attends[f][g] &&eventslots[e]==eventslots[f]) { cout <<"Student "<<g<<" has to attend both event "<<e<<" and event "<<f<<" in slot "<< eventslots[e]<<endl; studentclashes++; } if((eventslots[e]!=-1)&&attends[e][g])studentavailability[eventslots[e]] [g]=false; } for(int e=0;e<noevents;e++) for(int f=0;f<e;f++) if((eventslots[e]!=-1) &&(eventslots[f]!=-1) &&(eventrooms[e]!=-1) &&(eventrooms[f]!=-1) &&(eventslots[e]==eventslots[f]) &&(eventrooms[e]==eventrooms[f])) { cout <<"Events "<<e<<" and event "<<f<<" both occur in slot "<< eventslots[e]<<" and room "<<eventrooms[e]<<endl;

roomclashes++; } cout<<endl<<endl<<"Number of unplaced events ="<<unplaced<<endl; cout <<"Number of unsuitable rooms = "<<unsuitablerooms<<endl; cout <<"Number of student clashes = "<<studentclashes<<endl; cout <<"Number of room clashes = "<<roomclashes<<endl<<endl; long longintensive=0; for(int g=0;g<nostudents;g++) { for(int d=0;d<5;d++) { int count=0; for(int t=0;t<9;t++) { int slot=d*9+t; if(studentavailability[slot][g]==false)count++; else count=0; if(count>=3) { cout <<"Student "<<g<<" has a set of three events up to slot "<<slot<<endl; longintensive++; } } } } cout<<endl<<endl; long single=0; for(int g=0;g<nostudents;g++) { for(int d=0;d<5;d++) { int count=0; int badslot=-1; for(int t=0;t<9;t++) { int slot=d*9+t; if(studentavailability[slot][g]==false) {

count++; badslot=slot; } } if(count==1) { cout <<"Student "<<g<<" has an event in slot "<<badslot<<" which is the only one on that day"<<endl; single++; } } } for(int g=0;g<nostudents;g++) { if(studentavailability[8][g]==false) { cout<<"Student "<<g<<" has an event in slot 8 which is at the end day"<<endl; endofday++; } if(studentavailability[17][g]==false) { cout<<"Student "<<g<<" has an event in slot 17 which is at the end day"<<endl; endofday++; } if(studentavailability[26][g]==false) { cout<<"Student "<<g<<" has an event in slot 26 which is at the end day"<<endl; endofday++; } if(studentavailability[35][g]==false) { cout<<"Student "<<g<<" has an event in slot 35 which is at the end day"<<endl; endofday++; } if(studentavailability[44][g]==false) { cout<<"Student "<<g<<" has an event in slot 44 which is at the end day"<<endl;

of a

of a

of a

of a

of a

endofday++; } } cout <<endl<<"Penalty for students having three or more events in a row = "<<longintensive<<endl; cout <<"Penalty for students having single events on a day = "<<single<<endl; cout <<"Penalty for students having end of day events = "<<endofday<<endl; cout<<endl<<"TOTAL PENALTY = "<<(longintensive+single+endofday)<<endl<<endl; if (unplaced+unsuitablerooms+studentclashes+roomclashes)cout<<"This solution file does not give a complete and feasible timetable"<<endl; else cout<<"This solution file gives a complete and feasible timetable"<<endl; delete [] roomsizes; delete [] eventrooms; delete [] eventslots; for(int t=0;t<noevents;t++)delete[]attends[t]; delete [] attends; for(int i=0;i<45;i++)delete []studentavailability[i]; delete [] studentavailability; delete []eventtypes; for(int i=0;i<nofeatures;i++)delete []roomfeatures[i]; delete []roomfeatures; for(int i=0;i<nofeatures;i++)delete []eventfeatures[i]; delete []eventfeatures; cout<<"Press return to continue"<<endl; char key; cin.get(key);

} -----------------------------------------------------

g. Cc bi test:
Cc bi test s c nhng mc kh khc nhau, k c v s lng sinh vin, k c v s lng s kin cng nh v s lng phng, s lng cc dng c. V yu cu l chng trnh ca bn c th tnh c (tm ra) thi kho biu chp nhn c (feasible Timetable). Trong cc test th yu cu ti thiu 1 trng hp chy

hon ho, l cc timetable m bo khng c mt rng buc cng no b vi phm, nhng iu khng yu cu cn chy chnh xc trong thi gian cho php. Thi gian cho php c tnh bng chng trnh Benmarking c i km theo trong th mc \TaiLieu\Timtable Competition. Phi ni thm mt chi tit rng mi th sinh t vit chng trnh ca mnh v chy trn my c nhn, iu nhn mnh y l my tnh c nhn ch khng phi l my tnh server hay nhng mainframe. V o tc trung bnh ca cc my th chng trnh gi km theo benmarking l chng trnh mi ngi c th nh gi trung xem thi gian ti a m phng n c th chp nhn ca mi ngi c cho php l bao nhiu giy. tip l 20 bi test v c 10 bi test th nm trong 1 file zip i cng trong th mc, c tn l competition.zip v competition2.zip. y l th vin cc test cc th sinh c th t kim tra thnh qu ca mnh sau cng b cho ban t chc bit. Ri gi chng trnh n cho ban t chc. Ban t chc s test li trn 1 my tnh chung ca ban t chc kim tra li kt qu m cc th sinh cng b. i vi cc chng trnh gi n ngoi 20 test ca ban t chc th ban t chc cn kim tra thm 3 test ph na nh gi chnh xc hn v kt qu v nhng g m cc th sinh t c.

h. Ngi chin thng


ngi chin thng l ngi thc hin c qua c 20 test chy thnh cng, khng b li khng b treo v im ca mi test c tnh theo cng thc sau: (x b) / (w b). trong x l s lng rng buc mm b vi phm ca thi sinh vi phm rng buc mm t nht. V w l s lng rng buc mm b vi phm ca th sinh vi phm rng buc mm nhiu nht. b l s rng buc mm b vi phm ca chnh th sinh . T vi mi test th ban t chc s xc nh cho im th sinh l 1 hay 0. Tng li th sinh no c s im thp nht th l ngi chin thng. Ngi c im thp nht l ngi c t li nht. Trong cc chng trnh th yu cu l cc rng buc cng l khng b vi phm.

i. Kt qu cuc thi
Di y l bng kt qu nhng ngi chin thng. Nhng ngi hon thnh chng trnh vi s im cao nht. Tp 4 ngi dn u Unseen Name Meth Competition Instance Scores Instance (s) od Scores Philip p 4 2 6 11 10 1 2 6 4 10 3 10 1st pdf 44 17 78 52 24 22 86 44 7 6 72 Kostu 5 5 5 5 2 3 9 1 4 7 1 0 ch 2n Brigitt pdf 6 3 7 16 16 4 52 5 50 7 5 11 10 93 62 34 11 3 12 2 86 8 105 d e 1 9 7 0 1 2 4 2 3 0 9 4 8 8 6

Jauma rd, JeanFran ois Corde au and Rodri go Moral es Yuri 3r 8 4 8 11 3 18 9 7 30 3 32 Byko pdf 77 6 12 79 91 36 27 79 86 0 3 84 d 5 2 4 9 2 4 0 3 0 9 9 v Luca Di Gaspe 4t ro and 6 4 9 16 20 9 11 6 8 6 11 16 19 11 21 4 18 1 pdf 51 38 97 9 103 h Andre 3 6 6 6 3 2 8 6 1 5 9 0 7 4 2 0 5 7 a Schae rf c bng kt qu ny sau khi cc th sinh gi chng trnh n cho ban t chc v cng b kt qu chng trnh chy trn my c nhn ca cc th sinh. V khi gi n th ban t chc chy th 20 test c cng b v sau khi thu c kt qu th ban t chc cho chy thm vi 3 test chung na m bo rng nhng kt qu ma` cc th sinh thu c l chnh xc v khng phi ch l qu trnh c vt cc trng hp ph. Ni chung l 3 test thm ny khng nh hng n kt qu ca cc th sinh m qu trnh tnh im vn ch nm trong s 20 test c a ra trc . Nhm tip theo l nhm cc th sinh cng a ra kt qu tt tuy nhin khng phil lun lun tt trong mi trng hp. V nguyn nhn c th l do cc nhn (seed) u tin (tt) khng thng c ghi li m b mt trong cc bin i tip . V cng c th do nguyn nhn l chng trnh kim tra chy khng tt trong mt s trng hp. v chng ta c bng: Unseen Name( Met Competition Instance Scores Instance s) hod Scores Halvar pdf Clai 13 69 13 22 22 13 16 13 12 14 10 29 22 20 11 90 13 87 20 53 - - d med 2 7 8 5 3 1 1 6 8 9 0 3 4 1 0 6

Arntze n and Arne Lkket angen Alexan dre Dubou rg, Benot Lauren t, pdf Emma nuel Long and Benot Salotti

Resu lts Veri fied 13 17 26 25 13 17 13 13 14 13 29 25 23 14 11 18 25 14 2 92 87 94 94 Resu 2 0 5 7 3 7 4 9 8 5 0 1 0 0 4 6 6 5 3 lts Clai med 13 14 31 28 19 19 12 10 14 13 17 16 23 12 11 17 11 30 13 97 - - Resu 1 5 8 1 9 4 8 9 1 2 2 7 3 2 0 6 2 9 9 lts

Veri fied 14 10 16 35 41 24 22 12 12 14 14 18 19 31 20 12 32 32 18 13 5 15 98 Resu 8 1 2 0 2 6 8 5 6 7 4 2 2 6 9 1 7 5 5 2 1 9 lts

Clai med 13 10 15 34 33 24 19 14 14 15 15 21 22 26 17 12 26 10 29 14 - - Resu 7 3 6 6 5 3 5 9 7 3 2 9 4 3 4 7 7 2 9 5 Gustav lts o Toro, pdf Victor Veri Parada fied 17 10 15 39 33 24 22 21 15 15 16 21 24 26 23 13 31 10 30 18 16 2 17 Resu 8 3 6 9 6 6 5 0 4 3 9 9 8 7 5 2 3 7 9 5 1 2 3 lts Clai med 16 13 20 34 24 13 18 18 14 20 18 24 25 25 13 13 26 11 28 10 - - Resu 2 1 5 8 5 8 5 0 5 3 2 2 1 6 7 1 6 4 1 6 Robert lts o pdf Monte Verf manni ied 21 12 21 40 31 16 28 21 16 22 19 28 31 34 18 18 40 15 33 14 2 24 7 Resu 1 8 3 8 2 9 1 4 4 2 6 2 5 5 5 5 9 3 4 9 04 5 lts Tom pdf Clai Mller med 17 13 17 38 23 13 15 13 21 19 24 34 16 15 19 12 42 18 53 92 - - Resu 2 5 3 0 0 0 6 7 6 1 1 9 9 4 1 1 8 8 lts Verf 25 11 26 44 29 20 99 19 17 30 27 24 36 15 95 17 14 11 41 11 2 3 29

ied Resu 7 2 6 1 9 9 lts

4 5 8 3 2 4 6

1 8 7 4 3 86 1 3

Cc th sinh tip theo l nhm cc th sinh ch cng b rng chng trnh ca h chy tt, v khng cung cp thng tin ban gim kho c th kim tra chng nhn kt qu n, cng nh khng cung cp thng tin ban gim kho c th chun ho kt qu ca h: Name(s Meth Competition Instance Scores ) od David 11 14 21 25 13 11 13 15 13 19 18 Bredstr pdf 89 81 38 75 72 79 88 94 72 4 0 3 1 0 6 0 5 0 8 7 om Parham 14 11 15 38 44 32 18 12 11 16 16 22 23 32 23 10 37 12 24 Mousav pdf 210 4 8 7 8 3 2 7 4 9 2 3 0 1 8 6 8 8 1 0 i V cui cng l cc nhm trong hip hi Meta Heurictics, v lut th cc thnh vin trong hip hi khng c php tham gia thnh th kt qu th h lam kh tt tuy nhin s khng c trao gii, v c hai nhm ca hip hi u dng mt nguyn tc chung thc hin chng trnh Unseen Meth Name(s) Competition Instance Scores Instance od Scores Marco Chiarandi ni, Mauro Birattari, 5 3 6 11 1 5 3 10 7 2 1 1 2 5 2 Olivia pdf 86 3 5 4 69 40 0 75 7 1 1 2 6 4 8 0 1 5 4 1 4 3 1 RossiDoria and Krzysztof Socha Krzysztof 6 3 6 13 14 2 2 2 3 7 5 7 7 3 2 10 2 10 pdf 95 5- - Socha 5 6 9 8 3 4 4 8 6 5 0 9 3 1 3 8 6 8

Tht ng ngnh l thnh vin socha ca hip hi khng th hon thnh cc test ph, cn li bykov v chiarandini th c th tm c li gii khng sinh mt li no (score = 0) . Tng kt sau cuc thi th ngi ta c th thy rt nhiu phng n

gii quyt bi ton -> c rt nhiu cch tin n ch vi mt vn c a ra. V cc kt qu trn y ch l tng i v trong cuc thi ny kt qu nh gi khng quan tm (b qua ) vn v thi gian thc hin, iu ny i khi thc s l vn . i vi mt s trng hp tm c kt qu tt chng trnh phi chy trong thi gian 1 ngy chng hn, nh th th thc s l vn .

2. Chng trnh th nghim


Chng trnh th nghim thut ton u tin ca chng em l chng trnh gii qut chnh bi ton Timetable Competition vi cc d liu u vo nh trn v vi cc yu cu nh trn, tuy nhin c mt s khc bit. l v do nguyn tc o to ti cc nc phng ty v nguyn tc o to ti Vit Nam, thnh th mc ch hng ti trong vic xy dng chng trnh m phng l tham kho v tm hiu thut ton l chnh.

a. La chn k thut
Vi u vo l cc file d liu nh th th chng ta c th s dng cc ngn ng lp trnh tiu biu nh C++, C hay Pascal. Tuy nhin nu thc s s dng pascal th chng ta s b mc ngay trong qu trnh khai bo, v vi d liu thng thng ca mt file u vo th chng ta s c 200-300 sinh vin vi tp 10 feature (dg c), 330-400 s kin, i vi mng 300 x 400 xc nh xem sinh vin no thch tham gia s kin no l mt iu khng th v b nh cp cho C++ v pascal u kh nh l 64KB nn chng ta khng th lu tr c ht ma trn ph thuc chnh v th chng em chn ngn ng Visual Basic thc hin chng trnh ny, v cc chng trnh trong Windows c h tr nhiu hnv rng ca b nh. y l l do u tin. V vi vic s dng VB trong lp trnh m phng thut ton th chng em phi chuyn di cc file d liu cho bi u bi t hng Meta Heuristics thnh mt khun dng mi l cc d liu u nm trn mt dng.

b. Khung dng d liu vo


Chng ta bit rng d liu u vo ca bi ton c dng: -------------------------Dng u tin ca file d liu vo ghi cc thng s sau: S lng s kin, s lng phng, s lng dng c (features), s sinh vin Cc dng tip theo l dung lng ca cc phng. i vi mi dng chng ta ghi mt s 0/1 m t sinh vin c mong mun tham s kin khng. -------------------------Nh vy by gi chng ta s chuyn i li thnh S lng s kin, s lng phng, s lng dng c (features), s sinh vin

Tc l mi s s nm trn mt dng. Nh vy th cng tc c d liu t file s n gin hn rt nhiu. V tt c cc file d liu u vo chng em chuyn thnh dng th 2 ny v nm trong th mc data v data2 tng ng. Nh th cng vic nhp d liu s ch n gin nh sau: With CommDialog .Filter = "Time Table|*.ttm|All|*.*" .FilterIndex = 1 .ShowOpen If .FileName = "" Then Exit Sub End With txtStat = "" CreatedEventRoom = False CreatedNOAT = False CreatedHard = False FoundSolution = False If cboMatrix.ListCount = 6 Then cboMatrix.Clear cboMatrix.AddItem "Student x Event" cboMatrix.AddItem "Room x Feature" cboMatrix.AddItem "Event x Feature" cboMatrix.AddItem "Event matchs Room" cboMatrix.AddItem "Not Occurs At A Time (Event x Event)" End If List.Clear Dim str As String Dim i As Integer Dim j As Integer Open CommDialog.FileName For Input As #1 Line Input #1, str ' events events = CInt(str) ReDim EventSize(events) List.AddItem ("events : " & str) Line Input #1, str ' rooms rooms = CInt(str) List.AddItem ("rooms : " & str) Line Input #1, str ' features features = CInt(str)

List.AddItem ("features : " & str) Line Input #1, str ' students students = CInt(str) List.AddItem ("students : " & str) ' Room ReDim room(rooms) For i = 0 To rooms - 1 Line Input #1, str ' room(i) room(i) = CInt(str) List.AddItem ("room(" & CStr(i) & ") : " & str) Next ' matrix student x event ReDim se(students, events) For i = 0 To students - 1 For j = 0 To events - 1 Line Input #1, str ' student_event(i, j) se(i, j) = CInt(str) Next Next ' matrix room x feature ReDim rf(rooms, features) For i = 0 To rooms - 1 For j = 0 To features - 1 Line Input #1, str ' room_feature(i, j) rf(i, j) = CInt(str) Next Next ' matrix event x feature ReDim ef(events, features) For i = 0 To events - 1 For j = 0 To features - 1 Line Input #1, str ' event_feature(i,j) ef(i, j) = CInt(str) Next Next Close #1

c. Thut ton
trong chng trnh ny chng ta s s dng thut ton t mu th. Thc cht th vit chng trnh lp thi kho biu hu nh l khng bao gi c cc gi tr ti u tuy nhin chng em vn c gng xy dng mt chng trnh tm kim li gii mang tnh ti u cho bi ton. Ch ti u m chng em cp y khng phi l ti u v phng n gii quyt, tc l khng phi l sau khi tm kim song li gii ny th s khng cn c th tm li gii no khc tt hn na, m thc t th bi ton lp thi kho biu s c rt nhiu li gii tt tu thuc vo cc ghp cc s kin vo vi cc phng theo cch nh th no. Chng ta bit rng chng ta s c t 300 cho n 400 s kin trong khi chng ta c s phng (thng thng) l 10 phng mi phng c th ging dy c 45 timeslot (5 ngy mi ngy hc ti a 9 tit, c th t hn). Nh th chng ta s c tng cng l 45 x 10 = 450 room time slot cc s kin c th t vo. Nh vy vi u chng ta c rt nhiu cch ghp. S lng cch ghp chnh l C450400, mt con s v cng ln. V vi mt li gii th ci g s m bo rng l li gi tt nht, v khng c li gii tt hn. Trn thc t c th c rt nhiu li gii tt tuy nhin vn l chng trnh ca chng ta c thng tin tm kim ra hay khng mi l vn quan trng. V thut ton c th gii quyt tt c mi rng buc cng c th k ra sau y: Chng ta c mt bng room x time, y l bng hai chiu vi gi tr ban u l rng,vi room = 10 time = 45 (c nh) th chng ta s c 45 x 10 = 450 trng v chng ta c nhim v l in 300 400 s kin vo cc trng ny. Nh th sau qu trnh in th chng ta bo 2 rng buc cng: Cc phng l rng, cc iu kin v dng c hc tp cho s kin Mi s kin sy ra trong 1 phng ti 1 thi im Ch cn mt yu cu v rng buc cng : Cc sinh vin khng c tham gia cng lc 2 s kin L cha c thc hin. gii quyt vn ny chng ta to thm ra mt mng mang tn l NOAT (Not Occur at A Time - khng sy ra trong cng thi gian) m bo rng cc s kin no b cm sy ra trong cng time slot s khng c gn. y l mu cht ca phi php, tuy nhin y l mt mng kh to v chng ta bit l s lng s kin ca chng ta nm trong khong t 300 400, nn mng vung hai chiu ca chng ta s nmg trong gii t 300x300 n 400x400, mt con s kh ln, v tht may l VB6 vn chu c khi khai bo mng ln th ny m vn cha b trn v chnh l sc mnh ca cc chng trnh trong Windows. Chng ta quay li ni v vn ti u nh ni t u th chng ta khng mong mun v mt bi ton tm gi tr ti u v phng n m chng ch c gng lm sao ti u v thi gian. C ngha l lm sao cho tc ca chng trnh l nhanh nht c th tm c. Theo cc bo co ca cc chng trnh tham gia cuc thi th cc chng trnh tham gia cuc thi c thi gian tnh ton tm ra kt qu nm trong khong t 4-8 pht, c l l do benchmarking qui nh v thi gian ti a thnh th cc th sinh c gng hon thin chng trnh ca mnh trong khong

thi gian xc nh cho trc , v mc tiu ca hu ht cc th sinh l tm phng n sao cho gim thiu cc rng buc b vi phm ch khng quan tm n vn v thi gian. Tuy nhin chng ta bit rng vi mt lng d liu nh nh trong time tabling competition t ra l 400 SV trong khi trn thc t chng ta s c t 10.000 n 15000 sinh vin ca 1 trng i hc th con s ny l qu ln v thi gian ch i ca mi ngi cng l khng th nn vn thi gian v cng quan trng.

d. Phn tch v thit k chng trnh


Sau qu trnh c file th ton b d liu s c lu trn cc mng v cc bin sau: Option Explicit '---------------INPUT------------------Public events As Integer ' Number of event Public rooms As Integer ' Number of room Public features As Integer ' Number of feature Public students As Integer ' Number of Student Public room() As Byte ' room size Public se() As Byte ' student x event Public rf() As Byte ' room x feature Public ef() As Byte ' event x feature

'------------PROGRAM CREATED------------Public EventSize() As Byte ' Number Student of an Event Public er() As Byte ' Event x room ' Bang hai chieu nay duoc sinh ra tu hai mang khac do la ' bang event x feature va bang room x feature ' ket hop voi dieu kien EventSize <= RoomSize Public hard() As Byte ' mang hard(i) se xac dinh muc do kho dat phong cua su kien i ' su kien i kho nhat se co hard(i) be nhat Public NOAT() As Byte ' Not Occures At a Time ' Day se la mang hai chieu event x event xac dinh hai event ' khong duoc phep xuat hien dong thoi, ' do la hai su kien co cung mot SV tham gia Public rt() As Integer

' Thoi khoa bieu chua tai day, rt la mang hai chieu trong do ' rt(rm, tm) = n voi n la so hieu su kien ' rt(rm, tm) = -1 phong room tai thoi diem time van con trong Public et() As Integer ' et(evn, tm) = 1 nghia la ca'm su kien i say ra vao thoi diem j ' evn = 0..(events-1), tm = 0..44 Public MaxTotalNOAT As Integer ' chua so lop toi da co the trung gio Public current As Integer ' Dem so cac su kien da duoc dat cho Public sche() As Byte ' sche(i)=1 su kien i da~ duoc dat cho, Public TotalNOAT() As Integer ' totalNOAT(i) Tong so cac su kien tranh chap SV voi su kien i Public idx() As Integer ' Mang nay xep theo thu tu muc do kho de cua su kien ' Kho dat phong xep truoc, de xep sau trong chng trnh ny v y l chng trnh u tin vi mc tiu l m t v tm hiu thut ton cho nn chng trnh vn cn chua c chun cho lm, v tt c mi m lnh thc hin chng trnh u c vit v a vo trc tip trong form do c th gy rt kh hiu cho ngi c, v mod th khng lm vic g c ngoi cng vic khai bo cc bin chung, tt c mi m lnh chch dn trn y u c th tm thy trong file mang tn modcommon.bas nm trong cng th mc. Chng ta s quy nh rng Cc bin c ch S cui cng s l cc bin nh du s lng bn ghi v d events s l gi s s kin, tng t nh th chng ta c features rooms students v mng mang tn room() s lu gi gi tr l dung lng cha ca cc phng. Tip cc ma trn lin thuc s l hai k t u tin ca cc loi bin v d er() th c ngha l ma trn ph thuc gia hai yu t events x rooms. Tng t nh th chng ta c : se() = student x event rf() = room x feature ef() = event x feature

trong chng trnh chng ta c th thy rng cc mng khai bo khng c nh v chng ta bit rng ch khi chy chng trnh chng ta mi bit chnh xc l s c bao nhiu bin cn lu tr v th chng ta cn s dng mng ng v sau trong chng trnh chng ta s khai bo chnh xc li cn bao nhiu sau bng lnh: redim ef(400, 10) chng hn xc nh rng ma trn event x feature s bao gm 400 x 10 phn t. Tip theo chng ta c mng eventsize() s l mng lu tr c cc ca cc s kin c ca cc s kin m chng ta cp y chnh l s sinh vin tham gia s kin. xem cc s kin c bao nhiu sinh vin tham gia chng ta s dng la chn trn combo. y l on ci t cho mng eventsize(): Dim total As Integer For i = 0 To events - 1 total = 0 For j = 0 To students - 1 total = total + se(j, i) Next EventSize(i) = total Next Mng tip theo c k n chnh l mng er() hay chnh l ma trn ph thuc ca s kin theo phng, l ma trn xc nh xem s kin c th t ch ti phng hay khng. Nu er(i,j) = 1 th c ngha l s kin i c th t ch ti phng j. V t y chng ta cng qui nh rng nu vit er(i, j) th i s l ch s ca s kin e, v j l ch s ca phng j tng ng vi th t vit trc v sau ca cc bin s. Sau y l ci t cho mng er() ReDim er(events, rooms) For i = 0 To events - 1 For j = 0 To rooms - 1 If (Matching_EventRoom(i, j)) And (EventSize(i) <= room(j)) Then er(i, j) = 1 Else er(i, j) = 0 End If Next Next V hm s c gi trong on chng trnh trn l Matching_EventRoom(i, j) c ci t nh sau:

Function Matching_EventRoom(ByVal evn As Integer, ByVal rm As Integer) As Boolean ' Ham nay se tra ve TRUE neu nhu phong ' rm thoa man cac yeu cau cua su kien evn Matching_EventRoom = False Dim i As Integer For i = 0 To features - 1 ' Neu su kien evn nay` co yeu cau feature i ' ma phong rm khong co feature i thi loai If ef(evn, i) = 1 Then If rf(rm, i) = 0 Then Exit Function End If End If Next Matching_EventRoom = True End Function Tnh tho mn yu cu trong hm s ny c miu t v ni mt cch n gin v d hiu nh sau, chng ta c yu cu ca s kin, tc l mi s kin th yu cu phng c nhng dng c hc tp no. Nu phng c dng c th c ngha l phng ny c th xp lch cho s kin kia c m nu tha ra cht th vn c l tuyt vi. Chng ta cng khng cn qu quan tm n chuyn rng s dng c l va v nh th th mng hai chiu ph thuc gia s kin v phng s gim sung. Nh th thc s l khng nn, bi nu chng ta lm nh th th ho t mnh lm kh mnh, co ai nh th khng nh? Mng NOAT(i, j) l mng xc nh rng hai s kin khng sy ra ng thi ging nh m t trn. K ra th cch t tn bin kiu ny s lm cho cc lp trnh vin quen thuc vi C s cm thy v cng phn n v trng n c v ging nh l tn mt hng s nhiu hn l tn bin. bng quan trng nht chng ta s cp y l bng rt() y thc cht chnh l bng cha thi kho biu, khi khi u bng s c gi tr i vi tt c cc phn t trong mng l -1. Chng ta bit rng theo qui nh ca hip hi Meta Heuristics th cc ch s s nh t 0 cho n n-1 nn chng ta cng s c gng tun th nguyn tc ny, iu cng dn n vic cc thng s v cc ch s trong ht thy mi mng u bt u = khng. V k ra th VB6 cng c nhng im kh c chui rng, nu bn khai bo redim a(100) th thc cht bn s khng phi ch nhn c 100 phn t m bn s nhn c 101 phn t, tc l thm mt phn t so vi mong mun thc s ca bn. L do l trong VB khng ging nh l trong C mi khi bn nh ngha dng redim a(100) th bn s c mt mng bt u t phn

t 0 n phn t th 100. Tuy nhin trong luc tnh ton th chng ta cng khng tic g mt bin s m khng khai bo redim a(100) thay cho vic khai bo redim a(99) bi v thc s th cch khai bo kiu redim a(100) c v trng d nhn v d hiu hn nhiu so vi cch khai bo trc l redim a(99). Mt mng khc c cp n l et() y cng l mng 2 chiu l ma trn gia s kin v thi gian, ma trn ny th li hi c bit mt cht l ma trn cm cc s kin. Mt khi bn t mt s kin e vo mt khong thi gian t no th cc s kin lin quan khc c tm thy trong mng noat th s b chn ti thi im ny m bo rng khng c sinh vin no phi hc cng lc 2 s kin. Tc l vi phm rng buc cng s 3. V y l khi to cho mng et() ' Khoi dau cho bang cam cac su kien ReDim et(events, 45, MaxTotalNOAT) ' et(i, j, 0) = n1 nghia la su kien i bi lock dau tien boi n1 ' et(i, j, 1) = n2 nghia la su kien i bi loc tiep theo (lan 2) For i = 0 To events - 1 For j = 0 To 44 For k = 0 To 44 et(i, j, k) = -1 Next Next Next Tht l nc ci v trc y khi ti vit chng trnh ny ti ngh rng nn ghi tt c mi thng tin rng s kin no cm s kin no li, n lm cho mng et t nhin to ng ra v chim rt nhiu b nh trong khi thc cht chng ta ch cn lu li s lng ca cc s kin gy xung t vi s kin ny l c. Chnh v vy nn qu trnh khi to cc bin cho qu trnh xp lch li cn lu v mt nhiu thi gian hn l qu trnh xp lch. Nu cc bn th chy chng trnh th cc bn c th thy thng bo v tc m chng trnh t c l rt ng khen ngi, ti mun so snh vi cc chng trnh ca cuc thi timetabling competition, tuy nhin chng ta cng nn bit rng mi so snh u l khp khing v kh so snh c r rng v trong chng trnh ny chng ti ch c gng quan tm n tc v thi gian thc hin ch khng quan tm nhiu lm n cc rng buc mm. Nu nh chng ta bit rng i vi cc gio vin m ni th rng buc mm c ngha quan trng nht V n nh gi xem l chng trnh c gi l hay hay l d chnh cc rng buc mm , iu cng nh hng rt nhiu n th trng nu nh chng ta mun ni rng chng ta s s dng phn mm m chng ta vit kim tin. Tht l tuyt vi khi ngh n tin, nu chng trnh ca bn c th tho mn tt thy cc yu cu t pha gio vin v khng gio vin no b c ch th thc t l

nh th chng trnh ca bn thnh cng ngoi sc tng tng ri cn g. Chng ta bit rng cc yu cu thc t bn ngoi l v cng phong ph v a dng. C gio vin th tuyn b rng ti gn 60 tui v vi ci tui y nu bt ti i lm vo 12h15 tra th ti khng th chu ni, v qu sc. Nu chng trnh c th m bo cc yu cu rt ring t ca cc gio vin th liu mi ngi c tic mt cht tin tm kim s th gin khng nh. Chc chn l c ti tin vy. Chng ta tip tc quay li vn v so snh, thc cht chng ti tip tc mun nhn mnh rng mi s so snh u khng chnh xc v ch tng i l chp nhn c v l khi ti vit chng trnh bng VB6 th nhng ngi khc vit chng trnh bng C, C++ v nu may mn hn th s bng gcc hoc l free pascal chng hn. Cc chng trnh nh C, C++ hay l Pascal chng hn b nh rt c hn ci chng ta c th v tay m hoan h cc thnh vin ca cuc thi l h vt qua kh khn v b nh mt cch xut sc. Trong khi chnh chng ti khng th vt qua c kh khn m chuyn sang vit bng VB6 kim ly s nhn ri v thoi mi. Cn by gi chng ta li quay li mt nc (c v ging nh qui hay ngn xp qu, qui trnh bt u t mng et->So sanh cc chng trnh-> Vn tin nong -> mi so snh chng trnh u l khp khing -> ci km ca cc t chc mng et) na c th tho lun v ci km ca chng trnh trong phin bn u tin hay cn gi l phin bn th nghim ny, chnh l ci mng to ng et(), by gi cu hi t ra l ti sao khng lu mng et() nh l mt mng kim tra xem trong khong thi gian ny c s kin no cm n xp lch cha, chng ta thc cht ch cn mt cu tr li cho cu hi , nh th th ti sao chng ta khng lu tr cc con s chp nhn l 0 cn li khng chp nhn l mt s > 0. V con s > 0 chnh l s s kin xp lch ti thi im t, m c chung sinh vin vi s kin hin ti. V chng ta c cch khi u cho mng c bit et() ny. Khi u tt c cc phn t u l 0 sau th mi khi c mt s kin lin quan t ch th chng s c tng ln 1 n v. V khi thc hin xp ch cho thut ton th ch khi no mng et() ny c gi tr bng 0 th chng ta mi t ch cho s kin hin ti. Cn nu nh chng khc khng th iu ng ngha vi vic chng ta lm mt sinh vin no phi hc hai s kin trong cng mt khong thi gian. S c lu gi trong mng et() chnh l s sinh vin b vi phm, v thc t l t mng ny chng ta c th kim tra c, hay cn ni mt cch khc l c th tnh c chnh xc xem c bao nhiu li rng buc cng s 3 b vi phm ( xem v hiu cc rng buc mi cc bn xem li trn). Cc bin c bit l

Public MaxTotalNOAT As Integer Bin ny trong qu trnh tnh ton s tnh xem c bao nhiu s kin c th xung t vi nha ti a, bin ny c s dng n gin ch gim thiu vic khai bo bin tha trong khi hnh thnh bng et() v thc s l truc khi lp trnh ngi lp trnh cng khng th bit r chnh xc xem c bao nhiu cc s kin xung t vi nhau. V iu ny c ngha khi bn khai bo bin s l kiu int hay l kiu byte cho mng et() cch khai bin bo ny c ngha rt ln v nu chng ta lm dng qu nhiu th chng ta c th gay li trn b nh v nu li ny sy ra th thc s khng c cch no c th gii quyt c bi ton. Public current As Integer ' Dem so cac su kien da duoc dat cho Bin current ny s lu tr s lng cc s kin xp lch. Khi no current = events th qu trnh xp lch ca chng ta c th khng nh l kt thc. i vi bin ny m ni th mi ngi c th hiu lm rng chnh l bin ch s v nh th th cc s kin s c xp theo th t ln lt t s kin du tin cho n s kin cui cng tuy nhin ti mun khng inh rng khng phi th m c s khc bit, chng ta t u s khng bit l s kin no s c xp lch trc, bit nn xp lch cho s kin no trc th chng ta s c gng la chn s kin no kh nht xp trc v s kin d xp hn chng ta s xp sau, nh th th khi cc s kin kh c xp th cc s kin d s phi b p buc vo cc (time slot cn li) r rng l cch xp cc s kin kh tnh sau ny s to ra kt qu tt hn l cch xp s kin kh sau cng v nh th c th chc chn rng s kin kh khng th xp c lch. Ci g nh gi kh xp v d xp chng ta lu trong mng mang tn l hard() y l mng 1 chiu v c s phn t chnh bng s s kin. vn t ra l lm th no xc nh xem s kin no l s kin d tnh v th no l s kin kh tnh, chng ti t ra y mt qui tc m theo n chng ta c th tnh c mc kh hay d ca n ra thnh mt con s c th ReDim hard(events) For i = 0 To events - 1 hard(i) = 0 For j = 0 To rooms - 1 hard(i) = hard(i) + er(i, j) Next Next

tc l chng ta c th hiu rng kh d y tnh chnh bng s phng c th p ng cho s kin . Tht n gin v d hiu. Chng ta bit rng vi mi phng chng ta s c 45 time slot thnh th nu c thm 1 phng th chng ta s c thm ti thiu l 45 khe na c th xp ch, nu nh c 45 ch ny u cha xp lch th tht l tuyt vi, cn nu cc ch ny xp th cng khng n ni qu t nh cc trng hp khc. Mt mng khc d hiu hn so vi mng hard() l sche() c khai bo nh sau: Public sche() As Byte ' sche(i)=1 su kien i da~ duoc dat cho, mng ny ch n gin l nh du xem s kin no xp lch v s kin no cha. Mt mng khc chng ta k n l Public idx() As Integer ' Mang nay xep theo thu tu muc do kho de cua su kien ' Kho dat phong xep truoc, de xep sau mng ny l mng nh du ch s ca s kin m chng ta quan tm, Chng ta bit rng cc s kin khng phi s c xp lch theo th t t 1 n n m theo th t rt kh hiu, v t u th khng ai bit l n s bt u t th t no. Chng ta ch c th cn c vo chnh ci bng idx() ny ni c. Mng idx c hnh thnh theo cch sau: ReDim idx(events) For i = 0 To events - 1 MinTotalNOAT = MaxTotalNOAT + 1 mh = HardMin For j = 0 To events - 1 If (sche(j) = 0) And (hard(j) = mh) And (MinTotalNOAT > TotalNOAT(j)) Then MinTotalNOAT = TotalNOAT(j) k=j End If Next idx(i) = k sche(k) = 1 Next

Trong chng trnh ny chng ta thy rng bin Sche(i) c s dng rt nhiu ln, v thc s chng ti dng n vo nhiu vic khc nhau. Nu nh chng ta nhn li ton b chng trnh th chng ta s nhn thy rng s lng bin trong chng trnh ca chng ta l kh ln, v c l l n ln hn mc cn thit. ti u ho n chng ta c th lm chng trnh nh hn rt nhiu, v d nhng mng nh mng NOAT (cp s kin khng xut hin trong cng mt thi gian) thc cht chng ta khng cn to ra v lu tr chng trong b nh ca chng trnh. C mt cch khc (c th mt gc no ) th khng hn l cch ny tt hn nhng nu vn b nh cn gii quyt th chng ta s xy dng mt hm s vi hai tham s u vo, v lc no chng ta cn kim tra xem c phi l hai s kin khng xut hin trong cng thi gian th chng ta s thc hin hm s ly gi tr m n tr v.

f. Hng dn s dng chng trnh:


Sau y chng em xin cung cp ton b hng dn s dng chng trnh, y l mn hnh ca chng trnh. Vi yu cu l gii quyt bi ton thi kha biu dng thut ton chng em chn mt mn hnh lm vic n gin khng phc tp, lm sao tin cho vic theo di cc thng tin bin i. Vi giao din chnh l mt grid ln trnh by cc thng tin, v chng ta bit rng hu ht cc gi tr trong bi ton u l cc mng nu khng phi mt chiu th hai chiu nn cch hin thng tin ny gip cho ngi s dng c th nhn r hn v cc thng s, v i vi bi ton thi kha biu ny th cng vic c th l nhp d liu vo t file vn bn sau thc hin cng vic ln k hoch t ng cho nn trn giao din chnh ca chng trnh ch c 2 nt chnh l nt Load v nt Scheduler. Combo pha trn l combo chn bng cn hin th, khi cn hin th bng no, mng hai chiu hay mt chiu no th chng ta chn trn combo, khi chn mt gi tr th bng d liu grid bn di s thay i v hin th cho ngi s dng cc mng cn tm Bn tri l mt list lu tr cc thng tin chung v bi ton, nh l thng tin v s s kin, s phng, s dng c hc tp, s sinh vin v dung lng cc phng tng ng. Bn di l status mi khi chng trnh hon thnh mt cng vic th chng trnh s t ng in vo cng vic mnh lm vo list trng thi bn di nh to xong mt bng, xp lch cho nhng s kin no vo thi im v phng no Trong chng ta quy inh rng s u tin l s hiu phng, s th hai l s hiu time slot nu chng ta c [5, 4] = 133 th c ngha l s kin s 133 c t ti phng s 5 ti thi im s 4 trong tng s 45 thi im trong tun.

Chng trnh s chy ging nh trn hnh v. Nt Load dng load cc file d liu nm trong hai th mc \Data v \Data2 Nt Scheduler tm thi kho biu v hin ra mn hnh. List Box cha cc thng tin khc v bi test. S S kin (events) S Phng (Rooms) S Sinh Vin (Students) S Features Flex Grid cha tt c cc bng u vo v u ra, k c bng TKB. Combo s dng c th chn cc bng mt cch d dng Text Box cha cc hnh ng m my tnh tnh ton v thc hin, ging nh report iu cn ni trong chng trnh ny l, chng trnh khng tm kim mt phng n chung chung no m thc cht n s tm phng n ti u nht. Nu nh khng th tm kim ra th c ngha l chng ta cng khng th tm c phng n ti u na. u vo ca bi ton s dng lun u vo test ca chng trnh thi TimeTabling Competition 2003. Vi d kin vo l ba bng : Student x Event : xc nh SV no thch tham gia s kin no. Room x Feature: Phng no c dng c g

Event x Feature: S kin no cn dng c g Chng trnh thc cht cng ch vit lm sao c th tho mn 3 rng buc cng: Khng c SV no tham gia hai lp hc ti cng mt thi im Phng hc phi rng c th cha s SV Ch 1 s kin c sy ra ti mi 1 thi im trong 1 phng. Ch em th cho 20 test u tin th kt qu l nh sau: Test S Event 400 400 400 400 350 350 350 400 440 400 400 400 400 350 350 440 350 400 400 350 Rooms Features Student Thi gian Treo 8s 9s 12s 11s 9s 11s 11s 11s 9s 9s 9s 11s 11s 10s 11s 9s 8s 12s 10s S Event c xp 394 400 400 400 350 350 350 400 440 400 400 400 400 350 350 440 350 400 400 350 Kostuch Time 40.5 11.0 170.8 92.9 103.2 3.6 2 15.4 5.2 166.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

10 10 10 10 10 10 10 10 11 10 10 10 10 10 10 11 10 10 10 10

10 10 10 5 10 5 5 5 6 5 6 5 6 5 10 6 10 10 5 5

200 200 200 300 300 300 350 250 220 200 220 200 250 350 300 220 300 200 300 300

D khi so snh vi chng trnh ca Kostuch nh th l khng hp l v Kostuch gii quyt c vn v cc rng buc mm, cn chng trnh ny th ch gii hn cc rng buc cng. C th thy trn bng a s cc test th chng trnh u tm c li gii ch c duy nht test1 l khng c c th l do chc chn rng khi t c lch s c vi phm rng buc cng s 1. V im ca Kostuch trong test1 l : 45 points. Tc l tng ng vi 45 li. Nh th chng ta thc s ch phm 6 li (394 event c t ch cn li 6 event cha) . Tt nhin l chng ta bit trong s 45 li th c c cc li v rng buc mm. Nn chng ta cng khng th trch g Kostuch. V chng trnh ny ch n gin l chng trnh m

phng thut ton. V vi yu cu th ch cn n chy v tm ra c phng n l c ch khng nht thit l vi tt c cc test u phi chy c. Tt nhin l chng ta c th lm ging nh nhng g m TimeTabling Competition yu cu tuy nhin iu l khng cn thit v h thng gio dc ca chng ta l khc so vi h thng gio dc nc ngoi. Nh th c ngha l chng trnh cn vit phi c nhiu im khc, v d nh s trnh hc mt mn qui nh s tit lin tip ca mn , v s tit trong 1 ngy l 6 ch khng phi l 9 nh l nc ngoi. V s mn trong 1 ngy l t 1-3 ch khng phi l 9 tit l 9 mn khc nhau trong 1 ngy. S ngy hc 1 tun cng l 6 ch khng phi l 5 nh nc ngoi. Trong chng trnh ny em chy kim th vi 20 test v em ra so snh vi chng trnh ca Kostuch th sinh ng v tr s 1 trong bng xp hng ca hip hi Meta Heuistics, th a s so v tc chng trnh ny c tc nhanh hn hn nu khng mun ni rng nhanh hn rt nhiu, tuy nhin l v l do trong chng trnh chng em b qua thn tin v cc rng buc mm trong khi li l mt trong nhng yu cu rt quan trng. Nh vy c th suy lun ra rng trong khong thi gian tng t chng trnh ca kostuch hay nhng th sinh tng t cng tm ra kt qu ging chng trnh ca em tuy nhin h c gng ci thin chng trnh nhng cng chng thu c li nhiu t cng vic . Chng em mun khng nh rng h khng thu uc nhiu v trong cc chng trnh ca h im vn l nhng con s rt to thng th ln n con s ln hn 100, Khng nhng th nhiu bin i sau ny cn c th dn n trng hp ti hn ca kt qu. Ch : bng thi kho biu s c dng nh hnh di y, nh th th ct dc l cc time slot cn cc hng ngang tng ng vi cc phng, cc con s ghi trn cc chnh l s hiu s kin, xem cc thng tin v s kin th chng ta s s dng combo pha bn trn thc hin iu .

g. Phng n gii quyt nt cc rng buc mm


Khi xy dng chng trnh c th tm kim c cc kt qu tt hn chng ta phi lm thm kh nhiu th, ci quan trng nht, hay ct li nht chnh l mt hm c th nh s score (cho im) i vi tng thc th mc nh nht tc l cc s kin. Chng ta bit cc s kin l cc thnh phn nh nht ca bng thi kho biu v khng th chia c thm na. Ta cn tnh im cho mi s kin nh gi xem thi kho biu m chng ta lm gi l tt c cha, hay c cha. Chng ta c th ni s qua qu trnh tnh im cho cc s kin. cho im vi cc s kin chng ta cn c vo cc s kin c xp lch trc , nu s kin ny c xp ti time room slot no m gy xung t vi k s kin khc theo cc tiu ch khc nhau th tng cc score xung t vi tng s kin chnh l score ca s kin. Trong phin bn ny chng em cha a ra mt chng trnh nh score c th kim tra xem mc hay v d ca chng trnh, tuy nhin trong cc bn sau th chng em s c gng a n vo hin thc. V cc thng tin v qui cch nh score hu ht l qu trnh hc tp phng n nh score ca Kostuch, i vi bi bo co ca kostuch chng em c gng dch v tm hiu phng php. V sau y chng em xin a ra bn dch y ca Kostuch th sinh s 1 trong cuc thi timetabling competition.(y l bi dch ca thnh vin o Bch Giang, bi dch ny c th tm thy trong \TaiLieu\kostuchBichGiang.doc)
1. Gii thut Nguyn tc chung ca chng trnh nh sau: Lc u, phn m t ca bi ton c bin dch, sau , mt php gn chp nhn c ban u c hnh thnh m khng cn quan tm n hm mc tiu. Sau , th t ca cc khong thi gian (time-slot) c hnh thnh thay i theo th t lm gim nhng im bt li s dng gii thut m phng ti thp (simulated annealing) v cui cng chng ta cho php cc i s kin trong cc khong thi gian khc nhau c tro i (nu tnh chp nhn c vn c bo m) theo th t lm gim hn na hm mc tiu, li dng gii thut m phng ti thp. 1.1. iu khin d liu v x l trc

File d liu u vo cho mi trng hp cha s cc s kin (events), s cc phng hc (rooms), s cc c trng (features), s cc sinh vin (students). Tip l kch thc ca cc phng khc nhau, mt danh sch cc c trng c tho mn bi cc

phng, danh sch cc c trng cn thit ca cc s kin khc nhau, v cui cng l mi sinh vin mt danh sch cc s kin m anh ta / c ta mun tham gia. S sinh vin, s phng hc v s s kin l tng qut. Cc thgn tin cn li s c tm tt trong hai ma trn gi l ma trn incidence (trng lp) v ma trn event-room (s kin - phng). Ma trn event-room c tnh n trc tin. l mt ma trn boolean vi kch thc bng s s kin*s phng (events*rooms) v hng i ch ra nhng phng no l thch hp cho s kin i. khi to cho phn t (i,j) chng ta kim tra tt c cc c trng xem liu s kin i c cn n n khng v phng j c th cung bc c c trng khng. Nu c th phn t (i,j) l true, ngc li th n l false. Bc tip theo l tnh kch c (size) ca mi s kin s dng thng tin v s tham gia ca cc sinh vin. Vi thng tin event-size chng ta sa i ma trn event-room: mi phn t m room-size nh hn event-size th t l false. Sau ta s c ma trn event-room cui cng. Sau chng ta tnh n ma trn incidence. l ma trn vi kch thc s s kin*s s kin (events*events) v phn t (i,j) cho bit 2 sj kin i v j c th t trong cng mt khong thi gian khng ( cn phi l cnh ca ma trn trong bi ton t mu th). khi to gi tr cho mi phn t n gin ch cn kim tra xem c sinh vin no mun tham gia c hai s kin khng. Ma trn c thay i trong bc th hai da vo thng tin t ma trn event-room: chng ta tm kim cc s kin vi ch mt phn t l true trong hng ca n (tc l cc s kin ch xy ra c trong mt phng). Sau ta nhm cc s kin trong cng mt phng nh l tu chn duy nht ca chng. Quy nh rng cc s kin trong cng mt nhm khng th xy ra trong cng mt khong thi igan v do ma trn incidence c cp nht cc s kin trong cng mt nhm to thnh mt khi. Bng 1: Tng hp s liu cho 10 trng hp u tin. Trng hp Events Rooms features students Events per student 1 400 10 10 200 17.76 2 400 10 10 200 17.23 3 400 10 10 200 17.71 4 400 10 5 300 17.43 5 350 10 10 300 17.77 6 350 10 5 300 17.77 7 350 10 5 350 17.47 8 400 10 5 250 17.58 9 440 11 6 220 17.36 10 400 10 5 200 17.78

average Roomoption 1-option events Edges added

81.34 140 1.96 133 3488

83.52 151 1.92 208 4600

94.23 139 3042 222 6472

90.60 168 2045 124 2412

109.26 193 1.78 262 5944

91.01 174 3.59 19 228

72.43 196 2.7 115 1432

68.06 151 2.93 93 1620

75.30 146 2.58 129 3684

80.36 133 3.49 40 1274

Bit rng mt s lng ng k cc s kin ch c mt tu chn phng bc ny c v hu ch bi v nu thiu i thng tin ny trong ma trn incidence vic tm ra mt nhim v tho mn nhng rng buc b sung ny tr thnh mt vn ca phng php th v sai. Bng 1 a ra tng quan v mt vi s liu tng hp cho 10 trng hp u tin. Khi nhn c cc kt qu ca nhng trng hp khc nhau chng ta hy th gii thch s khc bit trong kt qu bng cch quan st s khc bit gia cc trng hp nh l c m t trong cc s liu tng hp. kt thc phn ny chng ta s a ra mt quan im c bit ban u v cc gi tr ny v hiu ng ca chng trong bi ton thi kho biu. Thng tin quan trng hng u l tch ca s phng hc v s khong thi gian (cho mi trng hp chng ta c 40 khong thi gian thng thng v 5 l thch hp nhng khng cng bng) so snh vi s s kin. Chng ta thy rng con s 40 khong thi gian (iu ny nhn c d dng v bi ton c mt li gii hon chnh) l cht trong hu ht cc trng hp nhng cc trng hp t 5 n 7 t ra l lng hn lm cho n d dng tm ra mt php gn chp nhn c ban u. S cc c trng khc nhau c quan h ti s room-options. Khuynh hng cng nhiu c trng cng t tu chn c th thy r rng rng n c ngha a dng dn trong khun mu yu cu. S sinh vin thay i ng k qua cc trng hp v v s s kin trn sinh vin hu nh khng i qua cc trng hp d hiu rng gi tr ca hm mc tiu c lin quan ti s sinh vin cng nh l s sinh vin l nguyn nhn duy nht gy ra cc im bt li. i vi bi ton t mu th th thng tin v bc trung bnh trong th c cho bi ma trn incidence v bc cao nht l c quan h vi nhau. C v nh l bc trung bnh cao v bc ln nht lm tng phc tp ca vn . Bi ton c v kh hn khi m

gi tr trung bnh ca s room-options i vi mi s kin gim i bi v n lm cho vic tm ra s tng hp ln nht trong mt khong thi gian l tng hp tt c cc s kin gn n kh hn. Hai hng sau cng cho thy hiu ng thm cnh trong ma trn incidence l ng k trong hu ht cc trng hp.

1.2.

Tm php gn gii thch hp u tin

Khi hon thnh cc bc chun b ny ta c th bc vo giai on tip theo hnh thnh mt thi kho biu ban u chp nhn c s dng gii thut t mu th v gii thut thch hp ln nht. Trong giai on ny chng ta s c gng gn cc s kin vi cc khong thi gian v gia cc khong thi gian vi cc phng theo cch m khng lm cho cc rng buc cht b vi phm. Trong giai on u tin chng ta s th t ti ch ny bng cch ch dng cc khong thi gian khng c bt li nhm phc v cho cc rng buc mm lin quan n cc s kin c xem xt. Nu vic ny tht bi chng ta khai ph n cc khong thi gian cn trng cha c dng. 1.2.1. Bc u tin Chng ta bt u bng cch dng gii thut t mu c th t cho th cho bi ma trn incidence. Th t m cc s kin c quan tm t mu l th t thoi ho. Php gn mt khong thi gian (m ta nh danh bng mu sc) cho mt s kin trong phm vi quan tm thc hin theo cch sau: chng ta quy nh cc khong trong s 40 khong l thch hp cho s kin, ngha l khng c mu no xung t vi mt s kin c gn trc. Trong s cc tu chn ny ta gn mt khong thi gian cho gi tr nh nht ca s s kin trong quy nh s s kin trong khong thi gian ny khng vt qu s phng. Cc s kin khng th c gn cho mt khong thi gian c t trong mt kho cha cc s kin cha c gn i cho s quan tm rng hn. Sau php gn u tin ca cc khong thi gian ta thc hin gii thut thch hp ln nht cho cc na th i vi mi khong thi gian. Na th l th con ca ma trn event-room ti chng ta ch dng cc hng tng ng vi cc s kin c gn cho cc khong thi gian quan tm. Cc s kin khng ng vi cc phng trong gii thut thch hp ln nht c loi b khi danh sch cc s kin trong khong thi gian ny v c a vo kho cha cc s kin cn s quan tm rng hn.

1.2.2. Bc ci tin Chng ta gi giai on tip theo l bc ci tin v m t c th y. N s c s dng theo ng khun dng trong giai on tip theo. tng l chng ta chn mi s kin cha c gn v qut 40 khong thi gian c hnh thnh trong giai on u : trc tin ta kim tra xem c xung t v mu sc vi mt khong thi gian cho khng v nu khng th c th b sung s kin vo khong thi gian m gii thut thch hp ln nht c th gn cc phng cho s kin ny v cho tt c cc s kin c trc ca khong thi gian khng. Nu iu ny l c th s kin c gn cho khong thi gian v phng c xc nh trn v cn li b cha cc s kin cha c gn. C 2 c ch lm cho iu ny hot ng:

Cc s kin khng tm c mt khong thi gian v do c a vo kho cha s kin trong giai on t mu ca bc u tin by gi li c th ph hp vi khong thi gian no ti cc s kin b loi b trong giai on gn phng.

Cc s kin b loi b trong giai on php gn phng c th ph hp vi cc khong thi gian khc.

2.2.3. S sp xp li i vi cc s kin cn li khng c cch g xp chng tr khi chng ta thay i php gn c. Chng ta gi bc u tin trong hng i ny l s sp xp li (shuffling). i vi mt s nh ca cc bc lp (trong gii thut ny c t l 50000) chng ta quan st tt c cc s kin trong kho cha s kin cha c t v chn ra mt khong thi gian ngu nhin. Trc tin chng ta kim tra xem c s xung t v mu sc gia thnh phn ny v khong thi gian c chn hay khng. Nu khng th chng ta tm thi gn s kin cho khong thi gian ny v thc hin gii thut thch hp ln nht. Nu s s kin c gn cho mt phng ln hn s s kin ban u trong khong thi gian ny chng ta sp xp t mt s kin cha c gn. Nu s s kin vi cc phng l khng i chng ta ly mt s kin khng c phng v t n vo kho cha cc s kin cha c gn (Nh rng s s kin thch hp cho php gn phng chp nhn c c th gim xung thp hn con s ban u). Mc ch l trong trng

hp nh vy s kin cha c gn mi s khc vi s kin cha c gn ban u. Nu iu ny ng ta thc hin th tc gi n bc ci tin i vi s kin ny trc khi t n vo trong kho cha s kin cha c gn vi hy vng rng n s thch hp vi mt khong thi gian khc. tng thm kh nng cho s kin cha c gn ban u l thnh phn ca gii thut thch hp ln nht mi ta ngu nhin ho th t trong cc nt xut hin trong gii thut thch hp ln nht. Giai on 1 Giai on 2 2000 2000 1 2 5000 5000 Bng 2: Cc tham s i vi s n Giai on 3 100 6 20000

restarts blow-up steps shuffle steps

2.2.4. S n (blow-ups) Cc s kin cn li c xem nh kh gii quyt v chng ta phi bc vo mt bc xa hn s dng cc c lng xm lc lm thay i cc php gn thc hin trc . tng y l chng ta p t vic v tr ca mt s kin cha c gn vo mt khong thi gian c bng cch trc tin loi b tt c cc s kin khi khong thi gian ny (blow-up) ri t cc s kin cha c gn vo khong thi gian gi y l rng. Sau chng ta lp y cc khong thi gian bi cc s kin b loi b m khng gy xung t v mu sc vi cc s kin cha c gn ban u. Tip ta gn cc phng cho cc s kin v t cc s kin c xung t mu ny hoc cc s kin m khng c phng vo kho cha s kin cha c gn. Theo cch ny chng ta chp nhn nhng thay i m c th lm tng thm s s kin cha c t. Sau thay i ny ta p dng bc ci tin vo cc s kin cha c gn v sau ta thc hin mt s bc lp ca gii thut sp xp li. Sau mt s nht nh cc bc blow-up (ngha l blow-up kt hp vi bc ci tin v sp xp li) chng ta khi ng li ton b th tc ti php gn tt nht i vi cc s kin cha c gn. Trong gii thut chng ta c 3 tp hp khc nhau ca cc tham s c trnh by trong bng 2. Nh rng giai on u tin ch cho php mt bc blow-up v do c bn cht tham lam trong khi hai giai on cn li chp nhn mt thi kho biu xu

hn nh l mt v tr khi u. Khi m s bc blow-up tng ln thi gian yu cu tng ln theo ng dc hn v do ch thc hin 100 ln khi ng li trong giai on cui cng. 2.2.5. M nhng khong cui cng Cc s kin cha c t khng k n hiu qu trn c phn b trong 5 khong cui cng s dng cng gii thut trong phn 1.2.1. Nu iu ny khng t nhng s kin ny ngoi xung t trong 5 khong thi gian mi chng ta c th dng cng cc phng thc nh trn gii quyt vn nhng trong thc hnh iu ny chng minh c s khng cn thit nh l s s kin cn li sau khi cc bc blow-up p dng cho mi trng hp v cho mi n v ngu nhin di 5 m m bo tm ra c php gn u tin thch hp. Trng hp Events Initial 1 400 78 2 400 59 38.1 9.2 0 0 0 11.0 3 400 43 31.1 13.8 2.7 2.04 2 170.8 4 400 63 44.3 18.4 1.3 0.4 0.4 92.9 5 350 21 20.3 16.8 3.28 0.64 0.64 103.2 6 350 31 24.4 10.7 0 0 0 3.6 7 350 19 12.2 4.6 0 0 0 2 8 400 65 44.4 7.8 0.1 0 0 15.4 9 440 72 40.0 6.2 0 0 0 5.2 10 400 84 55.4 9.8 1.8 1.4 1.2 166.2

attempt Improvement 46.6 attempt Shuffling Blow-up 1 Blow-up 2 Blow-up 2 Time 8.3 0.3 0.2 0.1 40.5

1.3.

Cc kt qu ban u trong 10 trng hp u tin

S s kin cn li sau mi giai on trong mi trng hp c ly trung bnh vt qu 25 khc vi cc n v ly ngu nhin c th thy trong bng 3. Kt qu quan st u tin ca chng ta l tm c php gn thch hp ch dng 40 khong thi gian cho mt na s trng hp trong tt c cc trng hp c ly ngu nhin. i vi 3 trng hp sau chng ta hu nh khng tm thy php gn thch hp cho trng hp c gieo ngu nhin v thm ch trong 2 trng hp ti chng ta khng th tm c mt thi kho biu vi s s kin nh vy m phi bc vo khong thi gian c xem xt l rt nh. Chng ta cn thy rng giai on blow-up cui cng khng nh hng ng k n

kt qu. Nh rng s bin i gia cc trng hp gieo ngu nhin khc nhau trong kt qu trong bc ci tin l ph thuc vo gii thut thch hp ngu nhin (randomised matching algorithm). Nh nhc n pha trc by gi chng ta s th kt hp cc kt qu ny vi cc c im ca cc trng hp khc nhau. R rng l cc s liu ca chng ta trong bng 1 khng tm lc c tt c cc kha cnh lin quan ti vn php gn u tin, v d nh c ca nhm ln nht. nhng chng ta vn hy vng gii thch c mt vi s khc bit quan st c. Nh l cc bin c gi thch chng ta tp trung vo trung bnh cng v gi tr ln nht ca bc trong th, vo room-options c th v liu 40 khong c phi l cn di cho thi kho biu thch hp (iu ny khng ng trong cc trng hp t 5 n 7). Kt qu u tin chng ta c gng gii thch s dng s hi quy tuyn tnh l s s kin cha c gn sau giai on sp xp li. M hnh bao gm tt c 4 bin c mt gi tr R2 l 0.94 v th duy nht v ngha l so room-options vi mt gi tr p l 0.051. Nh mong i tng gi tr bc trung bnh v gi tr bc ln nht s lm tng s s kin cn li khi c s ni lng iu kin (ngha l 40 khong thi gian khng phi l cn di) v s tng room-options s lm gim s s kin cn li. Cn phi lu rng bin room-option c th lng iu kin v bc cao nht tr nn v ngha cng nh l bc trung bnh vn l bin c ngha duy nht vi gi tr R2 l 0.68. Gii thch cc gi tr sau giai on blow-up tht bi v chng ta kt lun rng cc s liu tng hp ca chng ta khng th dng d on cc kt qu cui cng ca giai on php gn u tin. iu ny ph thuc vo hoc l vic thng tin quan trng khng c a chng hn c ca tp gi tr ln nht, hoc l nhng s khc bit thc ra l ph thuc vo s bin thin ngu nhin m khng phi l kt qu ca nhng s khc bit gia cc trng hp. 2.4 S dng SA pht trin hm mc tiu: Khi tm ra mt php gn chp nhn c th mn (trong a s cc trng hp) rng buc mm l khng s dng cc khong thi gian c xem xt chng ta thay i s ch theo hng hai rng buc mm khc, c th l cc sinh vin vi mt s kin n trong mt ngy v cc sinh vin vi nhiu hn hai s kin trn mt hng. Trong biu din

heuristic y chng ta la chn mt quan im tham lam ca ci nhn t chi b qua bt k mt kt qu t c no trc. Trong trng hp ca chng ta iu ny c ngha l chng ta khng cho php s thay i thi kho biu ban u dn n cc php gn khng chp nhn c v cng khng chp nhn s chuyn i ci s t cc s kin trong cc khong thi gian c xem xt ( trong cc trng hp ni mi s kin tn ti chng ta khng chp nhn mt s tng v s ca chng nhng khng iu khin c c ca chng.) 2.4.1. S sp xp th t cc khong thi gian: Trong bc u tin chng ta chn cc khong thi gian c to thnh trong sut qu trnh khi to v khng c th thay i chng. Ci chng ta cn n l s sp xp th t. Ti mi mc chng ta th trao i mi cp khong thi gian c th c mt cch h thng. Nu s thay i lm gim hm mc tiu s chuyn c chp nhn. Nu kt qu l tng gi tr hm mc tiu chng ta chp nhn s chuyn vi s c th gim c gi tr v tin trnh ca thut gii. Nhng tham s yu cu c th thy bng 4. Chng ta ch rng bi ton m phng ti thp c mt khng gian gii php lin kt v min ln cn l cng c (equi-sized). Tin trnh chn la ca chng ta khng phi l mt tin trnh chun v chng ta chn qut min ln cn theo cch xc nh thay v mt cch ngu nhin. Chng ta chn cch tip cn ny gim thi gian tnh ton v chng ta c th chc chn rng mi cp c kh ng trao i c quan tm t nht mt ln vi mi mc m khng c vic thc hin mt lng ln cc bc ngu nhin. iu ny l c th chp nhn c v chng ta thy bc my ch nh l mt s c tnh mang tnh h tr cho phn chnh ca chnh trnh ca chng ta ci c m t phn ti. Nn khng ng g phi tn nhiu thi gian tnh ton ci thin kt qu ca giai on ny khi m c th thc hin iu bng cch c nh cc khong thi gian trong phm vi chp nhn c nhng vi ng i tu th t ti u s c gi tr hm mc tiu khc xa vi gi tr ti u c th nhn c l 0. 2.4.2. Thay i cp cc s kin: Giai on ny hnh thnh phn quan trng ca thut gii ca chng ta, c v thi gian tiu tn v nh hng. tng c bn vn l tm kim a phng theo thut gii m phng ti thp. im khi u ca khng gian li gii s l thi kho biu tt nht tm

c bi bc sp th t. Min ln cn c nh ngha bi tt c cc thi kho biu c ng mt cp s kin b tro i khong thi gian ca chng. V vy chng ta ch tm kim trong khng gian cc thi kho biu chp nhn c. chn la ln cn tip theo chng ta mt ln na s dng lc xc nh: i vi mi mc chng ta th trao i tt c cc cp s kin mt cch h thng. Th t tm kim ny l xc nh v khng ph thuc vo s chp nhn hay ph nhn ca s di chuyn. Cc tham s yu cu c ch ra bng 5. Cc mc c chp nhn b gim i khi so snh vi th t c sp xp v s cc sinh vin lin quan n mi di chuyn l nh hn nhiu y v do tng lng gi tr c th gim c l nh hn nhiu. Ch rng mt vi gi nh chung v min ln cn tt trong tm kim cc b l vi phm cch tip cn ca chng ta, ch yu lin quan n khng gian tm kim nhng cng do cc c ca min ln cn khc xa so vi chun. chn la min k cn tip theo chng ta khng thc hin s chn la ngu nhin chun m tin hnh mt cch xc nh. 2.4.3. Tm kim tham lam (Greedy) Nh l bc cui cng nhm ci thin thi kho biu chng ta thc hin mt php tm kim m phng ti thp vi kh nng chp nhn thp hn s bt u vi gii php tt nht tm thy n nay ti khi gii hn thi gian t n. Bi gim mc chng ta gii hn s tm kim trong min ln cn ca li gii ny v thc hin mt cch hiu qu tm kim tham lam trn cc li gii. Cc gi tr c a ra bng 6. 2.5 Kt qu hm mc tiu cho 10 thc th u tin: Gi tr ca hm mc tiu ti im kt thc ca mi giai on c th c nhn thy trong bng 7. Chng ta a ra cc gi tr tt nht gia 25 ht ging ngu nhin khc nhau c s dng. Chng ta c th thy kt qu thu c trong cc trng hp khc nhau thay i ng k. V s sinh vin l nguyn nhn ca im bt li nn ang tm hiu s tng quan gia gi tr hm mc tiu v s lng cc sinh vin. H s tng quan l 0.96 cho gi tr khi to, 0.93 sau khi sp xp th t, 0.06 sau khi trao i v 0.03 cho gi tr cui cng. Chng taci iu ny nh l du hiu rng phng thc thay i cp thc s l bc quan trng nht trong thut gii v kt qu ca n b nh hng bi cc c trng khc.

By gi chng ta s c gng gii thch s khc bit gia gi tr cui cng vi 5 bin: s ni lng (ngha l 40 khong c th l cn di hoc khng), bc trung bnh v ln nht, room-options, s cc sinh vin. S hi quy trn tt c tt c cc bin nh ra ch l bc trung bnh nh thut ng du hiu. Ci kt qu ny l c xc nhn sau bc gim c kinh nghim. M hnh cui cng ch bao gm bc trung bnh, c gi tr R2 ca 0.56 v gi tr p ca m hnh l 0.01. Nh s mong i gi tr ca hm mc tiu tng ln theo s tng bc trung bnh. Gi tr R2 thp mt ln na ch ra rng chng ta khng c mt tp hp s liu ng v s khc bint gia cc trng hp. S quan tm cui cng l thi gian chy ca thut gii. S hi quy s dng bc trung bnh v s lng cc sinh vin l mt gi tr R2 ca 0.8 vi c hai thut ng ngha quan trng cao tu . S gim i cc gi tr trung bnh ca cc bc c ngha lm gim nhiu thi gian chy do s di chuyn c th thc hin gim i ph thuc vo s xung t mu nhiu hn v s gim s sinh vin ko theo gim thi gian chy. iu ny ch ra rng nh gi thi kho biu mi quyt nh gi tr ca gii thut. 3. S pht trin xa hn: Trong khi nhng kh nng tm kim mt gii php cho tt c cc trng hp v mi ht ging t n l c th t c khng c cch no c lng cht lng ca li gii trc khi kt thc cuc thi. V mc d gi tr hm mc tiu l gim ng k so vi nhng tip cn trc vn c im no dnh cho thay i th nghim v xut tng mi. Chng ny lm ni bt mt vi bc xa ci c th c chn. 3.1 Hng tnh ton: S thay i c gi y khng trc tip nh hng n gi tr hm mc tiu nhng mong rng chng s lm gim thi gian chy ca tt c cc trng hp v do cho php nhiu gi tr hn cui cng dn n mt thi kho biu tt hn.

Hin ti l thut gii ph hp ln nht bt u vi s ph hp rng. Nhng thc t


c mt s ph hp ln sau khi tro i cpj cc s kin( s ph hp ln nht c khng c nt c chuyn ti mt khong thi gian khc). S dng s ph hp ny nh mt v tr bt u chng ta c th xc nh nhanh hn liu s kin

c thm l c th nm trong s ph hp ln nht sau hay khng do c th c nhiu nht mt s tng ln ng dn(path)

T nhng phn tch v thi gian chy r rng l nh gi thi kho biu nh mt
nhn t quan trng quyt nh phc tp. Mi thi kho biu mi hin nay c nh gi t u nhng s thay i di mt cp tro i l thc s bn l. t nht 3 trong s 5 ngy l khng h nh hng v do khng cn nh gi li. Kha cnh th hai ca s thay i trong tnh ton nn c thc thi m ch thng tin cn thit trong sut qu trnh thc hin. Bng cch thu th thm mt s thng tin chng ta s c mt ci nhn su hn vo cc vn .

Chng ta khng c cc s liu tng hp chnh xc ca trng hp c th ca vn


. Vn chnh l ch s room-options trung bnh khng c trng trong m hnh ca chng ta. Gi s rng php gn phng l do vy khng gy ra thm kh khn cho vic tm kim mt thi kho biu thch hp m chc chn l sai. thy iu ny chng ta thc hin cng mt gii thut m khng kim tra xem cc phng c sn sng cho tt c cc s kin trong mt khong thi gian hay khng. iu ny tt nhin s dn n vic chp nhn nhiu s chuyn bin hn. Kt qu r rng l: 8 trng hp c th c gii quyt vi cc gi tr xp x 10 (6 trong s chng l cc kt qu c mt ch s). V vy php gn phng l mt vn . (Gn nh ng ch l khng c s ci tin mang tnh chuyn dch no cho trng hp 5 khi m gi tr cui cng l 173). Do vy chng ta coi nh l s room-options trung bnh m t n khng phi l s liu tng hp ca cc s kin khng tm c tt c cc kha cnh quan trng ca bi ton. C th l s th v nu chng ta tm kim cc s liu tng hp khc nhau m t bi tnh hung room-option, chng hn nh coi cc s kin c th xp vo hn mt na s cc phng cng nh l cc s kin vi mt vi tu chn.

Nh mt thng tin trung gian gia m t trng hp c th ca bi ton v kt


qu ca gii thut chng ta c th gp cc s liu ca cc dch chuyn c chp nhn trong giai on trao i (bao nhiu thay i gi tr / khng thay i g gi tr / c chp nhn do kh nng), v v cc di chuyn b loi (bt k l do xung t mu, cc vn vi chuyn phng hay do kt qu gi tr hm mc tiu.)

e. Nhng iu hc c t chng trnh th nghim u tin


chnh l cch ci nhn chung v bi ton xy dng thi kho biu, hiu cch xy dng v t chc d liu trong chng trnh.ng thi trong khi thc hin chng em hc c rt nhiu k nng trong lp trnh VB6, c th c th k n l cch hin th trn grid, cch vo ra mt file d liu, cch bt li v debug chng trnh

3. Sche2 - ng dng thc t lp thi kho biu ti Vit Nam (sche2-hastest)


a. Nhng kh khn v th thch
i vi bi ton lp thi kho biu trong cuc thi time tabling chng ta bit c rt nhiu cc yu t u vo tuy nhin i vi cc bi ton lp thi kho biu ti Vit Nam th chng ta cn rt nhiu vn cn phi bn, l khng chun, l mun hnh vn trng. Phong cch o to chng ta cng khc xa so vi phong cc o to ti cc nc phng ty. Cc nc phng ty h hc theo kiu tn ch l chnh th chng ta hc theo phong cch nin ch l chnh. Nhng ni chung l kiu khc nhau ny khng lm kh cho cng vic lp trnh qu nhiu m cc tiu chun khc mi gy kh khn thc s. Chng em c th k di y mt vi khc bit khng nh

n v hc tp:
n v hc tp cc nc trn th gii do phong cch l hc theo tn ch l chnh thnh th cc sinh vin l n v nh nht, v trong qu trnh xp lch th ngi xp lch u coi mi sinh vin l mt n v tham gia vo qu trnh hc tp. Cn i vi Vit Nam chng ta th do chung ta hc ch yu (phung php o to) l theo nin ch nn n v o to ca chng ta s l cc lp, cc nhm sinh vin. Mi nhm sinh vin s c mt lch hc tp ging nhau, mi nhm sinh vin y l mt lp hoc cng c th ch l mt na lp, hay 1/3 lp tuy nhin thng thng th nhm sinh vin, n v nh nht cng chung mt gio trnh ging dy, hay chng trnh o to l mt lp.

Cc dng c hc tp
i vi cc dng c hc tp m ni th Vit Nam chng ta phng chm l hc l thuyt l chnh, t thc hnh nhiu mn l khng c thnh th cc dng c hc tp gn nh l yu t khng c tnh n trong qu trnh thnh lp thi kha biu, y cng c th l mt im nh nhng hn cho cng vic lp trnh xy dng thi kho biu ca mt trng i Hc ti Vit Nam.

n v ho nhm tit:
i vi cc chng o to nc ngoi im d dng hn so vi vic lp trnh to mt chng trnh o to trong nc l cc chng trnh o to nc ngoi phn theo cc tit n, ch khng phn theo cc nhm tit nh Vit Nam. l ci kh hn hn so vi vic lp trnh o to nc ngoi. Chng ta bit rng vi mt mn hc c s tit l 10/ tun chng ta c rt nhiu cch phn chia nhm 10 tit ny thnh cc nhm nh hn. Cc nhm nh hn l nhm cc tit nm trong khong t 2 n 4 tit. Nh vy chng ta c th chia nh sau: 10 = 4 + 4 + 2 10 = 3 + 3 + 4 10 = 3 + 3 + 2 + 2 Vi mi cch nh th chng ta s c mt cch xp lich khc nhau, nh vy c th thy cch xp lch ca Vit Nam thin hnh vn trng hn so vi cch xp lch ca nc ngoi.

Cc gio vin
Nu chng ta xem li chng trnh timetabling competition th chng ta s thy rng trong qu trnh to thi kho biu hon ton khng c s tham gia ca cc gio vin, tuy nhin Vit Nam th cc gio vin c tham gia n vn ging dy v chng ta cn phi qun l lun c qu trnh hc tp ging dy ca cc gio vin. Chng trnh hc nc ngoi mang phong cch hng bi ging cn chng trnh hc ti Vit Nam mang phong cch hng mn hc vi nhng khc bit to ln chng ta khng th p dng mt cch my mc nguyn tc xp lch ca nc ngoi m gii quyt bi ton chng ta phi c ch bin i i cht. Chng ta c hai phong cch ging dy l ging dy hng bi ging v ging dy hng mn hc. Vi cch ging dy hng bi ging th cc gio vin ch bit c bi ging ca mnh m hon ton khng bit l ton b mn hc s bao gm nhng g. i vi phong cch dy hc ny th s ling gio vin l mt con s rt ln. i vi kiu th hai l kiu hng mn hc th mt gio vin s kh nng dy tt c cc mn hc ca mnh ch khng phi ging theo phong cch th nht l gio vin no ch bit cc bi ging ca mnh ch khng bit ton b mn hc. C l phong cch gio dc nc ngoi theo phong cch hng bi ging cho nn trong cuc thi time tabling competition th gn nh chng ta khng

thy xut hin s tham gia ca cc gio vin trong . chnh l im khc bit, thc s nc ta qui cch hng bi ging ny cng c chnh l i Hc An Ninh, mi gio vin ch bit ging cc bi ging ca mnh ch khng c kh nng kim soat ton b mn hc, cho nn cch lp trnh ph hp vi n li phi khc i cht t. Nu chng ta nhn li cc phong cch ging dy ti Vit Nam chng ta s thy phong cch nc ta tht v cng phong ph v a dng. V gn nh tho mn ht yu cu ca tng trng chng ta phi vit ring vi chng trnh khc nhau c th p ng c nhu cu .

Cc s kin
Chng ta bit rng trong timetabling competition th chng ta c cung cp cc s kin ngay t bi. V cc s kin c cung cp t u bao gm ht thy cc thng tin cn thit cho vic lp thi kho biu. l sinh vin, l mn hc, l phng hc, v c thng tin v gio vin na. L d nhin rng trong timetabling th yu t gio vin c n i ch khng l r ra tuy nhin trong chng trnh m phng qu trnh xp lch thi kha biu thc ca Vit Nam th chng ta vn phi xt n vn v nu khng th n chng c cht no gi l ngha thc t na c. V ci kh l chng ta phi t hnh thnh ly cc s kin nu khng t lm c iu ny th chng ta chng th vit c chng trnh. Cu hi t ra l c nn lm ging nh cch m timetabling chng ta lm hay khng v nu c thay i th chng ta nn thay i nh th no V cu tr li lun l nn lm theo nhng g th gii lm v thc hin, vn nn to ra cc s kin v sau mt thi gian di tho lun v tranh ci th ton chu u nhm hp ti hi tho v timetabling do hip hi Meta Heuristics ch tr khng nh rng qui cch n v ho qu trnh lp thi kha biu bng cc s kin l d dng cho cng vic lp trnh hn bt c phng n no khc. Do vy ci m th gii mt nhiu nm tn nhiu cng sc bn bc v nghin cu th chng ta nn tip thu v bin i n lm sao c th ph hp vi cng vic ca mnh ch chng ta khng nn p i tt c mi th v ri li xy dng li n t u. Do vy vn t ra l chng ta phi c gng n v ho cc bi ging d dng cho cng vic lp trnh. Th trong thc t chng ta cng n v ho cc bi ging bng nhm cc tit hc lin tip. V t y chng ta s qui nh rng cc nhm tit chnh l cc s kin nguyn t. T mt tp hp cc s kin ny chng ta c thi kho biu cho cc lp cng nh thi kho biu cho gio vin v thi kho biu cho phng, hay thi kho biu tng th ca mt trng i hc. Nh vy trong chng trnh m phng (bc u tin) vo thc t Vit Nam chng ta s c mt s cc qui nh nh c m t di y.

b. Quy chun m hnh bi ton thi kho biu ti Vit Nam


M t bi ton
Chng ta c tp hp cc lp hc, cc lp hc th chng ta ch quan tm n cc thng s nh sau Chng trnh o to cho lp S sinh vin ca lp i vi thng tin v phng hc chng ta quan tm n : c ca phng hc i vi gio vin chng ta quan tm n kh nng dy ca gio vin , kh nng dy ca gio vin l cc mn m gio vin c th dy. i vi mn hc chng ta coi trng n s liu s trnh ca mn hc . V chng ta coi rng cc mn c 4 trnh th trong 1 tun chng ta s hc 4 tit, tng ng nh th v chng ta s lp thi kho biu cho 1 tun, sau th nhn ln cho n tun cn li l chng ta c thi kho biu ca c nm. L d nhin n gin l v chng em l sinh vin Bch Khoa, quen vi phong cch hc kiu ny nn chng em qui nh nh vy, m khng bit rng ti cc trng i Hc khc cn nhiu qui cch khc. l cch hc khng ng u theo k, tc l cc tun khng phi l hc tun no cng c s tit bng chnh s trnh m l mt con s khc. Tuy nhin cng khng cn quan tm lm n vn v n gin ch l vn chng ta m phng thut ton cn li nu chng ta quan tm n vn thng mi th chng ta cn phi bit nhiu th hn l thut ton, nh qung co, qung b thng hiu, thit k lm p giao din, ti u ho thut ton c v b nh, thi gian thc hin, phc tp chng trnh, tnh n gin tin li, d s dng vn vn v vn vn. Ni chng l cn rt nhiu iu cn phi lm. Trong quan trng nht ca bi ton lp thi kho biu li khng hon ton l lp t ng m l lm sao phi c ci bo co p hon thin, a dng p ng ht thy mi yu cu t pha ngi s dng. i vi cc s kin chng ta c bng cc thng s sau: ' Common Type Public Type TEvent ' for input eSbj As Integer ' Ten mon eLoop As Byte ' So tiet eCla As String ' Cac lop tham gia eSz As Integer ' So SV tham gia ' for scheduling eRm As Integer ' Tai phong eTch As Integer ' Giao vien

eDay As Integer ' Ngay ePeriod As Integer ' Gio eSerial As Byte ' Loai su kien 300, 150, 50 End Type Phi ni thm rng trong chng trnh ny chng ta cho rng chng ta ch c 3 loi phng hc. y l mt phn tch cha thc s st v cc phng hc ca chng ta phn theo cc nhm 250, 120 v 50 ch khng phi l 300, 150, 50 nh l trong chng trnh m phng tuy nhin chung em mun ni rng y cng ch l mt bc trong qu trnh hnh thnh v vit chng trnh thi kho biu ca chng em. M thc cht th qu trnh thay i cng khng n ni qu kh ch cn sa 3 s trong chng trnh l xong. Vi yu cu u vo th ny chng em chn phng n nhp d liu bng phng php sinh ngu nhin. Chng ta ni thm ay mt cht nu chng ta khng s dng phng php sinh ngu nhin m s dng phng n nhp vo t u th c l khi hon thnh xong chng trnh th ng thi cng l luc tt c nhm ra trng. Ni th th qu tht cng hi qu tuy nhin i vi bi ton thi kho biu thng thng th im kh nht l thi gian v b nh nn nu thi gian thc hin cng nhanh th cng tt. V vy sinh ngu nhin cc gi tr thi kho biu cn gip chng ta kim soat hu ht cc tnh hung kh khn sy ra (t nhin) trong qu trnh lp trnh. Tuy nhin do l qu trnh ngu nhin nn n cng c ci d ca n l khng thc t v nhiu ci rt phi l, theo ng qui tc ch sy ra trong tnh ton l thuyt m khng c trong thc t. Nhng n li l ci l c th th ht thay cc trng hp mt cch tt nht. V sau y chng em xin trnh by phng n hnh thnh ngu nhin gi tr u vo test.

c. Sinh Test ngu nhin


y chng ta vn s dng cc qui nh c v tn bin l tn bin no c ch s cui tn bin th chnh l bin lu gi s lng bn ghi ca mng. Trong chng trnh ny chng ta vn s dng VB6 thc hin m phng thut ton, v sau y l cc khai bo s dng trong chng trnh: Option Explicit Dim t1 Dim t2 ' Const Public Const MinSbjPerTch = 6 Public Const LimSbjPerTch = 14 Public Const MinSize = 45

Public Const LimSize = 50 Public Const LimSbjPerCla = 10 Public Const Days = 6 Public Const Periods = 6 ' Common Type Public Type TEvent ' for input eSbj As Integer ' Ten mon eLoop As Byte ' So tiet eCla As String ' Cac lop tham gia eSz As Integer ' So SV tham gia ' for scheduling eRm As Integer ' Tai phong eTch As Integer ' Giao vien eDay As Integer ' Ngay ePeriod As Integer ' Gio eSerial As Byte ' Loai su kien 300, 150, 50 End Type Public Type TClass cSz As Byte ' Dung luong lop cSbj(LimSbjPerCla) As Integer ' 10 mon ma lop lua chon End Type ' Common Variable Public LimEvents As Integer Public Events As Integer ' So Su kien Public Rooms As Integer ' So Phong Public Teachers As Integer ' So Giao vien Public Classes As Integer ' So Lop Public Subjects As Integer ' So Mon Public R300 As Integer Public R150 As Integer Public R50 As Integer Public E300 As Integer Public E150 As Integer Public E50 As Integer Public AVGLoop As Single Public Rm() As Integer ' Dung luong phong i Public Tch() As Integer ' Kha nang giao vien i

Public cla() As TClass ' Lua chon cua lop & so luong SV lop Public Sbj() As Byte ' So trinh cua mon i Public evn() As TEvent ' mang chinh Public TchTm() As Integer ' TKB1 theo giao vien Public RmTm() As Integer ' TKB2 theo phong Public ClaTm() As Integer ' TKB3 theo lop Public idx() As Integer ' Chi so event Public comment() As String ' Chu' thich' Public sched() As Boolean ' Xac dinh xem no da xep lich chua Public Ediv() As Boolean Public SbjSpace() As Byte ' sbjSpace(2)=3 nghia ' la mon 2 co 3 giao vien co the tha gia giang day Public range() As Byte ' So mon giao vien co the day Public idT() As Byte ' Chi so giao vien Public schedCount As Integer

Lp hc
Chng ta hy xut pht t u l t n v lp hc. Chng ta bit rng cc lp th trung bnh s sinh vin s nm trong khong t 40-50, y l lp c trung bnh khng qu nh v cng khng qu ln. Trong chng trnh ny chng ta gi s rng hu ht l cc lp u c s sinh vin nm trong khong , trn thc t th con s c th coi l ln hn hoc nh hn. Nh cc lp hc ngoi ng th s lng sinh vin ch nm trong khong t 20-30 cn cc lp trong. Cn cc lp i hc m th con s cn kinh khng hn nhiu l trong khong t 80-100 sinh vin / lp. Tuy nhin ci cng khng qu quan trng v chng ta ch tnh xem s lp tham gia mt s kin trung bnh l bao nhiu. L tt nhin ai cng c th thy nh hng ca Bch Khoa ho trong vic lp trnh, trong u c ca em (Nguyn c Khnh) ngi vit chng trnh th c l l vn ch bit n i hc Bch Khoa m cha quan tm g nhng ni khc nhiu lm. Phn tch chung: i vi 1 trng H ln nh H BK th s lng khoa l kh ln v s lng lp cng l kh ln v n gin ho chng ta ch coi l ti mt trng trung bnh s c 250 lp dnh cho 5 khoa khc nhau. Trong mi khoa tng ng s c 50 lp. Trng dy 5 nm nh th s c 10 lp mi kho trong 1 nm hc. Trong s 10 lp mi kho th bao gm 5 H, 2 Cao ng 2 Ti Chc v 1 Thc s. i vi yu cu th ny chng ta c th tc thc hin tnh ngu nhin gi tr cc lp:

Sub Random_Class(ByVal noClasses As Integer) Call VBA.Randomize Classes = noClasses ReDim cla(Classes) Dim i As Integer Dim j As Integer Dim n As Integer Dim k As Integer Dim NoSbj As Integer Dim a() As Boolean ReDim a(Subjects) For i = 0 To Classes - 1 cla(i).cSz = MinSize + CInt(Rnd() * (LimSize - MinSize)) n = 22 + CInt(Rnd(10) * 10) k=0 For j = 0 To LimSbjPerCla - 1 Do NoSbj = CInt(Rnd() * (Subjects - 1)) Loop While a(NoSbj) If k + Sbj(NoSbj) <= n Then a(NoSbj) = True k = k + Sbj(NoSbj) cla(i).cSbj(j) = NoSbj Else cla(i).cSbj(j) = -1 End If Next For j = 0 To LimSbjPerCla - 1 If cla(i).cSbj(j) <> -1 Then a(cla(i).cSbj(j)) = False Next Next End Sub Trong qu trnh sinh ngu nhin ny chng ta ng thi ghp vi qu trnh hnh thnh chng trnh o to cho lp, ni chung trong chng trnh ny th chng tnh o to cng c sinh ngu nhin v theo mt tiu chun rng, mi lp s hc mt gio trnh bao gm cc mn c tng s trnh nm trong khong t 22 n 23, thng thng th theo kho st ca chng em cc trng hc vi gio trnh nh nhng nh i Hc Kinh T th s trnh mt k ca h c khi ch l 23, 24 ch khng qu nng nh trng ta, hu ht cc hc k u nm trong khong t 28-32

trnh, c k nu tnh c qun s v th dc th cht cn ln n con s 35-36 trnh. (tip tc)

Cc phng
Cc phng hc rt a dng, mi trng H s lng cc loi mi khc nhau. Loi c s nht l loi 50 gh (50 sits). Cc loi sau nhn dn ln bao gm cc ging ng 100, 150, 200, 250, 300. Tuy nhin cng c nhng trng H th s lng gh cc phng c s li l 40 hoc 60 tuy nhin 50 vn l ch yu v chng ta ch xt vi trng hp ny. i vi H BK th c 3 loi phng chnh l 50, 150 v 300. tng ng vi vic ghp 6, 3, 1 li thnh mt lp m. Sub Random_Room(ByVal noRooms As Integer) Call VBA.Randomize Rooms = noRooms R300 = CInt(Rooms / 5) R150 = CInt(Rooms / 5) R50 = Rooms - R300 - R150 Dim i As Integer ReDim Rm(Rooms) For i = 0 To R300 - 1 Rm(i) = 300 Next For i = R300 To R300 + R150 - 1 Rm(i) = 150 Next For i = R300 + R150 To Rooms - 1 Rm(i) = 50 Next End Sub y em mun ni thm rng ti i Hc Bch Khoa m ni th theo kho ca em th chng ta c khong 300 phng theo qui tc rng c c 1 phng 300 ch ngi (thc t l 250) th s c mt phng 150 ch ngi (thc cht l 120) v 3 phng 50 ch ngi. Tc l c th coi rng c c 1 phng c ln th s c 1 phng c va v 3 phng c nh nn trong chng trnh chng em vit tun theo t l ny. Hi ch ngha Bch Khoa mt cht.

Mn hc
i vi cng vic sinh ngu nhin cc mn hc chng ta s dng quy tc sau: 10% s mn l 2 trnh 15 % l s mn > 4 trnh cn li 75 % l cc mn 3 v 4 trnh trong s o s mn 3 trnh chim 30% ca 75% o s mn 4 trnh l 70% ca 75% v vi yu cu nh th th on m lnh thc hin chng trnh s nh sau: Sub Random_Subject(ByVal noSubjects As Integer) Call VBA.Randomize Subjects = noSubjects ReDim Sbj(Subjects) Dim n As Integer Dim i As Integer For i = 0 To Subjects - 1 n = CInt(Rnd() * 100) If n <= 10 Then Sbj(i) = 2 Else If n >= 85 Then n = 5 + CInt(Rnd() * 5) Sbj(i) = n Else n = Rnd() If n < 0.3 Then Sbj(i) = 3 Else Sbj(i) = 4 End If End If End If Next End Sub

Cc gio vin
i vi d liu gio vin th chng ta cn bit chuyn mn ca gio vin . Ci ny cn c s liu thc t chng ta mi bit c ti nng thc s ca cc gio

vin VN th no. Tuy nhin trong chng trnh m phng ny th chng ta c coi rng mi gio vin trung bnh c th dy t 12-20 mn hc khc nhau. C l l con s ny hi cao qu thnh th khi ti cho chy vi u vo 350 GV, 250 lp, 250 mn, 140 phng th s gio vin tht nghip ln ti 150/350 ngi v nhng ngi ny khng cn phi phn cng lm vic g tht kh thn cho h! V l do em cho kh nng thc t ca gio vin gim xung l t 5-10 mn tc l gim xung hn 1 na. Khng bit cc gio vin ca Bch Khoa c gii n c ny khng, hay km hn? Sau mt thi gian kho st thc t vi iu kin c s gip ca thy Vn Uy th chng em pht hin ra rng hu ht cc gio vin khng phi l dy c nhiu mn n nh th v c nhng gio vin c kh nng nhiu nht th cng ch c th dy c ti a 6 mn hc khc nhau ch khng phi l ng u t 12-20 mn nh trong m phng tuy nhin chng ta vn coi l c th chp nhn c v hai phin bn sau ny th chng em c gng khc phc vn . V theo kho st thc t th thng th cc gio vin s ch dy mt hoc nu nhiu th l hai mn ca gio vin .

d. Sinh cc s kin
nh ngha c s
u tin chng ta c gng c mt nh ngha c s th no l mt s kin. Lm iu ny l cn thit v thc t i vi nhng ngi s dng mi ngi ch bit cc thng s chnh l lp hc, l phng no, l mn hc g v gio vin no hc ch khng chia nh (phn r) cc qu trnh hc tp ra thnh cc s kin d xp lch, do mt nh ngha chnh xc hon chnh s gip chng ta thc hin r rng hn trong cc cng tc v sau. Mt s kin l mt nhm cc tit hc c cng mt mn hc, mt gio vin (c th l mt cp, nhng thng th ch l 1), mt nhm cc lp cng ngnh cng khoa cng kho hc chung. Nh th chng ta c nh ngha ca s kin theo ngn ng lp trnh VB6 nh sau: Public Type TEvent ' for input eSbj As Integer ' Ten mon eLoop As Byte ' So tiet eCla As String ' Cac lop tham gia eSz As Integer ' So SV tham gia ' for scheduling eRm As Integer ' Tai phong

eTch As Integer ' Giao vien eDay As Integer ' Ngay ePeriod As Integer ' Gio eSerial As Byte ' Loai su kien 300, 150, 50 End Type

Cc thao tc i vi s kin
Chng ta c mt nh ngha chnh xc nh th no l mt s kin th y chng ta s xem st xem c bao nhiu thao tc c thc hin i vi s kin th cu tr li ca chng ta l 3 thao tc, u tin l hnh thnh v to ra cc s kin. Cc s kin khi mi c hnh thnh ny ang trong tnh trng cha chun, v cn c chun ho dn dn tr thnh cc s kin chun, to d dng cho cng vic thc hin xp lch sau ny. Cng vic u tin ca chng ta l lm sao to c ra cc s kin mc c s, vi cu hi th ny chng ta s bt u chnh t chng trnh hc tp ca cc lp hc. Chng ta bit rng mi lp c mt chng trnh hc tp ring l cch chn ngu nhin trong s cc mn hc, v th by gi chng ta bt u t cc mn hc tng hp tt c cc lp tham gia li l chng ta c s kin mc c s. Hay cn c th ni rng l s kin mc th, mc ny chng ta cha th xp lch c v nu xp lch th khng c g m bo rng s sinh vin khng vt qu s lng gh trong phng hc , v im th hai l cc s kin ny cha c chia nhm tit m bo nhm cc tit s nm trong con s 2, 3, 4. c th mn l mn 9 trnh chng hn nh th th chng ta lm th no m c th xp vo ngy no, nu xp chng ta s vi phm nguyn tc v s lng nhm cc tit. ng ng chng ta s c cc chun ho sau: stdSize() chun ho v s sinh vin trong s kin v th hai l stdLoop() l chun ho v s tit hc lin tip lm sao tho mn s tit s nm trong khong 2-4 tit lin tip. Nhgn trc tin chng ta implement cng vic hnh thnh s kin Sub Create_Events() ' Tao mang su kien tu bang mon hoc Dim i As Integer Dim j As Integer Dim k As Integer ' Create Events = Subjects LimEvents = Subjects * 100 ReDim evn(LimEvents)

ReDim sched(LimEvents) For i = 0 To Events - 1 With evn(i) .eRm = -1 .eSbj = i .eLoop = Sbj(i) .eTch = -1 .eDay = -1 .ePeriod = -1 .eCla = "" .eSz = 0 .eSerial = 0 For j = 0 To Classes - 1 For k = 0 To LimSbjPerCla - 1 If cla(j).cSbj(k) = i Then .eSz = .eSz + cla(j).cSz .eCla = .eCla + CStr(j) + "." .eSerial = .eSerial + 1 End If Next Next End With Next End Sub Tip theo chng ta implement phn chia s sinh vin lm sao cho ph hp vi cc phng hc. Nu trong ny chng ta khng nh ngha chnh xc xem c bao nhiu loi phng th n qu trnh ny s rt kh cho cng vic lp trnh, nh chng ta qui nh trc th cc phng s c dung lngj cha nm trong cc gi tr l 150, 300 v 50 nn chng ta ch cn ghp lp lm sao nh hn cc con s ny l c mt s kin ri, phn cn li y xung cui dy, to ra thm mt bin mi ca s kin cha cc lp cn li, c chia nh th t s kin u cho n s kin cui cng th thi. Nh th m bo chng ta cn thm mng ediv() xc nh xem s kin ny chia hay cha hay l vn cha xt. V on m lnh implement ca n s nh sau: Function StdSize(ByVal RoomSize As Integer) As Integer ' Chuan hoa size cua su kien Dim n As Integer Dim cnt As Integer Dim s() As String

Dim i As Integer cnt = 0 Do While cnt <= Events - 1 If (evn(cnt).eSz > RoomSize) And (Not sched(cnt)) And (Not Ediv(cnt)) Then s() = VBA.Split(evn(cnt).eCla, ".", , vbTextCompare) n = UBound(s) evn(cnt).eSz = 0 evn(cnt).eCla = "" evn(cnt).eSerial = 0 Ediv(cnt) = True ' new event Events = Events + 1 With evn(Events - 1) .eLoop = evn(cnt).eLoop .eRm = -1 .eSbj = evn(cnt).eSbj Ediv(Events - 1) = False .eTch = -1 .eDay = -1 .ePeriod = -1 .eCla = "" .eSz = 0 .eSerial = 0 End With For i = 0 To n - 1 If evn(cnt).eSz + cla(CInt(s(i))).cSz <= RoomSize Then evn(cnt).eSz = evn(cnt).eSz + cla(CInt(s(i))).cSz evn(cnt).eCla = evn(cnt).eCla + s(i) + "." evn(cnt).eSerial = evn(cnt).eSerial + 1 Else evn(Events - 1).eCla = evn(Events - 1).eCla + s(i) + "." evn(Events - 1).eSz = evn(Events - 1).eSz + cla(CInt(s(i))).cSz evn(Events - 1).eSerial = evn(Events - 1).eSerial + 1 End If Next End If cnt = cnt + 1 Loop End Function

chia c chnh xc chng ta tun th nguyn tc chia t cc s kin cao xung thp, tc l cu lnh s nh sau Call StdSize(300) Call StdSize(150) Call StdSize(50) Tip theo chng ta s xt n vn phn chia cc s kin theo s tit. Ni chung l c rt nhiu cch c th chia cc nhm tit thnh cc nhm tit nh hn: Nu vi nhm tit 10 chng ta c th chia thnh 442, 334, 3322. Tuy nhin chng ta khng nn chia qu nhiu kiu m chng ta nn tun theo mt kiu, gii thut nh sau : Nu gp s kin c s tit > 4 th chia ra lm 2 s kin s kin c c s nhm tit l 3, s kin mi sinh c s nhm tit l phn cn li sau khi tr i cho 3. Nh th code cho chng tnh s l : Sub StdLoop() ' Chuan hoa so tiet cua su kien Dim cnt As Integer cnt = 0 Do While cnt <= Events - 1 If evn(cnt).eLoop > 4 Then Events = Events + 1 With evn(Events - 1) .eCla = evn(cnt).eCla .eSz = evn(cnt).eSz .eLoop = evn(cnt).eLoop - 3 evn(cnt).eLoop = 3 .eRm = evn(cnt).eRm .eSbj = evn(cnt).eSbj .eTch = -1 .eDay = -1 .ePeriod = -1 .eSerial = 0 End With End If cnt = cnt + 1 Loop

e. Xp lch
Tng quan
Chng ta c 3 pha trong vi sche hastest th chng ta ch cn s dng pha u tin thi v khng cn cc pha sau. Pha 1 s c gng lm cng nhiu cang tt cng vic lp (xp lch) cho cc s kin. sau y l ton b gi thut: Sub Algo() Dim i As Integer schedCount = 0 t1 = Now Call Create_Events ' reload Call StdLoop ' Standard Loop ' phase 1 ReDim Ediv(LimEvents) Call StdSize(300) Call StdSize(150) Call StdSize(50) Call Sort ' Xap sep Call init ' Xoa trang TBK1 va TKB2 For i = 0 To Events - 1 Call scheduling(idx(i)) Next t2 = Now Dim txt As String txt = "So luong su kien duoc xep lich " & schedCount & "/" & Events & vbCrLf txt = txt + "Start Time = " & t1 & vbCrLf txt = txt + "Stop Time = " & t2 & vbCrLf Call MsgBox(txt, vbOKOnly, "Completed Scheduling") End Sub Trong chng trnh th chng ta c th thy 2 bin l t1 v t2 y l hai bin nh du thi gian bt u v thi gian kt thc ca qu trnh thc hint thut ton. Trong chng trnh ny v l chng trnh vi qui m nh thnh th chng em a ngay thng bo ra cho ngi s dng bit li ca mnh y l cch a thng bo trc tip khng ph hp so vi qui tc xy dng chng trnh ln. i vi cc chng trnh thc hin cng vic ln th yu cu cc thng bo phi c gi i thng qua cc lp cho nhau rt nhiu v ch n khi n im cui cng l giao din vi ngi s dng th thng bo mi c hin ra cho ngi s dng xem bng lnh msgbox nh trn.

Trong bn thit k ny chng em ti u ho qu trnh tnh ton v lm gim s lng bin i t hn so vi s lng bin c s dng trong chng trnh u tin. Nh chng ta tho lun th chng trnh u tin chng em s dng qu nhiu bin s, mng s dng l kh v ti v. Tuy nhin cng phi ni mt iu rng chng trnh ny thc cht cng cha tit kim lm. V trong chng trnh chng ta s dng mt lnh nh sau: ' Create Events = Subjects LimEvents = Subjects * 10 ReDim evn(LimEvents) ReDim sched(LimEvents) R rng chng ta thy rng trong qu trnh ny chng ta s dng 2 mng v cng tn km l mng evn v mng sched vi s lng ln hn 10 ln mng subject. Nhng thc s th vn t ra l vi rng bng 10 ln so vi s mn th liu cn b trn hay khng. Cu tr li l vn c th trn trong cc th nghim vi chng trnh sinh ngu nhin ca chng ta xy dng trn th vn trn cha xy ra nhng nu vi cc kiu u vo khc th khng c g chc chn. V chng ta bit rng sau khi gi hmm sinh s kin Create_Events th chng ta c hm s kin vi rng l bng rng ca mng subject. n pha th hai l chia nhm cc s kin sao cho m bo v s lng sinh vin tham gia mt s kin l nh hn hn dung lng phng. Trong vn chn s lng phng l bao nhiu th ph hp chng em vn ch s dng c on v cha tnh chnh xc c xem s phng cn thit s l bao nhiu. nhiu khi khng th no tm ra thm phng c th t s kin vo v s phng u vo l khng xp lch. Tuy nhin vn cha phi l im yu nht ca chng trnh, m im yu nht li l nhiu khi thay i gio vin th cc gio vin u c i lm tuy nhin khng trao i gio vin th c gio vin phi i qu nhiu v c gio vin th khng c i lm. Cc vn gii quyt y l v cng tng i v khng chnh xc By gi chng ta quay li phn tch hm s scheduling(event), y l hm c ngha ln nht i vi cng vic lp thi kho biu. Sub scheduling(ByVal eID As Integer) Dim i As Integer ' Day Dim j As Integer ' Period Dim l As Integer ' Loop Dim r As Integer ' Room Dim id As Integer ' Time

Dim t As Integer ' Teacher sched(eID) = True For j = 0 To Periods - 1 ' periods j For i = 0 To Days - 1 ' Ngay i ' Neu su kien eID chua bi cam tai thoi diem nay If (Time_Accept(eID, i, j)) Then ' Dat thoi gian evn(eID).eDay = i evn(eID).ePeriod = j ' Khoa cac su kien lien qua khac tai thoi diem nay lai Call LockEvent(eID, i, j) ' Tim giao vien For t = 0 To Teachers - 1 If Teacher_Accept(t, eID, i, j) Then evn(eID).eTch = t For l = 0 To evn(eID).eLoop - 1 TchTm(t, i, j + l) = eID Next Exit For End If Next ' Tim Phong For r = 0 To Rooms - 1 If Room_Accept(r, eID, i, j) Then evn(eID).eRm = r For l = 0 To evn(eID).eLoop - 1 RmTm(r, i, j + l) = eID Next Exit For End If Next With evn(eID) If (.eRm <> -1) And (.eTch <> -1) Then schedCount = schedCount + 1 Else comment(eID) = "" ' Clears Classe ID Call UnlockEvent(eID, i, j) .eDay = -1 .ePeriod = -1

' Clears Teacher ID If .eTch <> -1 Then For l = 0 To evn(eID).eLoop - 1 TchTm(.eTch, i, j + l) = -1 Next .eTch = -1 Else comment(eID) = comment(eID) + "Ko co GV day." End If ' Clears Room ID If .eRm <> -1 Then For l = 0 To evn(eID).eLoop - 1 RmTm(.eRm, i, j + l) = -1 Next .eRm = -1 Else comment(eID) = comment(eID) + "Ko co phong`." End If sched(eID) = False End If End With ' - Neu nhu tim duoc KQ thi cung thoat ' - Neu khong tim duoc thi khong co cach nao tim ' ra giao vien or la phong hoc nen cung thoat Exit Sub End If Next Next sched(eID) = False End Sub chng trnh ny chng ta thy c rt nhiu khc bit trong phng cch suy ngh ca chng ti v bi ton lp thi kho biu thc cht th trong chng trnh trc chng ti a ra mt series cc bin s l ch nhm mt mc ch l lm th no c th tm ra c phng n ti u gii quyt bai ton thi kho biu vi thi gian nhanh nht nhng giai on hiu bit ca chng ti v bi ton thi kho biu l cha nhiu do c nhng suy ngh c th coi l kh nng cn. Tuy nhin ci c l hiu c vn cn lm g. Cn i vi chng trnh th hai ny chng ti khng lp li nhng sai lm khi thnh lp, xy dng cc bin mt cch v ti v nh th na.

gim thiu s bin ng thi cng l lm sao tng tc c hin th chng em xy dng 3 mng lu tr 3 thi kho biu ca cc thng s sau: gio vin, phng v lp hc. Cc mng c khai bo nh th ny: Public TchTm() As Integer ' TKB1 theo giao vien Public RmTm() As Integer ' TKB2 theo phong Public ClaTm() As Integer ' TKB3 theo lop V chng s c resize li bng cc cu lnh nh sau ReDim RmTm(Rooms, Days, Periods) ' Room, days, periods ReDim TchTm(Teachers, Days, Periods) ReDim ClaTm(Classes, Days, Periods) Trong days = 6, periods = 6. chnh l 6 ngy v 6 tit trong tun. u tin th tt c cc phn t ca mng 3 chiu ny u u =-1. Sau trong qu trnh xp lch chng ta s nh s cho n, s m n lu gi chnh l s hiu ca s kin. T s hiu s kin th chng ta c th tm li cc thn tin ph khc nh l : s sinh vin tham gia cc lp tham gia hc mn g gio vin no phng no ..

Chng ta s tip tc m t cng vic m chng trnh lm: u tin chng ta tm thi gian theo vng for nh sau: For j = 0 To Periods - 1 ' periods j For i = 0 To Days - 1 ' Ngay i ' Neu su kien eID chua bi cam tai thoi diem nay If (Time_Accept(eID, i, j)) Then Nu chng ta dung vng for cho s tit trc vng for cho ngy th chng ta s nhn c mt bng c hnh khc i so vi dng vng for cho ngy trc. Theo cch cc s kin c u tin gn vo cc tit u tin trc sau mi n cc ngy. Cn li nu chng ta s dng php gn vng for cho ngy trc th r rng l cc s kin s ru li theo ngy th hai chng ta c th d dng hnh dung nh trong hnh dui y Vi cc s 1 l cc s kin c t ch. Cch for period trc

D0 D1 D2 D3 D4 D5

p0 1 1

p1 1 1 1 1

P2 1 1 1 1

P3 1 1 1 1

P4 1 1 1

P5 1 1 1 1 1

Cch for cho day trc chng ta s c p0 p1 P2 D0 1 1 1 D1 1 1 1 D2 1 1 1 D3 1 1 1 D4 1 1 D5 1 1

P3 1 1 1

P4 1 1

P5

Thut ton
vi mi s kin eventID chng ta lm cc cng vic sau: La chn 1 thi im c th xp lch cho s kin. Thi im y bao gm 2 thng s l ngy no trong tun v tit th my. La chn mt gio vin ging dy cho s kin , cn c vo bng gio vien c kh nng dy mn g La chn mt phng c th xp lch cho s kin ti phng Nu mt trong cc yu t trn khng c th khng xp c lch cho s kin v chng ta nh du rng n khng xp c lch (shed(i) = false). Vi gi tr khi u c mng sched() u c gi tr l false ngha l cha xp lch C th xem li on code Sub scheduling(ByVal eID As Integer) End Sub a ra trn kim chng thut ton. Vn t ra l qu trnh kim tra xem gio vin dy au cha kim tra th no chng ta xem xt on chong trnh sau: Function Teacher_Accept(ByVal TchID As Integer, ByVal eID As Integer, ByVal dayID As Integer, ByVal periodID As Integer) As Boolean ' Giao vien nay co roi tai thoi diem nay khong ' Ong ta co the tham gia su kien hay khong

Dim i As Integer Teacher_Accept = False If (Not Teachable(TchID, eID)) Then Exit Function For i = 0 To evn(eID).eLoop - 1 If TchTm(TchID, dayID, i + periodID) <> -1 Then Exit Function End If Next Teacher_Accept = True End Function Trong ny th Teachable(TchID, eID) th nh sau: Function Teachable(ByVal tID As Integer, ByVal eID As Integer) As Boolean ' Xac dinh GV tID co kha nang giang day su kien eID khong Teachable = True Dim i As Integer For i = 0 To LimSbjPerTch - 1 If Tch(tID, i) = evn(eID).eSbj Then Exit Function End If Next Teachable = False End Function Tc l kim tra xem gio vin c th dy s kin ny khng? Tc l trong Teacher_Accept(tID, eID, day, period) chng ta lm cng vic kim tra xem gio vin tid c th dy c s kin ny khng? Xem trong thi im t (day, period) n (day,period + e.loop) gio vin dy lp no cha. giai on u chng ti khng ni r rng thi gian chng trnh s hai ny thay v ch l mng 1 chiu nh chng trnh 1 m l 2 chiu, mt chiu l ngy v 1 chiu l tit. V qu trnh tnh ton l c kh hn. Tng t nh th chng ta c cc phng n gii quyt i vi phng. Vi phng chng ta khng cn kim tra xem l phng ny c th c chp nhn bi s kin kia hay khng v khng ging nh gio vin, cc gio vin th c gio vin ny dy c mn ny khng dy c mn kia cn phong th cc gio vin v cc sinh vin thch hc ci g cng c. v do cng vic kim tra c i cht hn.

Function Room_Accept(ByVal RmID As Integer, ByVal eID As Integer, ByVal dayID As Integer, ByVal periodID As Integer) As Boolean ' phong co roi tai thoi diem nay khong ' Phong co du dung luong de chua su kien nay hay khong Dim i As Integer Room_Accept = False If (evn(eID).eSz / Rm(RmID) > 1) Then Exit Function For i = 0 To evn(eID).eLoop - 1 If RmTm(RmID, dayID, i + periodID) <> -1 Then Exit Function End If Next Room_Accept = True End Function Chng ta tip tc s l nt yu t thi gian. Yu t thi gian n gin chng ta ch cn nh du trong thi im lp hc ci g cha nu hc ri th trong bng clatm(classID, day, period) s l 1 s khc -1. Cn khng th c th xp lch. Nh vy cng vic kim tra xem trong khong thi gian kia s kin c th xp lch hay khong ch n gin l kim tra tt c cc lp tham gia xem c lp no hc trong khong thi gian khng. Nu c ri th chu khng xp thm c, cn nu khng th tr v gi tr l c th xp. Cng tc lock li l cng tc in s hiu s kin vo cc ca bng clatm(). B kho unlock l cng tc t li cc ca bng bng clatm() = -1. Vi implement nh trn chng ta gii quyt bc 1 chng trnh lp thi kho biu y chnh l chng trnh sche Hastest.

f. Tng kt thut ton


*/ Sp Xp li th t cc s kin
m bo rng cc cng vic c th xp lch c chng ta phi xp li th t cc cng vic, theo tiu ch rng cc s kin kh xp lch phi c xp trc v cc s kin d tnh hn th xp sau. Cc s kin d tnh hay kh tnh y chng ta ch thy n gin chnh l s kin no c nhiu SV tham gia hn th l s kin kh tnh hn v c th ga ra xung t. Bi nu 2 s kin nhiu SV tham gia sy ra trong cng 1 thi im th s SV vi phm rng buc cng 1 s ln.

*/ Thut ton xp lch tho mn cc rng buc cng


Chng ta s dng thut ton Maximal Matching gii quyt. R rng nu chng ta chia tp cc s kin lm 1 tp hp, tp cc gio vin lm 1 tp hp, tp cc phng lm 1 tp hp, thi gian lm 1 tp hp th chng ta s c hnh:

Events 1 2 n

Room, Day, Period 1, 0, 0 1, 0, 1 .. n, 5, 5 (V ch c 6 ngy/tun v 6 tit/ngy)

Cng vic ca chng ta ch n gin l lm sao in s hiu s kin vo mng 3 chiu Rooms, Days, Periods lm sao cho s lng s kin in vo cng nhiu th c ngha l cng tt. Tng t chng ta s c cng vic i vi gio vin:

Events 1 2 n

Teacher, Period 1, 0, 0 1, 0, 1 .. n, 5, 5 (V ch c 6 ngy/tun v 6 tit/ngy)

Day,

Khi chng ta lm vic in cc s kin vo cc bng trn chng ta lm tho mn 3 rng buc cng:

Khng gio vin no dy hai s kin trong cng 1 thi gian Khng lp no cha 2 s kin trong cng 1 thi gian Phng c gh cho cc SV c th ngi (hay dung lng phng > s SV tham gia s kin ) Tuy nhin vn c 1 rng buc m chng ta cha lm tho mn. l : Khng c lp no tham gia hai s kin trong cng 1 thi gian m bo iu ny chng ta a thm vo mt mng mi l mng prevent(id, day, period) mng ny c nhim v ngn cn cc s kin nu chng sy ra ng thi. Nu prevent(4, 5, 3)=5 c ngha l s kin s 4 b ngn ti ngy th 5 (tng ng vi th 7 cui tun) tit th 4 (v s hiu nh t 0), v chng b 5 s kin ngn cn. Chng ta bit rng c rt nhiu s kin c chung lp v 1 lp tham gia nhiu mn hc khc nhau v mi mn hc sinh ra t nht 1 s kin c th nhiu hn v nu s trnh ca mn l kh ln v d 7 chng ta s phi chia s kin ra hc nhiu ngy. Chng trnh chy th v vi : Room = 220 Teacher = 350 Classes=250 Subjects = 350 Th kt qu l mt ~1 pht thc hin chn trnh. Liu c th chp nhn c!

4. Sche2 best schedule


a. gii php lm tt hn cho chng trnh schedule hastest (cc pha tip theo)
Gii php bt u bng cng vic tch cng vic xp lch theo thi gian v xp lch theo gio vin, xp lch theo phng t nhm lm 1 trong chng trnh thnh 3 nhm nh khc nhau. V trong th ch trng nht n xp lch theo thi gian. Trong luc chy chng trnh th chng ta c th thy mt s trng hp li m chng ta khng th no xp c lch k c l vi con mt bnh thng ca con ngi, thi gian g li ny chim kh nhiu thi gian trong luc thc hin chng trnh ca nhm

b. Pha 2 <khi cc nhm 4 khng th xp lich>


Trng hp khng xp c lch c l do nh sau: T0 T1 T2 T3 T4 T5

Day0 Day1 Day2 Day3 Day4 Day5

1 3 6 12

1 2 3 6 12

1 2 3 5 6 12

2 3 5 7

2 5 7 5 7

Ch cc s 1 c ngha l s kin s 1- s trnh 3, s kin 2 s trnh 4 V chng ta cn s kin 8 (4 trnh na) v nh th l chng ta khng th ghp vo u trong bng TKB trn. Nh th c mt cch xp lch l chia s kin 4 trnh ny ra lm 2 s kin 2 trnh v xp chng n vo bng gi s s hiu 2 s kin ny l 8 v 15 chng ta s c bng mi: T0 T1 T2 T3 T4 T5 Day0 1 1 1 8 8 Day1 2 2 2 2 Day2 3 3 3 3 15 15 Day3 5 5 5 5 Day4 6 6 6 Day5 12 12 12 7 7 7

c. Pha 3 <khi cc nhm 3 khng th xp lich>


Vn cn trng hp khng th xp lich l: T0 T1 T2 T3 T4 T5 Day0 4 4 4 4 Day1 2 2 2 2 2 Day2 3 3 3 3 Day3 5 5 5 5 Day4 6 6 6 6 Day5 12 12 12 7 7 7 V chng ta cn s kin 9 - 3 trnh chng ta s xp n th no y: Gii php l th ny chng ta s d 4 ra v chia 4 thnh 2 s kin (gi s l 4 v 16), ta s c bng mi: T0 T1 T2 T3 T4 T5 Day0 4 4 9 9 9 Day1 2 2 2 2 2 Day2 3 3 3 3 16 16 Day3 5 5 5 5 Day4 6 6 6 6 Day5 12 12 12 7 7 7

Sau ba pha ny th tt c cc li v thi gian c gii quyt tuy nhin do cha n cc thng s gio vin v phng nn nhiu khi c mt s s kin do b quy nh cht v thi gian m gio vin khng th m nhim ni thnh th s c mt s s kin khng th t c lch. V c v yu t phng. giai on ny thc s chng ta cn thm mt mng na xc nh xem nguyn nhn ti sao khng th tm c li gii chnh xc.

5. Giao din chnh ca hai chng trnh & hng dn s dng chng trnh
a. Sche2 - hastest
Vic u tin chng ta cn lm l m form Random Input ra to bng CSDL ngu nhin.

Bm vo nt Random hoc l ENTER sinh ngu nhin. Sau nu mun xem xt cc thng s k thut khc chng ta s chn trn commbo pha trn Flex Grid. Tip theo Form Event, form ny thc cht ch cho chng ta xem m phng ch khng phi thc s l cc s kin thc tuy nhin chng ta cng c xem qua tng s s kin m n thc hin tnh ton c l bao nhiu.

C mt im ch l phi bm vo Reload trc khi bm vo stdLoop v StdSize v Reload s load li ton b d liu sau khi random v ghi vo c bng CSDL c s. Tip tc chng ta n Form Schedule:

Sau khi bm vo Run hoc ENTER th chng trnh s tnh v cho chng ta bng CSDL bao gm tt c cc thng tin v cc s kin v mt Message m s lng s kin c xp lch:

Trn hnh chng ta thy ch c 134/147 thc cht l th ny, chng ta bit rng cc s kin khng c php vi phm rng buc 2 lp chung 1 thi im nn sau khi xp lch cho 134 s kin u th th 13 s kin cn li khng th xp lch c. Nu khng th chng ta s phm vo 1 li bt cc SV hc 2 lp cng 1 thi im. iu ny sinh ra l do qu trnh sinh s kin l ngu nhin v chng ta thc cht cng khng bit r mt trng hc c bao nhiu lp v vic sinh ngu nhin lp no chn mn g cng l ngu nhin nn mi sinh ra li nh vy. Cn trong trng hp c nhiu lp hc chung 1 gio trnh th s khng ri rm nh th VD 6 lp khoa CNTT K56 hc cng 7 mn chuyn ngnh ch khng phi l 6 lp K45 mi ng chn mt kiu. Thm na chng ta cng ch hon ton on rng s lng lp v gio vin, phng theo con s chng ta g ch khng bit t l thc t. Cn mt iu na c th ni n l cc trng H cn c th thu gio vin trng khc v dy iu ny l khng th kim sot ni. Tip theo chng ta c th xem TKB d dng theo cc tiu ch: TKB theo lp (trong 1 tun lp phi hc mn g, ti u) TKB theo gio vin TKB theo phng (Vic kim sot phng lc no trng, lc no c ngi hc)

Nu chng ta bm vo s VD 30 chng ta s c bng chi tit thng tin v s kin mang s hiu 30 nh hnh trn, chn xem lp c s hiu hc hnh th no. u tin chng ta bm vo option Class, sau bm vo commbo Number di (chn s 7) chn s hiu hay tn ca lp. Thc t c mt s im kh th v l khi bm n cc gio vin cui cng th chng ta hon ton khng thy cc gio vin ny m nhim cng vic g, nui h c l hi tn! V khi xem xt cc phng cui cng chng ta cng thy rng cc phng cui cng cng ngh vic di hn, b trng! C l ng hiu trng tiu qu

nhiu tin vo cng vic xy ct chng! Ch c cc lp l thng tin y , m bo quan im cc lp hc l trung tm, quan trng nht, phi c gng cc em c n trng!

b. sche2 best chedule


Chng ta ch thy thm mt khc bit l

y r rng chng ta thy l chng trnh th hai a thm mt ct xc nh chnh xc nguyn nhn l ti v sao chng trnh khng th tm ra li gii. Ngay bn trn chng ta c th thy l khng c gio vin dy.

c. So snh gia hai chng trnh


Khng th coi best schedule l hay hn so vi hastest v hastest la c s v chng ta c rt nhiu cch sa chng trnh. N l ngun hn th na i vi cc test cao hn na v d 500 lp hc th bestschedule s b trn b nh ti chnh dng lnh khai bo mng evn() mng ny qu ln v ch c mt ngng ng mi nh trong C# hay VBNET chng ta mi c th gii quyt c vn ny.

4. UniSched <bc chuyn v cng ngh>


Trong cc chng trnh chc chng em ch c gg quan tm n vn m phng thut ton m cha n giai on lm tht, giai on ny chng em nghin cu v tm hiu nhiu iu hn v thc t hn l vn v quy trnh lp thi kha biu trong trng ta i Hc Bch Khoa H Ni

b. Quy trnh hnh thnh thi kho biu


bc 1
T yu cu ca b gio dc v o to v cc yu cu v gio vin cng nh yu cu v kin thc ca sinh vin phng o to i hc cn c vo cc mn hc m trng i hc o to. phng o to s a xung cc khoa chng trnh o to ca mnh. Theo hinh sau:

Cc chng trnh o to s bao gm t 5 n 10 mn v c s trnh nm t 22-32 trnh trong 1 k

bc 2
t CTDT phng o to s yu cu cc khoa in danh sch gio vin theo bng

STT

Mn

Nhm Lp

Phng

Gio Vin

bc 3
Tip n chng trnh ca chng ta s xc nh xem l s kin t chc trong phng no, chng ta cng tun th nguyn tc xy dng s kin ging nh trong cc chng trnh trc . Chng ta cng s dng thut ton to mu th gii quyt vn ny nh bnh thng tuy nhin trong phn ny chng ta s vit thm hm quan trng nht ca chng trnh l hm nh gi score

b. Kho st v xy dng CSDL


Vi mt chng trnh mang tnh cht n mn hc chng ta khng nn tham lam mong mun lm c th chy cho tt c cc trng tt c cc loi hnh o to, chungs ta s c gng gii quyt dng n gin nht l o to theo nin ch v hc ng u theo k. iu c ngha rng chng ta s ch n gin l lp thi kho biu cho 1 tun sau s nhn chng ln. Tuy nhin cng vic lp thi kho biu cho 1 tun cng vn l qu nng v chng ta s gim nh hn na bng vic xt cng vic lp lch ch cho cc lp hc cng ca (sng hoc chiu).

D. Cc yu cu ca bi ton (cc rng buc)


Khi lp thi kho biu chng ta phi m bo cc yu cu sau: Khng lp hc no phi hc cng mt thi im 2 mn Cc phng l rng c th cha ht s SV Khng gio vin no phi dy 2 mn trong cng thi gian Cc tit lin tip nm trn vn trong 1 bui Trong nu chng ta xt n trng hp lp thi kho biu cho cc trng hc theo ch hc tn ch ton phn th rng buc s 1 khng phi l cc lp khng hc cng 1 thi im 2 mn m l khng c Sinh Vin no phi hc cng 1 thi im 2 mn hc. Tip n chng ta s xem xt n cc rng buc mm: Cc mn hc c khong gin cch trong tun l ph hp (thng thng khong cch gia 2 nhm tit ca 1 mn cch nhau t 2-3 ngy l hp l) Thi kho biu phi c kh nng chp nhn cc ngy ngh nh trc ca cc gio vin. Cc ngy ngh nh trc l nhng ngy m gio vin phi i hp, hi tho Hoc l cc yu cu t pha cc ging vin cao tui, h yu cu khng dy hc vo cc tit u ca bui tra v nh th l qu sc vi h Ta c th thy nu vi phm cc rng buc cng s lm cho thi kho biu khng th chp nhn c, v s khng phi l 1 thi kho biu thc s. Cn nu vi phm cc rng buc mm th thi kho biu vn c coi l thi kho biu nhng n khng c hp l lm v s c mt s ngi khng thch kiu lp thi kho biu ny thi. Tuy nhin vi chng trnh ca chng ta chng ta s c gng lm sao m bo khng vi phm cc rng buc cng, cn cc rng buc mm nu gii quyt c th cng tt cn nu khng th cng c th coi l chp nhn c.

E. Hnh thnh s kin


Cc s kin c nh ngha nh sau: C 1 nhm cc lp tham gia hc (1 nhm c th ch bao gm 1 lp). Tham s ny ng thi cng cha cc thng s ph l tng s Sinh Vin Tham gia s kin

C 1 mn hc C 1 gio vin dy S kin sy ra trong 1 thi im trong tun (xc nh bi ngy, tit) s tit lin tip. Phng hc Mt s kin l 1 n v nh nht, m khng th chia c na. Cng vic xp lch cho cc s kin l rt a dng. C th l d kin u vo l tp cc s kin cha xc nh r gio vin v phng hc. Nh th th u vo phi cho chng ta bit l c bao nhiu gio vin, v mi gio vin c kh nng dy nhng mn hc no v tp cc phng, mi phng sc cha (s gh) l bao nhiu? Cc mn th r rng c xc nh trc bi nin ch, tc l da vo nin ch chng ta bit lp no trong k ny hc nhng mn g v vi s trnh l bao nhiu. Thi im hc tp trong tun cng cn phi xc nh lm sao khng c hai s kin c chng gio vin (hoc phng hc hoc l lp) l trng nhau. V vi nh ngha s kin nh th chng ta cng n gin ho bi ton i mt cht, l trong qu trnh lp thi kho biu chng ta cho rng chng ta bit c s kin ny do ai dy v ti phng no. iu ny l c th chp nhn trong thc t v i vi 1 mn hc th ch c 1 gio vin c th dy ch khng th 1 mn 2 gio vin dy cho 1 lp. Hoc l 1 lp th hc ti 1 phng l ch yu ch khng phi l hm nay ch ny hm sau ch khc. L d nhin l trng hp vn c. Nhng l vi nhng trng i hc b thiu phng th mi cn phi lo n vn ny. Tuy nhin y chng ta c gng n gin ho v coi nh l 1 s kin c hnh thnh l xc nh. V nh th cng vic chnh cn lm l xc nh thi im thc hin s kin lm sao khng c xung t v thi gian i vi mi gio vin v mi lp. Bi ton lp thi kho biu c qui v bi ton phn b v thi gian. D nhin cng phi ni rng chng trnh s phi t ng chia ra nhm tit sao cho ph hp. u vo ch c l chng trnh o to trong k ca cc lp bao gm tn cc mn v s trnh ca mi mn tng ng. Gio vin dy mn tng ng, phng hc i km vi lp.

F. Nhng hng tip cn v thut ton


C rt nhiu thut ton c ra gii quyt bi ton. trong chng ta c th k n: T mu th (Graph Coloring) M phng ti thp (Anealing Simulate) Di Truyn ( Generics ) Tm kim Tabu (Tabu Search) Trong cc chng trnh trc y th ti (Nguyn c Khnh) s dng phng n t mu th. Cng vic t mu th c th n gin hiu l vic c 3 bng thi gian bao gm 2 chiu l : Phng x thi gian, gio vin x thi gian, nhm lp x thi gian. Thi gian m chng ta ni n y l thi gian trong 1 tun, bao gm 6 ngy v mi ngy 6 tit. Cng vic l in cc s hiu (mu) cc s kin vo trong cc bng sao cho cc s kin c in vo

nhiu nht c th. Nu tt c mi s kin u c in vo 3 bng trn th thi kho biu cho 1 trng i hc (trong 1 tun) c hnh thnh. D nhin ay cha tnh n cc rng buc mm. Phng n tm kim Tabu c th m t rng u tin chng ta s xy dng mt thi kho biu da vo vic sinh ngu nhin thi kho biu sau . Mi bc chuyn Tabu s kim tra xem trong mi ln chuyn nh th c lm tng kt qu hm mc tiu ln khng. Nu tng th gi li kt qu cn khng th thi. iu ny c ngha l cn thit phi xy dng mt hm xc nh gi tr ca thi kho biu hin ti. Chng ta c th tnh gi tr (tnh im - score) ca thi kho biu theo cch nh sau: Cc rng buc cng s c tnh 10 im Cc rng buc mm s c tnh l 1 im i vi s kin cha xp lch th s c nh score s c s im l tng s im ca cc rng buc cng v rng buc mm i vi cc s kin xp lch th Score ca n s l Tng s im cc rng buc cng v rng buc mm cc rng buc cng v rng buc mm c gii quyt sau khi xp lch Score ca c Thi kho biu l tng score ca tt c cc s kin Mi khi xp lch th mt s rng buc c tho mn t nht l 1 rng buc cng (phng ln cha s SV trong lp). V theo d kin th trong chng trnh sp ti chng em s s dng kt hp 2 phng n tm kim Tabu-Tabu Search v T mu th-Graph Coloring (Nu nh khng tm c phng n no ti u hn). Anealing Simulate & Generics c nguyn tc kh ging nhau l sinh ngu nhin mt thi kho biu sau pht trin ln. Tuy nhin thi gian tm hiu 2 phng n ny ca chng em cha nhiu thnh th cha hiu r rng nguyn tc hot ng ca n.

G. C s d liu ( xut)
(Theo qui m o to ca trng i Hc Bch Khoa) M hnh phn cp theo hnh cy sau:

Khoa
Ngnh

B Mn

Chng trnh o to

Lp

Gio vin

Mn hc

v c s d liu ( xut):

xem chi tit c th xem phn ph lc cui (in to)

H. Chng trnh thc hin (d kin)

Tun 1 (t 14/3 n 20/3): o Tm hiu thut ton o Vit chng trnh thc hin nhp d liu Tun 2 (t 21/3 n 27/3): o Vit chng trnh m phng thut ton Tun 3 (t 28/3 n 3/4): o Kim th thut ton o Sa cha chng trnh Tun 4 (t 4/4 n 10/4): o Vit bo co tng hp o Hon tt cc cng on cui.

Bi tp ln tr tu nhn to

Thi kho biu t ng

90

Bi tp ln tr tu nhn to

Thi kho biu t ng

c. ng dng cng ngh mi


*/ Giao din
c hai cng ngh mi trong trnh by giao din l cng ngh infragistics v cng ngh C1. Di y l giao din ca chng trnh khi s dng cng ngh Inragisstics:

Trong chng trnh chng ta c th thy rng chng ta s dng hai im mnh c cng ngh C1 v cng ngh ultra infragistics menu v tool bar cng nh trong lc th hin d liu trn grid.

Sc mnh ca C1 - Component One


l tc load trn c s d liu Chng ta c th thy ngay trn hnh trn l l C1List c rt nhiu trng v cc trng ch n gin cch nhau bi du phy sau y l lnh m phng:
private void showing() { // c th Add t do cc bn ghi trc ht chng ta // t DataMode thnh AddItem. Thc hin khi design.

cn

91

Bi tp ln tr tu nhn to

Thi kho biu t ng

if (us.NLOPs == 0) return; c1List1.ClearItems(); c1List1.AddItemTitles("STT; Nhm Lp ; Phng (Size); S SV ; Chia; CTDT"); int a=0, b=0, c=0; string s; TNLop r; for (int i = 0; i < us.NLOPs; i++) { r = (TNLop) us.nlop[i]; if (r.SoSV >120) { c++; } else { if (r.SoSV <= 50) { a++; } else { b++;} } if (r.Phong != -1) { s = i.ToString() + ";" + r.NLop + ";" + r.Phong +"(" + us.phong[r.Phong].DungLuong.ToString() +")"+";" + r.SoSV + ";" + r.Chia + ";" + r.CTDT ; } else { s = i.ToString() + ";" + r.NLop + ";" + ";" + r.SoSV + ";" + r.Chia + ";" + r.CTDT ; } c1List1.AddItem(s); } txtA.Text = a.ToString(); txtB.Text = b.ToString(); txtC.Text = c.ToString(); txtNLop.Text = us.NLOPs.ToString(); }

Sc mnh ca Infragistics

92

Bi tp ln tr tu nhn to

Thi kho biu t ng

Chng ta c th thy ch Unisched nm trn menu. nh hnh trn

*/ Mc linh ng cao & hng i tng hon ton


C# v VB c mc linh ng rt cao, chng ta c th tu chn xem n l structure hay class nh trong cu ln sau:
public class TGv { private Int16 gv_Sotiet; private Int16 gv_MaxSoTiet; private string gv_Kehoach; public TGv(Int16 gvSotiet, Int16 gvMaxSotiet, string gvKehoach) { gv_MaxSoTiet = gvMaxSotiet; gv_Kehoach = gvKehoach; gv_Sotiet = gvSotiet; } public Int16 MaxSotiet { set { gv_MaxSoTiet = value; } get { return gv_MaxSoTiet; } } public Int16 SoTiet {

93

Bi tp ln tr tu nhn to
set { } get { } } public string KeHoach { set { gv_Kehoach = value; } get { return gv_Kehoach; } } gv_Sotiet = value;

Thi kho biu t ng

return gv_Sotiet;

Cng c th n gin hn coi n khng phi l class m ch coi n l mt struct n vn c th hot ng tt


public struct TGv { private Int16 gv_Sotiet; private Int16 gv_MaxSoTiet; private string gv_Kehoach; public TGv(Int16 gvSotiet, Int16 gvMaxSotiet, string gvKehoach) { gv_MaxSoTiet = gvMaxSotiet; gv_Kehoach = gvKehoach; gv_Sotiet = gvSotiet; } public Int16 MaxSotiet { set { gv_MaxSoTiet = value; } get { return gv_MaxSoTiet; } } public Int16 SoTiet { set {

94

Bi tp ln tr tu nhn to
} get { } } public string KeHoach { set { gv_Kehoach = value; } get { return gv_Kehoach; } } gv_Sotiet = value;

Thi kho biu t ng

return gv_Sotiet;

Thm vo mng arrlist ca .NET l mt ci mng qui d n c th nht ht thy mi th vo trong : bt k l bin kiu class hay l string
nlop = new ArrayList(); TNLop rec; Int32 i, idx; // Khi to for (i = 0; i < NLOPs; i++) { // false c ngha l cc NLp u cha chia rec = new TNLop("", ctdt[i], 0, false, true, -1); } nlop.Add(rec);

Ci ny c ngha rt ln n lm cho chng ta c th tit kim n mc ti a mng s kin, ch khng phung ph nh trong VB6. iu ny c ngha l chwong trnh s m bo tnh an ton tin cy, nhanh hn v gn hn l nhng li ch m chng trnh em li.

d. C s d liu
Trong hai chng trnh cng ly tn UniSched ny chng em s dng hai cng c chnh thao tc v lu tr i vi c s d liu l XML v SQL Server 2000. y l on chng trnh vit bng CS thao tc vi hai dng CSDL :
using System; using System.Data; using System.Data.SqlClient; using System.Xml;

95

Bi tp ln tr tu nhn to
using System.IO;

Thi kho biu t ng

namespace UniSched { /// <summary> /// Summary description for usSQL. /// </summary> public class usSQL { public usSQL() { // // TODO: Add constructor logic here // try { conn = new SqlConnection(strConn); } catch (Exception ex) { string str = "Kt ni b ngt ! Xin mi bn kim tra li!"; throw new Exception(str, ex); } } private SqlConnection conn; private const string strConn = "Data Source=localhost; initial catalog=UniSched; User ID=sa;PWD="; private int usSQLExecute(string strSQL) { int result = 0; try { SqlCommand cmd = new SqlCommand(strSQL, conn); result = cmd.ExecuteNonQuery(); cmd.Dispose(); } catch (Exception ex) { string str = "Kt ni b ngt hoc li trong cu lnh SQL : \n " + strSQL + "\n Xin mi bn kim tra li!"; throw new Exception(str, ex); } return result; } private int usSQL_Delete(string tblName, int cat) { int result = 0; string strSQL; strSQL = "DELETE FROM " + tblName + " WHERE cat = " + cat.ToString(); result = usSQLExecute(strSQL); return result; } private int usSQL_Ins_Mon(int cat) {

96

Bi tp ln tr tu nhn to

Thi kho biu t ng

int result = 0; string strSQL; for (int i = 0; i < us.MONs; i++) { strSQL = "INSERT INTO T_Mon (cat, m_Sotrinh, m_Lop, m_GV) VALUES ("; strSQL += cat.ToString() + ", "; strSQL += us.mon[i].SoTrinh.ToString() + ", '"; strSQL += us.mon[i].Lop + "', '"; strSQL += us.mon[i].GiaoVien + "')"; result += usSQLExecute(strSQL); } return result; } private int usSQL_Ins_CTDT(int cat) { int result = 0; string strSQL; for (int i = 0; i < us.CTDTs ; i++) { strSQL = "INSERT INTO T_CTDT (cat, CTDT) VALUES ("; strSQL += cat.ToString() + ", '"; strSQL += us.ctdt[i] + "')"; result += usSQLExecute(strSQL); } return result; } private int usSQL_Ins_Lop(int cat) { int result = 0; string strSQL; for (int i = 0; i < us.LOPs ; i++) { strSQL = "INSERT INTO T_Lop (cat, l_SoSV, l_idCTDT, l_CaSang) VALUES ("; strSQL += cat.ToString() + ", "; strSQL += us.lop[i].SoSV.ToString() + ", "; strSQL += us.lop[i].idCTDT.ToString() + ", 1)"; result += usSQLExecute(strSQL); } return result; } private int usSQL_Ins_NLop(int cat) { int result = 0; string strSQL; TNLop r; for (int i = 0; i < us.NLOPs ; i++) { r = (TNLop) us.nlop[i]; int chia = (r.Chia)?1:0; strSQL = "INSERT INTO T_NLop (cat, nl_NLop, nl_CTDT, nl_SoSV, nl_Chia, nl_Casang, nl_Phong) VALUES ("; strSQL += cat.ToString() + ", '"; strSQL += r.NLop + "', '"; strSQL += r.CTDT + "', ";

97

Bi tp ln tr tu nhn to
strSQL += r.SoSV.ToString() + ", "; strSQL += chia.ToString() + ", "; strSQL += r.Phong.ToString() + ", 1)"; result += usSQLExecute(strSQL); } return result;

Thi kho biu t ng

} private int usSQL_Ins_GV(int cat) { int result = 0; string strSQL; for (int i = 0; i < us.GVs; i++) { strSQL = "INSERT INTO T_GV (cat, gv_Sotiet, gv_MaxSotiet, gv_Kehoach) VALUES ("; strSQL += cat.ToString() + ", "; strSQL += us.gv[i].SoTiet.ToString() + ", "; strSQL += us.gv[i].MaxSotiet.ToString() + ", '"; strSQL += us.gv[i].KeHoach + "')"; result += usSQLExecute(strSQL); } return result; } private int usSQL_Ins_Phong(int cat) { int result = 0; string strSQL; for (int i = 0; i < us.PHONGs; i++) { strSQL = "INSERT INTO T_Phong (cat, ph_Dungluong, ph_NLop_Sang, ph_NLop_Chieu) VALUES ("; strSQL += cat.ToString() + ", "; strSQL += us.phong[i].DungLuong.ToString() + ", "; strSQL += us.phong[i].NLop_Sang.ToString() + ", "; strSQL += us.phong[i].NLop_Chieu.ToString() + ")"; result += usSQLExecute(strSQL); } return result; } private int usSQL_Ins_Events(int cat) { int result = 0; string strSQL; TEvents r; for (int i = 0; i < us.EVENTs; i++) { r = (TEvents) us.evn[i]; int sched = (r.Sched)?1:0; strSQL = "INSERT INTO T_Events (cat, e_NLop, e_Mon, e_Sotiet, e_GiaoVien, e_Phong, e_Ngay, e_Tiet, e_Sched, e_Casang) VALUES ("; strSQL += cat.ToString() + ", '"; strSQL += r.NLop + "', "; strSQL += r.Mon.ToString() + ", "; strSQL += r.SoTiet.ToString() + ", "; strSQL += r.GiaoVien.ToString() + ", "; strSQL += r.Phong.ToString() + ", ";

98

Bi tp ln tr tu nhn to
strSQL += r.Ngay.ToString() + ", "; strSQL += r.Tiet.ToString() + ", "; strSQL += sched.ToString() + ", 1)"; result += usSQLExecute(strSQL); } return result;

Thi kho biu t ng

} private int usSQL_Ins_Category(string catName) { int result = 0; string strSQL; strSQL = "INSERT INTO T_Category (cat_Name, cat_LOPs, cat_NLOPs, cat_GVs, cat_PHONGs, cat_MONs, cat_CTDTs, cat_Events, cat_phongA, cat_phongB, cat_phongC) VALUES (N'"; strSQL += catName + "', "; strSQL += us.LOPs.ToString() + ", "; strSQL += us.NLOPs.ToString() + ", "; strSQL += us.GVs.ToString() + ", "; strSQL += us.PHONGs.ToString() + ", "; strSQL += us.MONs.ToString() + ", "; strSQL += us.CTDTs.ToString() + ", "; strSQL += us.EVENTs.ToString() + ", "; strSQL += us.phongA.ToString() + ", "; strSQL += us.phongB.ToString() + ", "; strSQL += us.phongC.ToString() + ")"; result += usSQLExecute(strSQL); return result; } private int getCat(string catName) { string strSQL = "SELECT cat FROM T_Category WHERE cat_Name='" + catName + "'"; SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn); DataSet ds = new DataSet(); da.Fill(ds); if (ds.Tables[0].Rows.Count>0) { int res =Convert.ToInt16(ds.Tables[0].Rows[0]["cat"]); return (res); } return (-1); } public void usSQL_Add(string catName) { // Trong CSDL th Cat l trng AutoNumber // Nn chng ta khng cn a thm vo lm gi conn = new SqlConnection(strConn); conn.Open(); int cat, rec; rec = usSQL_Ins_Category(catName); cat = getCat(catName); rec = usSQL_Ins_Mon(cat); rec = usSQL_Ins_CTDT(cat); rec = usSQL_Ins_Lop(cat); rec = usSQL_Ins_NLop(cat); rec = usSQL_Ins_GV(cat);

99

Bi tp ln tr tu nhn to
rec = usSQL_Ins_Phong(cat); rec = usSQL_Ins_Events(cat); conn.Close(); conn.Dispose();

Thi kho biu t ng

} public void usSQL_Del(int cat) { conn = new SqlConnection(strConn); conn.Open(); int rec; rec = usSQL_Delete("T_Mon", cat); rec = usSQL_Delete("T_Lop", cat); rec = usSQL_Delete("T_NLop", cat); rec = usSQL_Delete("T_CTDT", cat); rec = usSQL_Delete("T_GV", cat); rec = usSQL_Delete("T_Phong", cat); rec = usSQL_Delete("T_Events", cat); rec = usSQL_Delete("T_Category", cat); conn.Close(); conn.Dispose(); } public void usSQL_Upd(int cat, string category) { conn = new SqlConnection(strConn); conn.Open(); int rec; // Xo trc rec = usSQL_Delete("T_Mon", cat); rec = usSQL_Delete("T_Lop", cat); rec = usSQL_Delete("T_NLop", cat); rec = usSQL_Delete("T_CTDT", cat); rec = usSQL_Delete("T_GV", cat); rec = usSQL_Delete("T_Phong", cat); rec = usSQL_Delete("T_Events", cat); rec = usSQL_Delete("T_Category", cat); // Ri chn li. rec = usSQL_Ins_Mon(cat); rec = usSQL_Ins_CTDT(cat); rec = usSQL_Ins_Lop(cat); rec = usSQL_Ins_NLop(cat); rec = usSQL_Ins_GV(cat); rec = usSQL_Ins_Phong(cat); rec = usSQL_Ins_Events(cat); rec = usSQL_Ins_Category(category); conn.Close(); conn.Dispose(); } public void usSQL_Load(int cat) { // Load t SQL DataSet ds = new DataSet(); // Vi category string strSQL = "SELECT * FROM T_Category WHERE cat=" + cat.ToString(); SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Category"); // Vi mn

100

Bi tp ln tr tu nhn to

Thi kho biu t ng

strSQL = "SELECT cat, m_Sotrinh, m_Lop, m_GV FROM T_Mon WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Mon"); // Vi CTDT strSQL = "SELECT CTDT FROM T_CTDT WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_CTDT"); // Vi lp strSQL = "SELECT l_SoSV, l_idCTDT, l_CaSang FROM T_Lop WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Lop"); // Vi Nhm Lp strSQL = "SELECT nl_NLop, nl_CTDT, nl_SoSV, nl_Chia, nl_Casang, nl_Phong FROM T_NLop WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_NLop"); // Vi Gio Vin strSQL = "SELECT gv_Sotiet, gv_MaxSotiet, gv_Kehoach FROM T_GV WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_GV"); // Vi Phng strSQL = "SELECT ph_Dungluong, ph_NLop_Sang, ph_NLop_Chieu FROM T_Phong WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Phong"); // Vi S kin strSQL = "SELECT e_NLop, e_Mon, e_Sotiet, e_GiaoVien, e_Phong, e_Ngay, e_Tiet, e_Sched, e_Casang FROM T_Events WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Events"); // Np ln b nh chng trnh. us.FillMon(ds.Tables["T_Mon"]); us.FillCTDT(ds.Tables["T_CTDT"]); us.FillLop(ds.Tables["T_Lop"]); us.FillNLop(ds.Tables["T_NLop"]); us.FillGV(ds.Tables["T_GV"]); us.FillPhong(ds.Tables["T_Phong"]); us.FillEvents(ds.Tables["T_Events"]); us.FillConfig(ds.Tables["T_Category"]); da.Dispose(); ds.Dispose(); } public void SQL2XML(int cat, string fname) { // Load t SQL DataSet ds = new DataSet(); // Vi mn string strSQL = "SELECT cat, m_Sotrinh, m_Lop, m_GV FROM T_Mon WHERE cat=" + cat.ToString(); SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Mon"); // Vi CTDT

101

Bi tp ln tr tu nhn to

Thi kho biu t ng

strSQL = "SELECT cat, CTDT FROM T_CTDT WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_CTDT"); // Vi lp strSQL = "SELECT cat, l_SoSV, l_idCTDT, l_CaSang FROM T_Lop WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Lop"); // Vi Nhm Lp strSQL = "SELECT cat, nl_NLop, nl_CTDT, nl_SoSV, nl_Chia, nl_Casang FROM T_NLop WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_NLop"); // Vi Gio Vin strSQL = "SELECT cat, gv_Sotiet, gv_MaxSotiet, gv_Kehoach FROM T_GV WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_GV"); // Vi Phng strSQL = "SELECT cat, ph_Dungluong, ph_NLop_Sang, ph_NLop_Chieu FROM T_Phong WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Phong"); // Vi S kin strSQL = "SELECT cat, e_NLop, e_Mon, e_Sotiet, e_GiaoVien, e_Phong, e_Ngay, e_Tiet, e_Sched, e_Casang FROM T_Events WHERE cat=" + cat.ToString(); da = new SqlDataAdapter(strSQL, strConn); da.Fill(ds, "T_Events"); // Ghi vo file XML ds.WriteXml(fname); } } // Class usSQL }

v chng on code thao tc vi XML:


using System; using System.IO; using System.Xml; using System.Data; namespace UniSched { /// <summary> /// Summary description for usXML. /// </summary> public class usXML { public usXML() { // // TODO: Add constructor logic here // }

102

Bi tp ln tr tu nhn to
public void xmlRead_Fill(string fname) { DataSet ds = new DataSet(); ds.ReadXml(fname); DataTable dt; dt = ds.Tables["T_Mon"]; us.FillMon(dt); dt = ds.Tables["T_CTDT"]; us.FillMon(dt); dt = ds.Tables["T_Lop"]; us.FillLop(dt); dt = ds.Tables["T_NLop"]; us.FillLop(dt); dt = ds.Tables["T_GV"]; us.FillGV(dt); dt = ds.Tables["T_Phong"]; us.FillPhong(dt); dt = ds.Tables["T_Category"]; us.FillConfig(dt); } } }

Thi kho biu t ng

on code thc hin cc lnh sinh ngu nhin CSDL:


public class us //University Schedule { public const char chrSplit = ','; public static string strConn = "Data Source=localhost; initial catalog=UniSched; User ID=sa;PWD="; // khai bo cc mng d liu public static ArrayList evn; // mng ny s c kiu l TEvents[], ng public static string[] ctdt; public static ArrayList nlop; // mng ny s c kiu l TNLop[], ng public static TLop[] lop; // mng ny l mng c nh public static TMon[] mon; public static TPhong[] phong; public static TGv[] gv; // khai bo cc cn trn public static Int32 EVENTs; public static Int32 CTDTs; public static Int32 NLOPs; public static Int32 MONs; public static Int32 LOPs; public static Int32 phongA; // 50 ch ngi public static Int32 phongB; // 120 ch ngi public static Int32 phongC; // 250 ch ngi public static Int32 PHONGs; public static Int32 GVs; // Cc hm thc hin public us() { //

103

Bi tp ln tr tu nhn to

Thi kho biu t ng

// TODO: Add constructor logic here // } public static void US_Init() { us.MONs = 0; us.LOPs = 0; us.CTDTs = 0; us.NLOPs = 0; us.phongA = 0; us.phongB = 0; us.phongC = 0; us.PHONGs = 0; us.GVs = 0; evn = new ArrayList(); nlop = new ArrayList(); phong = null; gv = null; lop = null; mon = null; ctdt = null; } // Hm ny s sinh ngu nhin cc mn hc // cc mn hc ch quan tm n s trnh. public static void Rnd_Mon(Int32 no) { MONs = no; mon = new TMon[no]; System.Random rnd = new Random(); Int32 i; Int16 n; for (i=0; i < MONs; i++) { n = (Int16) rnd.Next(100); if(n<=10) { mon[i] = new TMon(2, "", "");; } else { if (n >=85) { n = (Int16)(5 + rnd.Next(7)); mon[i] = new TMon(n, "", ""); } else { n = (Int16) rnd.Next(100); if (n <= 50) { mon[i] = new TMon(3, "", ""); } else { mon[i] = new TMon(4, "", ""); } } } }

104

Bi tp ln tr tu nhn to

Thi kho biu t ng

// Hm ny s sinh ngu nhin cc chng trnh o to // Cc chng trnh s bao gm cc mn cch nhau bi du phy public static void Rnd_CTDT(Int32 no) { CTDTs = no; ctdt = new string[CTDTs]; Int32 idx, max, cnt, i; Random rnd = new Random(); ArrayList ct; for(i = 0; i < CTDTs; i++) { cnt = 0; max = 27 + rnd.Next(5); ctdt[i] = ""; ct = new ArrayList(); // Chng trnh o to while (cnt < max) { do { idx = rnd.Next(MONs); } while (ct.Contains(idx)); ct.Add(idx); ctdt[i] += idx.ToString() + ","; cnt += mon[idx].SoTrinh; } } // Sinh ngu nhin cc lp hc gi tr cn sinh ngu // nhin y l s SV & CTDT di km vi lp // S SV s nm trong khong t 40 - 50 SV/lop public static void Rnd_Lop(Int32 no) { LOPs = no; lop = new TLop[LOPs]; Int32 i, idx; Int16 noSV; Random rnd = new Random(); for (i = 0; i < LOPs; i++) { noSV = (Int16) (rnd.Next(11) + 40); idx = rnd.Next(CTDTs); lop[i] = new TLop(noSV, idx, true); } } // To ngu nhin, khng phi l qu trnh to ra tn gio vin 1 cch ngu nhin // m l sinh ra k hoch o to ca gio vin , bao gm gii hn ging dy ca GV // (bao nhiu tit / tun). V k hoch thc t l s dy cc nhm lp no. public static void Rnd_GV(Int32 no) }

s cha y

105

Bi tp ln tr tu nhn to
{

Thi kho biu t ng

GVs = no; gv = new TGv[no]; int lim, i; Random rnd = new Random(); for (i = 0; i < GVs; i++) { lim = 10 + rnd.Next(23); // k hoch s nm trong khong t 10-32 tit/tun. gv[i] = new TGv(0, (Int16)lim, ""); } } // Cc phng c dung tch cha nh sau 50, 120, 250 // tng ng vi loi phng a, b, c. Khi to -> i ch public static void Rnd_Phong(Int32 a, Int32 b, Int32 c) { phong = new TPhong[(a + b + c)]; Int32 i, l, r; TPhong tg; phongA = a; phongB = b; phongC = c; PHONGs = a + b + c; for(i = 0; { phong[i] for(i = a; { phong[i] for(i = (a { phong[i] i = i = + = < a; i++) new TPhong(50, -1, -1); } < (a + b); i++) new TPhong(120, -1, -1); } b); i < (a + b + c); i++) new TPhong(250, -1, -1); }

Random rnd = new Random(); for (i = 0; i< (a + b + c); i++) { l = rnd.Next((a + b + c)); r = rnd.Next((a + b + c)); tg = phong[l]; phong[l] = phong[r]; phong[r] = tg; }

// Hm ny c nhim v chia ra cc nhm lp sao cho c th ghp va vn vi phng, // trong max s cha dung lng ln nht (s SV) m phng c th cha c public static void Div_Nhom(Int32 max) { Int32 idx = 0, i; TNLop r1, r2, rec; string[] s; while (idx < nlop.Count) { // Nu s SV ca 1 nhm lp l ln hn kh nng cha ca phng c cha

106

Bi tp ln tr tu nhn to

Thi kho biu t ng

// trong max th nhim v chng ta s lm l chia nhm lp ra thnh // 2 nhm trong c 1 nhm c tng s SV < max, nhm cn li s cha phn // cn li, v c y xung cui dy xt tip. Nu phn cn li vn // ln hn chng ta s tip tc lm nh trn. rec = (TNLop) nlop[idx]; // Nu S SV ln qu v cha chia th lm if ((rec.SoSV > max) && (!rec.Chia)) { s = rec.NLop.Split(','); r1 = new TNLop("", rec.CTDT, 0, true, rec.CaSang, -1); // nhm cc lp c s SV < max, chia xong r2 = new TNLop("", rec.CTDT, 0, false, rec.CaSang, -1); // nhm cn li, cha chia for (i = 0; i < s.Length - 1 ; i++) { if ((r1.SoSV + lop[Convert.ToInt32(s[i])].SoSV) <= max) { r1.NLop += s[i] + ","; r1.SoSV += lop[Convert.ToInt32(s[i])].SoSV ; } else { r2.NLop += s[i] + ","; r2.SoSV += lop[Convert.ToInt32(s[i])].SoSV ; } } nlop[idx] = r1; // nhm 1 chia xong nlop.Add(r2); // nhm 2 xt tip. } idx += 1; } } // Gen_NLop sinh ra t cc chng trnh o to, u tin c bao nhiu lp tham // gia cc chng trnh o to th c by nhiu nhm lp. Sau chng ta s thc // hin chia lm sao cc nhm lp c th ghp c vo cc phng hc. public static void Gen_NLop() { NLOPs = CTDTs; nlop = new ArrayList(); TNLop rec; Int32 i, idx; // Khi to for (i = 0; i < NLOPs; i++) { // false c ngha l cc NLp u cha chia rec = new TNLop("", ctdt[i], 0, false, true, -1);

107

Bi tp ln tr tu nhn to

Thi kho biu t ng

trnh th chia

nlop.Add(rec); } // Bt u in gi tr vo mng,lp k hc chng // o to j th s c in vo nhmlp[j] += k sau

for(i = 0; i < LOPs; i++) { idx = lop[i].idCTDT; rec = (TNLop) nlop[idx]; rec.NLop += i.ToString() + ","; rec.SoSV += lop[i].SoSV; nlop[idx] = rec; } string[] s; for (i = 0 ; i < CTDTs; i++) { s = ((TNLop) nlop[i]).CTDT.Split(','); for (idx = 0; idx < s.Length-1; idx++) { mon[Convert.ToInt32(s[idx])].Lop += ((TNLop) nlop[i]).NLop; } // Ti giai on ny chng ta cha chn phng cho nhm lp // Sau khi chia nhm lp chng ta s lm vic . } } public static void Std_Size() { Div_Nhom(250); // nhm C (250) Div_Nhom(120); // nhm B (120) Div_Nhom(50); // nhm A (50) NLOPs = nlop.Count; } public static void Chon_Phong() { Int32 i, j, delta, id, mindel; TNLop r; for (i = 0; i < NLOPs; i ++) { mindel = 1000; id = -1; r = (TNLop) nlop[i]; for (j = 0; j < PHONGs; j++) { if ((phong[j].DungLuong > r.SoSV) && (phong[j].NLop_Sang == -1)) { delta = (phong[j].DungLuong - r.SoSV); } else { delta = 1000; } // Trong chng trnh ny chng ta s khng quan tm n ca no if ((delta < mindel))

108

Bi tp ln tr tu nhn to
{ mindel = delta; id = j;

Thi kho biu t ng

} }

} } r.Phong = id; if (id != -1) { phong[id].NLop_Sang = i; nlop[i] = r; }

/* Trc ht chng ta nh ngha cc Assembly, l cc khi ghp mt khi ghp bao gm cc thng tin sau y: - Nhm cc lp tham gia - S SV tham gia - Mn hc no (tc l xc nh mn), km theo thng tin bao nhiu tit lin tip - Gio vin no dy cc lp - Dy phng no. Cc thng tin v khi ghp ny s c a trc tip vo mng Events Qu trnh chn GV no v phng no s c xc nh bng cch chn ngu nhin. */ public static void Gen_ASM() { evn = new ArrayList(); TEvents rE; TNLop rNL; Int32 i, j, idM, idGV, idP; bool CaSang; string[] sM; Random rnd = new Random(); for (i = 0; i < NLOPs; i++) { rNL = (TNLop) nlop[i]; sM = rNL.CTDT.Split(','); for (j = 0; j < sM.Length-1; j++) { idM = Convert.ToInt32(sM[j]); // Thng tin v ca hc sng / chiu. CaSang = rNL.CaSang; // la chn Gio vin, khng vt qu sc dy ca gio vin // Sc dy ca gio vin c lu trong gv[].MaxSotiet do { idGV = rnd.Next(GVs); } while ((mon[idM].SoTrinh + gv[idGV].SoTiet) > gv[idGV].MaxSotiet);

109

Bi tp ln tr tu nhn to

Thi kho biu t ng


// Cp nht li gio vin ny. gv[idGV].SoTiet += mon[idM].SoTrinh; idP = rNL.Phong; // Cc ngy s nh s t 0-5, cc tit // Nn chng ta s t 255, 255 vt // iu c ngha l Event ny cha xp

t 0-11 ngoi khong lch

rE = new TEvents(rNL.NLop, idM, (Int16)mon[idM].SoTrinh, idGV, idP, 255, 255, false, CaSang, 0, 0, false); evn.Add(rE); // Ch thm hnh thc. trng cho p mon[idM].Lop += rNL.NLop; mon[idM].GiaoVien += idGV.ToString() + ","; } } EVENTs = evn.Count; } // More: giai on ny chng ta khng nn vit m cho mng GV.KeHoach v l nh sau: // Nu chng ta vit th trong giai on ny chng ta phi to ra 1 bng lu // kt qu trung gian ASM l cc b ghp. Tuy nhin b ghp ASM s thay i trong // giai on sau. l giai on chia nhm tit hnh thnh cc s kin. Do // Trong giai on sau chng ta s lm vic tc l to ra bng gv. Bng gv s // l bng string v mi gio vin dy chng trnh s khng ging nhau, v cc // string s lu tr s hiu cc s kin, cc s kin cch nhau bi du phy. // Thc cht qu trnh sinh s kin ny l qu trnh chia nhm cc tit bc 1. // lm sao cc s kin s c s nhm tit nm trong khong 2, 3, 4 tit // hc lin tip. L qu trnh chia bc 1 v chng ta cn xc nh chia tip // cc bc sau, trong trng hp nu cn. S kin l n v nh nht dng xp lch public static void Gen_Events() { Int32 idx = 0; TEvents rE, r1, r2; while (idx < evn.Count) { rE = (TEvents) evn[idx]; if (rE.SoTiet > 4) {

110

Bi tp ln tr tu nhn to
3, rE.GiaoVien,

Thi kho biu t ng


r1 = new TEvents(rE.NLop, rE.Mon, (Int16)

rE.Phong, rE.Ngay, rE.Tiet, rE.Sched, rE.CaSang, 0, 0, false); r2 = new TEvents(rE.NLop, rE.Mon, ((Int16) (rE.SoTiet-3)), rE.GiaoVien, rE.Phong, rE.Ngay, rE.Tiet, rE.Sched, rE.CaSang, 0, 0, false); evn[idx] = r1; evn.Add(r2); } idx += 1; } EVENTs = evn.Count; for (idx=0; idx < EVENTs; idx++) { rE = (TEvents) evn[idx]; // Thm vo k hoch ca gio vin // s hiu s kin m gio vin phi m nhim. gv[rE.GiaoVien].KeHoach += idx.ToString()+ ","; } } public static void FillMon(DataTable dt) { MONs = dt.Rows.Count; mon = new TMon[MONs]; for (Int32 i = 0; i < dt.Rows.Count ; i++) { Int16 vsotrinh = Convert.ToInt16(dt.Rows[i] ["m_Sotrinh"]); string vgv = dt.Rows[i]["m_GV"].ToString(); string vlop = dt.Rows[i]["m_Lop"].ToString(); mon[i] = new TMon(vsotrinh, vlop, vgv); } } public static void FillCTDT(DataTable dt) { CTDTs = dt.Rows.Count; ctdt = new string[CTDTs]; for (Int32 i = 0; i < dt.Rows.Count ; i++) { ctdt[i] = dt.Rows[i]["CTDT"].ToString(); } } public static void FillLop(DataTable dt) { LOPs = dt.Rows.Count; lop = new TLop[LOPs]; for (Int32 i = 0; i < dt.Rows.Count ; i++) { bool vcasang = (dt.Rows[i] ["l_Casang"].ToString()=="1"?true:false);

111

Bi tp ln tr tu nhn to
["l_idCTDT"]); ["l_SoSV"]); } }

Thi kho biu t ng


Int32 vidctdt = Convert.ToInt32(dt.Rows[i] Int16 vsosv = Convert.ToInt16(dt.Rows[i] lop[i] = new TLop(vsosv, vidctdt, vcasang);

public static void FillNLop(DataTable dt) { TNLop r; NLOPs = dt.Rows.Count; nlop = new ArrayList(); for (Int32 i = 0; i < dt.Rows.Count ; i++) { r = new TNLop("", "", 0, false, true, -1); r.CaSang = (dt.Rows[i] ["nl_Casang"].ToString()=="1"?true:false); r.Chia = (dt.Rows[i]["nl_Chia"].ToString()=="1"? true:false); r.CTDT = dt.Rows[i]["nl_CTDT"].ToString(); r.NLop = dt.Rows[i]["nl_NLop"].ToString(); r.Phong = Convert.ToInt32(dt.Rows[i] ["nl_Phong"]); r.SoSV = Convert.ToInt16(dt.Rows[i]["nl_SoSV"]); nlop.Add(r); } } public static void FillGV(DataTable dt) { gv = new TGv[dt.Rows.Count]; GVs = dt.Rows.Count; for(Int32 i = 0; i < dt.Rows.Count ; i++) { string vkehoach = dt.Rows[i] ["gv_Kehoach"].ToString(); Int16 vmaxsotiet = Convert.ToInt16(dt.Rows[i] ["gv_MaxSotiet"]); Int16 vsotiet = Convert.ToInt16(dt.Rows[i] ["gv_Sotiet"]); gv[i] = new TGv(vsotiet, vmaxsotiet, vkehoach); } } public static void FillPhong(DataTable dt) { phong = new TPhong[dt.Rows.Count]; PHONGs = dt.Rows.Count; for(Int32 i = 0; i < dt.Rows.Count ; i++) { Int16 vdungluong = Convert.ToInt16(dt.Rows[i] ["ph_Dungluong"]); Int32 vnlsang = Convert.ToInt32(dt.Rows[i] ["ph_NLop_Sang"]); Int32 vnlchieu = Convert.ToInt32(dt.Rows[i] ["ph_NLop_Chieu"]);

112

Bi tp ln tr tu nhn to
vnlchieu); } }

Thi kho biu t ng


phong[i] = new TPhong(vdungluong, vnlsang,

public static void FillEvents(DataTable dt) { TEvents r; evn = new ArrayList(); EVENTs = dt.Rows.Count; for (Int32 i = 0; i < dt.Rows.Count ; i++) { r = new TEvents("", -1, 255, -1, -1, 255, 255, false, true, 0, 0, false); r.CaSang = (Convert.ToString(dt.Rows[i] ["e_Casang"])=="1"?true:false); r.GiaoVien = (Int32) dt.Rows[i]["e_Giaovien"]; r.Mon = (Int32) dt.Rows[i]["e_Mon"]; r.Ngay = (Int16) dt.Rows[i]["e_Ngay"]; r.NLop = (string) dt.Rows[i]["e_NLop"]; r.Phong = (Int32) dt.Rows[i]["e_Phong"]; r.Sched = (Convert.ToString(dt.Rows[i] ["e_Sched"])=="1"?true:false); r.SoTiet = (Int16) dt.Rows[i]["e_Sotiet"]; r.Tiet = (Int16) dt.Rows[i]["e_Tiet"]; evn.Add(r); } } public static void FillConfig(DataTable dt) { /* MONs = Convert.ToInt32(dt.Rows[0]["cat_MONs"]); CTDTs = Convert.ToInt32(dt.Rows[0]["cat_CTDTs"]); LOPs = Convert.ToInt32(dt.Rows[0]["cat_LOPs"]); NLOPs = Convert.ToInt32(dt.Rows[0]["cat_NLOPs"]); GVs = Convert.ToInt32(dt.Rows[0]["cat_GVs"]); PHONGs = Convert.ToInt32(dt.Rows[0]["cat_PHONGs"]); EVENTs = Convert.ToInt32(dt.Rows[0]["cat_EVENTs"]); */ phongA = Convert.ToInt32(dt.Rows[0]["cat_phongA"]); phongB = Convert.ToInt32(dt.Rows[0]["cat_phongA"]); phongC = Convert.ToInt32(dt.Rows[0]["cat_phongA"]); } } // clsCommon, us

113

Bi tp ln tr tu nhn to

Thi kho biu t ng

Kt
Chng trnh gip chng em hc oc rt nhiu

114

You might also like