1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

20 1,1K 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 461,01 KB

Nội dung

Đỗ 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 4

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 5

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 6

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 7

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 8

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 9

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 10

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 11

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 12

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: 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 13

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 14

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 15

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

Trang 16

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 17

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 18

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 19

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 20

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

Ngày đăng: 19/05/2015, 02:05

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w