Chương này sẽ trình bày sơ lược về hệ chuyên gia, tập hợp, bài toán tìm kiếm và một số thuật toán tìm kiếm, về tư tưởng của thuật toán quay lui và hướng ứng dụng trong bài toán xếp Thời
Trang 1MỤC LỤC
MỞ ĐẦU 3
CHƯƠNG 1 5
TỔNG QUAN VỀ LẬP TRÌNH C# NET 5
1.1 Giới thiệu về NET FrameWork 5
1.2 Ngôn ngữ C# 6
1.2.1 Cấu trúc chương trình của ngôn ngữ C# 6
1.2.2 Những kiểu cơ sở của ngôn ngữ C# 7
1.2.3 Các lệnh điều khiển 8
1.2.4 C# hướng đối tượng 10
1.3 Mô hình đối tượng ADO.NET 14
1.3.1 Các Namespace 14
1.3.2 Các lớp dùng chung 14
1.3.3 Các lớp cơ sở dữ liệu chuyên biệt 15
CHƯƠNG 2 19
MỘT SỐ LÝ THUYẾT CƠ SỞ ỨNG DỤNG CHO BÀI TOÁN 19
XẾP THỜI KHÓA BIỂU 19
2.1 Khái quát về hệ chuyên gia 19
2.1.1 Những thành phần cơ bản của một hệ chuyên gia 19
2.1.2 Kỹ thuật suy luận trong các hệ chuyên gia 19
2.1.3 Biểu diễn tri thức trong các hệ chuyên gia 20
2.2 Khái quát về tập hợp 21
2.3 Bài toán tìm kiếm 21
2.3.1 Giải quyết vấn đề bằng tìm kiếm 21
2.3.2 Các chiến lược tìm kiếm trong không gian trạng thái 22
2.4 Cây tìm kiếm 26
2.5 Thuật toán quay lui 27
CHƯƠNG 3 30
BÀI TOÁN THỜI KHÓA BIỂU - GIẢI PHÁP ĐỀ XUẤT 30
VÀ THIẾT KẾ HỆ THỐNG 30
3.1 Mô hình đào tạo theo tín chỉ 30
3.2 Quy trình xếp thời khóa biểu theo đào tạo tín chỉ 30
3.3 Các đối tượng liên quan đến thời khóa biểu theo đào tạo tín chỉ 31
Trang 23.4 Phân tích bài toán 33
3.5 Một số khái niệm được áp dụng để xếp thời khóa biểu theo tín chỉ 35
3.6 Các vấn đề khó khăn và các giải pháp 38
3.6.1 Các khó khăn 38
3.6.2 Các giải pháp 40
3.7 Thuật toán xếp thời khóa biểu 46
3.7.1 Ý tưởng 46
3.7.2 Các bước chính của thuật toán XTKBTC 47
3.7.3 Lưu đồ thuật toán 50
3.8 Thiết kế hệ thống 51
3.8.1 Biểu đồ phân cấp chức năng 52
3.8.2 Biểu đồ luồng dữ liệu mức khung cảnh 53
3.8.3 Biểu đồ luồng dữ liệu mức đỉnh 53
3.8.4 Thiết kế cơ sở dữ liệu 54
3.8.5 Lược đồ dữ liệu quan hệ 55
CHƯƠNG 4 56
KẾT QUẢ THỰC NGHIỆM 56
4.1 Tính năng của chương trình 56
4.2 Các bước sử dụng chương trình 56
4.3 Các giao diện chính của chương trình 57
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 65
TÀI LIỆU THAM KHẢO 66
PHỤ LỤC 67
Trang 3MỞ ĐẦU
Chúng ta thấy rằng trong thực tế bất kỳ một đơn vị, cơ quan hay một tổ chức hoạt động kinh tế, xã hội nào cũng cần phải xậy dựng cho mình một lịch biểu Thậm chí, tất cả các quy trình sản xuất cũng đều cần có lịch biểu để đảm bảo các
công việc được hoàn thành theo đúng kế hoạch đã đặt ra Đối với các trường học
thì lịch biểu dạy và học (hay còn gọi là Thời khóa biểu) càng quan trọng hơn bao giờ hết Nó trở thành xương sống kết nối mọi hoạt động của nhà trường Chính vì vậy, bài toán xếp Thời khóa biểu luôn là một trong những bài toán được quan tâm và chú trọng hàng đầu trong các trường học
Đối với nước ta, mô hình đào tạo của các trường phổ thông là hầu như thống nhất trong cả nước, vì vậy có thể sử dụng chung một phần mềm xếp Thời khóa biểu cho các trường này Tuy nhiên, đối với các trường đại học, cao đẳng và trung học chuyên nghiệp thì mô hình đào tạo lại rất khác nhau Do đó, việc xậy dựng một Thời khóa biểu chung cho tất cả các trường là rất khó Đó cũng là lí do
để giải thích vì sao đa số các trường hiện nay vẫn xếp Thời khóa biểu bằng tay Mặt khác, việc xây dựng một phần mềm xếp Thời khóa biểu cũng không dễ dàng bởi đây là bài toán có độ phức tạp hàm mũ Rất nhiều các nhóm nghiên cứu trong và ngoài nước đã nghiên cứu bài toán này theo các hướng tiếp cận khác nhau như mạng nơron, fuzzy logic kết hợp với giải thuật di truyền và đã có những thành công đáng kể
Qua tìm hiểu thực tế tại Khoa em được biết, hiện nay Khoa đã áp dụng quy
chế đào tạo tín chỉ cho sinh viên đại học hệ chính quy Do đó công việc xếp thời khóa biểu sẽ khác với niên chế Nên em chọn đề tài “Xây dựng chương trình xếp thời khóa biểu phục vụ đào tạo tín chỉ cho Khoa Công Nghệ Thông Tin”
là đồ án tốt nghiệp của mình Trong quá trình làm đề tài em đã kế thừa và vận dụng thuật toán xếp Thời khóa biểu theo hướng tiếp cận của cô giáo Ngô Thị Vinh bộ môn Điện tử viễn thông đó là: Kết hợp giữa hệ chuyên gia, lý thuyết tập hợp và đồ thị Để thực hiện đề tài của mình, em đã kết hợp với các thầy giáo, cô giáo, cán bộ phòng đào tạo, cán bộ Bộ phận triển khai và đào tạo tín chỉ Khoa công nghệ thông tin – Đại học Thái Nguyên
Trang 4Báo cáo đồ án tốt nghiệp của em gồm các chương như sau:
Chương 1: Tổng quan về C# NET Trong chương này trình bày sơ lược về
môi trường NET, ngôn ngữ C# và các đối tượng truy cập cơ sở dữ liệu trên môi trường NET
Chương 2: Một số lý thuyết cơ sở ứng dụng cho bài toán xếp thời khóa
biểu Chương này sẽ trình bày sơ lược về hệ chuyên gia, tập hợp, bài toán tìm kiếm và một số thuật toán tìm kiếm, về tư tưởng của thuật toán quay lui và hướng ứng dụng trong bài toán xếp Thời khóa biểu
Chương 3: Sơ lược về bài toán xếp Thời khóa biểu và giải pháp đề xuất
Chương này sẽ tập chung phân tích bài toán xếp Thời khóa biểu, xây dựng thuật toán xếp Thời khóa biểu, thiết kế hệ thống
Chương 4: Kết quả thực nghiệm
Trang 5CHƯƠNG 1 TỔNG QUAN VỀ LẬP TRÌNH C# NET
1.1 Giới thiệu về NET FrameWork
Hạt nhân của NET Frame work là CRL (Common Language Runtime) CRL quản lý sự thực thi của đoạn mã NET và cung cấp các dịch vụ tạo quá trình phát triển ứng dụng dễ dàng hơn Các chương chình biên dịch và các công cụ làm cho chức năng của thư viện thực thi Runtime trở nên phong phú và hiệu quả hơn CRL quản lý đoạn mã ở mức thực thi thấp nhất, kết hợp khả năng sử dụng đồng thời nhiều ngôn ngữ đan xen nhau, tích hợp quản lý lỗi ngoại lệ, khởi động và chấm dứt các tiểu trình ở mức thấp, hỗ trợ về bảo mật, quản lý phiên bản, đóng gói cài đặt
CRL cung cấp sự dễ dàng cho các nhà phát triển VB.NET khi thiết kế và xây dựng ứng dụng mà những thay đổi đối tượng của chúng có thể tương tác với các đối tượng được viết bằng ngôn ngữ khác Sự tương tác này có thể bởi vì các trình biên dịch ngông ngữ và các công cụ phát triển hướng đến sử dụng CRL với một
hệ thống kiểu dữ liệu chung được định nghĩa bởi thư viện Runtime
Hình 1.1 Các thành phần cấu thành NET Framework
FrameWork, Languages, Tools
CLS – Common Language Specification
Web Service User Interface
Data and XML Base Class Library CLR – Common Language Runtime
Visual Studio NET
Trang 61.2 Ngôn ngữ C#
C# được thiết kế riêng để dùng cho Microsoft's NET Framework (Một nền khá mạnh cho sự phát triển, triển khai, hiện thực và phân phối các ứng dụng) C# là một ngôn ngữ hoàn toàn hướng đối tượng được thiết kế dựa trên kinh nghiệm của các ngôn ngữ hướng đối tượng khác
Một điều quan trọng cần nhớ C# là một ngôn ngữ độc lập Nó được thiết kế
để có thể sinh ra mã đích trong môi trường NET, nó không phải là một phần của NET bởi vậy có một vài đặc trưng được hỗ trợ bởi NET nhưng C# không hỗ trợ
và có những đặc trưng C# hỗ trợ mà NET không hỗ trợ (chẳng hạn như quá tải toán tử)
1.2.1 Cấu trúc chương trình của ngôn ngữ C#
+) Lớp
Lớp là một khuôn mẫu thiết yếu mà chúng ta cần tạo ra đối tượng Mỗi đối tượng chứa dữ liệu và các phương thức chế tác truy cập dữ liệu Lớp định nghĩa cái mà dữ liệu và hàm của mỗi đối tượng riêng biệt (được gọi là thể hiện) của lớp
new Phương thức ẩn một phương thức kế thừa với cùng kí hiệu public Phương thức có thể được truy cập bất kỳ
protected Phương thức có thể bị truy xuất không từ lớp nó thuộc hoặc
từ lớp dẫn xuất
internal Phương thức có thể được truy cập không cùng assembly
Trang 7private Phương thức có thể được truy cập từ bên trong lớp nó phụ
thuộc
static Phương thức có thể không được tính trên trên một lớp thể
hiển cụ thể virtual Phương thức bị ghi đè bởi một lớp dẫn xúât
override Phương thức ghi đè một phương thức ảo kế thừa hoặc trừu
tượng
sealed Phương thức ghi đè một phương thức ảo kế thừa, nhưng
không thể bị ghi đè từ lớp kế thừa này
extern Phương thức được thực thi theo bên ngoài từ một ngôn ngữ
khác
Bảng 1.1 Danh sách các từ khóa 1.2.2 Những kiểu cơ sở của ngôn ngữ C#
C# buộc phải khai báo kiểu của đối tượng được tạo Khi kiểu được khai báo
rõ ràng, trình biên dịch sẽ giúp ngăn ngừa lỗi bằng cách kiểm tra dữ liệu được
gán cho đối tượng có hợp lệ không, đồng thời cấp phát đúng kích thước bộ nhớ
cho đối tượng
C# phân thành hai loại: loại dữ liệu dựng sẵn và loại do người dùng định nghĩa
C# cũng chia tập dữ liệu thành hai kiểu: giá trị và tham chiếu Biến kiểu giá
trị được lưu trong vùng nhớ stack, còn biến kiểu tham chiếu được lưu trong vùng nhớ heap
C# cũng hỗ trợ kiểu con trỏ của C++, nhưng ít khi được sử dụng Thông thường con trỏ chỉ được sử dụng khi làm việc trực tiếp với các hàm API của windows hay các đối tượng COM
+) Loại dữ liệu định sẵn
C# có nhiểu kiểu dữ liệu định sẵn, mỗi kiểu ánh xạ đến một kiểu được hổ trợ bởi CLS (Commom Language Specification), ánh xạ để đảm bảo rằng đối tượng được tạo trong C# không khác gì đối tượng được tạo trong các ngôn ngữ
Trang 8.NET khác như kiểu byte, long, char, float, double, bool
+) Chuyển đổi kiểu định sẵn
Một đối tượng có thể chuyển từ kiểu này sang kiểu kia theo hai hình thức ngầm hoặc tường minh Hình thức ngầm được chuyển tự động còn hình thức tường minh cần sự can thiệp trực tiếp của người lập trình (giống với C++ và Java)
+) Kểu do người dùng định nghĩa
Để định nghĩa một kiểu dữ liệu ta sử dụng từ khóa struct
Trang 9được thực thi, ngược lại “khối lệnh 2” sẽ thực thi Một điểm khác biệt với C++ là biểu thức trong câu lệnh if phải là biểu thức logic, không thể là biểu thức số
Biểu thức lựa chọn là biểu thức sinh ra trị nguyên hay chuỗi Switch sẽ
so sánh biểu_thức_lựa_chọn với các biểu_thức_hằng để biết phải thực hiện với khối lệnh nào Lệnh nhảy như break, goto…để thoát khỏi câu switch và bắt buộc phải có
Lệnh goto có thể dùng để tạo lệnh nhảy nhưng nhiều khi nhà lập trình
chuyên nghiệp khuyên không nên dùng câu lệnh này vì nó phá vỡ tính cấu trúc của chương trình
Cách dùng câu lệnh này như sau:
Trang 10+) Câu lệnh break, continue, và return
Cả ba câu lệnh break, continue, và return rất quen thuộc trong C++ và
Java, trong C#, ý nghĩa và cách sử dụng chúng hoàn toàn giống với hai ngôn ngữ này
1.2.4 C# hướng đối tượng
+) Lớp và thừa kế
Lớp trong C# được định nghĩa với cú pháp sau:
Class MyClass
{
private int someField;
Publich string SomeMethod(bool parameter)
dụ chúng ta dùng thuật ngữ Function để chỉ những thành viên chứa mã như các
phương thức(methods), các thuộc tính(properties), constructor, hay các nạp chồng toán hạng(Operator Overloads)
Tất cả các lớp trong C# là những kiểu tham khảo Tức là khi bạn khai báo một kiểu lớp thì có một biến lưu trữ sự tham khảo đến một thể hiện (instance) của lớp
đó Và sử dụng lệnh new để tạo ra một đối tượng
Trang 11Ví dụ tạo ra đối tượng myObject như sau:
MyClass myObject;
myObject=new MyClass();
Tuy nhiên bạn có thể khai báo và khởi tạo đối tượng cùng một lúc
MyClass myObject=new MyClass();
C# hỗ trợ đơn thừa kế giữa các lớp Một lớp có thể thừa hưởng những thuộc tính và phương thức từ một lớp khác Cú pháp:
class MyDerivedClass: MyBaseClass
{
//functions and data members here
}
+) Phương thức nạp chồng(Overloading)
Một cách đơn giản là bạn khai báo những phương thức cùng tên nhưng khác
số lượng và kiểu của thông số:
+) Phương thức Overriden và Hide
Bằng cách khai báo virtual trong một hàm ở lớp cơ sở thì cho phép hàm đó
được overriden trong bất kỳ một lớp thừa hưởng nào
Trang 12+) Thuộc tính(properties)
Để định nghĩa thuộc tính trong C# bạn dùng cú pháp sau:
Public string SomeProperty
Trong C#, nếu bạn không chỉ rõ rằng một lớp thì thừa kế từ một lớp khác thì
trình biên dịch sẽ tự động hiểu rằng lớp của bạn thừa kế từ lớp Object Đều này
có nghĩa là ngoài những thuộc tính và phương thức mà bạn định nghĩa thì bạn có
thể truy cập đến những phương thức protected và public của lớp Object Và
những phương thức này cũng có trong tất cả lớp mà bạn định nghĩa
Bảng 1.2 Một số phương thức được định nghĩa trong lớp Object là:
string ToString() public virtual Trả về một chuỗi mô tả của
đối tượng int GetHashTable() public virtual Được sử dụng nếu thi hành
từ điển bool Equals(object
obj) public virtual
So sánh các thực thể của đối
tượng bool Equals(object
objA, object objB) public static
So sánh các thực thể của đối
tượng bool
ReferenceEquals(object
objA, object objB)
public static So sánh hai sự tham khảo
virtual
Đây là một dạng Destructor
của Net
Trang 13public double Length;
public double Width;
}
Một struct được định nghĩa gần giống như một lớp chỉ khác từ khoá và một vài điểm như sau:
1 Struct là một kiểu giá trị, không phải là kiểu tham khảo
2 Struct không hổ trợ thừa kế
Trang 143 Có vài sự khác nhau trong cách làm việc của các constructor đối với struct Trình biên dịch luôn luôn cung cấp một constructor không tham số mặc định, và không được cho phép thay thế
4 Với một struct, bạn có thể chỉ rỏ cách mà các trường được đặt ngoài bộ nhớ
1.3 Mô hình đối tượng ADO.NET
ADO.NET chứa hai không gian tên cơ sơ dữ liệu - một cho SQL Server, và một cái khác cho các cơ sở dữ liệu được trình bày thông qua một giao diện OLE
DB Nếu cơ sở dữ liệu của bạn chọn là một bộ phận của OLE DB, bạn có thể dễ dàng kết nối với nó từ NET - chỉ cần dùng các lớp OLE DB và kết nối thông qua các driver cơ sở dữ liêu hiện hành của bạn
1.3.1 Các Namespace
Tất cả các ví dụ trong chương này truy xuất dữ liệu trong một vài cách Các không gian tên sau chỉ ra các lớp và các giao diện được dùng cho việc truy xuất
dữ liệu trong NET:
System.Data - Các lớp truy xuất dữ liệu chung
System.Data.Common - Các lớp dùng chung của các data provider khác nhau
System.Data.OleDb - Các lớp của OLE DB provider
System.Data.SqlClient - Các lớp của SQL Server provider
System.Data.SqlTypes - Cac kiểu của SQL Server
1.3.2 Các lớp dùng chung
ADO.NET chứa một số lớp được dùng không quan tâm là bạn đang dùng các lớp của SQL Server hay là các lớp của OLE DB
Các lớp trong không gian tên System.Data được liệt kê sau đây:
DataSet - Đối tượng này chứa một bộ các DataTable, có thể bao gồm quan
hệ giữa các bảng, và nó được thiết kế cho truy xuất dữ liệu không kết nối
DataTable - Một kho chứa dữ liệu Một DataTable bao gồm một hoặc nhiều DataColumns, và khi được tạo ra nó sẽ có một hoặc nhiều DataRows chứa dữ liệu
Trang 15 DataRow - Một bộ giá trị, có quan hệ với một dòng trong bảng cơ sở dữ liệu, hoặc một dòng của bảng tính
DataColumn - Chứa định nghĩa của một cột, chẳng hạn như tên và kiểu dữ liệu
DataRelation - Một liên kết giữa hai DataTable trong một DataSet Sử dụng cho khóa ngoại và các mối quan hệ chủ tớ
Constraint - Định nghĩa một qui tắt cho một DataColumn (hoặc môt bộ các cột dữ liệu), như các giá trị là độc nhất
Sau đây là hai lớp trong không gian tên System.Data.Common:
DataColumnMapping - Ánh xạ tên của một cột từ cơ sở dữ liệu vào tên của một cột trong một DataTable
DataTableMapping - Ánh xạ tên của một bảng từ cơ sở dữ liệu vào một bảng trong một DataSet
1.3.3 Các lớp cơ sở dữ liệu chuyên biệt
Bổ sung cho các lớp dùng chung ở trên, ADO.NET có một số các lớp dữ liệu chuyên biệt được đưa ra dưới đây Các lớp này thực thi một bộ các giao diện chuẩn được định nghĩa trong không gian tên System.Data, cho phép sử dụng các lớp có cùng kiểu giao diện Ví dụ cả hai lớp SqlConnection và OleDbConnection thực thi giao diện IDbConnection
SqlCommand, OleDbCommand - Một vỏ bọc của các câu lệnh SQL hoặc các lời gọi stored procedure
SqlCommandBuilder, OleDbCommandBuilder - Một lớp sử dụng các câu lệnh SQL (chẳng hạn như các câu lệnh INSERT, UPDATE, vàDELETE) từ một câu lệnh SELECT
SqlConnection, OleDbConnection - Kết nối với cơ sở dữ liệu Giống như một ADO Connection
SqlDataAdapter, OleDbDataAdapter - Một lớp giữ các câu lệnh select, insert, update, và delete, chúng được sử dụng để tạo một DataSet và cập nhật Database
SqlDataReader, OleDbDataReader - Chỉ đọc, kết nối với data reader
Trang 16 SqlParameter, OleDbParameter - Định nghĩa một tham số cho một stored procedure
SqlTransaction, OleDbTransaction - Một giao tiếp cơ sở dữ liện, được bọc trong một đối tượng
Cơ sở dữ liệu (database) là một tổ chức tập hợp các thông tin được lưu trong file Visual Basic.Net (VB.NET) không thiết kế cho mục đích tạo cơ sở dữ liệu,
nó được dùng để truy xuất, hiển thị, phân tích dữ liệu chứa trong các CSDL Với ADO.NET của VB.NET bạn có thể truy xuất đến mọi hệ CSDL
Hình 1.2 Mô hình kết nối của các đối tượng khi truy xuất CSDL trong ADO.NET
Trước hết là thiết lập kết nối đến CSDL, tiếp đến đối tượng điều phối dữ liệu (DataAdapter) được tạo ra để truy vấn dữ liệu từ các bảng Tiếp đến là việc tạo ra đối tượng DataSet chứa bảng dữ liệu bạn muốn trích rút thông tin (DataSet chỉ là thông tin copy từ dữ liệu thật) Cuối cùng, bạn có thể gắn các thông tin trong DataSet vào các đối tượng hiển thị trên form như TextBox, Label, Button, DataGrid…
Thành phần ADO.NET được thiết kế nhằm tăng tốc độ truy cập và thao tác
dữ liệu trong môi trường đa lớp (n-tier) Thành phần chính của ADO.NET là DataSet và NET Provider
Trang 17 DataSet có thể mô phỏng dữ liệu một cách hợp lý hay trừu tượng , khác với Recordset, DataSet kkhông những là Container để chứa đựng và kiểm soát toàn bộ mẩu tin mà còn giữ nhiều bảng dữ liệu và các quan hệ giữa chúng
NET Provider là một tập hợp các đối tượng trong thành phần NET bao gồm: Connection ( kết nối CSDL ), Command ( lệnh thi hành ), DataReader ( bộ đọc dữ liệu ) ,và DataAdapter ( kết nối và điều phối dữ liệu )
Hình 1.3 Mô hình đối tượng ADO.NET
ADO.NET kết nối vào cơ sở dữ liệu để lấy dữ liệu và kết nối trở lại để cập nhật dữ liệu khi người dùng thay đổi chúng Hầu hết mọi ứng dụng đều sử dụng nhiều thời gian cho việc đọc và hiển thị dữ liệu, vì thế ADO.NET đã cung cấp một tập hợp con các đối tượng dữ liệu không kết nối cho các ứng dụng để người dùng có thể đọc và hiển thị chúng mà không cần kết nối vào cơ
Data Column
Trang 18Hình 1.4 Kiến trúc ADO.NET
ADO.NET được chia ra làm hai phần chính rõ rệt, được thể hiện qua hình: DataSet là thành phần chính cho đặc trưng kết nối không liên tục của kiến trúc ADO.NET DataSet được thiết kế để có thể thích ứng với bất kỳ nguồn dữ liệu nào DataSet chứa một hay nhiều đối tượng DataTable mà nó được tạo từ tập các dòng và cột dữ liệu, cùng với khoá chính, khóa ngoài, ràng buộc và các thông tin liên quan đến đối tượng DataTable này Bản thân DataSet được định dng như một tập tin XML
Thành phần chính thứ hai của ADO.NET chính là NET Provider Data, nó chứa các đối tượng phục vụ cho việc thao tác trên cơ sở dữ liệu được hiệu quả và nhanh chóng, nó bao gồm một tập các đối tượng Connection, Command, DataReader và DataAdapter Đối tượng Connection cung cấp một kết nối đến cơ sở dữ liệu, Command cung cấp một thao tác đến cơ sở
dữ liệu, DataReader cho phép chỉ đọc dữ liệu và DataAdapter là cấu nối trung gian giữa DataSet và nguồn dữ liệu
Trang 19CHƯƠNG 2 MỘT SỐ LÝ THUYẾT CƠ SỞ ỨNG DỤNG CHO BÀI TOÁN
XẾP THỜI KHÓA BIỂU 2.1 Khái quát về hệ chuyên gia
Hệ chuyên gia là một chương trình máy tính được thiết kế để mô phỏng chuyên gia, thực hiện giải quyết vấn đề
2.1.1 Những thành phần cơ bản của một hệ chuyên gia
Hệ chuyên gia gồm 6 thành phần:
Cơ sở tri thức: là thành phần chính của hệ chuyên gia Nó được xây dựng dựa trên tri thức của hệ chuyên gia, chứa các tri thức về lĩnh vực đó và lĩnh vực liên quan
Bộ nhớ làm việc: chứa các sự kiện liên quan đến vấn đề cần giải quyết
Máy suy diễn: là phương pháp mà chuyên gia giải quyết vấn đề
Phương tiện giải thích: là cách giải thích cho người sử dụng hiểu vấn đề này Khả năng thu nhận tri thức: là khả năng bổ xung tri thức mới
Giao diện người sử dụng: cho phép người sử dụng tương tác với hệ thống
Hình 2.1 Các thành phần của hệ chuyên gia 2.1.2 Kỹ thuật suy luận trong các hệ chuyên gia
Có nhiều phương pháp để suy luận trong các chiến lược giải quyết vấn đề của
hệ chuyên gia Những phương pháp hay gặp là suy diễn tiến, suy diễn lùi, và phối
hợp hai phương pháp này Các phương pháp khác như phân tích phương tiện, rút
gọn vấn đề, quay lui, kiểm tra lập kế hoạch, lập kế hoạch phân cấp
Trang 20Hình 2.2 Nền tảng của công nghệ hệ chuyên gia dựa trên luật hiện đại 2.1.3 Biểu diễn tri thức trong các hệ chuyên gia
- Khái niệm tri thức
Tri thức là sự hiểu biết về lĩnh vực, về chủ đề của con người
Thể hiện tri thức là quá trình mô phỏng tri thức trong cơ sở tri thức của hệ thống
- Thể hiện tri thức dưới dạng các luật IF…THEN…
Chúng ta có thể biểu diễn tri thức qua một số kỹ thuật như: thể hiện tri thức bằng cặp 3 đối tượng – thuộc tính – giá trị, thể hiện tri thức nhờ các luật, thể hiện tri thức qua mạng ngữ nghĩa, thể hiện tri thức qua các khung, thể hiện tri thức qua logic (mệnh đề và vị từ)
Trang 21- Độ tin cậy của vấn đề
Các chuyên gia thường đánh giá, suy xét khi giải quyết vấn đề Thông tin về vấn đề có thể không đầy đủ và không xác thực Người ta dùng lý thuyết xác suất
để đánh giá độ tin cậy của vấn đề và xây dựng lên lý thuyết chắc chắn
Gọi CF là nhân tố chắn chắn và CF là một giá trị thuộc khoảng [0 1] Nếu CF càng lớn thì độ tin cậy của sự kiện đó cũng càng lớn và xác suất xảy ra sự kiện đó càng cao Ngược lại, nếu CF càng nhỏ thì xác suất xảy ra sự kiện đó càng nhỏ
2.2 Khái quát về tập hợp
Ta có thể hiểu tập hợp là một tập các phần tử cùng thỏa mãn một hay một số tính chất nào đó và được kí hiệu A, B, C, X, Y, Z,
Để biểu diễn một tập hợp ta có hai cách sau:
Cách 1: liệt kê tất cả các phần tử thuộc tập hợp
Cách 2: chỉ ra những tính chất đặc trưng P nào đó của các phần tử thuộc tập
hợp
tất cả các phần tử thuộc ít nhất một trong hai tập hợp đã cho
AB = {x | x A hoặc x B}
Giao của hai tập hợp: giao của hai tập hợp A và B là một tập hợp kí hiệu là
AB gồm tất cả các phần thuộc đồng thời cả hai tập A và B
AB = {x | x A và x B }
Hiệu của hai tập hợp: hiệu của hai tập A và B là một tập kí hiệu là A\B gồm
các phần tử thuộc tập A mà không thuộc B
A\B = { x | x A và x B }
2.3 Bài toán tìm kiếm
2.3.1 Giải quyết vấn đề bằng tìm kiếm
Khi muốn giải quyết một vấn đề nào đó bằng cách tìm kiếm, đầu tiên ta phải xác định được không gian tìm kiếm Không gian tìm kiếm bao gồm tất cả các đối tượng cần quan tâm tìm kiếm Nó có thể là không gian liên tục, chẳng hạn không gian vectơ n chiều; nó cũng có thể là không gian các đối tượng rời rạc Vấn đề là làm thế nào để biểu diễn được các đối tượng trong không gian tìm kiếm Một
Trang 22trong phương pháp phổ biến là sử dụng không gian trạng thái Khi đó việc giải quyết vấn đề sẽ quy về việc tìm kiếm trong không gian trạng thái Bài toán xếp Thời khóa biểu thực chất cũng là một bài toán tìm kiếm phương án sắp xếp trong miền thời gian của lớp và của giáo viên Chính vì vậy, ta có thể áp dụng ta có thể
áp dụng các chiến lược tìm kiếm trong không gian trạng thái để giải quyết bài toán này bằng cách coi mỗi tiết học trong miền thời gian của giáo viên và lớp là một trạng thái và hàm tìm kiếm vị trí là các toán tử
Để biểu diễn vấn đề trong không gian trạng thái người ta sử dụng một tập các trạng thái và các toán tử và khi muốn biểu diễn một vấn đề nào đó cần phải xác định được các yếu tố sau:
Trạng thái ban đầu
Một tập các toán tử Trong mỗi toán tử tả một hành động hoặc một phép biến đổi để có thể đưa một trạng thái tới một trạng thái khác Tập tất cả các trạng thái có thể đạt tới từ một trạng thái ban đầu bằng cách áp dụng một dãy toán tử lập thành không gian trạng thái của vấn đề
Ta kí hiệu không gian trạng thái là U, trạng thái ban đầu là u0 (u0 U), Mỗi toán tử R có thể xem như một ánh xạ R: U ->U
Một tập hợp T các trạng thái kết thúc (trạng thái đích), T là tâp con của không gian U
Khi biểu diễn vấn đề thông qua các trạng thái và các toán tử thì việc tìm nghiệm của bài toán quy về việc tìm đường đi từ trạng thái ban đầu tới trạng thái kết thúc (đích) Có thể biểu diễn không gian trạng thái bằng đồ thị định hướng, trong đó mỗi đỉnh của đồ thị tương ứng với một trạng thái
2.3.2 Các chiến lược tìm kiếm trong không gian trạng thái
Có thể phân chia các chiến lược tìm kiếm thành hai loại: chiến lược tìm kiếm
mù và chiến lược tìm kiếm kinh nghiệm:
Chiến lược tìm kiếm mù (blind search): trong chiến lược tìm kiếm này, không
có một sự hướng dẫn nào cho sự tìm kiếm, mà ta chỉ phát triển các trạng thái ban đầu cho tới khi gặp một trạng thái đích nào đó Có hai kỹ thuật tìm kiếm mù đó là tìm kiếm theo bề rộng và tìm kiếm theo độ sâu
Trang 23Tư tưởng của tìm kiếm theo bề rộng là: các trạng thái được phát triển theo thứ
tự mà chúng được sinh ra, tức là trạng thái nào được sinh ra trước sẽ được phát triển trước Còn tư tưởng của tìm kiếm theo độ sâu là các trạng thái sinh ra sau sẽ được phát triển trước
Trong nhiều vấn đề, dù phát triển các trạng thái theo bề rộng hoặc theo bề sâu thì số lượng các trạng thái sinh ra trước khi gặp trạng thái đích cũng rất lớn Do
đó, các thuật toán tìm kiếm mù kém hiệu quả, đòi hỏi rất nhiều không gian và thời gian Trong thực tế, nhiều vấn đề không giải quyết được bằng tìm kiếm mù Chiếm lược tìm kiếm kinh nghiệm (heuristis search): chiến lược này sử dụng
sự hiểu biết về vấn đề để đánh giá các trạng thái và hướng dẫn sự tìm kiếm Trong quá trình phát triển trạng thái, ta sẽ chọn trong số các trạng thái chờ phát triển, trạng thái được đánh giá tốt nhất sẽ được chọn để phát triển trước Do đó, tốc độ tìm kiếm sẽ nhanh hơn
Như vậy, chiến lược tìm kiếm được xác định bởi chiến lược chọn trạng thái
để phát triển ở mỗi bước Trong tìm kiếm mù việc chọn trạng thái theo thứ tự mà chúng được sinh ra; còn trong tìm kiếm kinh nghiệm việc chọn trạng thái dựa vào
sự đánh giá các trạng thái
+) Các chiến lược tìm kiếm mù
Tìm kiếm theo bề rộng: Tư tưởng trong tìm kiếm theo bề rộng là tại mỗi
bước ta sẽ chọn trạng thái để phát triển là trạng thái được sinh ra trước trong các trạng thái chờ phát triển khác Danh sách L được sử dụng để lưu các trạng thái đã được sinh ra và chờ được phát triển Mục tiêu của tìm kiếm trong không gian trạng thái là tìm đường đi từ trạng thái ban đầu tới trạng thái đích, do đó trong quá trình tìm kiếm ta cần lưu lại vết của đường đi Ta có thể sử dụng mảng father
để lưu lại vết của đường đi, father[v]=u nếu cha của đỉnh v là u
Trong tìm kiếm bề rộng, trạng thái nào sinh ra trước sẽ được phát triển trước (theo nguyên tắc FIFO), do đó danh sách L được xử lý như hằng đợi (Queue) Nếu bài toán có nghiệm (tồn tại đường đi từ trạng thái ban đầu đến trạng thái đích), thì thuật toán tìm kiếm theo bề rộng sẽ tìm ra nghiệm, đồng thời đường đi
Trang 24tìm được là ngắn nhất Trong trường hợp bài toán vô nghiệm và không gian trạng thái là hữu hạn, thuật toán sẽ dừng và cho thông báo vô nghiệm.
Đánh giá độ phức tạp: Giả sử rằng, mỗi trạng thái khi được phát triển sẽ sinh
ra b trạng thái kề Ta gọi b là nhân tố nhánh Giả sử rằng, nghiệm của bài toán là
đường đi có độ dài d Bởi vì nghiệm có thể được tìm ra tại một đỉnh bất kỳ ở mức
d của cây tìm kiếm, do đó số đỉnh cần xem xét để tìm ra nghiệm là:
1 + b + b 2 + + b d-1 + k
Trong đó k có thể là 1,2, ,bd Do đó số đỉnh lớn nhất cần xem xét là:
1 + b + b 2 + + b d
Như vậy độ phức tạp thời gian của thuật toán tìm kiếm theo bề rộng là: O(bd )
Độ phức tạp không gian cũng là O(bd ), bởi vì ở đây cần lưu vào danh sách L
tất cả các đỉnh của cây tìm kiếm ở mức d, số các đỉnh này là bd
Tìm kiếm theo độ sâu: Tư tưởng trong tìm kiếm theo độ sâu là tại mỗi bước
ta sẽ chọn trạng thái để phát triển là trạng thái được sinh ra sau cùng trong số các trạng thái chờ phát triển Cũng như trong tìm kiếm theo bề rộng, danh sách L được sử dụng để lưu các trạng thái đã được sinh ra và chờ được phát triển và sử dụng mảng father để lưu lại vết của đường đi, father[v]=u nếu cha của đỉnh v là
u
Đánh giá độ phức tạp: Giả sử rằng, nghiệm của bài toán là đường đi có độ dài
d, cây tìm kiếm có nhân tố nhánh là b và có chiều cao là d Có thể xảy ra, nghiệm
là đỉnh ngoài cùng bên phải trên mức d của cây tìm kiếm, do đó độ phức tạp thời
gian của cây tìm kiếm theo độ sâu trong trường hợp xấu nhất là O(bd ), tức là
cũng như tìm kiếm theo bề rộng Tuy nhiên trên thực tế đối với nhiều bài toán tìm kiếm theo độ sâu thực sự nhanh hơn tìm kiếm theo bề rộng Lý do là tìm kiếm theo bề rộng phải xem xét toàn bộ cây tìm kiếm tới mức (d-1), rồi mới xem xét các đỉnh ở mức d Còn trong tìm kiếm theo độ sâu, có thể chỉ cần xem xét
một bộ phận nhỏ của cây tìm kiếm thì đã tìm ra nghiệm
Trên đây hai chiến lược tìm kiếm mù rất phổ biến và thông dụng, song sự kết hợp hai chiến lược này để tận dụng được các thế mạnh của mỗi chiến lược Đó là chiến lược tìm kiếm sâu lặp
Trang 25Tìm kiếm sâu lặp: Nếu cây tìm kiếm chứa nhánh vô hạn, khi sử dụng tìm
kiếm theo độ sâu, ta có thể mắc kẹt ở nhánh đó và không tìm ra nghiệm Để khắc phục hoàn cảnh đó, ta chỉ tìm kiếm độ sâu ở mức d nào đó Nếu không tìm ra nghiệm, ta tăng độ sâu lên 1 Quá trình trên được lặp lại lại với d lần lượt là: 1, 2, đến một độ sâu max nào đó Như vậy thuật toán tìm kiếm sâu lặp sẽ sử dụng thủ tục tìm kiếm sâu hạn chế như thủ tục con Đó là thủ tục tìm kiếm theo độ sâu
d nào đó rồi quay lên
Kỹ thuật tìm kiếm sâu lặp kết hợp được các ưu điển của tìm kiếm theo bề rộng và tìm kiếm theo độ sâu và có những đặc điểm như sau:
- Cũng như tìm kiếm theo bề rộng, tìm kiếm sâu lặp luôn tìm ra nghiệm (nếu bài toán có nghiệm), miễn là ta chọn độ sâu max đủ lớn
- Trong tìm kiếm sâu lặp chỉ cần không gian nhớ như tìm kiếm theo độ sâu
- Trong tìm kiếm sâu lặp, ta phải phát triển lặp lại nhiều lần cùng một trạng thái Điều đó làm cho ta có cảm giác rằng, tìm kiếm sâu lặp lãng phí nhiều thời
gian Thực ra, thời gian cho phát triển lặp lại các trạng thái là không đáng kể so
với thời gian tìm kiếm theo bề rộng Thật vậy, mỗi lần gọi thủ tục tìm kiếm sâu
hạn chế tới mức d, nếu cây tìm kiếm có nhân tố nhánh là b, thì số đỉnh cần phát
triển là: 1 + b + b2 + + bd
Nếu nghiệm ở độ sâu d, thì trong tìm kiếm sâu lặp, ta phải gọi thủ tục tìm kiếm sâu hạn chế với độ sâu lần lượt là: 0, 1, 2, , d Do đó các đỉnh ở mức 1 phải phải phát triển lặp d lần, các đỉnh ở mức 2 lặp d-1 lần, , các đỉnh ở mức d lặp 1 lần Như vậy tổng số đỉnh cần phát triển trong tìm kiếm sâu lặp là: (d+1)1 +
db + (d-1)b2 + + 2bd-1 + 1bd Do đó thời gian tìm kiếm sâu lặp là O(bd)
Tóm lại, thời gian tìm kiếm sâu lặp có độ phức tạp thời gian là O(bd) như
trong tìm kiếm theo bề rộng, và có độ phức tạp không gian là O(bd) như tìm kiếm theo độ sâu Nói chung, ta nên áp dụng tìm kiếm sâu lặp cho các vấn đề có không gian trạng thái lớn và độ sâu của nghiệm không biết trước Có thể nói rằng, đây
là chiến lược tốt nhất trong các chiến lược tìm kiếm mù
Trang 26+) Các chiến lược tìm kiếm kinh nghiệm
Hàm đánh giá và tìm kiếm kinh nghiệm:
Hàm đánh giá: trong nhiều vấn đề có thể sử dụng kinh nghiệm, tri thức của
hiểu biết về vấn đề để đánh giá các trạng thái của vấn đề Với mỗi trạng thái u, cần xác định một giá trị số h(u), số này đánh giá sự gần đích của trạng thái u Hàm h(u) được gọi là hàm đánh giá Trong quá trình tìm kiếm, tại mỗi bước ta sẽ chọn trạng thái có nhiều hứa hẹn nhất dẫn tới đích
Các kỹ thuật tìm kiếm sử dụng hàm đánh giá để hướng dẫn sự tìm kiếm được gọi chung là các kỹ thuật tìm kiếm kinh nghiệm Các giai đoạn cơ bản để giải quyết vấn đề bằng tìm kiếm kinh nghiệm như sau:
Tìm biểu diễn thích hợp mô tả các trạng thái và các toán tử của vấn đề
Xây dựng hàm đánh giá
Thiết kế chiến lược chọn trạng thái để phát triển ở mỗi bước
Tìm kiếm tốt nhất đầu tiên: Là tìm kiếm theo bề rộng được hướng dẫn bởi
hàm đánh giá Nhưng nó khác với tìm kiếm theo bề rộng ở chỗ, trong tìm kiếm theo bề rộng ta lần lượt phát triển tất cả các đỉnh ở mức hiện tại để sinh ra các đỉnh ở mức tiếp theo, còn trong tìm kiếm tốt nhất đầu tiên ta chọn đỉnh để phát triển là đỉnh tốt nhất được xác định bởi hàm đánh giá
Tìm kiếm leo đồi: Tìm kiếm leo đồi là tìm kiếm theo độ sâu được hướng dẫn
bởi hàm đánh giá Song khác với tìm kiếm theo độ sâu, khi ta phát triển một đỉnh
u thì bước tiếp theo, ta chọn trong số các đỉnh con của u, đỉnh có nhiều hứa hẹn
nhất để phát triển, đỉnh này được xác định bởi hàm đánh giá
2.4 Cây tìm kiếm
Ta có thể định nghĩa cây theo nhiều cách khác nhau như có thể hiểu cây là
một đồ thị liên thông không có chu trình Một cây bao giờ cũng gồm gốc, tập các
đỉnh trong của cây và một tập các lá Các đỉnh trong của cây là các đỉnh là cha của các con khác, còn lá là các đỉnh không có con
Đường đi trên cây ( kí hiệu ): là một dãy các đỉnh liên tiếp của đồ thị sao cho hai đỉnh kế nhau thì tồn tại một cung nối hai đỉnh Đỉnh xuất phát gọi là đỉnh đầu, đỉnh kết thúc gọi là đỉnh cuối
Trang 27Trong các bài toán tìm kiếm thì cây được gọi là cây tìm kiếm Quá trình tìm
kiếm cũng chính là quá trình xây dựng nên cây tìm kiếm Trong cây tìm kiếm thì gốc cây tương ứng với trạng thái ban đầu và các đỉnh được gán nhãn bởi các trạng thái trong không gian trạng thái Mỗi chiến lược tìm kiếm trong không gian trạng thái tương ứng với một phương pháp xây dựng cây tìm kiếm Quá trình xây dựng cây bắt đầu từ cây chỉ có một trạng thái ban đầu Giả sử tới một bước nào
đó trong quá trình tìm kiếm, ta đã xây dựng được một cây, các lá của cây tương ứng với các trạng thái chưa được phát triển Bước tiếp theo phụ thuộc vào chiến lược chọn một đỉnh nào đó trong các là được chọn để phát triển Khi phát triển đỉnh đó, cây tìm kiếm được mở rộng bằng cách thêm các đỉnh con của đỉnh đó Trong bài toán xếp Thời khóa biểu được trình bày ở đây, ta cũng xây dựng một cây tìm kiếm trong quá trình sắp xếp Gốc cây là điểm khởi tạo Một nút trong của cây là một vị trí trong miền thời gian của giáo viên, lớp môn học và giảng đường tương ứng thỏa mãn một bộ tiết học của môn học đang được xem xét Thuật toán sẽ tìm kiếm kết hợp theo cả chiều rộng và chiều sâu cho đến khi tìm được phương án sắp xếp
2.5 Thuật toán quay lui
Quay lui (Backtracking): là một chiến lược tìm kiếm cho các bài toán thỏa
mãn ràng buộc
Các bài toán thỏa mãn ràng buộc là các bài toán có một lời giải đầy đủ, trong
đó thứ tự của các phần tử không quan trọng Các bài toán này bao gồm một tập các biến mà mỗi biến cần được gán một giá trị tùy theo các ràng buộc cụ thể của bài toán Việc quay lui là để thử tất cả các tổ hợp để tìm được một lời giải Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải thử nhiều tổ hợp chưa hoàn chỉnh, và nhờ đó giảm thời gian chạy
Về bản chất, tư tưởng của phương pháp là thử từng khả năng cho đến khi tìm
thấy lời giải đúng Đó là một quá trình tìm kiếm theo độ sâu trong một tập hợp
các lời giải Trong quá trình tìm kiếm, nếu ta gặp một hướng lựa chọn không thỏa mãn, ta quay lui về điểm lựa chọn nơi có các hướng khác và thử hướng lựa chọn tiếp theo Khi đã thử hết các lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại
Trang 28điểm lựa chọn trước đó và thử hướng lựa chọn tiếp theo tại đó Quá trình tìm kiếm thất bại khi không còn điểm lựa chọn nào nữa
Quy trình đó được cài đặt bằng một hàm đệ quy, trong đó mỗi thể hiện của
hàm lấy thêm một biến và lần lượt gán tất cả các giá trị có thể cho biến đó, với mỗi lần gán giá trị lại gọi chuỗi đệ quy tiếp theo để thử các biến tiếp theo Chiến lược quay lui tương tự với tìm kiếm theo độ sâu nhưng sử dụng ít không gian bộ nhớ hơn, nó chỉ lưu giữ trạng thái của một lời giải hiện tại và cập nhật nó
Để tăng tốc quá trình tìm kiếm, khi một giá trị được chọn, trước khi thực hiện lời gọi đệ quy, thuật toán thường xóa bỏ giá trị đó khỏi miền xác định của các biến có mâu thuẫn chưa được gán và kiểm tra tất cả các hằng số để tìm các giá trị khác đã bị loại trừ bởi giá trị vừa được gán
Sử dụng chiến lược quay lui dùng để giải bài toán liệt kê các cấu hình Mỗi cấu hình được xây dựng bằng cách xây dựng từng phần tử, mỗi phần tử được chọn bằng cách thử tất cả các khả năng
Giả thiết cấu hình cần liệt kê có dạng (x1,x2, ,xn), khi đó thuật toán quay lui được thực hiện qua các bước sau:
1) Xét tất cả các giá trị x1 có thể nhận, thử cho x1 nhận lần lượt các giá trị đó
Với mỗi giá trị thử cho x1 ta sẽ:
2) Xét tất cả các giá trị x2 có thể nhận, lại thử cho x2 nhận lần lượt các giá trị
đó Với mỗi giá trị thử gán cho x2 lại xét tiếp các khả năng chọn x3 cứ tiếp tục như vậy đến bước:
n) Xét tất cả các giá trị x n có thể nhận, thử cho x n nhận lần lượt các giá trị đó,
thông báo cấu hình tìm được (x1,x2, ,x n)
Thuật toán quay lui có thể được mô tả bằng đoạn mã giả như sau:
Procedure Try(i: Integer);
Trang 29<Thông báo cấu hình tìm được>
else
begin
<Ghi nhận việc cho x i nhận giá trị V (Nếu cần)>;
Try(i + 1); {Gọi đệ qui để chọn tiếp x i + 1}
<Nếu cần, bỏ ghi nhận việc thử x i := V, để thử giá trị khác>;
end;
end;
end;
Trang 30CHƯƠNG 3 BÀI TOÁN THỜI KHÓA BIỂU - GIẢI PHÁP ĐỀ XUẤT
VÀ THIẾT KẾ HỆ THỐNG
3.1 Mô hình đào tạo theo tín chỉ
Học chế tín chỉ là phương thức đào tạo, trong đó sinh viên chủ động lựa chọn học từng môn học (tuân theo một số ràng buộc được quy định trước) nhằm tích lũy từng phần và tiến tới hoàn tất toàn bộ chương trình đào tạo, được cấp văn bằng tốt nghiệp
Trên cơ sở lượng hóa quy trình đào tạo thông qua khái niệm "tín chỉ", học chế
tín chỉ tạo điều kiện tối đa để cá nhân hóa quy trình đào tạo, trao quyền cho sinh viên trong việc đăng ký sắp xếp lịch học, việc tích lũy các học phần, kể cả sắp xếp thời gian học ở khoa, thời gian tốt nghiệp, ra trường Về phía mình, người sinh viên cần phát huy tính tích cực, chủ động để thích ứng với quy trình đào tạo này và để đạt những kết quả tốt nhất trong học tập, rèn luyện
Tín chỉ được sử dụng để tính khối lượng học tập của sinh viên Một tín chỉ
được quy định bằng 15 tiết học lý thuyết; 30 - 45 tiết thực hành, thí nghiệm hoặc thảo luận; 45 - 90 giờ thực tập tại cơ sở; 45 - 60 giờ làm tiểu luận, bài tập lớn hoặc đồ án, khoá luận tốt nghiệp (Đối với những chương trình, khối lượng của từng học phần đã được tính theo đơn vị học trình, thì 1,5 đơn vị học trình được quy đổi thành 1 tín chỉ)
3.2 Quy trình xếp thời khóa biểu theo đào tạo tín chỉ
Hình 3.1 Quy trình xếp thời khóa biểu theo đào tạo tín chỉ
Trang 31+) Diễn giải quy trình:
Bộ phận thực hiện: Bộ phận xếp Thời khoá biểu thuộc phòng Đào tạo
Dữ liệu đầu vào: Số lớp học phần dự kiến mở trong kỳ dựa trên số học phần trong kế hoạch đào tạo và số sinh viên trong các Ngành.(có gia, giảm theo kinh nghiệm thực tế)
Có các mức chi tiết khác nhau khi lập thời khoá biểu như có hoặc không có thông tin phòng học, thông tin giảng viên tuỳ thuộc vào sự sẵn sàng của các thông tin đó đối với bộ phận xếp thời khoá biểu
Nếu các thông tin về phòng học, giảng viên được đưa vào sau thì quá trình nhập thông tin cũng do phòng Đào tạo kiểm soát (có thể phân quyền nhập liệu cho các bộ phận liên quan) Trong trường hợp này, các thông tin đó sẽ được gắn với thời khoá biểu thực tế (sau khi hoàn thành đăng ký học của sinh viên)
Thời khoá biểu được xác định theo từng giai đoạn (học kỳ, tháng) với thông tin các tuần được lặp lại trong cả giai đoạn đó
Các thông số ảnh hưởng đến xếp thời khoá biểu tự động gồm có:
Xác định số tiết liên tục nhiều nhất (hoặc ít nhất) của một học phần
Chọn xếp cách ngày đối với học phần (có số tiết liên tục nhiều trong
ngày)
Xác định số tiết nhiều nhất cho một giảng viên trong một ngày
Cho phép xác định giảng viên chỉ dạy một ca trong ngày
Xác định số tiết nghỉ cho một giảng viên giữa hai ca
Kết quả của qui trình là thời khoá biểu dự kiến của các lớp học phần sẽ đưa lên mạng cho sinh viên đăng ký học Thời khoá biểu này được chuyển sang (trên mạng cục bộ) cho bộ phận quản lý đăng ký học
3.3 Các đối tượng liên quan đến thời khóa biểu theo đào tạo tín chỉ
Các đối tượng liên quan trực tiếp đến Thời khóa biểu bao gồm Giáo viên, Phòng học và lớp môn học
+) Giáo viên: Trong mô hình của bài toán xếp Thời khóa biểu vai trò các giáo
viên là ngang nhau Mỗi giáo viên về nguyên tắc sẽ có một Thời khóa biểu lịch
Trang 32giảng dạy riêng của mình trong học kỳ hoặc năm học hiện thời Những đặc thù sau cần chú ý khi xem xét dữ liệu Thời khóa biểu liên quan đến giáo viên:
- Trong mô hình xếp Thời khóa biểu hai mức (mức sơ bộ - chi tiết) thông tin phân bổ việc xếp Thời khóa biểu sơ bộ về Khoa hay Bộ môn là rất quan trọng
- Việc phân công giảng dạy của giáo viên theo từng môn học hoặc từng hình thức học của môn học sẽ tạo ra sự khác biệt rất lớn giữa các mô hình xếp Thời khóa biểu khác nhau
- Cho phép gán phân công giảng dạy không phải cho 1 giáo viên mà là cho một nhóm giáo viên
- Phân công giáo viên cho các lớp ghép và tách
+) Phòng học: Phòng học đóng vai trò rất quan trọng trong mọi bài toán xếp
Thời khóa biểu Các đặc thù sau của phòng học cần chú ý khi xếp Thời khóa biểu:
- Có phân biệt rõ ràng hay không giữa các phòng học lý thuyết và thực hành theo các môn học
- Các đặc thù chuyên môn đặc biệt của phòng học (ví dụ đối với các trường thể dục thể thao, nghệ thuật múa, hát, hội họa, thiết bị đặc chủng quân sự, )
- Sức chứa của phòng học
+) Môn học: Môn học hay học phần là một đơn vị quản lý chính của chương
trình đào tạo và là đối tượng xếp Thời khóa biểu chính Chính vì vậy môn học đóng vai trò quan trọng trong mô hình bài toán xếp Thời khóa biểu các nhà trường đại học, cao đẳng của Việt Nam Các đặc thù sau cần lưu ý khi mô tả dữ liệu môn học:
- Quan hệ giữa môn học trong Chương trình đào tạo chi tiết và phân bổ giảng dạy cho Thời khóa biểu hiện thời
- Thông tin về Khoa hay Bộ môn trực tiếp phụ trách học phần môn học này
- Thông tin liên quan đến Môn học KHUNG có trong chương trình đào tạo khung của Bộ Giáo dục & Đào tạo
- Thông tin về phân ngành của môn học (cơ bản, đại cương, cơ sở ngành hay chuyên ngành)
Trang 33- Thông tin về hình thức học, đặc thù hội trường, số tín chỉ được phân phối như số tín chỉ lý thuyết, thực hành, thảo luận
- Thông tin liên quan đến khóa học và học kỳ được phân bổ của môn học này
- Thông tin liên quan đến phân bổ giảng dạy theo lớp học (ví dụ ghép hay tách) của môn học này
- Thông tin về môn học tiên quyết (nếu có)
3.4 Phân tích bài toán
Căn cứ vào mô hình đào tạo của Khoa công nghệ thông tin – Đại học Thái Nguyên Căn cứ vào quy trình xếp thời khóa biểu theo tín chỉ Em đã xác định
được các thông tin đầu vào và đầu ra của bài toán như sau:
+) Thông tin đầu vào
Danh sách giáo viên
Nguyện vọng của giáo viên
Khối lượng phân công giảng dạy của giáo viên
Chương trình đào tạo của từng ngành/từng chuyên ngành
Công thức tính toán số tín chỉ quy ra số tiết
+) Thông tin đầu ra của thời khóa biểu
Thời khóa biểu của từng ngành/chuyên ngành
Thời khóa biểu của giáo viên
Thời khóa biểu của giảng đường
Thời khóa biểu thảo luận của lớp môn học (nếu có)
Trang 34+) Các yêu cầu cơ bản của thời khóa biểu theo đào tạo tín chỉ
Thời khóa biểu của giáo viên không trùng lặp: Thỏa mãn điều này có nghĩa là tại một thời điểm chỉ cho phép giáo viên dạy một môn tại một phòng học xác định nào đó Nhưng tại một thời điểm một giáo viên vẫn có thể dạy cho hai lớp nhưng hai lớp này phải cùng học một môn và cùng một phòng học (Đây là trường hợp các lớp học ghép)
Thời khóa biểu phải đúng, nghĩa là Thời khóa biểu không thiếu và không thừa: Đây là một yêu cầu rất quan trọng, nếu Thời khóa biểu mà không đúng thì
sẽ ảnh hưởng đến cả việc dạy và học Một Thời khóa biểu đúng tức là phải phù hợp với việc phân công dạy và học Đầu mỗi năm học Khoa phải lên kế hoạch dạy và học cho các ngành/chuyên ngành và giáo viên và được gọi là khối lượng giảng dạy đầu năm Ngoài ra, khoa cũng quy định số tín chỉ lý thuyết, số tín chỉ thảo luận, số tín chỉ thực hành của từng môn đối với từng ngành/chuyên ngành Căn cứ vào bảng khối lượng giảng dạy đầu năm và những quy định phân phối môn học mà quá trình sắp xếp sẽ đảm bảo cho Thời khóa biểu được xếp đúng Tuy nhiên, Thời khóa biểu được xếp đúng còn phụ thuộc rất nhiều vào quá trình nhập dữ liệu của xếp Thời khóa biểu, nếu người xếp Thời khóa biểu nhập sai dữ liệu đầu vào như quá trình phân công học và dạy bị nhầm lẫn thì Thời khóa biểu không thể được xếp đúng, thậm chí có thể dẫn đến tình huống bài toán thông thể tìm ra lời giải Do đó, việc kiểm tra dữ liệu trước khi sắp xếp là hết sức cần thiết
và quan trọng
Thời khóa biểu phải thỏa mãn cơ bản nguyện vọng của giáo viên Thời khóa biểu thỏa mãn nguyện vọng của giáo viên là điều rất cần thiết vì sẽ tạo nên tính mềm dẻo cho Thời khóa biểu Thực tế có rất nhiều giáo viên vừa phải dạy, vừa phải kiêm nhiệm các chức vụ khác như trưởng, phó phòng, trưởng bộ môn,… Các giáo viên này thường có những cuộc họp quan trọng, đòi hỏi trong Thời khóa biểu của họ phải tránh xếp vào các tiết mà giáo viên phải đi họp Ngoài ra, việc cho phép Thời khóa biểu thỏa mãn nguyện vọng của giáo viên còn giúp những giáo viên có con nhỏ, các giáo viên ở xa về Khoa công tác, giảng dạy,… có lịch biểu hợp lý hơn để tạo điều kiện tốt nhất cho họ khi công tác tại
Trang 35Khoa Tuy nhiên, nguyện vọng của giáo viên phải đảm bảo số tiết phải dạy của giáo viên nhỏ hơn hoặc bằng số tiết con trống trong Thời khóa biểu hiện thời của giáo viên đó Nếu số tiết dạy của giáo viên lớn hơn số tiết còn trống trong Thời khóa biểu của giáo viên thì nguyện vọng của giáo viên không thể được đáp ứng
và bài toán là không thể xếp được Thời khóa biểu của giáo viên nên được xếp sao cho giáo viên có thể dạy liên tiếp các tiết trong một buổi, phải hạn chế các tiết trống giữa buổi cho giáo viên
Các bộ tiết học của môn học mà có số tiết học lớn hơn 3 tiết trên một tuần không nên xếp liên tiếp trong một buổi học mà phải phân ra thành nhiều buổi học khác nhau Các bộ tiết học thuộc cùng một môn được xếp cách nhau sẽ giúp các sinh viên giảm bớt căng thẳng và có thời gian để nghiên cứu kỹ các vấn đề của môn học hơn
Một yêu cầu quan trọng trong thời khóa biểu theo tín chỉ là phải đảm bảo sao cho mọi sinh viên có thể đăng ký được hết các môn học trong học kỳ Như vậy thời khóa biểu phải rõ ràng, dễ hiểu để sinh viên có thể dễ chọn ra được lịch học cho bản thân
Giảng đường được sắp xếp để đảm bảo làm sao cho sức chứa học của giảng đường phải lớn hơn hoặc bằng tổng số sinh viên của lớp học tại giảng đường đó
3.5 Một số khái niệm được áp dụng để xếp thời khóa biểu theo tín chỉ
Dưới đây là một số khái niệm em đã vận dụng lại ý tưởng của cô giáo Ngô Thị Vinh trong quá trình xây dựng chương trình của mình
Độ ưu tiên (P): Là một giá trị thực thuộc đoạn [0 1] Một giáo viên j có
giá trị P càng cao thì khả năng được xếp lịch dạy trước càng lớn, do đó khả năng thỏa mãn nguyện vọng của giáo viên đó càng lớn
Miền sắp xếp: Là một tập các vị trí tiết trong Thời khóa biểu của lớp (Li) hay của giáo viên (GVj) có thể được chọn để sắp xếp các tiết học chưa được xếp Với một lớp i thì miền sắp xếp được định nghĩa là: Li ={1 m,1 n}; với
mmax=6 tương ứng với 6 tiết học của một buổi học và nmax=5 tương ứng 5 buổi học trong tuần, do đó số phần tử tối đa của Li bằng 30