Đỗ Văn Nhơn HVTH: Lê Thành Nguyên MSHV: CH1301102 MÔN: BIỂU DIỄN TRI THỨC VÀ SUY LUẬN TÌM HIỂU LẬP TRÌNH SYBOLIC BỘ THƯ VIỆN SYMPY TRONG TÍNH TOÁN ĐẠI SỐ TRÊN MÁY TÍNH... Từ đó, công ng
Trang 1ĐỒ ÁN MÔN HỌC
GVHD: PGS TS Đỗ Văn Nhơn HVTH: Lê Thành Nguyên MSHV: CH1301102
MÔN: BIỂU DIỄN TRI THỨC VÀ SUY LUẬN
TÌM HIỂU LẬP TRÌNH SYBOLIC
BỘ THƯ VIỆN SYMPY TRONG
TÍNH TOÁN ĐẠI SỐ TRÊN MÁY TÍNH
Trang 4PHẦN 1: MỞ ĐẦU
Ngày nay, với sự phổ biến của máy tính điện tử cùng với sự bùng nổ về thông tin
và nhu cầu khai thác dữ liệu ngày càng cao trong nhiều lĩnh vực khác nhau như: kinh tế,
xã hội, y tế, giáo dục, … Đồng thời, nhu cầu về các hệ thống có khả năng tổng hợp thông tin và vận dụng sự hiểu biết của con người đưa ra những chỉ định, khuyến cáo, … đã được đặt ra với sự ra đời của công nghệ tri thức
Từ đó, công nghệ tri thức được nghiên cứu nhằm đưa ra các mô hình tích lũy tri thức (mô hình biểu diễn tri thức) của chuyên gia trên máy tính dưới dạng tập luật, tạo ra các hệ thống có khả năng tư duy và suy nghĩ như con người, có khả năng suy luận đưa ra những khuyến cáo, giải pháp tối ưu cho người dùng, đồng thời giúp con người nâng cao bản thân Việc lập luận trên dữ liệu và tri thức đã và đang mang lại cho con người những thành công ngày càng tăng trong việc xử lý dữ liệu Hiện nay, các ngành công nghệ tri thức đang phát triển mạnh mẽ với nhiều hệ thống phục vụ trong nhiều cơ quan, xí nghiệp
Song song đó, các phương pháp suy diễn đã được nghiên cứu nhằm đảm bảo khả năng giải quyết vấn đề trên các mô hình biểu diễn tri thức Cùng với sự phát triển của các
mô hình biểu diễn tri thức, các phương pháp suy diễn hiện rất đa dạng và phong phú và hầu hết là ở dưới dạng mô hình hoặc giải thuật mô phỏng và được cụ thể hóa ứng với mỗi trường hợp ứng dụng thực tế Hiện nay, nhu cầu xây dựng các hệ chuyên gia ngày càng cao, đặc biệt, trong lĩnh vực giáo dục các phương pháp suy diễn đòi hỏi khả năng tính toán trên các dạng hàm, đa thức, giải phương trình,… với các biến và tham số không cố định Tuy nhiên, nếu sử dụng các ngôn ngữ lập trình thuần túy để giải quyết các bài toán trên là hết sức khó khăn
Từ những nhu cầu trên, các công cụ lập trình Symbolic đã ra đời và giải quyết khối lượng lớn các xử lý tính toán, nhất là tính toán symbolic như: Maple, Mathematica,
… Tuy nhiên, các hệ thống này được thương mại với giá bản quyền đắt đỏ là cản trở lớn cho các nhà phát triển các ứng dụng mã nguồn mở, các ứng dụng với quy mô nhỏ,…
Trang 5Trong chuyên đề này sẽ nghiên cứu lập trình Symbolic với bộ thư viện mã nguồn mở Sympy trên nên ngôn ngữ Python
Trang 6PHẦN 2:
KHÁI QUÁT VỀ BIỂU DIỄN TRI THỨC
2.1 TRI THỨC
Tri thức (Knowledge) là sự “hiểu biết” của người trong một phạm vi, lĩnh vực nào đó; được xem xét theo các mục tiêu hay các vấn đề nhất định[1]
Ví dụ:
− Tri thức về bệnh lao và khả năng điều trị bệnh lao của bác sĩ chuyên khoa Lao Phổi
− Tri thức về toán học đại số ở bậc trung học phổ thông và khả năng giải bải tập của học sinh cấp III
Tri thức là một hệ thống phức tạp, đa dạng và trừu tượng bao gồm nhiều thành tố với những mối liên hệ tác động qua lại [1] như: khái niệm, quan hệ, luật, sự kiện, …
2.2 BIỂU DIỄN TRI THỨC
Biểu diễn tri thức (Knowledge Representation) là xây dựng mô hình biểu diễn tri thức để đưa tri thức lên máy tổ chức lưu trữ và xử lý, đặc biệt là cho suy luận giải các vấn
đề, các bài toán[1] Tri thức trong thực tế rất đa dạng và phức tạp Tùy những trường hợp
cụ thể có thể sử dụng các cấu trúc dữ liệu cơ bản (dãy, danh sách, tập hợp, …), các cấu trúc trừu tượng (class) hoặc các ngôn ngữ đặc tả tri thức
2.3 CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC
2.3.1 Biểu diễn dựa trên logic hình thức
Sử dụng các biểu thức logic hình thức trong một hệ thống logic để diễn đạt các sự kiện và các luật trong cơ sở tri thức Phép tính logic vị từ cấp 1 được sử dụng phổ biến nhất và có cả một ngôn ngữ lập trình hỗ trợ cho phương pháp này Đó là ngôn ngữ lập trình PROLOG Trong ngôn ngữ PROLOG, chỉ cần khai báo các sự kiện và các luật.Hệ thống sẽ tiến hành giải quyết vấn đề được yêu cầu dựa trên tri thức được khai báo
Trang 72.3.2 Hệ luật dẫn
Mỗi luật dẫn được phát biểu dưới dạng:
if <giả thiết> then <kết luận>
Mô hình: Một cách hình thức, hệ luật dẫn gồm:
− Tập ký hiệu đại diện cho các sự kiện
− Tập luật dẫn trong đó <giả thiết> và <kết luận> là các tập hợp sự kiện
Nhận xét: Mô hình hệ luật dẫn trên khó áp dụng trực tiếp vì quan niệm sự kiện khá đơn giản
2.3.3 Mạng ngữ nghĩa
Mạng ngữ nghĩa (semantic network) có dạng một đồ thị gồm các nút và các cung, trong đó
− Các nút thể hiện các khái niệm, các đối tượng
− Các cung thể hiện các quan hệ giữa các đối tượng
Dựa trên mạng ngữ nghĩa ta nhận biết tri thức một cách trực quan giúp thiết kế các
xử lý như: thêm/bớt các khái niệm hay các đối tượng, tìm kiếm thông tin
2.3.4 Khung (frame)
Các khung (frame) thể hiện các khái niệm dưới dạng cấu trúc mẫu tin và có hình thức như một bảng mẫu
Khung cơ bản gồm các thành phần cơ bản sau:
− Tên đối tượng (loại khung)
− Các thuộc tính
− Giá trị của các thuộc tính
Khung lớp: thể hiện các tính chất tổng quát của một lớp các đối tượng, với những quan hệ kế thừa và cấu trúc phân cấp
Trang 82.4 SUY DIỄN
2.3.1 Suy diễn tự động
Suy diễn tự động là quá trình vận dụng kiến thức đã biết trong quá trình lập luận tìm lời giải cho bài toán Trong đó quan trọng nhất là các chiến lược điều khiển giúp phát sinh những sự kiện mới từ các sự kiện đã có Quá trình suy diễn được thuật giải hóa và có thể cài đặt thành chương trình máy tính
Các kỹ thuật suy diễn cơ bản:
− Suy diễn tiến
− Suy diễn lùi
− Suy diễn tiến kết hợp heurictics
2.3.2 Lời giải bài toán
Lời giải bài toán là tập luật áp dụng để được đạt từ trạng thái giả thiết đến kết luật Trong đó, quá trình tìm lời giải bài toán là quá trình tìm luật áp dụng trên tập sự kiện hiện tại nhằm phát sinh thêm các sự kiện mới tốt hơn
2.3.3 Suy diễn tiến
Suy diễn tiến là phương pháp suy diễn từ giả thiết đi đến kết luận Chiến lược này được bắt đầu bằng tập sự kiện đã biết, rút ra các sự kiện mới từ việc áp dụng luật thích hợp trên tập sự kiện hiện tại Quá trình này được lặp cho đến khi đạt được trạng thái đích hoặc cho đến khi không tìm được luật áp dụng Trong áp dụng cụ thể phương pháp thường sử dụng kết hợp với các qui tắc heuristic trong việc chọn luật
Trong thực tế, không gian tìm kiếm của tập luật và sự kiện rất lớn ảnh hưởng đến tốc độ thực thi của thuật toán Do đó, chiến lược suy diễn tiến được tối ưu với hai phiên bản: suy diễn tiến kết hợp bài toán mẫu và suy diễn tiến kết hợp heurictics
2.3.4 Suy diễn lùi
Suy diễn lùi là phương pháp truy ngược từ kết luận trở về giả thiết Phương pháp này được tiến hành bằng cách truy ngược từ mục tiêu cần đạt được trở về phần giả thiết
Trang 9của bài toán bằng cách áp dụng các luật trong cơ sở tri thức Quá trình suy diễn lùi này sẽ phát sinh một sơ đồ cây mục tiêu kèm theo một cơ chế quay lui và lời giải sẽ được tìm thấy khi tất cả các mục tiêu ở các nút lá của cây mục tiêu đều thuộc về những sự kiện đã biết Trong áp dụng cụ thể phương pháp thường sử dụng kết hợp với các qui tắc heuristic trong việc chọn luật
Trang 10PHẦN 3: TỔNG QUAN VỀ LẬP TRÌNH SYMBOLIC
Lập trình Symbolic là phương pháp tiếp cận mới nhằm triển khai các hệ thống đại
số máy tính một cách nhanh chóng và tiện lợi nhất
3.1 ĐẠI SỐ MÁY TÍNH
Đại số máy tính là lĩnh vực nghiên cứu của khoa học máy tính và toán học với mục tiêu đưa các xử lý đại số lên máy tính thực hiện trên các các biểu tượng [2], phục vụ nghiên cứu và xây dựng các ứng dụng toán học trên máy tính: hệ thống giải bài tập toán cho học sinh các cấp, hệ thống trắc nghiệm trình độ toán cho học sinh,… Đại số máy tính
là một phần nghiên cứu của khoa học máy tính, được nghiên cứu phương pháp thiết kế, phân tích và áp dụng các thuật toán đại số [2]
Với đại số máy tính, có thể suy ra những thay đổi trong các tham số ảnh hưởng đến kết quả của quá trình tính toán Từ đó, có thể xây dựng các thuật toán máy tính
VD: thuật toán xác định sự tương đương của các biểu thức đại số, thuật toán giải phương trình vi phân, …
Các giải pháp đại số luôn đòi hỏi sự chính xác Tuy nhiên, giải pháp số thông thường sẽ được xấp xỉ, điều này có thể phát sinh vấn đề sai số gia tăng trong quá trình tính toán dẫn đến kết quả sai lệch ngoài mong muốn
3.2 LẬP TRÌNH SYMBOLIC
Lập trình Symbolic là lập trình máy tính trong đó ngôn ngữ lập trình được cung cấp khả năng “symbolic” thông qua thư viện hoặc một phần mềm khác Nghĩa là, ngôn ngữ lập trình có khả năng xử lý trên biểu thức đại số, hàm, toán học, phương trình,… chứa biến và phụ thuộc vào các tham số ở dạng ký tự Từ đó, có thể thực hiện các xử lý, tính toán trên các đối tượng toán học: hàm số, đa thức, phương trình, ma trận mà trong đó
có thể biến hoặc không chứa biến một cách dễ dàng Các thao tác có thể gặp như: khai triển đa thức, rút gọn đa thức, tìm nghiệm, giải phương trình,…
Trang 11Từ những nhu cầu thực tế, các nhà khoa học máy tính và công nghệ phần mềm đã nghiên cứu và phát triển các ứng dụng hỗ trợ lập trình Symbolic: Reduce, Schoonscip, Macsyma, Derive, Mathematica, Maple Trong đó, hai hệ thống thương mại nổi tiếng là Maple và Mathematica được sử dụng rộng rãi; MuPAD là một hệ thống thương mại nhưng có phiên bản miễn phí cho mục đích phi lợi nhận và giáo dục Một số hệ thống khác tập trung hỗ trợ cho nghiên cứu chuyên ngành hầu hết là phiên bản miễn phí
Ngoài ra, còn có các thư viện mã nguồn mở cho phép người xây dựng các ứng dụng xử lý trên toán học đại số
Tính toán số học Tính toán symbolic Chỉ tính toán với số
2 + 3 = 5
Tính toán trên từng thành phần đại
số
x + 2x = 3x;
Kết quả là số xấp xỉ Kết quả được biểu diễn chính xác
Kết quả trả về chỉ ở dạng số Kết quả ở dạng symbolic
Bảng 1: So sánh tính toán số học và tính toán symbolic
Trang 12PHẦN 4: BỘ THƯ VIỆN SYMPY
3.1 GIỚI THIỆU
Sympy là bộ thư viện Python sử dụng trong toán học sybolic Sympy nhằm mục tiêu trở thành một hệ thống đại số máy tính mạnh mẽ đầy đủ chức năng Tuy nhiên, mã nguồn đơn giản dễ hiểu và dễ dàng phát triển, mở rộng Sympy được phát triển hoàn thiện bằng ngôn ngữ Python và không đòi hỏi thêm bất kỳ thư viện mở rộng nào
Sympy cho phép người dùng phát triển các ứng dụng đáp ứng đầy đủ các yêu cầu
xử lý các bài toán đại số: tính toán đại số với độ chính xác tùy ý trên tập số nguyên, số hữu tỉ, số thực và biểu thức đại số, giải phương trình, hệ phương trình tuyến tính và phi tuyến tính, thực hiện các phép tính trên dãy số, ma trận, …
Các xử lý tính toán trên Sympy được chia thành từng module với từng nhóm chức năng tính toan trên từng nhóm đối tượng toán học: phương trình, hệ phương trình tuyến tính, ma trận, dãy số, …
3.2 CÀI ĐẶT
Đây là bộ thư viện trên nền tảng Python, do đó, trên máy tính sử dụng Sympy phải cài đặt Python (phiên bản từ 2.5 trở lên) trước khi cài đặt Sympy
Download:
− Python: https://www.python.org/download/
− Sympy: http://sympy.org/en/download.html
Sau khi download, nhấn đôi chuột vào file cài đặt (.exe) Python, và Sympy
Sau khi cài đặt hoàn tất, khởi động console Python như sau:
Trang 13Hình 1: Python console
3.3 CÁC PHÉP TOÁN CƠ BẢN
Để thực hiện các thao tác xử lý toán học từ Sympy, tại cửa sổ dòng lệnh đầu tiên ta thực hiện khởi động thực viện cần thao tác bằng lệnh import với cấu trúc:
from sympy[.module] import * | gói thư viện1 [, gói thư viện2, …, gói thư viện n] Trong đó:
− Module là tên module cần khởi động phục vụ tính toán
− Gói thư viện i (i = 1…n) là tên gói thư viện cần khởi động nằm trong module
Hình 2: Import thư viện Sympy
Trang 143.3.1 Phép gán
Dùng để gán giá trị hoặc mệnh đề cho một biến hoặc tham số
Hình 3: Phép gán
3.3.2 Phép so sánh bằng
Phép so sánh bằng dùng để so sánh mệnh đề hoặc giá trị số có bằng nhau hay không
Hình 4: Phép so sánh bằng
3.3.3 Biến
Trong Sympy, mệnh đề với ít nhất một biến được khởi tạo trước khi biến này được gán giá trị, giá trị của mệnh sẽ không được tính toán với giá trị mới Khi được gọi kết quả của mệnh đề, Sympy sẽ trả về mệnh đề ban đầu được khởi tạo
Ví dụ ta có mệnh đề a = b + 1 Khi đó giá trị của mệnh đề a sẽ là “b + 1” trong đó
b là biến số Tuy nhiên, sau khi b được gán giá trị ta gọi giá trị của a sẽ là “b + 1” như ban đầu
Trang 15Hình 5: Cách khai báo biến trong Sympy
Để tránh trường hợp này, trong quá trình xử lý nếu có một mệnh đề cần phải cập nhật theo giá trị mới của biến ta thay thế mệnh đề bằng một hàm xử lý Hàm xử lý này tuân thủ theo quy tắc định nghĩa hàm trong ngôn ngữ Python
3.4 SYMPY MODULE
Sympy là một bộ thư viện hỗ trợ khả năng lập trình Symbolic nhằm mục tiêu xây dựng một hệ thống đại số máy tính và được module hóa nhằm mục tiêu đơn giản cho việc phát triển tích hợp sau này Trong đó, mỗi module hoạt động xem như độc lập, thực hiện các phép tính toán đại số trên các đối tượng khác nhau: hình học hai chiều, ma trận, dãy
số, …
3.4.1 Sympy Core
Đây là module chính của sympy chứa các thao tác cơ bản trên Sympy bao gồm tập
ký tự toán học thường dùng đặt tên biến (x, y, …, λ, ρ, ω, δ, π, θ, α, β, …) được đóng trong gói sympy.abc, cũng như các khai báo biến sympy.var, khai báo hàm sympy.function,… Khi cần sử dụng nhóm chức năng nào ta có thể khởi động gói đó bằng cách gọi lệnh import
3.4.2 Geometry module
Trang 16thông tin của các đối tượng này Các xử lý này bao gồm tính diện tích, tìm điểm giao nhau giữa hai đường thẳng, … Trong đó, các thuộc tính trên từng đối tượng hình học có thể là giá trị số hoặc là tham số
Hình 6: Thao tác xử lý hình học phẳng trong Sympy
3.4.3 Logic Module
Đây là module cung cấp các chức năng xử lý tính toán trên đại số Bool bao gồm các phép tính trên hàm Bool: khai triển, rút gọn, tìm nghiệm, …
Hình 7: Tìm giá trị biến cho hàm bool đúng
Trang 173.4.4 Ma trận
Matrix module cho phép người dùng thực hiện đầy đủ các thao tác trên ma trận, gồm:
− Cộng, trừ hai ma trận
− Nhân hai ma trận
− Tìm ma trận nghịch đảo
− Tính định thức ma trận, …
Hình 8: Khởi tạo ma trận trong Sympy
Trang 18Hình 9: Cộng, nhân hai ma trận
3.4.5 Giải phương trình
Đây là module cho phép người dùng giải phương trình đa thức, phương trình lượng giác, hệ phương trình
− Giải phương trình y = f(x): solve(f(x), tên biến)
Hình 10: Giải phương trình bậc 2 f(x) = x 2 – 1
Hình 11: Giải phương trình bậc 2 f(x) = x 2 - a
− Giải hệ phương trình {f1(x, y) = 0, f2(x, y) = 0}: solve([f1(x, y), f2(x,y)], [x, y])
Trang 19Hình 12: Giải hệ phương trình x + y = 0 và x – 2y = 0
Hình 13: Giải hệ phuong trình x + y = 0 và x – 2y + a = 0
Trang 20TÀI LIỆU THAM KHẢO
[1] Đỗ Văn Nhơn Bài giảng Biểu diễn tri thức và suy luận, Đại học Công nghệ thông tin, 2013
[2] Hazem Mohamed El-Alfy Computer algebra and its applications, Alexandria University, 1997
[3] David S Touretzky Common LISP: A Gentle Introduction to Symbolic Computation, The Benijamin/Cummings Publishing Company Inc, 1990
[4] Sympy Documentation Release 0.7.2, Sympy Development Team, 2012