Tải bản đầy đủ (.docx) (20 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (457.02 KB, 20 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN MÔN HỌC

GVHD: PGS. TS. Đỗ Văn Nhơn
HVTH: Lê Thành Nguyên
MSHV: CH1301102
TP HCM, Tháng 03 năm 2014
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
MỤC LỤC
2
DANH MỤC HÌNH, BẢNG
3
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
PHẦ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 4
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Trong 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 5
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
PHẦ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 6
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
2.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 7
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
2.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 8
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
củ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 9
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
PHẦ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 10
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Từ 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 11
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
PHẦ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:
− Sympy:
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 12
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Hì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 13
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
3.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 14
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Hì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
Geometry module là gói thư viện hỗ trợ xử lý trên hình học hai chiều, cho phép
tạo một đối tượng không gian hai chiều: điểm, đường, vòng tròn, … và các truy vấn
Trang 15
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
thô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 16
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
3.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 17
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Hì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 18
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
Hì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 19
GVHD: PGS. TS. Đỗ Văn Nhơn HVTH: Lê Thành Nguyên
TÀ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.

Trang 20

×