38
Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia LỜI CÁM ƠN Em xin chân thành cảm ơn PGS.TS. Đỗ Văn Nhơn đã tận tình truyền thụ cho chúng em những kiến thức về Phương pháp toán trong tin học. Tuy thời gian học không nhiều nhưng chúng em đã học hỏi được từ thầy những kiến thức cơ bản của môn học. Vì thời gian có hạn và kiến thức còn hạn chế nên bài thu hoạch chắc chắn còn những khiếm khuyết. Em rất mong thầy lượng thứ và hướng dẫn để chúng em có thể hoàn thiện tốt hơn. Kính chúc thầy và gia đình sức khoẻ dồi dào. Chúc thầy thành công hơn nữa trên con đường khoa học và trong công tác giảng dạy. Hồ Chí Minh, ngày 25 tháng 12 năm 2010 Học viên : Hoàng Lê Nhật Anh SVTH : Hoàng Lê Nhật Anh 1

Mau Prolog DOING Bai Thu Hoach CH1001001 Hoang Le Nhat Anh

Embed Size (px)

DESCRIPTION

mua thu hoach

Citation preview

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

LỜI CÁM ƠN

Em xin chân thành cảm ơn PGS.TS. Đỗ Văn Nhơn đã tận tình truyền thụ

cho chúng em những kiến thức về Phương pháp toán trong tin học. Tuy thời

gian học không nhiều nhưng chúng em đã học hỏi được từ thầy những kiến

thức cơ bản của môn học.

Vì thời gian có hạn và kiến thức còn hạn chế nên bài thu hoạch chắc

chắn còn những khiếm khuyết. Em rất mong thầy lượng thứ và hướng dẫn để

chúng em có thể hoàn thiện tốt hơn.

Kính chúc thầy và gia đình sức khoẻ dồi dào. Chúc thầy thành công hơn

nữa trên con đường khoa học và trong công tác giảng dạy.

Hồ Chí Minh, ngày 25 tháng 12 năm 2010

Học viên : Hoàng Lê Nhật Anh

SVTH : Hoàng Lê Nhật Anh 1

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

MỤC LỤC

CHƯƠNG I GIỚI THIỆU........................................................................................3I.1 Đặt vấn đề................................................................................................................3I.2 Mục đích, yêu cầu khi thực hiện đề tài....................................................................4I.3 Các bước thực hiện...................................................................................................4I.4 Kết quả dự kiến........................................................................................................4

CHƯƠNG II CƠ SỞ LÝ THUYẾT..........................................................................5II.1 Hệ chuyên gia.........................................................................................................5

II.1.1 Định nghĩa hệ chuyên gia................................................................................5II.1.2 Hoạt động của hệ chuyên gia...........................................................................5II.1.3 Những thành phần cơ bản của một hệ chuyên gia...........................................6II.1.4 Biểu diễn tri thức trong hệ chuyên gia............................................................7

II.2 UML........................................................................................................................8II.2.1 Lý thuyết UML...............................................................................................8II.2.2 Các quy ước trong UML..................................................................................9II.2.3 Các sơ đồ trong UML....................................................................................10

CHƯƠNG III PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG........................................11III.1 Thông tin về các loại biển báo.............................................................................11III.2 Mô hình Usecase................................................................................................15III.3 Biểu đồ tuần tự....................................................................................................15III.4 Biểu đồ hoạt động................................................................................................16

CHƯƠNG IV XÂY DỰNG CHƯƠNG TRÌNH VÀ KẾT QUẢ THỰC HIỆN.......18IV.1 Xây dựng hệ chuyên gia với Prolog....................................................................18IV.2 Thiết kế chương trình..........................................................................................18IV.3 Xây dựng tập các sự kiện và luật........................................................................21IV.4 Một số thủ tục sử dụng trong chương trình........................................................26IV.5 Demo Chương trình.............................................................................................27

KẾT LUẬN.....................................................................................................................28Các kết quả đạt được...................................................................................................28Công việc chưa thực hiện được...................................................................................28Hướng phát triển..........................................................................................................28

SVTH : Hoàng Lê Nhật Anh 2

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

CHƯƠNG I GIỚI THIỆU

I.1 Đặt vấn đề

Hằng ngày, có rất nhiều vấn đề, sự kiện, tình huống nảy sinh từ hoạt

động, giao tiếp của mỗi người. Không phải ai khi tiếp xúc với tình huống xảy

ra đối với mình họ cũng đưa ra những biện pháp giải quyết hợp lý, nhất là

khi nó vượt ra khỏi tầm hiểu biết của bản thân. Nhiều trường hợp chúng ta

không biết được nguyên nhân nãy sinh tình huống như vậy và hướng giải

quyết như thế nào. Có lẽ trong trường hợp này tốt nhất là chúng ta phải tự

tìm hiểu hoặc nhờ tư vấn của những người am hiểu, chuyên gia về lĩnh vực

đó.

- Máy tính và vấn đề giải quyết tình huống của con người .

Ban đầu máy tính được thiết kế chỉ với mục đích đơn giản là giúp con

người tính toán trên phép tính số học đối với các con số. Nhưng với sự phát

triển nhanh theo từng ngày, máy tính không còn là một công cụ tính toán đơn

giản nữa mà nó trở thành một công cụ đa tiện ích, từ giải quyết công việc

kinh doanh, buôn bán, trao đổi thông tin đến vui chơi giải trí…Máy tính trở

nên thông minh hơn khi người ta xây dựng các chương trình mô phỏng trí tuệ

con người hay còn gọi là trí tuệ nhân tạo. Các chương trình này có khả năng

suy nghĩ, giải quyết các vấn đề giống như một chuyên gia (expert) thuộc về

một lĩnh vực nào đó.

- Xây dựng hệ chuyên gia về nhận biết biển báo giao thông.

Khi tham gia giao thông trên đường nhất là đường có nhiều phương tiện

qua lại, thì chúng ta thường thấy rằng có rất nhiều biển báo được cắm ở hai

bên nhằm chỉ dẫn cho người điều khiển phương tiện cách thực hiện đúng luật

giao thông tại nơi quy định, sao cho bảo đảm sự an toàn tuyệt đối đối với

mình và mọi người. Nhưng có một điều là có rất nhiều người tham gia giao

thông khi gặp các biển báo, họ không biết biển báo này là biển báo gì, cách

thực hiện các chỉ dẫn như thế nào cho đúng luật. Vì vậy, có rất nhiều tai nạn

SVTH : Hoàng Lê Nhật Anh 3

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

giao thông xẩy ra khi người tham gia giao thông không thực hiện đúng luật

tại nơi có đặt biển báo, làm thiệt hại về người và của.

Với những kiến thức về Hệ chuyên gia, Logic học, Lập trình Prolog cũng

như các kiến thức liên quan khác. Em đã xây dựng một chương trình mô

phỏng một chuyên gia, có khả năng nhận biết các biển báo giao thông, bằng

cách hỏi người sử dụng thông tin về biển báo đó.

I.2 Mục đích, yêu cầu khi thực hiện đề tài

- Mục đích của đề tài: Từ những hiểu biết vốn có và tìm hiểu qua phương

tiện truyền thông đài, báo, internet … về biển báo giao thông. Một cơ sở dữ

liệu đã được xây dựng bao gồm các luật để nhận biết hình dáng, đặc điểm,

tên của các biển báo. Từ đó xây dựng chương trình giao tiếp có khả năng tiếp

nhận các sự kiện (facts) mà người dùng cung cấp. Sau khi xử lý các sự kiện

bằng cách sử những thông tin được lưu trong cơ sở dữ liệu. Chương trình sẽ

thông báo kết quả lên màn hình, về tên biển báo giao thông, và hướng dẫn

cho người sử dụng biết trong quá trình tham gia giao thông cần phải xử lý

như thế nào khi gặp biển báo này.

I.3 Các bước thực hiện

Xây dựng cơ sở luật và cơ sở sự kiện, từ đó xây dựng một cơ sở dữ liệu

của chương trình.

Tìm giải pháp xử lý các luật và sự kiện để trả lời câu hỏi mà người dùng

đặt ra.

Xây dựng giao diện để nhập dữ liệu đầu vào và hiện thông tin trả lời sau

khi xử lý.

I.4 Kết quả dự kiến

Chương trình có thể cung cấp thông tin về các loại biển báo giao thông từ

những thông tin do người dùng cung cấp.

SVTH : Hoàng Lê Nhật Anh 4

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

CHƯƠNG II CƠ SỞ LÝ THUYẾT

II.1 Hệ chuyên gia

II.1.1 Định nghĩa hệ chuyên gia

Hệ chuyên gia (Expert System) là một chương trình máy tính thông minh

sử dụng tri thức và các thủ tục suy luận để giải những bài toán khó đòi hỏi

những chuyên gia mới làm được.

Hệ chuyên gia là một trong những ứng dụng thuộc lĩnh vực trí tuệ nhân

tạo. Là hệ thống có thể mô phỏng năng lực quyết đoán và hành động của một

chuyên gia.

Hệ chuyên gia sử dụng các tri thức của những chuyên gia để giải quyết

các vấn đề khác nhau thuộc mọi lĩnh vực.

II.1.2 Hoạt động của hệ chuyên gia

Một hệ chuyên gia gồm ba thành phần chính là cơ sở tri thức (knowledge

base), máy suy diễn (inference engine), và hệ thống giao tiếp với người sử

dụng (user interface). Cơ sở tri thức chứa các tri thức để từ đó máy suy diễn

tạo ra câu trả lời cho người sử dụng qua hệ thống giao tiếp.

Hoạt động của hệ chuyên gia dựa trên tri thức

Hình 1 . Hoạt động của hệ chuyên gia.

SVTH : Hoàng Lê Nhật Anh 5

Máy suy diễn(Inference Engine)

Cơ sở tri thức(Knowledege base)

Hệ thống giaotiếp(UserInterface)

Người sử dụng (User)

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Mỗi hệ chuyên gia chỉ đặc trưng cho một lĩnh vực vấn đề nào đó như y

học, tài chính, khoa học hay công nghệ,…mà không phải cho bất cứ một lĩnh

vực nào.

II.1.3 Những thành phần cơ bản của một hệ chuyên gia

- Cơ sở tri thức là nền tảng của hệ chuyên gia

Biểu diễn tri thức trong lĩnh vực cần xử lý.

Có nhiều phương pháp biểu diễn tri thức, phổ biến nhất là theo luật.

Trong phần cơ sở tri thức thì tri thức được mô tả bao gồm các đối tượng có

liên quan, trong nhiều trường hợp cần thiết thì cơ sở tri thức này lưu giữ các

chiến lược giải quyết bài toán và các vấn đề liên quan đến nó.

Hình 2. Thành phần của hệ chuyên gia

- Máy suy diễn

Là bộ phận quan trọng của hệ chuyên gia, máy suy diễn là một cơ chế

lập luận được cài đặt trọng hệ chuyên gia để giải quyết các vấn đề cụ thể. Bộ

phận này này sẽ sử dụng các đối tượng nằm trong cơ sở tri thức để tạo ra các

SVTH : Hoàng Lê Nhật Anh 6

Máy suy diễn Máy suy diễnBộ nhớ làm việc

Bộ nhớ làm việc

Lịch công việc

Cơ sở tri thức các luật

Cơ sở tri thức các luật

Khả năng giải thíchKhả năng giải thích Khả năng thu nhận tri thứcKhả năng thu nhận tri thức

Giao diện người sử dụngGiao diện người sử dụng

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

suy diễn theo các phương pháp mà nó đã định. Có thể thấy rằng là máy suy

diễn cũng là hạt nhân trong hệ chuyên gia.

- Hệ thống giao tiếp

Còn gọi là bộ đối thoại làm nhiệm vụ giao tiếp giữa hệ chuyên gia và

người sử dụng. Thành phần này là tri thức từ người sử dụng như các câu hỏi,

các yêu cầu mà trong nhiều trường hợp là các đề nghị người sử dụng cân

thiệp vào từng nơi tiếp xúc. Giao diện đưa ra các kết luận, lời giải thích cho

người sử dụng. Lí do quan trọng chính vì sự can thiệp để tiến tới độ xử lý.

- Lịch công việc (agenda). Danh sách các luật ưu tiên do máy suy diễn tạo ra

thỏa mãn các sự kiện, các đối tượng có mặt trong bộ nhớ làm việc.

- Bộ nhớ làm việc (working memory). Cơ sở dữ liệu toàn cục chứa các sự

kiện phục vụ cho các luật.

- Khả năng giải thích (explaination facility). Giải nghĩa cách lập luận của hệ

thống cho người sử dụng.

- Khả năng thu nhận tri thức (Aquisition facility). Cho phép người sử dụng

bổ sung các tri thức vào hệ thống một cách tự động thay vì tiếp nhận tri thức

bằng cách mã hóa tri thức một cách tường minh. Khả năng thu nhận tri thức

là yếu tố mặc nhiên của nhiều hệ chuyên gia.

II.1.4 Biểu diễn tri thức trong hệ chuyên gia

Tri thức của một hệ chuyên gia có thể được biểu diễn theo nhiều cách

khác nhau. Thông thường có một số cách sau.

- Biểu diễn tri thức bằng luật sản xuất: Các luật sản xuất thường được viết

dưới dạng IF THEN, có hai dạng như sau:

IF <điều kiện> THEN <hành động>

Hoặc

IF <điều kiện> THEN <kết luận> DO <hanh động>

SVTH : Hoàng Lê Nhật Anh 7

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

- Biểu diễn tri thức nhờ mệnh đề logic

- Biểu diễn tri thức nhờ mạng ngữ nghĩa

- Biểu diễn tri thức nhờ ngôn ngữ nhân tạo

Ngoài ra, còn có thể sử dụng các cách sau để biêu diễn tri thức:

- Biểu diễn theo cặp đôi Thuộc tinh- Giá trị (Attribute-Value Pairs).

Màu nền-Xanh

- Biểu diễn nhờ bộ ba Đối tượng-Thuộc tính-Giá trị (O-A-V: Object-

Atribute-Value Triples)

Biển báo-Màu nền-Xanh

- Biểu diễn theo kiểu bản ghi (Records)

- Biểu diễn theo dạng khung (Frames).

II.2 UML

II.2.1 Lý thuyết UML

UML là một ngôn ngữ bao gồm một bảng từ vựng và các quy tắc để kết hợp

các từ vựng đó phục vụ cho mục đích giao tiếp. Một ngôn ngữ dùng cho việc lập

mô hình là ngôn ngữ mà bảng từ vựng( các ký hiệu) và các quy tắc của nó tập

trung vào việc thể hiện về mặt khái niệm cũng như vật lý của một hệ thống.

Mô hình hoá mang lại sự hiểu biết về một hệ thống. Một mô hình không thể

giúp chúng ta hiểu rõ một hệ thống, thường là phải xây dựng một số mô hình xét

từ những góc độ khác nhau. Các mô hình này có quan hệ với nhau.

SVTH : Hoàng Lê Nhật Anh

Oject Shape Color

Biển #1

Tròn Xanh

8

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

UML sẽ cho ta biết cách tạo ra và đọc hiểu được một mô hình được cấu trúc

tốt, nhưng nó không cho ta biết những mô hình nào nên tạo ra và khi nào tạo ra

chúng. Đó là nhiệm vụ của quy trình phát triển phần mềm.

II.2.2 Các quy ước trong UML

- Actor (tác nhân)

Bất cứ vật gì tương tác với hệ thống được xem như một Actor. Nó có thể có

nhiều vai trò, và Actor không cần phải là một người hoặc một User, mà có thể là

bất cứ vật gì tương tác với hệ thống.

- Use Case (UC):

Use Case mô tả ai đó sử dụng hệ thống như thế nào, mô tả tương tác giữa

người sử dụng với hệ thống phần mềm để thực hiện các thao tác giải quyết

công việc cụ thể nào đó. Use Case không cho biết hệ thống làm việc bên

trong như thế nào. Nó không phải là thiết kế, cũng không phải là kế hoạch cài

đặt, nó là một phần của vấn đề cần giải quyết. Tiến trình của hệ thống được

chia nhỏ thành các Use Case để có thể nhận ra từng bộ phận của nó một cách

rõ ràng và để nhiều người có thể cùng xử lý.

Use Case là nền tảng của phân tích hệ thống. Việc tìm ra đầy đủ các UC

đảm bảo rằng hệ thống sẽ xây dựng đáp ứng mọi nhu cầu của người sử dụng.

Mỗi UC là tập hành động. Mỗi hành động là cái gì đó mà hệ thống làm, nó là

hạt nhân được hệ thống thực hiện hoàn toàn hay không thực hiện phần nào.

SVTH : Hoàng Lê Nhật Anh 9

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

II.2.3 Các sơ đồ trong UML

- Sơ đồ trường hợp sử dụng Use Case diagram.

Use Case diagram là sơ đồ cung cấp một cách nhìn tổng quan nhất về toàn

bộ hệ thống. Trong đó bao gồm tất cả các tác nhân (Actor) và các trường hợp

sử dụng (Use Case) có liên quan đến hệ thống. Sơ đồ này được cấu tạo từ ba

yếu tố chính là Actor (tác nhân), trường hợp sử dụng (Use Case), các quan hệ.

- Biểu đồ trình tự (sequence diagram)

Biểu đồ trình tự là biểu đồ tương tác theo trật tự thời gian của các giao tiếp

bằng thông điệp giữa các đối tượng, biểu đồ được đọc từ đỉnh xuống đáy. Mỗi

Use Case có nhiều luồng dữ liệu. Mỗi biểu đồ trình tự biểu diễn một luồng dữ

liệu.

Biểu đồ trình tự bao gồm các phần tử để biểu diễn đối tượng, thông điệp

và thời gian.

Đối tượng trong biểu đồ được biểu diễn bằng hình chữ nhật, trong hình

chữ nhật là tên của nó. Thời gian được biểu diễn bằng đường gạch gạch theo

phương thẳng đứng (gọi là chu kỳ sống của đối tượng), bắt đầu từ đỉnh và kết

thúc tại đáy biểu đồ. Hình chữ nhật dọc theo chu kỳ sống được gọi là hoạt

động. Hoạt động biểu diễn thời gian thực thi một hành động tương ứng.

Thông điệp được vẽ bằng mũi tên đóng đi từ chu kỳ sống của đối tượng

này đến chu kỳ sống của đối tượng khác. Trên mũi tên là tên thông điệp.

- Biểu đồ hoạt động

Biểu đồ hoạt động là một phương tiện mô tả các dòng công việc.

Như một công cụ phân tích, nó mô tả các dòng nghiệp vụ với nhiều mức độ

chi tiết khác nhau. Ở mức thiết kế, biểu đồ hoạt động được dùng để mô tả chi tiết

bên trong một thao tác.

SVTH : Hoàng Lê Nhật Anh 10

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

CHƯƠNG III PHÂN TÍCH VÀ THIẾT KẾ HỆ

THỐNG

III.1 Thông tin về các loại biển báo

Hình 3: Biển báo cấm

SVTH : Hoàng Lê Nhật Anh 11

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 4: Biển báo nguy hiểm

SVTH : Hoàng Lê Nhật Anh 12

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 5: Biển chỉ dẫn

SVTH : Hoàng Lê Nhật Anh 13

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 6: Biển hiệu lệnh

Từ các hình dạng của các loại biển báo, ta có thể thiết kế hệ thống như sau:

Hệ thống gồm có tác nhân là Người sử dụng và Hệ chuyên gia.

Người sử dụng cần tư vấn về các loại biển báo từ Hệ chuyên gia, và sẽ nhận được

sự tư vấn thông qua việc trả lời các câu hỏi.

SVTH : Hoàng Lê Nhật Anh 14

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

III.2 Mô hình Usecase

Hình 7: Mô hình Usecase của hệ thống

III.3 Biểu đồ tuần tự

Biểu đồ tuần tự thể hiện các bước thực hiện cơ bản của người sử dụng cần sự tư

vấn về các loại Biển báo từ Hệ chuyên gia

SVTH : Hoàng Lê Nhật Anh 15

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 8: Biều đồ tuần tự của việc tư vấn

III.4 Biểu đồ hoạt động

Biểu đồ hoạt động thể hiện trình tự các hoạt động diễn ra giữa người sử dụng và

Hệ chuyên gia trong quá trình hỏi.

SVTH : Hoàng Lê Nhật Anh 16

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 9: Biểu đồ hoạt động của hoạt động tư vấn về biển báo

SVTH : Hoàng Lê Nhật Anh 17

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

CHƯƠNG IV XÂY DỰNG CHƯƠNG TRÌNH VÀ

KẾT QUẢ THỰC HIỆN

IV.1 Xây dựng hệ chuyên gia với Prolog.

- Giới thiệu Prolog

Prolog là ngôn ngữ được sử dụng phổ biến nhất trong dòng các ngôn ngữ

lập trình logic (Prolog có nghĩa là Programming in Logic). Ngôn ngữ Prolog

do giáo sư người Pháp Alain Colmerauer và nhóm nghiên cứu của ông đề

xuất lần đầu tiên tại trường Đại học Marseille đầu những năm 1970.

Prolog còn gọi là ngôn ngữ lập trình ký hiệu (symbolic programming)

tương tự ngôn ngữ lập trình hàm. Prolog rất thích hợp để giải quyết các bài

toán liên quan đến các đối tượng (object) và mối quan hệ (relation) giữa

chúng.

Prolog được dùng phổ biến trong lĩnh vực trí tuệ nhân tạo. Nguyên lý lập

trình dựa trên các mệnh đề Horn.

Mỗi chương trình Prolog là một cơ sở dữ liệu gồm:

Đối tượng (Object): biến và hằng.

Vị từ (Predicate): thể hiện mối quan hệ giữa các đối tượng.

Sự kiện (Fact): mệnh đề vị từ.

Luật (Rule): mệnh đề kéo theo.

Hệ chuyên gia là một trong những ứng dụng thuộc lĩnh vực trí tuệ nhân

tạo. Vì vậy có thể dùng Prolog để xây dựng một hệ chuyên gia về một lĩnh

vực nào đó.

IV.2 Thiết kế chương trình

Chương trình được thết kế và thực thi trên môi trường ngôn ngữ lập trình

Prolog. Giao diện được trình bày trong chương trình sử dụng giao diện dòng

lệnh của Prolog. Phần cơ sở dữ liệu về nhận biết biển báo giao thông được

xây dựng dựa trên các đặc điểm, hình dáng, đặc trưng của biển báo đó.

SVTH : Hoàng Lê Nhật Anh 18

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Chẳng hạn, ta thấy rằng hầu hết các biển báo thường có các hình dáng như:

hình tròn, hình tam giác, hình chữ nhật. Trong số đó có biển báo có đường

viền bao quanh, một số khác thì không có. Phần nền và màu là phần phía

trong biển, trên phần nền thường có một hình đặc trưng nào đó. Thông

thường thì ý nghĩa của biển báo liên quan phần lớn ở hình đặc trưng này. Do

đó, chỉ cần xác định được hình đặc trưng, chúng ta có thể dễ nhận biết sự

khác biệt của biển báo đó so với biển khác.

Hai biển báo cấm người đi bộ và cấm xe mô tô sau là ví dụ:

Hình10: biển báo cấm người đi bộ và cấm xe moto

Ta có thể biểu diễn sự khác nhau theo mệnh đề IF-THEN

IF

Hình của biển báo là hình tròn và

Biển báo có đường viền và

Đường viền màu đỏ và

Hình đặc trưng là hình người và

Hình đặc trưng bị gạch chéo

THEN

Biển báo là biển cấm người đi bộ

IF

Hình của biển báo là hình tròn và

Biển báo có đường viền và

Đường viền màu đỏ và

Hình đặc trưng là hình người lái xe moto

SVTH : Hoàng Lê Nhật Anh 19

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình đặc trưng bị gạch chéo

THEN

Biển báo là biển cấm cấm xe mô tô

Từ sự mô tả ở trên, chúng ta có thể dễ dàng triển khai trong ngôn ngữ lập

trình Prolog như sau theo kiểu cặp đôi (Attribute-Value pairs), bằng cách suy

diễn ngược lại tạo thành các luật để nhận biết một biển báo:

Bienbao( cam_nguoi_di_bo):-

Bien_bao_hinh(tron),

Bien_co(duong_vien),

Duong_vien_mau(do),

Hinh_dac_trung(hinh_nguoi),

Tinh_trang_hinh(bi_gach_cheo).

Bienbao( cam_xe_moto):-

Bien_bao_hinh(tron),

Bien_co(duong_vien),

Duong_vien_mau(do),

Hinh_dac_trung(nguoi_lai_xe_moto),

Tinh_trang_hinh(bi_gach_cheo).

Với tập hợp nhiều biển báo được xây dựng như trên tạo nên thành phần cơ

sở dữ liệu cho hệ thống.

SVTH : Hoàng Lê Nhật Anh 20

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

IV.3 Xây dựng tập các sự kiện và luật

% Hình tròn viền đỏ

htvd(bien):-

bienhinh(tron),

bienco(duong_vien),

duongvienmau(do).

% Hình tam giác viền đỏ

htgvd(bien):-

bienhinh(tamgiac),

bienco(duong_vien),

duongvienmau(do).

% Các loại Biển báo hình tròn, viền đỏ

bienbao(cam_nguoi_di_bo):-

htvd(bien),

conenmau(trang),

hinhdactrung(hinh_nguoi),

trenhinhco(gach_cheo).

bienbao(nhuong_cho_nguoi_di_bo):-

htgvd(bien),

conenmau(vang),

hinhdactrung(co_gach_ngang_duoi_hinh_nguoi).

bienbao(cam_xe_moto_2_3_banh):-

SVTH : Hoàng Lê Nhật Anh 21

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

htvd(bien),

conenmau(trang),

hinhdactrung(gach_cheo_xemoto).

bienbao(cam_xe_oto):-

htvd(bien),

conenmau(trang),

hinhdactrung(xe_oto).

bienbao(cam_di_nguoc_chieu):-

bienhinh(tron),

conenmau(do),

hinhdactrung(vach_trang).

bienbao(duong_cam):- htvd(bien),

conenmau(trang),

hinhdactrung(khong_co).

bienbao(cam_re_phai):-

htvd(bien),

conenmau(trang),

hinhdactrung(gach_cheo_mui_ten_sang_phai).

bienbao(cam_re_trai):-

htvd(bien),

conenmau(trang),

hinhdactrung(gachcheomuitensangtrai).

bienbao(cam_xe_quay_dau):-

htvd(bien),

SVTH : Hoàng Lê Nhật Anh 22

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

conenmau(trang),

hinhdactrung(gach_cheo_mui_ten_quay_dau).

bienbao(cam_dung_va_do_xe):-

htvd(bien),

conenmau(xanh),

hinhdactrung(hai_gach_cheo_nhau).

bienbao(nhuong_xe_co_gioi_di_nguoc_chieu):-

htvd(bien),

conenmau(trang),

hinhdactrung(hai_mui_ten_den_va_do),

huongmuiten(do_huong_len_den_huong_xuong).

bienbao(cam_do_xe):-

htvd(bien),

conenmau(xanh),

hinhdactrung(mot_gach_cheo_maudo).

% Biển báo hình lục giác, nền đỏ, chữ STOP

bienbao(dung_lai):-

bienhinh(khac),

bienco(duong_vien),

duongvienmau(trang),

conenmau(do),

hinhdactrung(chuSTOP).

SVTH : Hoàng Lê Nhật Anh 23

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

% Các loại Biển báo hình tam giác viền đỏ

bienbao(giao_nhau_duong_khong_uu_tien):-

htgvd(bien),

conenmau(vang),

hinhdactrung(muitenbicatngang).

bienbao(giao_nhau_duong_cung_cap):-

htgvd(bien),

conenmau(vang),

hinhdactrung(chu_thap).

bienbao(giao_nhau_co_den_giao_thong):-

htgvd(bien),

conenmau(vang),

hinhdactrung(den_giao_thong).

bienbao(giao_nhau_voi_duong_sat_co_rao_chan):-

htgvd(bien),

conenmau(vang),

hinhdactrung(rao_chan).

bienbao(giao_nhau_voi_duong_sat_khong_co_rao_chan):-

htgvd(bien),

conenmau(vang),

hinhdactrung(xe_lua).

bienbao(sap_den_duong_cao_toc):-

htgvd(bien),

conenmau(vang),

hinhdactrung(duong_songsong_bi_cat_ngang).

SVTH : Hoàng Lê Nhật Anh 24

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

% Biển hình chữ nhật

bienbao(bat_dau_duong_cao_toc):-

bienhinh(chu_nhat),

conenmau(xanh),

hinhdactrung(duong_song_song_bi_cat_ngang).

bienbao(het_duong_cao_toc):-

bienhinh(chu_nhat),

conenmau(xanh),

hinhdactrung(duong_song_song_bi_cat_ngang_co_gach_cheo).

%Biển hình tròn nền xanh

bienbao(giao_nhau_vong_xuyen):-

bienhinh(tron),

conenmau(xanh),

hinhdactrung(ba_mui_ten),

huongmuiten(vong_xuyen).

bienbao(bat_buoc_re_phai):-

bienhinh(tron),

conenmau(xanh),

hinhdactrung(mui_ten),

huongmuiten(re_phai).

bienbao(bat_buoc_re_trai_hoac_di_thang):-

bienhinh(tron),

conenmau(xanh),

hinhdactrung(mui_ten),

SVTH : Hoàng Lê Nhật Anh 25

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

huongmuiten(thang_va_re_trai).

bienbao(gianh_cho_xe_tho_so):-

bienhinh(tron),

conenmau(xanh),

hinhdactrung(xe_dap_o_tren_xe_keo_o_duoi).

IV.4 Một số thủ tục sử dụng trong chương trình.

Thủ tục ask_user: thủ tục này có hai đối số là Attribute và Value. Mục

đích của thục tục này là hỏi lại người sử dụng và lấy sự kiện trả lời từ người

dùng đó cung cấp. ask_user được triển khai ở các bước như sau:

ask_user(Attribute,Value):-

known(dung,Attribute,Value), % Thành công, khi kết quả đúng

!. % kết thúc và không tìm thêm nữa

ask_user(Attribute,Value):-

known(_,Attribute,Value), % Trường hợp không có kết quả

đúng

!, fail.

ask_user(Attribute,_):-

known(dung,Attribute,_), % Trường hợp không đúng, khi có

giá trị khác.

!, fail.

ask_user(A,V):-

write(A:V), % In ra màn hình thuộc tính- giá trị.

write('? (dung hay sai): '),

read(Y), % Lấy trả lời

asserta(known(Y,A,V)), % ghi nhớ và không hỏi lại lần nữa.

Y = dung.

SVTH : Hoàng Lê Nhật Anh 26

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

IV.5 Demo Chương trình

Từ cửa sổ chính của SWI-Prolog chọn file->Consult. Cửa sổ OpenDialog

hiện ra tiếp theo chọn tên file cần thực hiện, ở đây là bienbaogiaothong.pl.

Sau khi kiểm tra cú pháp không có lỗi, nội dung file được nạp vào bộ nhớ.

Trên cửa sổ dòng lệnh xuất hiện dấu hổi chờ người sử dụng nhập câu lệnh

thực hiện. Để chạy chương trình nhận biết biển báo giao thông trước tiên ta

nhập “main.” có dấu chấm sau cùng. Sau khi nhấn phím ENTER, chương

trình sẽ hiện ra các câu hỏi liên quan đến biển báo và chờ người sử dụng

cung cấp câu trả lời đúng hoặc sai. Sau đây là một số kết quả thực hiện

chương trình.

Hình 11: Trường hợp thành công

SVTH : Hoàng Lê Nhật Anh 27

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Hình 12: Trường hợp không thành công

SVTH : Hoàng Lê Nhật Anh 28

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

KẾT LUẬN

Các kết quả đạt được

- Công việc thực hiện được: Đã xây dựng được chương trình mô phỏng một

chuyên gia về biển báo giao thông. Chương trình có khả năng hận sự kiện từ

người sử dụng cung cấp. Từ các sự kiện đó, sau quá trình xử lý chương trình

sẽ thông báo kết quả sau khi sử dụng các luật suy diễn trong cơ sở dữ liệu.

Công việc chưa thực hiện được

- Hạn chế của chương trình là chưa xây dựng được một giao diện thực sự

đúng với mô hình của một hệ chuyên gia. Vì vây, để sử dụng chương trình

trở nên khó khăn hơn.

Hướng phát triển

- Xây dựng giao diện dễ sử dụng và thân thiện hơn.

- Tập hợp nhiều loại biển báo hơn nhằm giúp cho người sử dụng có thể tăng

thêm kiến thức của mình về luật giao thông.

SVTH : Hoàng Lê Nhật Anh 29

Phương pháp Toán trong tin học – Ứng dụng lập trình Prolog trong Hệ chuyên gia

Tài liệu tham khảo

[1] PGS-TSKH Phan Huy Khánh, Lập trình logic trong PROLOG[2] PGS-TSKH Phan Huy Khánh, Hệ chuyên gia[3] Dennis Merritt, Building Expert Systems in Prolog

SVTH : Hoàng Lê Nhật Anh 30