Phần 7: Logic Programming – Lập trình AI bằng Python

Phần 7: Logic Programming                        – Lập trình AI bằng Python
Trong bài này, ta sẽ tập trung nhiều vào lập trình logic và nó giúp ích ra sao trong Trí tuệ nhân tạo.
Chúng ta đã biết rằng logic là nghiên cứu các nguyên tắc của suy luận chính xác hay nói 1 cách đơn giản nó là nghiên cứu về cái gì xảy ra sau cái gì. Ví dụ, nếu như 2 câu lệnh đúng thì chúng ta sẽ có thể suy ra bất kỳ câu lệnh thứ ba nào từ nó.

1. Khái niệm :

Lập trình Logic là sự kết hợp của 2 từ, logic và lập trình. Lập trình Logic là 1 mô hình lập trình trong đó những vấn đề được thể hiện dưới dạng các dữ kiện và quy tắc bằng các câu lệnh của chương trình nhưng trong 1 hệ thống logic chính thức. Cũng giống những mô hình lập trình khác như hướng đối tượng, tính năng, khai báo và thủ tục, v.v., nó cũng chính là 1 cách chi tiết để tiếp cận lập trình.

2. Xử lý vấn đề với Logic Programming:

Lập trình Logic sử dụng các dữ kiện và quy tắc để giải quyết được vấn đề. Đó là nguyên nhân vì sao chúng được gọi là khối xây dựng của Lập trình Logic. 1 mục tiêu cần được xác định cho mọi chương trình trong lập trình logic. Để hiểu cách 1 vấn đề có thể được giải quyết trong lập trình logic, ta cần phải biết về các nguyên tắc xây dựng – Sự kiện và Quy tắc –
a . Sự kiện :
Trên thực tế, mọi chương trình logic cần các dữ kiện để làm việc để nó có thể đạt mục tiêu đã cho. Sự thật về căn bản là những tuyên bố đúng về chương trình và dữ liệu. Ví dụ, Delhi là thủ đô của Ấn Độ.
b. Quy tắc :
Trên thực tế, những quy tắc là những ràng buộc cho phép ta đưa ra kết luận về miền vấn đề. Những quy tắc về căn bản được viết dưới dạng mệnh đề logic để diễn đạt những sự kiện khác nhau. Ví dụ, nếu như ta đang xây dựng bất kỳ trò chơi nào thì toàn bộ những quy tắc phải được xác định.
Những quy tắc rất quan trọng để giải quyết bất kỳ vấn đề nào trong Lập trình Logic. Những quy tắc về căn bản là kết luận hợp lý có thể thể hiện những sự kiện. Sau đây chính là cú pháp của quy tắc
A∶− B1,B2,…,Bn.
Tại đây A là head và B1,B2,..Bn là physique

3. Cài đặt Packages:

Để bắt đầu với logic programming trong python, ta cần set up 2 packages sau :
a. Kanren:Nó cung cấp cho ta 1 cách để giản đơn hoá mà ta thường sử dụng. Nó cho phép  thể hiện logic về những quy tắc và sự kiện. Cú pháp cài đặt kanren:
pip set up kanren
b. Sympy :
SymPy là 1 thư viện Python hỗ trợ biểu tượng toán học. Nó nhằm mục đích thành 1 hệ thống đại số máy tính (CAS) đầy đủ tính năng trong khi vẫn giữ mã đơn giản nhất có thể để dễ hiểu và dễ mở rộng. Cú pháp cài đặt SymPy:
pip set up sympy

4. Ví dụ về Logic Programming :

Dưới đây chính là những ví dụ có thể được giải quyết bằng lập trình logic –
a. Biểu thức toán học :
Trên thực tế, chúng ta sẽ có thể tìm thấy những giá trị không biết bằng cách sử dụng lập trình logic 1 cách hiệu quả. Đoạn mã Python sau sẽ giúp các bạn so khớp 1 biểu thức toán học:
Trước tiên, hãy xem xét việc nhập những gói sau:
from kanren import run, var, reality
from kanren.assoccomm import eq_assoccomm as eq
from kanren.assoccomm import commutative, associative
Chúng ta cần xác định những phép toán mà ta sẽ sử dụng –
add = 'add'
mul = 'mul'
reality(commutative, mul)
reality(commutative, add)
reality(associative, mul)
reality(associative, add)
Bắt buộc phải xác định các biến như dưới đây :
a, b = var('a'), var('b')
Ta cần kết hợp biểu thức với mẫu ban đầu. Mẫu ban đầu là (5 + a) * b –
Original_pattern = (mul, (add, 5, a), b)
Sử dụng 2 biểu thức sau để khớp với mẫu ban đầu :
exp1 = (mul, 2, (add, 3, 1))
exp2 = (add,5,(mul,8,1))
print(run(0, (a,b), eq(original_pattern, exp1)))
print(run(0, (a,b), eq(original_pattern, exp2)))
Output :
((3,2))
()
Đầu ra đầu tiên đại diện cho những giá trị của a và b. Biểu thức đầu tiên khớp với mẫu ban đầu và trả về giá trị cho a và b nhưng biểu thức thứ 2 không khớp với mẫu ban đầu do vậy không có gì được trả về.

5. Kiểm tra số nguyên tố :

Với sự giúp đỡ của lập trình logic, chúng ta sẽ có thể tìm những số nguyên tố từ 1 danh sách những số và cũng sẽ có thể tạo nên những số nguyên tố. Đoạn mã sau sẽ tìm số nguyên tố từ danh sách những số và sẽ tạo nên 10 số nguyên tố đầu tiên.
from kanren import isvar, run, membero
from kanren.core import success, fail, goaleval, condeseq, eq, var
from sympy.ntheory.generate import prime, isprime
import itertools because it
Hiện tại, ta sẽ định nghĩa 1 hàm có tên là prime_check sẽ kiểm tra những số nguyên tố dựa trên những số đã cho dưới dạng dữ liệu.
def prime_check(x):
if isvar(x):
   return condeseq([(eq,x,p)] for p in map(prime, it.depend(1)))
else:
   return success if isprime(x) else fail
Khai báo biến :
x = var()
print((set(run(0,x,(membero,x,(12,14,15,19,20,21,22,23,29,30,41,44,52,62,65,85)),
(prime_check,x)))))
print((run(10,x,prime_check(x))))
Output :
{19, 23, 29, 41}
(2, 3, 5, 7, 11, 13, 17, 19, 23, 29)

admin

Leave a Reply

Your email address will not be published. Required fields are marked *