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

Tiểu luận môn lập trình trí tuệ nhân tạo Lập trình hàm và lập trình Logic

17 692 0

Đ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 17
Dung lượng 785,5 KB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG TIỂU LUẬN MÔN Giảng viên hướng dẫn: PGS.TS Phan Huy Khánh Học viên thực : Võ Phi Thanh Nguyễn Trần Sỹ Hồng Cơng Tiến Nguyễn Thị Hà Phương Lớp : Cao học KHMT – K24 (QB) Quảng Bình, tháng 12 năm 2012 Tiểu luận mơn Lập trình trí tuệ nhân tạo MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU PHẦN I LÝ THUYẾT I.1 Kiểu dữ liệu Scheme .4 I.2 Kiểu tập hợp (set) Scheme I.2.1 Khái niệm I.2.2 Các phép toán PHẦN II BÀI TẬP II.1 Lập trình hàm II.1.1 Phân tích tốn II.1.2 Chương trình ngơn ngữ Scheme 11 II.1.3 Kết chạy chương trình Scheme 12 II.2 Lập trình logic .13 II.2.1 Phân tích tốn 13 II.2.2 Chương trình Prolog 14 II.2.3 Kết chạy chương trình 15 KẾT LUẬN 16 TÀI LIỆU THAM KHẢO 17 Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận mơn Lập trình trí tuệ nhân tạo LỜI NĨI ĐẦU Lập trình trí tuệ nhân tạo công nghệ tiên tiến làm thay đổi có tính cách mạng nhiều lĩnh vực, đặc biệt lĩnh vực trí tuệ nhân tạo, giao tiếp hệ thống, xử lý ngơn ngữ tự nhiên, tính tốn hình thức Vận dụng những kiến thức thu nhận được trình học tập, tìm hiểu nghiên cứu mơn Lập trình trí ṭ nhân tạo, được phân cơng hướng dẫn thầy giáo PGS.TS Phan Huy Khánh, chọn phần nội dung kiến thức để sâu nghiên cứu làm đề tài tiểu luận cho môn học Nội dung tiểu luận được chia làm phần sau: Phần I Lý thuyết: Đề cập đến vấn đề cấu trúc dữ liệu kiểu tập hợp (set) ngơn ngữ lập trình hàm Scheme Phần II Bài tập: Gồm nội dung: Lập trình hàm lập trình Logic Lập trình hàm: Viết chương trình Scheme để tính tổng (Bài tập 6): S=  x2 x4 x6  x  x x  Với độ xác  =10-5 Lập trình Logic: Viết chương trình Prolog mơ hàm đệ quy thực hiện kiểm tra số nguyên tố (Test for Prime) đồng dư (Congruent) a ≡ b mod c (Bài tập 3) - numdiv(x) = divisors_leq(x, x) - divisors_leq(x, 0) = - divisors_leq(x, y+1) = divisors_leq(x, y) + test(remaind(x, y+1)) - is_prime(x) = equal(numdiv(x), 2) - congruent(a, b, c) = equal(remaind(a, c), remaind(b, c)) Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận mơn Lập trình trí tuệ nhân tạo PHẦN I LÝ THUYẾT Câu 11 Kiểu cấu trúc dữ liệu truyền thống tập hợp (set) scheme I.1 Kiểu dữ liệu Scheme Kiểu dữ liệu (data type) tập hợp giá trị có quan hệ loại với (related values) Các kiểu dữ liệu được xử lý theo chất chúng thường có tính phân cấp Trong Sheme có loại dữ liệu kiểu đơn giản (simple data type) kiểu phức hợp (compound data type) Kiểu đơn giản bao gồm: kiểu số (number), kiểu lôgic (boolean), kiểu ký tự (character) kiểu ký hiệu (symbol) Kiểu phức hợp gồm: kiểu tập hợp (set), kiểu mảng (array), kiểu chuỗi (string), kiểu vectơ (vector), kiểu đôi (doublet), kiểu danh sách Trong phạm vi đề tài chúng tơi chỉ trình bày chi tiết kiểu cấu trúc dữ liệu truyền thống tập hợp Scheme I.2 Kiểu tập hợp (set) Scheme I.2.1 Khái niệm Trong tốn học, tập hợp (set) nhóm hay sưu tập đối tượng phân biệt {x1, x2, …, x2}, được gọi phần tử (elements) tập hợp Do phần tử tập hợp chỉ được liệt kê lần không được sắp xếp thứ tự nên người ta khơng nói đến phần tử thứ nhất, phần tử thứ hai, v.v… Ví dụ hai tập hợp sau đồng nhất: {a, b, d, a, d, e, c, d} = {a, b, c, d} Do tập hợp cũng danh sách, người ta có thể sử dụng cấu trúc danh sách để biểu diễn tập hợp Scheme Như vậy, tập hợp rỗng danh sách rỗng Để so sánh hai tập hợp khơng, ta có thể sử dụng vị từ equal? Như sau: (define (setequal? E1 E2) (cond ; hai tập hợp rỡng bằng ((and (null? E1) (null? E2)) #t) ; hai tập hợp có hai phần tử đầu tiên bằng ((equal? (car E1) (car E2)) (setequal? (cdr E1) (cdr E2))) khác nhau! ; hai tập hợp có hai phần tử đầu tiên khác (else #f))) (setequal? '(1 6) '(1 6) Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận môn Lập trình trí tuệ nhân tạo > #t Hoặc: (define E1 '(a b c d e)) (define E2 E1) (setequal? E1 E2) > #t Để ý vị từ setequal? Trên đây, ta chưa xử lý hai tập hợp có phần tử giống có số phần tử, không được sắp xếp thứ tự nhau: (setequal? '(1 6) '(1 6)) > #f Sau ta sẽ sử dụng thường xuyên hàm member để sử lý tập hợp Hàm kiểm tra phần tử có thuộc danh sách cho hay không: ; trường hợp phần tử kiểm tra có kiểu đơn giản (member 'c '(a b c d e)) > '(c d e) ; trường hợp phẩn tử kiểm tra có kiểu phức hợp (member (list 'a) '(b (a) c)) > '((a) c) Vị từ in? kiểm tra phần tử có thuộc tập hợp cho hay không? (define (in? x E) (cond ((null? E) #f) ; danh sách rỗng ((member x E) #t) ; x là phần tử kiểu đơn giản (else (in? x (cdr E))))) ; x là phần tử kiểu phức hợp (in? 'c E1) > #t Để xây dựng tập hợp từ danh sách, người ta phải loại bỏ phần tử trùng lặp Hàm list->set sau sử dụng hàm member lần lượt kiểm tra phần tử danh sách cho Kết trả chỉ giữ lại phần tử cuối những phần tử trùng chưa sắp xếp lại phần tử theo thứ tự (define (list -> set L) (cond ((null? L) '()) ((member (car L) (cdr L)) (list -> set (cdr L))) (else (cons (car L) (list -> set (cdr L))))) Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận mơn Lập trình trí tuệ nhân tạo (list -> set '(a b d a d e c d)) > '(b a e c d) (define (union? E1 E2) (cond ((null? E1) E2) ((member (car E1) E2) (union2 (cdr E1) E2)) (else (cons (car E1) (union2 (cdr E1) E2))))) I.2.2 Các phép toán I.2.2.1 Phép hợp tập hợp Giả sử cho hai tập hợp E1 E2, ta cần tìm kết phép hợp hai tập hợp E1E2 tập hợp sau: (define (union2 E1 E2) (cond ; tập hợp thứ nhất rỗng kết quả là tập hợp thứ hai ((null? E1) E2) hai bỏ qua ; nếu tập hợp thứ nhất có phần tử tḥc tập hợp thứ ((member (car E1) E2) (union2 (cdr E1) E2)) ; tiếp tục sau gảm kích thước tập hợp thứ nhất (else (cons (car E1) (union2 (cdr E1) E2))))) (union2 '(1 7) '(2 6)) > '(1 6) Mở rộng phép hợp hai tập hợp, ta xây dựng phép hợp tập hợp bất kỳ cách sử dụng hàm list-it: (define (union Lset) (list-it union2 Lset '())) (union '(1 4) '(2 6) '(4 7) '(6 8)) > '(1 8) I.2.2.2 Phép giao tập hợp Tương tự cách xây dựng phép hợp tập hợp bất kỳ, trước tiên ta xây dựng phép giao hai tập hợp E1E2 sau: (define (intersection2 E1 E2) (cond ; nếu một tập hợp là rỡng kết quả cũng rỡng ((null? E1) E1) ; chon phần tử nằm ở cả hai tập hợp ((member (car E1) E2) (cons (car E1) (intersection2 (cdr E1) E2))) Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận mơn Lập trình trí tuệ nhân tạo ; tiếp tục sau giảm kích thước tập hợp thứ nhất (else (intersection2 (cdr E1) E2)))) (intersection2 '(1 4) '(2 6)) > '(2 4) Mở rộng phép giao hai tập hợp, ta xây dựng phép giao tập hợp bất kỳ cách sử dụng hàm apply được định nghĩa ở mục Error! Reference source not found.: (define (intersection Lset) (cond ; giao của các tập hợp rỗng cũng là rỗng ((null? Lset) '()) ; giao của một tập hợp là ((null? (cdr Lset)) (car Lset)) ; đưa về thực phép giao của hai tập hợp (else (intersection2 (car Lset) (apply intersection (cdr Lset)))))) (intersection '(1 4) '(2 6) '(4 7)) > '(4) I.2.2.3 Phép hiệu của hai tập hợp Cho hai tập hợp E1 E2, ta định nghĩa phép hiệu hai tập hợp E1\E2 sau: (define (difference E1 E2) (cond ; nếu E2 rỡng kết quả là E1 ((null? E2) E1) ; nếu E1 rỡng kết quả là rỡng ((null? E1) '()) ; nếu E1 có phần tử tḥc E2 bỏ qua ((member (car E1) E2) (difference (cdr E1) E2)) ; nếu tiếp tục sau giảm kích thước tập hợp E1 (else (cons (car E1) (difference (cdr E1) E2))))) (defference '(1 5) '(1 2)) > '(3 5) I.2.2.4 Tìm tập hợp của mợt tập hợp Cho trước tập hợp E, ta tìm tập hợp tất tập (sub-set) E, ký hiệu E Chẳng hạn cho E = {a, b, c} E = {, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}} có tất phần tử bao gồm tập hợp rỗng thân tập hợp E Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận môn Lập trình trí tuệ nhân tạo Nếu tập hợp E rỗng, 2E cũng rỗng Nếu E khác rỗng, xét phần tử aE, có tập hợp chứa a tập hợp không chứa a Đầu tiên xây dựng tập hợp E\{a}, sau đó, chèn vào tất tập hợp E\{a} Ta có hàm subset sau: (define (subset E) (if (null? E) (list '()) (let ((Lremain (subset (cdr E)))) (append Lremain (map (lambda (L) (cons (car E) L)) Lremain))))) (subset '(a b c)) > '(() (c) (b) (b c) (a) (a c) (a b) (a b c)) Nhóm – Lớp KHMT K24 QB thực Trang Tiểu luận mơn Lập trình trí tuệ nhân tạo PHẦN II BÀI TẬP II.1 Lập trình hàm Câu Tính tổng:  x2 x4 x6  x  x x  Với độ xác  =10-5 II.1.1 Phân tích toán Tổng: S 1  x2 x4 x6  x  x x  có thể viết lại sau: i xj )  j j 2 ( 2 ) i 2 ( 2 ) i  n S 1  j ( Các chỉ số lặp có bước nhảy +2 Với j=2 ta có S 1  x2 Với j=4 ta có S 1  x2 x4  Đây tổng dương, tăng vô hạn Xét phần tử thứ n: i xj Sn =  i  j i 2 ( 2 ) j Theo yêu cầu toán, tổng S dừng phần tử Sn  nhanh n->, cần phải xác định x thuộc khoảng để đảm bảo thuật toán dừng với điều kiện Sn 1 return // không thỏa mãn điều kiện TICH 1 return // không thỏa mãn điều kiện TICH 1 return // tổng không xác định theo điều kiện eps Else { j=2 Do { S = S + TICH(x,j) J=j+2 } While (TICH(x,j)>=eps) Return S } } II.1.2 Chương trình ngơn ngữ Scheme (define (sumx x) ; định nghĩa hàm tính tổng sumx (define (isumx n s) ; định nghĩa hàm lặp tính tổng (if ( < (sohang x n) 0.000001) ; kiểm tra điều kiện dừng s (isumx ( + n 1) ( + s (sohang x n))))) ; biểu thức lặp để tính tổng (isumx (+ (/ (* x x) 2)))) ; giá trị khởi động (define (sohang x1 j) ; thứ j định nghĩa hàm tính giá trị số hạng (define (itich i s1) ; hàm lặp tính tích Nhóm – Lớp KHMT K24 QB thực Trang 11 Tiểu luận mơn Lập trình trí tuệ nhân tạo (if ( > i (* j)) ;điều kiện dừng ( * s1 ( / (expt x1 ( * j)) (* j))) (itich ( + i 2) (* s1 ( / i ( + i 1)))))) ; lặp tính tích i=2->i>j-2 (itich 1)) ; giá trị khởi động II.1.3 Kết quả chạy chương trình Scheme Welcome to DrScheme, version 360 > (sumx 0.1) 1.0050133333333333 > (sumx 0.2) 1.0202182095238097 > (sumx 0.5) 1.1347666222666224 > (sumx 0.9) 1.592667214172984 > (sumx 1.0) 2.1274910366817195 > (sumx 1.1) 4.50444030771407e+038 > (sumx 1.2) 1.0583625201649785e+077 > (sumx 1.5) 6.384531740134797e+175 > (sumx 1.7) 1.9385448564751084e+231 > (sumx 2.0) Máy treo Máy chạy khơng dừng x >=2 Nhóm – Lớp KHMT K24 QB thực Trang 12 Tiểu luận mơn Lập trình trí tuệ nhân tạo II.2 Lập trình logic Câu Hãy viết chương trình Prolog mô hàm đệ quy thực hiện kiểm tra số nguyên tố (Test for Prime) đồng dư (Congruent) a ≡ b mod c : - numdiv(x) = divisors_leq(x, x) - divisors_leq(x, 0) = - divisors_leq(x, y+1) = divisors_leq(x, y) + test(remaind(x, y+1)) - is_prime(x) = equal(numdiv(x), 2) - congruent(a, b, c) = equal(remaind(a, c), remaind(b, c)) II.2.1 Phân tích toán Xây dựng hàm test test(X,1):X=:=0 test(X,0):X=\=0 Xây dựng hàm s s(A,B):-suss(A,B) Xây dựng hàm equal equal(X,Y):X=:=Y Xây dựng hàm remaind % Doan chuong trinh de tinh: Numerator mod Denominator va luu so du vao bien R remaind(Numerator, Denominator,R) :rem(Denominator, Numerator,R) rem(X,Y,Y):Y < X rem(X, Y, R):Y >= X, Y1 is Y - X, rem(X,Y1,R) Xây dựng hàm numdiv % Doan chuong trinh de dem so luong cac uoc cua X va luu so luong cac uoc vao bien N numdiv(X,N) :- divisors_leq(X,X,N) Nhóm – Lớp KHMT K24 QB thực Trang 13 Tiểu luận môn Lập trình trí tuệ nhân tạo divisors_leq(X,0,0) divisors_leq(X,Y,N) :Y>=0, Y1 is Y - 1, divisors_leq(X,Y1,N1), remaind(X,Y,R), test(R,A), N is N1 + A Xây dựng hàm is_prime % Doan chuong trinh de kiem tra X co phai la snt khong? is_prime(X):numdiv(X,N), equal(N,2) Xây dựng hàm congruent is_congruent(X,Y,Z):remaind(X,Z,R1)=:= remaind(Y,Z,R2) II.2.2 Chương trình Prolog test(X,1):X=:=0 test(X,0):X=\=0 s(A,B):-suss(A,B) equal(X,Y):X=:=Y % Doan chuong trinh de tinh: Numerator mod Denominator va luu so du vao bien R remaind(Numerator, Denominator,R) :rem(Denominator, Numerator,R) rem(X,Y,Y):Y < X rem(X, Y, R):Y >= X, Y1 is Y - X, rem(X,Y1,R) % Doan chuong trinh de dem so luong cac uoc cua X va luu so luong cac uoc vao bien N Nhóm – Lớp KHMT K24 QB thực Trang 14 Tiểu luận mơn Lập trình trí tuệ nhân tạo numdiv(X,N) :- divisors_leq(X,X,N) divisors_leq(X,0,0) divisors_leq(X,Y,N) :Y>=0, Y1 is Y - 1, divisors_leq(X,Y1,N1), remaind(X,Y,R), test(R,A), N is N1 + A % Doan chuong trinh de kiem tra X co phai la snt khong? is_prime(X):numdiv(X,N), equal(N,2) is_congruent(X,Y,Z):remaind(X,Z,R1)=:= remaind(Y,Z,R2) II.2.3 Kết quả chạy chương trình Kiểm tra số nguyên tố: is_prime(11) -> yes is_prime(22) -> no Kiểm tra số đồng dư: is_congruent(23,5,2) -> yes is_congruent(23,5,3) -> no Nhóm – Lớp KHMT K24 QB thực Trang 15 Tiểu luận mơn Lập trình trí tuệ nhân tạo KẾT LUẬN Qua thời gian thực hiện đề tài Lập trình trí ṭ nhân tạo, nhóm chúng em trình bày những vấn đề cấu trúc dữ liệu tập hợp ngơn ngữ Scheme; Tìm hiểu ngơn ngữ lập trình Scheme để giải tốn tính tổng; Tìm hiểu ngơn ngữ lập trình Prolog để giải toán số nguyên tố số đồng dư Tuy nhiên, thời gian khả tiếp cận hạn chế nên đề tài chỉ dừng lại ở mức tìm hiểu những lý thuyết bản, chưa nghiên cứu khai thác hết chức ngơn ngữ lập trình, cũng hướng phát triển đề tài tương lai Xin chân thành cảm ơn Thầy giáo PGS.TS Phan Huy Khánh, tận tình giúp đỡ chúng em hoàn thành tiểu luận Xin chân thành cảm ơn ý kiến đóng góp thầy giáo bạn đọc quan tâm để đề tài được hồn thiện Nhóm – Lớp KHMT K24 QB thực Trang 16 Tiểu luận mơn Lập trình trí tuệ nhân tạo TÀI LIỆU THAM KHẢO [1] Slide giảng Lập trình trí ṭ nhân tạo, PGS.TS Phan Huy Khánh [2] Bài giảng Lập trình hàm, PGS.TS Phan Huy Khánh [3] Bài giảng Lập trình logic Prolog, PGS TS Phan Huy Khánh [4] http://vi.wikipedia.org [5] Các tài liệu Internet Nhóm – Lớp KHMT K24 QB thực Trang 17 ... – Lớp KHMT K24 QB thực Trang 15 Tiểu luận môn Lập trình trí tuệ nhân tạo KẾT LUẬN Qua thời gian thực hiện đề tài Lập trình trí ṭ nhân tạo, nhóm chúng em trình bày những vấn đề cấu trúc dữ... K24 QB thực Trang 16 Tiểu luận mơn Lập trình trí tuệ nhân tạo TÀI LIỆU THAM KHẢO [1] Slide giảng Lập trình trí tuệ nhân tạo, PGS.TS Phan Huy Khánh [2] Bài giảng Lập trình hàm, PGS.TS Phan Huy... dừng x >=2 Nhóm – Lớp KHMT K24 QB thực Trang 12 Tiểu luận môn Lập trình trí tuệ nhân tạo II.2 Lập trình logic Câu Hãy viết chương trình Prolog mơ hàm đệ quy thực hiện kiểm tra số nguyên tố

Ngày đăng: 23/03/2015, 13:30

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w