Trí tuệ là gì? Theo từ điển Bách khoa toàn thư Webster: Trí tuệ là khả năng phản ứng thích hợp lại những tình huống mới thông qua điều chỉnh hành vi một cách thích hợp. Hiểu rõ mối liên hệ giữa các sự kiện của thế giới bên ngoài nhằm đưa ra những hành vi phù hợp để đạt được mục đích.
KHOA CƠNG NGHỆ THƠNG TIN MƠN: TRÍ TUỆ NHÂN TẠO Đề Tài: Bài tốn qua sơng SINH VIÊN THỰC HIỆN GIẢNG VIÊN HƯỚNG DẪN: Ngành: Hệ thống thông tin LỜI MỞ ĐẦU Trí tuệ gì? Theo từ điển Bách khoa tồn thư Webster: Trí tuệ khả phản ứng thích hợp lại tình thơng qua điều chỉnh hành vi cách thích hợp Hiểu rõ mối liên hệ kiện giới bên nhằm đưa hành vi phù hợp để đạt mục đích Vậy trí tuệ nhân tạo gì? Thuật ngữ trí tuệ nhân tạo (Artifical Intellegence) Jonh Mc Carthly đưa hội thảo Darthouth vào mùa hè năm 1956 Đã có nhiều định nghĩa khác trí tuệ nhân tạo Với trí tuệ nhân tạo, máy tính giúp người giải vấn đề cách thông minh Ta tìm hiểu số phương pháp giải vấn đề Trong đề tài thực sử dụng thuật toán để giải tốn qua sơng Q trình thực đề tài khơng thể tránh khỏi sai sót Rất mong nhận ý kiến đóng góp đánh giá giảng viên Xin chân thành cảm ơn! MEN LỜI MỞ ĐẦU .2 CHƯƠNG 1: TÌM HIỂU VỀ TRÍ TUỆ NHÂN TẠO I TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO .5 Mở đầu .5 Tri thức .6 Biểu diễn tri thức .6 II CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC TRÊN MÁY TÍNH .7 Logic mệnh đề Logic vị từ Biểu diễn tri thức sử dụng luật dẫn xuất (luật sinh) .11 Biểu diễn tri thức sử dụng mạng ngữ nghĩa 13 III CÁC TRƯỜNG PHÁI CỦA TRÍ TUỆ NHÂN TẠO 15 Trí tuệ nhân tạo truyền thống 15 Trí tuệ nhân tạo tính tốn 15 CHƯƠNG 2: BÀI TOÁN QUA SÔNG 17 I TỔNG QUAN VỀ ĐỀ TÀI 17 Giới thiệu đề tài .17 II PHÂN TÍCH ĐỀ TÀI 18 III CÀI ĐẶT THUẬT TOÁN 20 Ý tưởng 20 Xây dựng thuật toán 20 IV KẾT QUẢ .32 V KẾT LUẬN 33 Hướng phát triển đề tài .33 Đánh giá 33 CHƯƠNG 1: TÌM HIỂU VỀ TRÍ TUỆ NHÂN TẠO I TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO Mở đầu Trí tuệ nhân tạo (hay AI: Artificial Intelligence), nỗ lực tìm hiểu yếu tố trí tuệ Lý khác để nghiên cứu lĩnh vực cách để ta tự tìm hiểu thân Không giống triết học tâm lý học, hai khoa học liên quan đến trí tuệ, cịn AI cố gắng thiết lập các yếu tố trí tuệ tìm biết chúng Lý khác để nghiên cứu AI để tạo thực thể thơng minh giúp ích cho AI có nhiều sản phẩm quan trọng đáng lưu ý, chí từ lúc sản phẩm hình thành Mặc dù không dự báo tương lai, rõ ràng máy tính điện tử với độ thơng minh định có ảnh hưởng lớn tới sống ngày tương lai phát triển văn minh nhân loại Chế tạo cỗ máy thông minh người (thậm chí thơng minh người) ước mơ cháy bỏng loài người từ hàng ngàn năm Năng lực máy tính ngày mạnh mẽ điều kiện thuận lợi cho trí tuệ nhân tạo Điều cho phép chương trình máy tính áp dụng thuật giải trí tuệ nhân tạo có khả phản ứng nhanh hiệu trước Mặc dù mục tiêu tối thượng ngành Trí tuệ nhân tạo xây dựng máy có lực tư tương tự người khả tất sản phẩm Trí tuệ nhân tạo cịn khiêm tốn so với mục tiêu đề Tuy vậy, ngành khoa học mẻ tiến ngày tỏ ngày hữu dụng số cơng việc địi hỏi trí thơng minh người Xây dựng trí tuệ nhân tạo tìm cách biểu diễn tri thức, tìm cách vận dụng tri thức để giải vấn đề tìm cách bổ sung tri thức cách "phát hiện" tri thức từ thơng tin sẵn có (máy học) Tri thức Tri thức kết trình nhận thức, học tập lập luận Người ta thường phân loại tri thức làm dạng sau: Tri thức kiện: khẳng định kiện, khái niệm (trong phạm vi xác định) Tri thức thủ tục: thường dùng để diễn tả phương pháp, bước cần tiến hành, trình tự hay ngắn gọn cách giải vấn đề Thuật toán, thuật giải dạng tri thức thủ tục Tri thức mô tả: cho biết đối tượng, kiện, vấn đề, khái niệm, thấy, cảm nhận, cấu tạo (một bàn thường có chân, người có tay, mắt, ) Tri thức Heuristic: dạng tri thức cảm tính Các tri thức thuộc loại thường có dạng ước lượng, đốn, thường hình thành thơng qua kinh nghiệm Biểu diễn tri thức Biểu diễn tri thức cách thể tri thức máy dạng cho tốn giải tốt Biểu diễn tri thức máy phải: + Thể tất thông tin cần thiết + Cho phép tri thức suy diễn từ tập kiện luật suy diễn + Cho phép biểu diễn nguyên lý tổng quát tình đặc trưng + Bắt lấy ý nghĩa ngữ nghĩa phức tạp + Cho phép lý giải mức tri thức cao II CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC TRÊN MÁY TÍNH Con người sống mơi trường nhận thức giới nhờ giác quan (tai, mắt giác quan khác), sử dụng tri thức tích luỹ nhờ khả lập luận, suy diễn, người đưa hành động hợp lý cho công việc mà người làm Một mục tiêu Trí tuệ nhân tạo ứng dụng thiết kế Agent thông minh (intelligent agent) có khả người Chúng ta hiểu Agent thơng minh nhận thức mơi trường thơng qua cảm nhận (sensors) đưa hành động hợp lý đáp ứng lại môi trường thông qua phận hành động (effectors) Các robots, softbot (software robot), hệ chuyên gia, ví dụ Agent thơng minh Các Agent thơng minh cần phải có tri thức giới thực đưa định đắn Cơ sở tri thức tập hợp tri thức biểu diễn dạng Mỗi nhận thơng tin đưa vào, Agent cần có khả suy diễn để đưa câu trả lời, đưa hành động hợp lý Nhiệm vụ thực suy diễn thành phần khác hệ tri thức Như vậy, hệ tri thức bao hàm CSTT trang bị thủ tục suy diễn Mỗi tiếp nhận kiện từ môi trường, thủ tục suy diễn thực trình liên kết kiện với tri thức CSTT để rút câu trả lời, hành động hợp lý mà Agent cần thực Khi thiết kế Agent giải vấn đề CSTT chứa tri thức đối tượng cụ thể Để máy tính sử dụng, xử lý tri thức, cần biểu diễn tri thức dạng thuận tiện Đó mục tiêu biểu diễn tri thức Logic mệnh đề Đây có lẽ kiểu biểu diễn tri thức đơn giản gần gũi Mệnh đề khẳng định, phát biểu mà giá trị là sai Giá trị mệnh đề không phụ thuộc vào thân mệnh đề Có mệnh đề mà giá trị ln sai bất chấp thời gian có mệnh đề mà giá trị lại phụ thuộc vào thời gian, không gian nhiều yếu tố khác quan khác Chẳng hạn mệnh đề: "Con người nhảy cao 5m với chân trần" trái đất, cịn hành tinh có lực hấp dẫn yếu sai.Ta ký hiệu mệnh đề chữ la tinh a, b, c, Có phép nối để tạo mệnh đề từ mệnh đề sở phép hội, giao phủ định Bên cạnh thao tác tính giá trị mệnh đề phức từ giá trị mệnh đề con, có chế suy diễn sau: Modus Ponens: Nếu mệnh đề A mệnh đề A => B giá trị B Modus Tollens: Nếu mệnh đề A => B mệnh đề B sai giá trị A sai Logic vị từ Biểu diễn tri thức mệnh đề gặp phải trở ngại ta can thiệp vào cấu trúc mệnh đề Hay nói cách khác mệnh đề khơng có cấu trúc Điều làm hạn chế nhiều thao tác suy luận Do đó, người ta đưa vào khái niệm vị từ lượng từ (- với mọi, - tồn tại) để tăng cường tính cấu trúc mệnh đề Trong logic vị từ, mệnh đề cấu tạo hai thành phần đối tượng tri thức mối liên hệ chúng (gọi vị từ) Các mệnh đề biểu diễn dạng: Vị từ (, , …, ) Như để biểu diễn vị trái cây, mệnh đề viết thành: Cam có vị Ngọt Vị (Cam, Ngọt) Cam có màu Xanh Màu (Cam, Xanh) Với vị từ, ta biểu diễn tri thức dạng mệnh đề tổng quát, mệnh đề mà giá trị xác định thông qua đối tượng tri thức cấu tạo nên Chẳng hạn tri thức: "A bố B B anh em người A" biểu diễn dạng vị từ sau: Bố (A, B) = Tồn Z cho: Bố (A, Z) (Anh (Z, B) Anh (B, Z)) Trong trường hợp này, mệnh đề Bố (A, B) mệnh đề tổng quát Như ta có mệnh đề sở là: Bố ("An", "Bình") có giá trị (An bố Bình) Anh ("Tú", "Bình") có giá trị (Tú anh Bình) Thì mệnh đề Bố ("An", "Tú") có giá trị (An bố Tú) Rõ ràng sử dụng logic mệnh đề thơng thường ta khơng thể tìm mối liên hệ c a, b phép nối mệnh đề, ¬ Từ đó, ta khơng thể tính giá trị mệnh đề c Sở dĩ ta thể tường minh tri thức " (A bố B) có Z cho (A bố Z) (Z anh em C)" dạng mệnh đề thơng thường Chính đặc trưng vị từ cho phép thể tri thức dạng tổng quát Thêm số ví dụ để thấy rõ khả vị từ: Câu cách ngơn "Khơng có vật lớn khơng có vật bé nhất!" biểu diễn dạng vị từ sau: LớnHơn (x, y) = x > y NhỏHơn (x, y) = x < y x, y: LớnHơn (y, x) x, y: NhỏHơn (y, x) Câu châm ngơn "Gần mực đen, gần đèn sáng" hiểu "chơi với bạn xấu ta thành người xấu" biểu diễn vị từ sau: NgườiXấu (x) = y: Bạn (x, y) NgườiXấu (y) 10 III CÀI ĐẶT THUẬT TOÁN Ý tưởng Xây dựng chương trình dạng trị chơi sổ console, với mục đích trị chơi đưa số thầy tu sô quỷ từ bên trái sang bên phải với ràng buộc đề tài Chương trình cho phép người dùng tự chơi cách nhập liệu từ bàn phím, nhờ trợ giúp máy tính chơi lượt để máy tính tự chơi Xây dựng thuật tốn Chương trình viết phần mềm Apache NetBeans ngôn ngữ java Các thư viện sử dụng bao gồm: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; Bắt đầu thuật toán Khởi tạo mảng chiều, mảng có giá trị tương ứng với số lượng thầy tu số lượng quỷ bên bờ sông biến input1 sử dụng để đọc liệu nhập vào từ bàn phím: static int[] brinkLeft= new int[2]; static int[] brinkRight=new int[2]; static int count = 0; static BufferedReader input1= new BufferedReader(newInputStreamReader(System.in)); 20 Tiếp theo xây dựng hàm khởi tạo tham số khởi đầu cho chương trình với tham số n người dùng nhập vào từ trước ta gọi hàm: static void init (int n) { brinkLeft[0] = n; brinkLeft[1] = n; brinkRight[0] = 0; brinkRight[1] = 0; } Xây dựng hàm kiểm tra tính hợp lệ trạng thái (Số thầy tu lớn số quỷ số thầy tu bên sông trạng thái) với tham số số lượng thầy tu quỷ bên: static boolean check (int monkLeft, int devilLeft, int monkRight, int devilRight, char mode) { if (monkLeft == && devilLeft == && monkRight == && devilRight == && mode == 'Q') return false; else if ((monkLeft >= devilLeft || monkLeft == 0) && (monkLeft >= && devilLeft >= 0) && (monkRight >= devilRight || monkRight == 0) && (monkRight >= && devilRight >= 0)) return true; return false; } Tạo hàm với chức đưa quỷ thầy tu qua sông từ bờ bên trái sang bờ bên phải Khi bắt đầu, hàm đọc liệu số lượng đối tượng bên, sau thực kiểm tra trường hợp thay đổi trạng thái theo thứ tự ưu tiên, 21 kiểm tra tính thỏa mãn điều kiện đề trường hợp Nếu thỏa mãn, hàm thực trường hợp static void brinkLeftToRight () { // Have five case: monk; devil; monk and devil, monk, 1devil pass over int[] tempLeft= new int[2]; int[] tempRight= new int[2]; for (int i = 0; i < 5; i++) { tempLeft[0] = brinkLeft[0]; tempLeft[1] = brinkLeft[1]; tempRight[0] = brinkRight[0]; tempRight[1] = brinkRight[1]; switch (i) { case 0: { tempLeft[0] -= 2; tempRight[0] += 2; break; } case 1: { tempLeft[1] -= 2; tempRight[1] += 2; break; } case 2: { tempLeft[0] ; tempLeft[1] ; tempRight[0]++; tempRight[1]++; break; } 22 case 3: { tempLeft[0] -= 1; tempRight[0] += 1; break; } case 4: { tempLeft[1] -= 1; tempRight[1] += 1; break; } default: break; } if (check (tempLeft[0], tempLeft[1], tempRight[0], tempRight[1])) { count++; brinkLeft[0] = tempLeft[0]; brinkLeft[1] = tempLeft[1]; brinkRight[0] = tempRight[0]; brinkRight[1] = tempRight[1]; switch (i) { case 0: { System.out.println (count +" Two Monk: Left ->>> Right break; } case 1: { System.out.println (count +" Two Devil: Left ->>> Right." ); break; 23 } case 2: { System.out.println (count + " One Monk and One Devil: Left ->>> Right."); break; } case 3: { System.out.println (count + " One Monk: Left ->>> Right."); break; } case 4: { System.out.println (count + " One Devil: Left ->>> Right."); break; } default: break; } break; } } } Tương tự, ta tạo hàm di chuyển thầy tu quỷ từ bờ phải trở bờ trái static void brinkRightToLeft() { int[] tempLeft= new int[2]; int[] tempRight= new int[2]; for(int i = 0; i < 3; i++) { tempLeft[0] = brinkLeft[0]; 24 tempLeft[1] = brinkLeft[1]; tempRight[0] = brinkRight[0]; tempRight[1] = brinkRight[1]; switch(i) { case 0: { tempLeft[1]++; tempRight[1] ; break; } case 1: { tempLeft[0]++; tempLeft[1]++; tempRight[0] ; tempRight[1] ; break; } default: break; } if(check(tempLeft[0], tempLeft[1], tempRight[0], tempRight[1], 'V') ) { count++; brinkLeft[0] = tempLeft[0]; brinkLeft[1] = tempLeft[1]; brinkRight[0] = tempRight[0]; brinkRight[1] = tempRight[1]; switch(i) { case 0: { System.out.println(count Devil : Left = 0&&count %2==0)&&(brinkLeft[1] -player_devil>=0&&count %2==0)&&(player_monk+player_devil=0&&count%2==1)&&!(player_monk==0&&player_devil==0)) { brinkLeft[0] +=player_monk; brinkLeft[1] +=player_devil; brinkRight[0] -=player_monk; brinkRight[1] -=player_devil; count++; System.out.println(count +" "+player_monk+" Monk and "+player_devil+" Devil : Left