0
Tải bản đầy đủ (.pdf) (126 trang)

Chƣơng trỡnh lập thời khoỏ biểu

Một phần của tài liệu MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG TRONG BÀI TOÁN LẬP THỜI KHOÁ BIỂU (Trang 95 -126 )

1. Tổ chức và khai thỏc cơ sở dữ liệu truyền thống

5.2.5. Chƣơng trỡnh lập thời khoỏ biểu

1. Màn hỡnh chớnh của chƣơng trỡnh:

Chƣơng trỡnh gồm cỏc thực đơn:

 Nhập dữ liệu (nhập cỏc thụng số về lớp học, cỏc mụn học, giảng viờn, danh sỏch mụn học của từng lớp, giờ bận của giảng viờn (giờ này do cỏc giảng viờn yờu cầu – ràng buộc mềm).

 Lập thời khoỏ biểu (nhập cỏc thụng số về số lƣợng quần thể, số vũng đời).  Xem thời khoỏ biểu (Từng lớp và tất cả)

 Hƣớng dẫn sử dụng chƣơng trỡnh.  Thoỏt: Thoỏt khỏi chƣơng trỡnh.

2. Form nhập danh sỏch cỏc mụn học, giảng viờn dạy mụn đú, số tiết cho từng lớp

3. Form nhập cỏc tham số về kớch thƣớc quần thể và số vũng đời:

4. Form xem thời khoỏ biểu của từng lớp:

KẾT LUẬN

Kết luận từ luận văn:

Trong xó hội phỏt triển hiện nay, dữ liệu tràn ngập nhƣng số lƣợng dữ liệu chuyển thành thụng tin cú ớch thỡ rất ớch. Chớnh vỡ lý do đú mà việc khai phỏ dữ liệu nhằm trớch ra cỏc thụng tin cú ớch là rất quan trọng nhất là trong cỏc lĩnh vực về kinh tế, y tế…

Dữ liệu trong cỏc tổ chức, cơ quan hiện nay rất lớn, việc lƣu trữ dữ liệu hiện nay chủ yếu dựng kho dữ liệu, với việc dựng kho dữ liệu thay thế cho hệ thống tỏc nghiệp cũ đó trợ giỳp rất lớn trong việc lƣu trữ dữ liệu, xử lý thụng tin và đặc biệt là trong khai phỏ dữ liệu. Hiện nay, kho dữ liệu sử dụng xử lý phõn tớch trực tuyến (On-line analytical processing-OLAP), phƣơng phỏp này đúng vai trũ quan trọng trong khai phỏ dữ liệu từ khi nú cú thể điều khiển tổng kết thụng tin từ Kho dữ liệu.

Khai phỏ dữ liệu cú nghĩa là phỏt hiện tri thức trong cơ sở dữ liệu, nú rỳt ra cỏc thụng tin khụng tầm thƣờng, tiềm ẩn, chƣa từng biết đến và tiềm năng từ cơ sở dữ liệu lớn. Khai phỏ dữ liệu đƣợc ứng dụng rất nhiều trong vấn đề phõn tớch cơ sở dữ liệu và trợ giỳp ra quyết định nhƣ: Phõn tớch và quản lý thị trƣờng; Quản lý và phõn tớch rủi ro; Quản lý và phỏt hiện gian lận; Thể thao; Thiờn văn học; WEB; Văn bản và trong cỏc bài toỏn dạng NP và NP – khú. Ngoài ra, khai phỏ dữ liệu đúng vai trũ cốt lừi trong quỏ trỡnh phỏt hiện tri thức.

Khi sử dụng cỏc phƣơng phỏp khai phỏ dữ liệu cần chỳ ý đờn cỏc bƣớc cần làm trong quy trỡnh khai phỏ dữ liệu, cỏc nhiệm vụ chớnh trong khai phỏ dữ liệu. Ngoài ra cần phải để ý rằng cũng cú rất nhiều trƣờng hợp khụng cần phải sử dụng cỏc phƣơng phỏp khai phỏ dữ liệu để lấy thụng tin cú ớch, vớ dụ nhƣ cỏc trƣờng hợp dữ liệu đó quỏ rừ ràng.

Trong trƣờng hợp cần tỡm ra cỏc đặc điểm về cấu trỳc cũng nhƣ cỏc đặc tớnh chung của dữ liệu thỡ phƣơng phỏp khai phỏ dữ liệu trực quan (sử dụng cỏc cụng cụ khai phỏ) tỏ ra rất cú tỏc dụng. Với cỏc phƣơng phỏ này ngƣời sử dụng sẽ tạo ra cỏc bản đồ dữ liệu, sau đú quan sỏt và rỳt ra cỏc kết luận.

Cỏc phƣơng phỏp khai phỏ dữ liện khụng trực quan đƣợc sử dụng rất rộng rói và rất đa dạng, tuy nhiờn chỳng ta cần xỏc định đƣợc cỏc mặt mạnh, mặt yếu của

từng phƣơng phỏp để từ đú cú thể xỏc định định đƣợc nờn dựng phƣơng phỏp nào cho phự hợp với mục tiờu đề ra.

Cỏc phƣơng phỏp khai phỏ dữ liệu đƣợc ỏp dụng trong rất nhiều lĩnh vực của cuộc sống, trong đú việc ỏp dụng giải thuật di truyền với bài toỏn lập thời khoỏ biểu đó đạt đƣợc cỏc kết quả khả quan. Ngày nay cú rất nhiều phƣơng phỏp giải quyết bài toỏn lập thời khoỏ biểu dựa trờn giải thuật di truyền, trong luận văn cú đƣa ra một giải phỏp nhƣ vậy. Với giải phỏp này bài toỏn lập thời khoỏ biểu đó đƣợc giải quyết khỏ thành cụng.

Hƣớng nghiờn cứu tiếp theo của luận văn:

Tỡm hiểu rừ hơn cỏc phƣơng phỏp khai phỏ dữ liệu trực quan và tiến đến xõy dựng cỏc cụng cụ để thực hiện cỏc phƣơng phỏp này.

Tỡm hiểu cỏc phƣơng phỏp khai phỏ dữ liệu đang sử dụng rộng rói, đƣa ra cỏc ứng dụng nờn dựng cỏc phƣơng phỏp này tốt hơn nữa để ngƣời sử dụng dễ dàng lựa chọn.

Phỏt triển bài toỏn lập thời khoỏ biểu để đạt đƣợc kết quả tối ƣu hơn nữa (95%).

Áp dụng cỏc phƣơng phỏp xõy dựng Kho dữ liệu để quản lý dữ liệu trong cơ quan.

TÀI LIỆU THAM KHẢO

Tài liệu tiếng Việt

1. Hoàng Kiếm, Lờ Hoàng Thỏi (2000), Giải thuật di truyền - cỏch giải tự nhiờn cỏc bài toỏn trờn mỏy tớnh, Nhà xuất bản giỏo dục.

2. Vũ Đức Thi, Lờ Hải Khụi (1999), Một số nguyờn lý hoạt động của kho dữ liệu, Tạp chớ Tin học và điều khiển, tr. 27, tr. 29-32.

Tài liệu tiếng Anh

3. Alberto Colorni, Marco Dorigo, Vittorio Maniezzo, A genetic Algorthm to solve the timetable problem, Department of Electronic and Information Technology of Milano Piazza Leonardo da Vinci.

4. Barry Devlin (1997), Data Warehouse, Addison Wesley Longman, Int. p. 432.

5. Christopher Westphal, Teresa Blaxton (1998), Data Mining Solution- Methods and Tools for Solving Real – World Problems, Wiley Computer Publishing, p. 616.

6. Enzhe Yu and Ki-Seok Sunga (2002), A genetic algorithm for university

weekly courses timetabling problem, Department of Industrial

Engineering, Seoul National University.

7. Hsiao-Lan Fang (1994), Genetic Algorithms in Timetabling and Sheduling, Ph.D. Department of Artificial Intelligence University of Edinburgh. p. 108.

8. Jiawei Han, Micheline Kamber (2001), Data Mining: Concepts and Techniques, Morgan Kaufmann Publishers, p. 550.

9. Jiři Vorỏč, Ivo Vondrỏk, Karel Vlček (1998), School timetable generating using genetic algorithm, Technical University of Ostrava Czech Republic.

10.Mohammad A. Radaideh, Sharaf S.Horani(2002), Automatic College Course “Timetable Spreading” Using Genetic Algorithms, The Fourth Annual U.A.E University Research Conference.

11.Paul Gray, Hugh J.Watson (1998), Decision Support in the Data Warehouse, Prentice Hall PTR. p. 399.

12.Sỏndor Gyory, Zoltỏn Petres, Annamỏria R. Vỏrkonyi- Kúczy (2000),

Genetic Algorithms in Timetabling. A newApproach, Department of Measuement and Information Systems, Budapest Uniersity of Technology and Economics, Hungary.

13.Tim B. Cooper and Jsffrey H. Kingston (1995), A program for Constructing Hight Shool Timetables, Department of Computer Science, The university of Sydney 2006 Australia.

14.Usama M. Fayyad, Gregory Piatesky-Shapiro, Padhraic Smyth, Ramasamy Uthurusamy (1990), Advances in Knowledge Discovery and Data Mining,

The Massachusetts institute of Technology. Cambridge. Massachusetts. And London. England, p. 610.

PHỤ LỤC

Một số Modul chớnh của chương trỡnh

1. Lớp biểu diễn đưa cỏc mụn học và giỏo viờn vào thời khoỏ biểu ban đầu.

Private Sub Class_Initialize() malop = 0

Fitvalue = 0 End Sub

Public Sub Init(chisolop As Integer) Dim count1, count2

Dim X As GEN Set X = New GEN malop = chisolop For count1 = 1 To 5 For count2 = 1 To 6

Set TKB(count1, count2) = X Next

Next

Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim rs1 As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open

Set rs1 = New ADODB.Recordset Set rs1.ActiveConnection = cn Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn Dim s, s1 As String

s = " Select SoTiet,MMH,MGV from LP_MH_GV where ML =" & malop rs.Source = s

rs.Open

Dim tempcol As New Collection Dim i As Integer

Dim Index As Integer Dim temp As GEN Dim gv As Integer Dim mh As Integer While Not rs.EOF

i = rs.Fields("SoTiet") ' Đếm số tiết học trong tuần của mụn học này 'Lưu cỏc tiết học vào tập hợp

gv = rs.Fields("MGV") mh = rs.Fields("MMH") For Index = 1 To i

Set temp = New GEN temp.MGV = gv

temp.cd = False tempcol.Add temp Next

rs.MoveNext 'Mụn tiếp theo Wend

rs.Close

'Lấy xong số tiết cho mỗi mụn học

s = "select thu2,thu3,thu4,thu5,thu6,thu7 from Tiet_co_dinh where ML = " & malop rs.Source = s

rs.Open

Dim tempcd As New Collection If rs.BOF <> rs.EOF Then i = 1

While Not rs.EOF For Index = 0 To 5

If (rs.Fields(Index) <> 0) Then temp.MMH = rs.Fields(Index) temp.cd = True

' Lấy mó giỏo viờn dạy mụ học cố định

s1 = "select MGV from Lp_MH_GV where ML =" & malop & " and MMH = " & temp.MMH

rs1.Source = s1 rs1.Open

temp.MGV = rs1.Fields(0) Set TKB(i, Index + 1) = temp End If Next i = i + 1 rs.MoveNext Wend rs1.Close End If

'Phõn cỏc tiết học cũn lại vào cỏc buổi học Dim j As Integer

Dim k As Integer j = tempcol.count For i = 1 To 5

For Index = 1 To 6

If TKB(i, Index).cd Then Else If j > 0 Then

k = 0 While k = 0

k = Int(j * Rnd + 1) Wend

Set TKB(i, Index) = tempcol.Item(k)

tempcol.Remove (k) ' Loại bỏ tiết đó phõn khỏi danh sỏch j = j - 1 End If End If Next Next 'Wend

' Phõn xong cỏc tiết học vào cỏc buổi học ' Lấy danh sỏch giỏo viờn dạy lớp này Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn

s = "select MGV from LP_MH_GV where ML = " & malop rs.Source = s

rs.Open

While Not rs.EOF

gv = rs.Fields("MGV") dsgv.Add gv

rs.MoveNext Wend

rs.Close

' Lấy giờ bận của giỏo viờn

'truy cập cơ sở dữ liệu lấy thụng tin về giờ bận của cỏc giỏo viờn ' Một tuần cú 30 tiết học. Đối với mỗi giỏo viờn ta sẽ dựng một tập hợp ' cú 30 phần tử ứng với 36 tiết khi giỏo viờn nào bận vào giờ nào thỡ ' phần tử đú của tập hợp được đặt bằng 1

Dim cs As Integer cs = 1

Dim coll As Collection

While (cs <= dsgv.count) 'Bắt đầu lấy thụng tin về giờ bận của từng giỏo viờn gv = dsgv.Item(cs) 'Lấy giờ bận của giỏo viờn cú mó giỏo viờn là mgv Set coll = New Collection

s = "select tiet,thu2,thu3,thu4,thu5,thu6,thu7 from gio_ban where MGV =" & gv rs.Source = s

rs.Open i = 0

Dim tem As Integer While Not rs.EOF For Index = 0 To 5 If rs.Fields(Index) Then tem = 6 * i + Index + 1 coll.Add 1 Else coll.Add 0 End If Next

i = i + 1

rs.MoveNext ' Bản ghi tiếp theo Wend ' Xong một giỏo viờn

rs.Close ' End If

BAN.Add coll ' Đưa cỏc giờ bận của giỏo viờn cú MGV là mgv vào tập hợp cs = cs + 1

Wend

'Đưa xong danh sỏch giỏo viờn cựng với cỏc giờ bận của họ vào tập hợp End Sub

' Hàm đổi chỗ tiết học trong một ngày Public Sub Interchange()

Dim col1 As Integer Dim row1 As Integer Dim col2 As Integer Dim row2 As Integer Dim temp1 As GEN Dim temp2 As GEN Dim temp3 As New GEN Set temp1 = New GEN Set temp2 = New GEN Dim temp4 As New GEN Randomize

col1 = Int(Rnd * 6 + 1) col2 = Int(Rnd * 6 + 1) row1 = Int(Rnd * 5 + 1) row2 = Int(Rnd * 5 + 1) Set temp1 = TKB(row1, col1) Set temp2 = TKB(row2, col2)

If temp1.cd Or temp2.cd Then ' Kiểm tra hai tiết được đổi chỗ khụng phải là hai tiết cố định

' Hai tiết cố định thỡ khụng đổi Else

temp3.MGV = temp2.MGV temp3.MMH = temp2.MMH temp3.cd = temp2.cd

Set TKB(row1, col1) = temp3 temp4.MGV = temp1.MGV temp4.MMH = temp1.MMH temp4.cd = temp1.cd

Set TKB(row2, col2) = temp4 End If

Set temp4 = Nothing Set temp1 = Nothing Set temp2 = Nothing Set temp3 = Nothing '

End Sub

'<< Hàm này kiểm tra xem giỏo viờn cú mó số là mgv cú dạy lớp này hay khụng? Function gv(magv As Integer) As Boolean

Dim Index As Integer Index = 1

gv = False

While Index <= dsgv.count

If magv = dsgv.Item(Index) Then gv = True

End If

Index = Index + 1 Wend

End Function

Public Sub Sets(ByVal i As Integer, ByVal j As Integer, gv As Integer) Dim temp As GEN

Set temp = New GEN Set temp = TKB(i, j) temp.MGV = gv Set TKB(i, j) = temp Set temp = Nothing End Sub

'Hàm này cú nhiệm vụ sắp xếp lại cỏc tiết học trong tuần Public Sub ReOrder()

Dim cd(1 To 5) As GEN 'Mảng này dựng để chứa tạm cỏc tiết cố định Dim kcd(1 To 5) As GEN ' Mảng này dựng để chứa cỏc tiết khụng cố định Dim temp As GEN

Set temp = New GEN

Dim i As Integer Dim j As Integer Dim Index As Integer Dim acc As Boolean For Index = 1 To 5

Set cd(Index) = New GEN Set kcd(Index) = New GEN Next i = Int(Rnd * 10 + 1) If i > 5 Then acc = True Else acc = False End If

For Index = 1 To 6 ' Lấy cỏc ngày

j = 1

For i = 1 To 5

Set temp = TKB(i, Index) If temp.cd = True Then Set cd(j) = TKB(i, Index) j = j + 1

End If Next

' Lấy cỏc tiết cũn lại (khụng cố định) đặt vào mảng kcd Dim size As Integer

size = 5 - j + 1 j = 1

For i = 1 To 5

Set temp = TKB(i, Index) If temp.cd = 1 Then Else

Set kcd(j) = TKB(i, Index) j = j + 1

End If Next

' sắp xếp lại mảng kcd Dim tam As GEN For i = 1 To size - 1

For j = i + 1 To size Dim temp1 As GEN Dim temp2 As GEN Set temp1 = New GEN Set temp2 = New GEN Set temp1 = kcd(i) Set temp2 = kcd(j)

If acc Then ' Sắp xếp theo chiều tăng If temp1.MMH > temp2.MMH Then temp1.gv = kcd(i).gv temp1.mh = kcd(i).mh temp1.TCD = kcd(i).TCD temp2.gv = kcd(j).gv temp2.mh = kcd(j).mh temp2.TCD = kcd(j).TCD Set kcd(i) = temp2

Set kcd(j) = temp1 End If

Else ' Sắp xếp theo chiều giảm

temp1.gv = kcd(i).gv temp1.mh = kcd(i).mh temp1.TCD = kcd(i).TCD temp2.gv = kcd(j).gv temp2.mh = kcd(j).mh temp2.TCD = kcd(j).TCD Set kcd(i) = temp2

Set kcd(j) = temp1

End If End If

Set temp1 = Nothing Set temp2 = Nothing Next

Next 'Sắp xếp xong mảng kcd Dim count As Integer

j = 1 i = 1

For count = 1 To 5

Set temp = TKB(count, Index) If temp.cd Then

Set TKB(count, Index) = cd(j) j = j + 1

Else

Set TKB(count, Index) = kcd(i) i = i + 1

End If Next

Next ' Ngày tiếp theo For count = 1 To 5

Set cd(count) = Nothing Set kcd(count) = Nothing Next

Set temp = Nothing Set temp1 = Nothing Set temp2 = Nothing End Sub

' Chức năng của hàm là lấy cỏc giờ dạy của giỏo viờn cú chỉ số là mgv trong lớp Public Function THGD(MGV As Integer) As Collection

Dim kq As New Collection Dim i, j As Integer

Dim str As String Dim temp As New GEN If gv(MGV) Then For i = 1 To 5 For j = 1 To 6

Set temp = TKB(i, j) If temp.MGV = MGV Then kq.Add 1 Else kq.Add 0 End If Next Next

Set temp = Nothing

' Nếu giỏo viờn đú cú giờ dạy trựng vào giờ bận thỡ sẽ được tớnh là dạy hai tiết Dim temp1 As New Collection

Dim Index As Integer Index = 1

While dsgv.Item(Index) <> MGV Index = Index + 1

Wend

Set temp1 = BAN.Item(Index)

Set THGD = New Collection Set THGD = kq

Set temp1 = Nothing Set kq = Nothing End If

End Function

' Tớnh giỏ trị thớch nghi của lớp

' Ta dựng một một mảng kcd dựng để lưu kết quả tớnh toỏn Public Function fitness() As Integer

Dim gt As Integer Dim count1 As Integer Dim i As Integer Dim count As Integer Dim cd As Integer

Dim kcd(1 To 6) As Integer Dim temp1 As New GEN Dim temp2 As New GEN cd = 0

gt = 0 ' giỏ trị thớch nghi ban đầu được đặt là ' Tớnh mức độ thớch nghi

For count = 1 To 6 ' Tớnh từng cột một ' Đặt lại cỏc giỏ trị của mảng For i = 1 To 5

kcd(i) = 0 Next

kcd(1) = 1 i = 1

For count1 = 1 To 4 'Đếm số tiết học của một mụn trong một ngày Set temp1 = TKB(count1, count)

Set temp2 = TKB(count1 + 1, count)

If temp1.MMH = temp2.MMH Then ' Hai tiết của cựng một mụn Else

i = i + 1 ' Hai tiết của hai mụn khỏc nhau End If kcd(i) = kcd(i) + 1 Next ' Hết một cột For count1 = 1 To i If kcd(count1) = 1 Then gt = gt + 1 End If

If kcd(count1) = 5 Then ' Một mụn nào đú học quỏ 4 tiết trong một ngày thỡ hàm đỏnh giỏ của nú sẽ giảm

gt = gt + 2 End If If kcd(count1) = 4 Then gt = gt + 1 End If Next

Next ' Ngày tiếp theo Fitvalue = gt

fitness = gt

Set temp1 = Nothing Set temp2 = Nothing End Function

Public Function getgv(ByVal row As Integer, ByVal col As Integer) As Integer Dim temp As Integer

Dim ogen As New GEN Set ogen = TKB(row, col) temp = ogen.MGV

getgv = temp Set ogen = Nothing End Function

Public Sub ToDB(fit As Integer) Dim i As Integer

Dim j As Integer Dim s As String

Dim temp As New GEN

Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open

For i = 1 To 5 For j = 1 To 6

Set temp = TKB(i, j) t(j) = temp.MMH Next

s = "insert into ket_qua(ml,tiet,thu2,thu3,thu4,thu5,thu6,thu7,lc) values('" & malop & "', '" & i & "','" & t(1) & "','" & t(2) & "','" & t(3) & "','" & t(4) & "','" & t(5) & "','" & t(6) & "','" & fit & "')"

cn.Execute (s) Next

cn.Close

Set cn = Nothing End Sub

Public Function GetGen(ByVal row As Integer, ByVal col As Integer) As GEN Dim temp As GEN

Set temp = New GEN Dim newgen As New GEN Set temp = TKB(row, col) newgen.MGV = temp.MGV newgen.MMH = temp.MMH newgen.cd = temp.cd

Set GetGen = New GEN Set GetGen = newgen Set newgen = Nothing Set temp = Nothing End Function

Public Function SetGen(ByVal row As Integer, ByVal col As Integer, ByVal newgen As GEN)

Dim temp As New GEN temp.MGV = newgen.MGV temp.MMH = newgen.MMH temp.cd = newgen.cd

Set TKB(row, col) = temp Set temp = Nothing

Một phần của tài liệu MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG TRONG BÀI TOÁN LẬP THỜI KHOÁ BIỂU (Trang 95 -126 )

×