Tải bản đầy đủ
2 Chuẩn bị dữ liệu

2 Chuẩn bị dữ liệu

Tải bản đầy đủ

http://www.ictu.edu.vn

51

Hình 3.5: Minh họa kết quả sau khi xếp thời khóa biểu
Phần mềm Demo đã chạy ra kết quả là lịch thời khóa biểu, nhưng đang
còn bị xung đột giữa lớp - giáo viên - phòng học. Qua đó, tôi thấy rằng có thể
sử dụng mạng Hopfield để giải bài toán lập thời khóa biểu cho trường đại học
tuy vậy còn nhiều các yếu tố ràng buộc và cần phải dành nhiều thời gian
nghiên cứu kỹ để cho kết quả tối ưu.
3.4. Đánh giá kết quả
Việc cài đặt chương trình mô phỏng hệ thống ứng dụng mạng nơ-ron
Hopfield xếp lịch thời khóa biểu ban đầu cho kết quả khả quan. Tuy nhiên,
việc sử dụng mạng nơ-ron Hopfield để giải bài toán cũng cần được thử
nghiệm nhiều và so sánh với các thuật giải siêu tìm kiếm khác.
Một hạn chế trong luận văn này là khi tiến hành cài đặt thuật giải gặp
phải vô cùng khó khăn do tính trừu tượng trong thuật toán sửa đổi của bài
toán lập thời khóa biểu. Và việc so sánh giữa hai mô hình TT2 và TT3 cần
phải có nhiều thời gian và công sức nghiên cứu tìm tòi hơn nữa.
Trong thời gian làm luận văn, mặc dù đã nỗ lực hết sức trong việc
nghiên cứu tìm tòi trong đó có các tài liệu tiếng anh liên quan và sự giúp đỡ
nhiệt tình của thầy hướng dẫn và bạn bè đồng nghiệp. Song do thời gian có
hạn và còn nhiều hạn chế về mặt kinh nghiệm, kiến thức nên trong quá trình
tìm hiểu luận văn, không thể tránh khỏi những sai sót. Em mong rằng sẽ nhận
được nhiều ý kiến đóng góp của thầy cô và các bạn để luận văn hoàn thiện
hơn, và sớm ứng dụng vào thực tế.

http://www.ictu.edu.vn

52

KẾT LUẬN VÀ ĐỀ NGHỊ
Kết quả đạt được của luận văn
Trong luận văn “ Ứng dụng mạng nơ-ron Hopfield giải bài toán lập thời
khóa biểu“ tôi đã hoàn thành những nhiệm vụ sau:
1. Đã hệ thống cơ sở lý thuyết của mạng nơ-ron nhân tạo, đặc biệt là mạng
nơ-ron Hopfield. Nêu phương pháp ánh xạ mạng nơ-ron lên bài toán tối ưu,
và giới thiệu mạng nơ-ron Hopfield đối với bài toán lập thời khóa biểu.
2. Đã trình bày phát biểu bài toán lập thời khóa biểu và những khó khăn
trong việc lập thời khóa biểu cho trường đại học.
3. Đã nghiên cứu bài toán lập thời khóa biểu dựa trên mạng nơ-ron
Hopfield do tác giả De Verra (1985) đề xuất và hiểu rõ lý thuyết bài toán.
4. Đã cài đặt thử nghiệm thuật giải mạng nơ-ron Hopfield, lựa chọn một mô
hình cụ thể TT2 trên máy tính, kết quả đạt được là phần mềm xếp thời khóa
biểu.
Các định hướng nghiên cứu tiếp theo
Để cho một thời khóa biểu tốt nhất thỏa mãn nhiều ràng buộc phụ
thuộc vào nhiều yếu tố như: về độ lớn bài toán đặt ra, việc chọn lựa các
tham số cho ma trận trọng số là vô cùng cần thiết. Vì vậy hướng nghiên cứu
tiếp theo của luận văn là tìm ra thuật giải cải tiến và phương pháp chọn lựa
tham số sao cho bài toán lập thời khóa biểu tìm được là tối ưu.

http://www.ictu.edu.vn

53

TÀI LIỆU THAM KHẢO
Tiếng Việt
1. Đặng Quang Á, Một cách nhìn về việc sử dụng mạng Hopfield giải các bài
toán thoả mãn ràng buộc và tối ưu có ràng buộc, Báo cáo tại Hội thảo quốc
gia “Một số vấn đề chọn lọc của công nghệ thông tin”, Hải phòng 6/2001.
2. Đặng Quang Á, Ứng dụng của mang nơ ron trong tính toán, Sách “Hệ mờ,
mạng nơ ron và ứng dụng”, Chủ biên: Bùi Công Cường, Nguyễn Doãn
Phước, Nhà XBKH-KT, Hà nội, 2001, 199-211.
3. Bùi Văn Thanh, Bùi Việt Hà, Ứng dụng mô hình bài toán xếp thời khóa
biểu để phát triển phần mềm xếp thời khóa biểu cho trường đại học, cao đẳng,
Báo cáo nghiên cứu, Viện CNTT, 2008.
4. Nguyễn Thị Thanh Huyền, Nguyễn Hồng Hạnh, Vũ Tuyết Trinh, Trần
Đình Khang. Giải thuật di truyền và bài toán lập thời khóa biểu. Tạp chí Khoa
học và Công nghệ các trường Đại học kỹ thuật, 6/2008.
5. KS. Lương Văn Khoa, TS. Lưu Trường Văn, GS. Lê Kiều Mạng, Mạng nơron nhân tạo (ANNs) và giới thiệu một số nghiên cứu ứng dụng trong quản lý
dự án đầu tư xây dựng, tạp chí kinh tế xây dựng số 2/2006.
Tiếng Anh
6. Y. Takefuji, Neural Network Parallel Computing, Kluwer Acad. Publ.,
1992.
7. Marco Paulo Carrasco and Margarida Vaz Pato, A Comparison of Discrete
and Continuous Neural Network Approaches to Solve the Class/Teacher
Timetabling Problem, CIO − Working Paper 4/2001,

http://www.ictu.edu.vn

54

8. Masri Ayob, Salwani Abdullah and Ariff Md Ab Malik, A Practical
Examination Timetabling Problem at the Universiti Kebangsaan Malaysia,
IJCSNS International Journal of Computer Science and Network Security,
VOL.7 No.9, September 2007.
9. Kate A. Smitha, David Abramsonb,

David Dukeb, Hopfield neural

networks for timetabling: formulations, methods, and comparative results,
Computers & Industrial Engineering 44 (2003) 283–305.
10. http://www.grupet.at/en/downloads/demoversion/demoversion.php
11. http://www.mimosasoftware.com/company2.html
12. Salwani Abdullah, Heuristic approaches for university timetabling
problems, The Scholl of Computer Science and Information Technology, June
2006
13. J. Hertz, A. Krogh, R. G. Palmer, Introduction to the Theory of Neural
Computation, Addison-Wesley, 1991.

http://www.ictu.edu.vn

55

PHỤ LỤC
// Mã lệnh chính chương trình cài đặt thử nghiệm “ Ứng dụng mạng nơ-ron
Hopfield giải bài toán thời khóa biểu”
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;

namespace Hopfield.TT2
{
public class Calculation
{
private int iCountI;
private int iCountJ;
private int iCountK;
private int iCountL;
private float fAlpha;
private float fGamma;
private float fBeta;
private float fLama;
private int iDescentNumber;
private int iNeuralNumber;
private float[,,,] arrU;
private float[,,,] arrV;
private float[,,,] arrI;
private float[,,,] arrDelta;
private float[,,,,,,,] arrW;
private int[,] arrKroneckerDelta;
private float[, , ] arrR;
public Calculation(int i, int j, int k, int l,float
alpha,float beta,float gamma, float lama, int neural, int
descent)
{
CountI = i;
CountJ = j;
CountK = k;
CountL = l;
fAlpha = alpha;
fBeta = beta;
fGamma = gamma;
fLama = lama;

http://www.ictu.edu.vn

56

iNeuralNumber = neural;
iDescentNumber = descent;
U = new float[CountI,CountJ,CountK,CountL];
V = new float[CountI, CountJ, CountK, CountL];
I = new float[CountI, CountJ, CountK, CountL];
W = new float[CountI, CountJ, CountK, CountL,
CountI, CountJ, CountK, CountL];
arrDelta = new float[CountI, CountJ, CountK,
CountL];
arrKroneckerDelta = new int[CountI + CountJ +
CountK + CountL, CountI + CountJ + CountK + CountL];
R = new float[CountI, CountJ, CountK];
#region Private methods
private void KhoiTaoKroneckerDelta()
{
for (int i = 0; i < CountI + CountJ + CountK +
CountL; i++)
{
for (int j = 0; j < CountI + CountJ + CountK
+ CountL; j++)
{
if (i == j)
{
arrKroneckerDelta[i, j] = 1;
}
else
{
arrKroneckerDelta[i, j] = 0;
}
}
}
}
private void KhoiTaoU()
{
Random r = new Random();
for (int i=0;i{
for (int j=0;j{
for (int k=0;k{
for (int l=0;l{
arrU[i, j, k, l] = r.Next(2);

http://www.ictu.edu.vn

57

}
}
}
}
}
private void ChuanHoaU()
{
for (int i = 0; i < CountI; i++)
{
for (int j = 0; j < CountJ; j++)
{
for (int k = 0; k < CountK; k++)
{
for (int l = 0; l < CountL; l++)
{
if (arrU[i, j, k, l] >=0)
{
arrU[i, j, k, l] = 1;
}
else
{
arrU[i, j, k, l] = 0;
}
}
}
}
}
}
private void KhoiTaoV()
{
for (int i = 0; i < CountI; i++)
{
for (int j = 0; j < CountJ; j++)
{
for (int k = 0; k < CountK; k++)
{
for (int l = 0; l < CountL; l++)
{
arrV[i, j, k, l] =
TinhG(i,j,k,l);
}
}
}
}
}
private void TinhI()
{
for (int i = 0; i < CountI; i++)

http://www.ictu.edu.vn

58

{
for (int j = 0; j < CountJ; j++)
{
for (int k = 0; k < CountK; k++)
{
for (int l = 0; l < CountL; l++)
{
arrI[i, j, k, l] = arrR[i, j,
k]*fAlpha;
}
}
}
}
}
private int TinhG(int i, int j, int k, int l)
{
if (arrU[i,j,k,l]>0)
{
return 1;
}
return 0;
}
private float TinhW(int i, int j, int k, int l)
{
float fResult = 0;
for (int i1 = 0; i1 < CountI; i1++)
{
for (int j1 = 0; j1 < CountJ; j1++)
{
for (int k1 = 0; k1 < CountK; k1++)
{
for (int l1 = 0; l1 < CountL; l1++)
{
arrW[i,j,k,l,i1,j1,k1,l1] = (1)*fAlpha*arrKroneckerDelta[i, i1]*arrKroneckerDelta[j,
j1]*arrKroneckerDelta[k, k1] fBeta*arrKroneckerDelta[i, i1]*(1 - arrKroneckerDelta[j,
j1])*(1 - arrKroneckerDelta[k, k1])*arrKroneckerDelta[l, l1]
fLama*(1 - arrKroneckerDelta[i, i1])*arrKroneckerDelta[j,
j1]*(1 - arrKroneckerDelta[k, k1])*arrKroneckerDelta[l, l1] fGamma*(1 - arrKroneckerDelta[i, i1])*(1 -

http://www.ictu.edu.vn

59

arrKroneckerDelta[j, j1])*arrKroneckerDelta[k,
k1]*arrKroneckerDelta[l, l1];
fResult += arrW[i, j, k, l, i1,
j1, k1, l1];
}
}
}
}
return fResult;
}
private float TinhDeltaV(int i, int j, int k, int l)
{
float fTemp = 0;
for (int i1 = 0; i1 < CountI; i1++)
{
for (int j1 = 0; j1 < CountJ; j1++)
{
for (int k1 = 0; k1 < CountK; k1++)
{
for (int l1 = 0; l1 < CountL; l1++)
{
fTemp += arrW[i, j, k, l, i1, j1,
k1, l1]*V[i1, j1, k1, l1] ;
}
}
}
}
if (fTemp + I[i, j, k, l] >= 0 && arrV[i, j, k,
l] == 0)
{
return 1;
}
if (fTemp + I[i, j, k, l] <= 0 && arrV[i, j, k,
l] == 1)
{
return -1;
}
return 0;
}
#endregion
public void TT2()
{
float fCondition = -1;
KhoiTaoU();
KhoiTaoV();
TinhI();

http://www.ictu.edu.vn

60

KhoiTaoKroneckerDelta();
for (int m = 0; m < iDescentNumber; m++)
{
for (int n = 0; n < iNeuralNumber;n++ )
{
fCondition = 0;
for (int i = 0; i < CountI; i++)
{
for (int j = 0; j < CountJ; j++)
{
for (int k = 0; k < CountK; k++)
{
for (int l = 0; l < CountL;
l++)
{
arrU[i, j, k, l] =
TinhW(i, j, k, l) * arrV[i, j, k, l] + arrI[i, j, k, l];
arrV[i, j, k, l] =
TinhG(i, j, k, l);
arrDelta[i, j, k, l] =
TinhDeltaV(i, j, k, l);
arrV[i, j, k, l] +=
arrDelta[i, j, k, l];
fCondition += arrDelta[i,
j, k, l];
}
}
}
}
ChuanHoaU();
}
}
}
}
}