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

Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java

63 922 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 63
Dung lượng 2,13 MB

Nội dung

Tuy rằng, lĩnh vực xây dựng trò chơi game không còn mới mẻ, nhưng qua 9 kỳ học tập, nghiên cứu với mong muốn vận dụng kiến thức đã học vào triển khai một đề tài thiết kế một trò chơi gam

Trang 1

MỤC LỤC

MỤC LỤC 0

Lời nói đầu 2

Lời cảm ơn Error! Bookmark not defined Lời cam đoan Error! Bookmark not defined CHƯƠNG 1 3

LÝ DO CHỌN ĐỀ TÀI 3

1.1 GIỚI THIỆU VỀ CÔNG NGHỆ TRI THỨC 3

1.1.1 Giới thiệu về tri thức 3

1.1.2 Giới thiệu về lý thuyết trò chơi 4

1.2 GIỚI THIỆU VỀ GAME 5

1.2.1 Lịch sử cờ vây 5

1.2.2 Lịch sử trò chơi xếp hình 5

1.2.3 Lý do chọn đề tài 6

CHƯƠNG 2: 8

CƠ SỞ LÝ THUYẾT 8

2.1 GIỚI THIỆU VỀ JAVA [2] 8

2.1.1 Lịch sử phát triển 8

2.1.2 Các đặc điểm của Java 8

2.1.3 JDK – Java Development Kit - Bộ công cụ phát triển Java 10

2.1.4 Các đặc điểm cơ bản của các thành phần AWT 11

2.1.5 Các thành phần của AWT được sử dụng 12

2.1.6 Đối tượng đồ hoạ 16

2.1.7 Xử lý sự kiện 20

2.1.8 WindowListener 23

2.1.9 Phân tuyến và đa tuyến 24

2.1.10 Interface 25

2.2 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO [1] 26

2.2.1 Lịch sử hình thành và phát triển của trí tuệ nhân tạo 26

2.2.2 Định nghĩa trí tuệ nhân tạo 28

Trang 2

2.2.3 Thử nghiệm Turing 28

2.2.4 Khái quát các lĩnh vực ứng dụng của trí tuệ nhân tạo 29

2.2.5 Không gian trạng thái 32

2.2.6 Chiến lược tìm kiếm tối ưu 33

2.2.7 Tìm kiếm có đối thủ 35

CHƯƠNG 3: 40

XÂY DỰNG CÁC CHƯƠNG TRÌNH TRÒ CHƠI 40

3.1 XÂY DỰNG CHƯƠNG TRÌNH TRÒ CHƠI CỜ VÂY 40

3.1.1 Ý tưởng 40

3.1.2 Thiết kế chương trình 45

3.1.3 Đánh giá chương trình 53

3.2 XÂY DỰNG TRÒ CHƠI XẾP HÌNH 54

3.2.1 Ý tưởng 54

3.2.2 Thiết kế chương trình 56

3.2.3 Đánh giá chương trình 60

KẾT LUẬN 61

TÀI LIỆU THAM KHẢO 62

Trang 3

Lời nói đầu

Ngày nay với sự phát triển không ngừng của khoa học kỹ thuật đặc biệt công nghệ thông tin là lĩnh vực luôn được đưa lên hàng đầu thúc đẩy sự tăng trưởng phát triển nền kinh tế của mỗi quốc gia Công nghệ thông tin dần khẳng định được vai trò của mình trong các lĩnh vực khoa học, kỹ thuật và giải trí Xuất khẩu phần mềm trò chơi giải trí luôn mang lại lợi nhuận cao cho các quốc gia có ngành tin học phát triển mạnh

Khi chiếc máy tính cá nhân đã trở thành một phần của đời sống con người, thì những sản phẩm giải trí trên máy ngày càng có cơ hội để phát triển, đặc biệt là những game mini như những game chơi cờ Tuy nhiên yêu cầu đối với một game hay cũng rất cao, đồ họa, xử lý sự kiện…Do đó viết game vừa là cơ hội vừa là thách thức đối với người lập trình và đó cũng là một phương pháp tốt để hoàn thiện kĩ năng lập trình của lập trình viên

Hiện nay, có rất nhiều ngôn ngữ lập trình có thể dùng để viết game, Java cũng là một trong những ngôn ngữ ấy, với kĩ thuật xử lí hình ảnh, âm thanh đã được hỗ trợ sẵn, Java có đầy đủ sức mạnh để xây dựng một game hoàn hảo, đó cũng chính là lí do để Java được chọn làm ngôn ngữ viết lên game được trình bày trong đề tài này

Game viết trong báo cáo cũng chỉ dừng ở mức tìm hiểu, chưa thể trở thành một game thương mại, nhưng cũng giúp người đọc hiểu được những điều

cơ bản khi viết một game, và những hỗ trợ của Java đối với game

Tuy rằng, lĩnh vực xây dựng trò chơi game không còn mới mẻ, nhưng qua 9 kỳ học tập, nghiên cứu với mong muốn vận dụng kiến thức đã học vào triển khai một đề tài thiết kế một trò chơi game; em đã lựa chọn đề tài tốt nghiệp là: Áp dụng trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lậ trình Java

Trang 4

CHƯƠNG 1:

LÝ DO CHỌN ĐỀ TÀI 1.1 GIỚI THIỆU VỀ CÔNG NGHỆ TRI THỨC

1.1.1 Giới thiệu về tri thức

Tri thức là những hiểu biết được kiểm nghiệm Tri thức là sức mạnh, tài nguyên nó trở thành tiềm lực cạnh tranh Hiện nay, trí tuệ nhân tạo đang trên đà phát triển và đã đạt được những thành tựu rực rỡ đóng góp vào nền tảng của công nghệ thông tin cũng như tạo ra các sản phẩm liên quan đến việc sử dụng công nghệ tri thức trên máy tính Trí tuệ nhân tạo và tạo dụng tri thức có mối quan hệ gắn bó mật thiết với nhau hình thành lên một lĩnh vực mới đó là khoa học tri thức

Tạo dụng tri thức là một tập hợp quá trình điều hành sự sáng tạo, phổ biến và sử dụng tri thức để đạt được mục tiêu của mình

Khoa học tri thức được chọn là một trong ba khoa học (cùng với khoa học thông tin và khoa học vật liệu) được thiết lập và phát triển tại viện Khoa Học và Công nghệ tiên tiến Nhật Bản viết tắt là JAIST Mục tiêu chính của nó

là thúc đẩy sự phát triển của tạo dụng tri thức và tiến hành nghiên cứu liên qua đến nền tảng cho một xã hội tri thức dựa trên sự kết hợp của khoa học quản lý, khoa học hệ thống và khoa học thông tin

Trong nhiều tình huống, sẽ không có sẵn tri thức do vậy: Kỹ sư tri thức cần thu thập tri thức từ các chuyên gia lĩnh vực, cần hiểu biết các luật mô tả lĩnh vực cụ thể

Các hệ thống học được mô hình dưới dạng số liên quan đến các kỹ thuật nhằm tối ưu các tham số Học theo dạng số bao gồm mạng Neural nhân tạo, giải thuật di truyền, bài toán tối ưu truyền thống Các kỹ thuật học theo số không tạo

ra cơ sở tri thức tường minh

Trí tuệ nhân tạo là một nhánh của khoa học và công nghệ liên quan đến việc làm cho máy tính có năng lực của trí tuệ con người, tiêu biểu như các khả năng “suy nghĩ”, “hiểu ngôn ngữ” và biết “học tập” của máy Máy tính sinh ra chủ yếu thực hiện việc tính toán, trí tuệ nhân tạo nhằm cho máy biết lập luận,

có “trí thông minh”

Trang 5

Một thí dụ về sự đóng góp của trí tuệ nhân tạo trong các sản phẩm của công nghệ thông tin là cuộc đọ trí của Deep Junior và Gary Karparov đầu năm

2003 sau chiến thắng của Deep Blue trước nhà vô địch cờ vua giữa năm 1997

Bản chất của trí tuệ nhân tạo là làm sao đưa được tri thức con người vào

để máy hiểu được và cung cấp cho máy khả năng suy diễn khai thác tri thức này

Tạo ra và sử dụng tri thức là cốt tử trong mọi hoạt động kinh tế xã hội, khoa học, quản lý… và liên quan chặt chẽ đến tiến bộ của khoa học công nghệ đặc biệt là tiến bộ của công nghệ thông tin Tạo dụng tri thức cần được tìm hiểu một cách sâu rộng hơn

1.1.2 Giới thiệu về lý thuyết trò chơi

John von Newmann là người đầu tiên hình thức ra lý thuyết trò chơi cho đến đầu những năm 1970, lý thuyết trò chơi bắt đầu được áp dụng cho nghiên cứu trong các ngành khoa học, từ Sinh học tới Triết học Cuối cùng, lý thuyết trò chơi gần đây đã thu hút được sự chú ý của các nhà Khoa học máy tính do ứng dụng của nó trong trí tuệ nhân tạo và Điều khiển học

Lý thuyết trò chơi là một nhánh của toán học ứng dụng, nghiên cứu các tình huống chiến thuật trong đó các đối thủ lựa chọn các hành động khác nhau để

cố gắng làm tối đa các kết quả nhận được Trong lý thuyết trò chơi có năm yếu tố

cơ sở: Người chơi (players), giá trị gia tăng (Added values), Quy tắc (Rules), chiến thuật (Tacties), phạm vi (Scope) Năm yếu tố hợp thành PARTS như các thành phần của cuộc chơi

Các trò chơi game giải trí cũng áp dụng những chiến thuật cơ bản trong lý thuyết trò chơi ví dụ các trò chơi đối kháng, một chương trình máy tính có thể chơi các trò chơi đấu trí như các trò chơi cờ Vua, cờ Tướng, cờ Vây, go, checker… các trò chơi này là các trò chơi đối kháng, diễn ra giữa hai đấu thủ người chơi luôn mong muốn tới đích trước dành chiến thắng trong cuộc chơi (ván chơi) Đặc điểm của trò chơi này là:

* Có hai đấu thủ, mỗi người chỉ đi một nước khi tới lượt

* Các đấu thủ đều biết về tình trạng trận đấu

Trang 6

* Trận đấu không kéo dài vô tận, phải diễn ra hoà, hoặc một bên thắng và bên kia thua

Thông thường ta hay gọi các trò chơi này là các loại cờ Đôi khi ta còn gọi là trò chơi MiniMax (dựa trên tên các thuật toán tìm kiếm cơ bản áp dụng cho chúng)

1.2 GIỚI THIỆU VỀ GAME

1.2.1 Lịch sử cờ vây

Cờ vây là loại cờ cổ, được chơi cách đây khoảng 4000 năm bắt nguồn từ nước Trung Hoa Cờ vây ngày nay rất phổ biến ở vùng Đông Á Nhật hiện nay là nước có số người chơi cờ rất cao Cờ vây đã tới Nhật từ thế kỷ thứ 7 và đến đầu thế kỷ 13, nó được chơi rộng rãi khắp mọi nơi trên đất nước này Sự phát triển của Internet cũng đã làm cho nó phổ biến hơn trên khắp thế giới và đến nay đã có

36 triệu người yêu thích môn cờ này (thống kê của hiệp hội cờ Vây nghiệp dư thế giới năm 1999)

Môn cờ vây cũng đã được người Việt Nam biết tới từ lâu, nhưng qua thời gian, chiến tranh nên đã hầu như không còn ai biết cách chơi Nó được phổ biến lại tại Việt Nam vào năm 1993 nhân dịp có một giảng viên không chuyên từ Trung Quốc sang giảng dạy giúp cho ngành thể dục thể thao Hà Nội

Cờ vây có từ xa xưa, nhưng không hề bị biến đổi theo thời gian như các trò chơi cổ khác Lý do là luật chơi của cờ vây hết sức đơn giản, người nào cũng

có thể chơi được, không cần đến trí thông minh ưu việt Trong cờ vây quân nào cũng như quân nào, giá trị y hệt nhau, không quân nào có tên tuổi, không có vua,

có tướng Cờ vây muốn biết chơi thì quá dễ, nhưng để chơi tới được thành “cao cờ” thì rất khó

1.2.2 Lịch sử trò chơi xếp hình

Nguồn gốc của trò chơi xếp hình (Jigsaw puzzle) phải quay về những năm

1790 khi các nhà làm bản đồ châu Âu dán các bản đồ trên gỗ và cắt chúng thành những mảnh nhỏ (Dissected map) là một loại đồ chơi mang tính giáo dục thành công nhất từng có Trẻ em các nước vẫn còn học địa lý thông qua việc chơi với bản đồ xếp hình của Hoa Kỳ hay thế giới Các nghệ nhân sáng tạo trò chơi xếp

Trang 7

hình ở thế kỳ 17 hẳn sẽ vô cùng sửng sốt trước những biến đổi qua hơn 230 năm qua Các bộ xếp hình dành cho trẻ em từ các bài học đến giải trí, thể hiện nhiều loại sự vật khác nhau như các con thú, thơ ca mẫu giáo (nursery ryhmes), các câu truyện với những siêu anh hùng và Disney Nhưng bất ngờ lớn nhất là sự ra đời của bộ xếp hình dành cho cả người lớn vào những năm đầu thế kỷ 20

Các mảnh ghép càng ngày càng được cắt chính xác trên những đường kẻ màu không có các mảnh chuyển tiếp có hai màu đỏ ra đen, ví dụ như vùng màu nâu (mái nhà) xếp gần những mảnh màu xanh (bầu trời) những năm tiếp theo mang đến hai sự cách tân đáng kể chúng được cải tiến từ nguyên liệu ban đầu là

gỗ giá thành tương đối đắt sang nguyên liệu là bìa cứng cùng với đó là số lượng các mảnh ghép ngày càng tăng

Ngày nay, sự phát triển của internet góp phần làm cho trò chơi này được phổ biến rộng rãi hơn và thu hút sự chú ý của mọi giới và mọi lứa tuổi

Trò chơi xếp hình đòi hỏi sự kiên nhẫn, ráp nhanh hay chậm tuỳ thuộc vào khả năng nhạy bén của mỗi người nhưng có một vài nguyên tắc chung giúp cho việc ghép hình thuận lợi hơn là ráp các mảnh ngoài bìa trước, tìm chỗ nối tiếp thông qua màu sắc, hình thái gom các mảnh cùng màu vào một chỗ

1.2.3 Lý do chọn đề tài

Như chúng ta đã biết lý thuyết xây dựng game đặc biệt là các game chơi

cờ, xếp hình cần sử dụng nhiều thuật toán có độ khó cao, các kỹ thuật lập trình game, lập trình giao diện, các chức năng đồ hoạ sử dụng trong game… Đề tài em thực hiện áp dụng lý thuyết trò chơi, các thuật toán tìm kiếm có đối thủ, tìm kiếm tối ưu: Thuật toán MiniMax, phương pháp cắt cụt alpha-beta, thuật toán A* trong trí tuệ nhân tạo và các kỹ thuật lập trình game bằng ngôn ngữ lập trình Java Trong thời gian tìm hiểu và nghiên cứu, tiến hành xây dựng hoàn chỉnh game cờ mini, trò chơi xếp hình em đã củng cố và bổ sung được nhiều kiến thức về trí tuệ nhân tạo, công nghệ tri thức và lập trình hướng đối tượng với Java

Những phân tích trên chính là lý do để em chọn đề tài này vì rất muốn sử dụng khả năng đồ hoạ của Java để xây dựng chương trình game, muốn áp dụng

lý thuyết trò chơi, các thuật toán tìm kiếm trong trí tuệ nhân tạo để xây dựng

Trang 8

chương trình game chơi cờ, xếp hình Các game này được đón nhận trong mọi giới nó không mất quá nhiều thời gian và phù hợp với thời lượng làm đồ án

Chương trình của em gồm ba chức năng cơ bản sau: Tạo một ván cờ mới Người chơi với máy ở các cấp độ khác nhau dễ, trung bình, khó Hai người chơi với nhau

Chương trình xếp hình của em gồm có chức năng chọn hình, tự động xếp hình Chương trình được thiết kế với bàn cờ là một ma trận n*n có hai loại quân, mỗi loại quân lần lượt được chọn nước đi của mình và trạng thái trên bàn

cờ tương ứng với một nút trên cây trò chơi Như vậy, tại mỗi lượt đi bạn phải tìm một trạng thái tốt nhất Cái tốt ở đây chính là do hàm đánh giá chỉ ra mà số lượng trạng thái trên bàn cờ rất nhiều vậy không thể đi tất cả các nút được phải có cách giảm đi số lượng các nút và thuật toán alpha-beta là câu trả lời

Trò chơi xếp hình dựa trên cơ sở bài toán 8 số (bài toán Ta canh) sử dụng thuật toán tối ưu trong trí tuệ nhân tạo để giải trong đó A* là lựa chọn tốt nhất cho ta một kết quả như mong đợi với thời gian thực hiện chấp nhận được

Trang 9

CHƯƠNG 2:

CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ JAVA [2]

2.1.1 Lịch sử phát triển

Java ra đời vào những năm 90 của thế kỉ 20, đầu tiên xuất hiện với cái tên Oak trong một dự án nhằm xây dựng một phần mềm lập trình cho các mặt hàng điện dân dụng với mục tiêu là nhỏ gọn và tương thích với nhiều thiết bị phần cứng khác nhau Lúc đầu sự xuất hiện của Java không gây được nhiều sự chú ý, song đến năm 1993 khi hệ thống web thế giới ra đời, Java lúc đó đã khẳng định

là một công cụ lập trình hoàn hảo trên web Từ đó đến nay Java không ngừng phát triển và trở thành một công cụ lập trình đầy sức mạnh, đặc biệt là trong lĩnh vực phát triển các ứng dụng internet, mà không hề thua kém bất cứ một ngôn ngữ lập trình nào khác

2.1.2 Các đặc điểm của Java

2.1.2.1 Đơn giản

Một trong những mục tiêu khi xây dựng Java là nhỏ gọn và đơn giản, Java không cần một sự hướng dẫn đặc biệt hay kéo dài Mặc dù để đi hết được các ngõ ngách của Java cũng là một vấn đề khó với lập trình viên Khá dễ viết, dễ biên dịch Mặt khác kích thước của Java nhìn chung là nhỏ gọn hơn hẳn VB hay Visual C

2.1.2.2 Hướng đối tượng

Java được thiết kế trên những ngôn ngữ hướng đối tượng mạnh, mọi ứng dụng viết trên Java đều phải được xây dựng trên các đối tượng, và thông qua các đối tượng, chúng ta không thể tạo ra hàm phổ dụng với Java như với C++

Java không hỗ trợ đa kế thừa

Một lớp trong Java bao gồm các vùng hay là các trạng thái của đối tượng, các phương thức (method) là các chức năng của đối tượng dùng để trả lời các tác động của các đối tượng khác

Trang 10

Lớp trong Java có thể là lớp trừu tượng, là những lớp tập hợp những trạng thái chung và các thông tin về ứng xử Tuy vậy lớp dẫn xuất của nó hoàn toàn có thể là những đối tượng thật

2.1.2.3 Phân tán

Java được thiết kế để hỗ trợ các ứng dụng phân tán bằng các lớp mạng thuộc gói java.net Ngoài ra các lớp còn được chuẩn bị để thiết lập các kết nối ở mức ổ cắm, nghĩa là chỉ cần cắm vào hay kết nối được là có thể chạy như trên cùng một máy

2.1.2.4 Thông dịch

Java là một ngôn ngữ thông dịch, Các ứng dụng Java có thể chạy trên các nền phần cứng khác nhau, miễn là có bộ thông dịch, bộ gỡ rối, và thư viện thời gian động Khi đó các lập trình viên chỉ cần chú ý đến các thư viện module dùng chung mà không còn cần lệ thuộc vào ngôn ngữ máy

Java không hỗ trợ biến con trỏ

Trang 11

2.1.2.9 Hiệu quả cao

Với tính năng giao diện đồ họa, sự đơn giản, nhỏ gọn, tính khả chuyển có thể nói Java có tính hiệu quả hơn hẳn C/C++

Chỉ có điều Java tương đối chậm so với những ngôn ngữ khác

2.1.2.10 Đa tuyến

Java hỗ trợ tính năng đa tuyến, cho phép thực hiện nhiều tiến trình song song, và tương hỗ với nhau tránh được tính tuần tự nhàm chán và những thời gian chết trong khi chờ đợi

2.1.2.11 Linh động

Vì dùng trình thông dịch nên Java là ngôn ngữ rất năng động Trong khi chạy môi trường Java có thể tự mở rộng để liên kết với các lớp mới có thể ở một máy chủ ở xa trên mạng

2.1.3 JDK – Java Development Kit - Bộ công cụ phát triển Java

Java được xây dựng chủ yếu trong bộ công cụ phát triển Java JDK như là thư viện chuẩn Trong đó chứa các trình thông dịch, biên dịch, giúp đỡ, soạn tài liệu…Đó chính là cái nền phát triển các ứng dụng của Java

JDK có các hàm giao diện AWT, thư viện dùng lại độc lập JavaBeans, JFC…Java ngày càng phát triển làm cho kích thước của Java phình to hơn, tuy nhiên tốc độ cũng được cải thiện hơn hẳn

Có thể download bộ JDK từ trang web của nhóm JavaTeam:

http://java.sun.com/products/jdk1.5/index.html Java cho phép người lập trình tạo ra các ứng dụng windows không thua bất cứ một ngôn ngữ lập trình nào Java cung cấp cho chúng ta thư viện AWT với đầy đủ các đối tượng cần thiết như: nút nhấn, danh sách, ô văn bản, thanh trượt…để lắp ghép và tạo nên một ứng dụng windows thường có AWT được các nhà thiết kế trừu tượng hóa ở mức cao, nó không phụ thuộc vào bất cứ hệ điều hành nào sử dụng giao diện windows Do đó, ta không cần phải lo lắng về cách thức sử dụng các hàm API nữa, với AWT ta có thể thiết kế được giao diện với các thành phần sau:

Trang 12

Sơ đồ kế thừa của các thành phần trong thư viện AWT

2.1.4 Các đặc điểm cơ bản của các thành phần AWT

Để có thể sử dụng được các thành phần trong thư viện AWT cần phải:

- Khởi tạo nó bằng các phương thức khởi tạo, vd: public Button(String label)

Component

MenuComponent

nt

Checkbox Container

TextComponent Button

Applet

Trang 13

- Gắn nó vào một đối tượng khung chứa cụ thể nào đó, có thể là một Applet, Panel hay một Frame, bằng phương thức public void add(component cp)

- Gắn máy nghe sự kiện tương ứng cho nó, để tiếp nhận các tác động từ người dùng và trả lời cho các tác động ấy

2.1.5 Các thành phần của AWT được sử dụng

2.1.5.1 Khung chứa – Frame

Các khung chứa có thể đưa các đối tượng vào hoặc loại các đối tượng ra bằng các phương thức:

- Public void add(component cp), public synchronized Component add(Component cp)

- Public synchronized void remove(component cp), public synchronized void removeAll()

Khung chứa quản lí việc lưu giữ các đối tượng, nó dùng để cất nhiều đối tượng khác nhau, giống như ta lưu giữ các đối tượng trong một mảng, hay trong một đối tượng vector Mỗi đối tượng mà ta đưa vào khung chứa đều được cấp một chỉ số index

Frame là một trong những thành phần mạnh mẽ nhất của thư viện AWT

Nó giúp tạo ra một cửa sổ hẳn hoi như các ứng dụng windows thường gặp Có thể nói một ứng dụng windows chỉ là một cửa sổ, trong đó chứa các thành phần con khác như nút bấm, hình ảnh…Một cửa sổ như vậy được Java thể hiện qua khung chứa Frame Các ứng dụng windows độc lập thường lấy Frame làm nền

a Tạo đối tượng khung chứa Frame

Tạo đối tượng khung chứa Frame đơn giản bằng cách gọi phương thức khởi dựng của nó: public Frame(), hoặc public Frame(String FrameTitle)

Thường các ứng dụng windows được xây dựng là các dẫn xuất của các khung chứa để tiện cho việc quản lí các đối tượng và thực hiện các thao tác đồ họa, xử lí ảnh…trên đó thông qua phương thức: public void paint(Graphics g) có sẵn của các khung chứa

Chương trình chơi cờ đặt tên là LPGAME là dẫn xuất của đối tượng khung chứa Frame:

Trang 14

//tạo lớp chính là lớp dẫn xuất (lớp con) của Frame

Public class LPGAME extends Frame implements

ActionListener,MouseListener,Runnable,ItemListener{…}

Lớp LPGAME là lớp chính cho nên ta tạo ra đối tượng Frame từ chính hàm main() của lớp LPGAME:

//tạo Frame (cửa sổ) là đối tượng có tên là lp

LPGAME lp=new LPGAME();

b Các đặc điểm của khung chứa Frame

Muốn cho một Frame hiện hữu ta phải định lại kích thước cho cửa sổ bằng phương thức setSize(Dimension), trong đó đối tượng Dimension là một đối tượng xác định kích thước về chiều rộng và chiều cao của đối tượng

//xác định kích thước cho cửa sổ:

lp.setSize(new Dimension(500,600) );

Sau đó đưa cửa sổ ra màn hình

//đưa cửa sổ ra màn hình

lp.setVisible(true);

Nếu muốn cho một Frame được phép thay đổi hoặc không thay đổi kích

cỡ ta dùng hàm: public void setResizable(boolean allow)

//không cho phép thay đổi kích cỡ cửa sổ

Như các khung chứa khác ta có thể đưa các đối tượng cần sử dụng vào trong Frame Trong chương trình không sử dụng phương thức khởi tạo mà tạo một hàm khởi tạo cho cửa sổ để có thể tạo một ván cờ mới nếu muốn Trong hàm khởi tạo các thành phần khác được đưa vào khung chứa

Trang 15

Frame không chỉ có thể giữ các đối tượng khác, mà còn có thể cho phép

vẽ trên đó thông qua hàm: public void paint(Graphics g) Chi tiết về phần đồ họa

sẽ được đề cập trong phần sau

Frame cũng cần được gắn các bộ lắng nghe sự kiện để tiếp nhận và trả lời cho các tác động từ phía người dùng

2.1.5.2 Trình đơn menu

a Các thành phần của trình đơn

Trình đơn mà Java cung cấp sẽ gồm các đối tượng sau:

Mục chọn có khả năng đánh dấu CheckboxMenuItem

Dùng đối tượng MenuBar ta có thể tạo một thanh trình đơn và gắn nó vào một cửa sổ ứng dụng bằng cách:

- Tạo một thanh trình đơn: MenuBar mb=new MenuBar();

- Gắn thanh trình đơn vào cửa sổ bằng phương thức

setMenuBar(MenuBar mb)

//Tạo và gắn MenuBar trong chương trình

MenuBar mb;

mb=new MenuBar();

setMenuBar(mb); //do MenuBar được gắn ngay trong hàm khởi tạo

Sau đó ta tạo ra các trình đơn và gắn nó vào trong thanh trình đơn

//Tạo Menu file và gắn nó vào Menubar mb

Menu m,m1;

m=new Menu("file");

mb.add(m);

Trang 16

Sau khi có menu ta cần phải gắn các mục chọn (item) vào đó, một menu phải có mục chọn thì mới có ý nghĩa Ta có thể đưa mục chọn trực tiếp vào menu hay tạo riêng rồi mới chọn:

- m.add(new MenuItem(“itemname”));

- MenuItem name=new MenuItem(“itemname”);

Mỗi mục chọn có thể ở trạng thái được chọn hoặc không

//Tạo mục chọn và gắn vào menu

MenuItem it1;

it1=new MenuItem("* human");

m1=new Menu("* computer");

Ta có thể thêm đường phân cách: m.addSeparator();

Tạo Menu con, và đưa Menu con vào Menu chính

//Tạo Menu con computer tạo các mục chọn cho nó và đưa vào Menu

//Tạo mục chọn guider có khả năng đánh dấu

Trang 17

CheckboxMenuItem it3;

it3=new CheckboxMenuItem("* guider");

m.add(it3);

//Xác định trạng thái được chọn hay không

it3.getState() trả về giá trị boolean

b Sử dụng trình đơn Menu

Để mỗi mục chọn tương tác và nhận được tình huống khi người dùng chọn

nó ta cần cài đặt giao tiếp ActionListener và gắn nó cho từng mục chọn

//Cài đặt giao tiếp Actionlistener

public class LPGAME extends Frame implements

Các hàm API mà JVM sẽ cung cấp cho chúng ta những chức năng đồ họa thông thường nhất mà bất cứ hệ windows nào cũng phải có, mà không cần quan tâm đến các hàm API riêng của mỗi hệ Lớp thư viện AWT mà ta đã nghiên cứu

ở chương trước sẽ cung cấp các chức năng đồ họa ở mức độ thấp hơn: vẽ từng đường thẳng, từng điểm ảnh…Tất cả các chức năng này được tập trung vào đối tượng đồ họa Graphics và được thể hiện thông qua phương thức paint(Graphics g)

2.1.6.2 Các phương thức paint(), repaint() và update()

Muốn vẽ một cái gì đó lên khung vẽ hay lên khung chứa thì cần phải cài

đặt phương thức: public void paint(Graphics g) {…}

Trang 18

Tất cả các hình ảnh được vẽ lên đều phải dùng đến đối tượng Graphics g, g

ở đây giống như một cây bút vẽ, nếu không có nó ta sẽ không thể vẽ được bất cứ

thứ gì

Nhưng không nhất thiết phải gọi lại phương thức paint vì nó rất chậm, giải

pháp mỗi khi cần vẽ lại là dùng phương thức repaint() để vẽ lại toàn bộ, nếu chỉ

muốn vẽ lại một phần thì dùng phương thức:

Public void repaint(int x, int y, int width, int height): cho phép ta vẽ lại một vùng có tọa độ góc trái là (x,y) và có chiều rộng là width, chiều cao là

height

Phương thức repaint sẽ gọi phương thức update(), phương thức này sẽ

thực hiện một số thao tác như xóa sạch vùng cần vẽ lại, đặt mầu nền…Sau đó

chuyển giao đối tượng Graphics này cho hàm paint

Thường phương thức repaint gây ra hiệu ứng giật màn hình do phải gọi lại

hàm update, do đó người ta có một cách để hạn chế việc màn hình bị giật là viết

đè hàm update trong đó gọi lại hàm paint:

Lớp Graphics cung cấp cho ta một số phương thức để vẽ những hình đồ

họa cơ bản sau:

Hình chữ nhật, đa giác Rectangle, Polygon

Văn bản với các font chữ khác nhau Text và Font

Trang 19

Chú ý rằng hệ tọa độ ở đây ngược với hệ tọa độ thông thường, nếu vectơ

(x,y) bình thường gồm có x: hoành độ, y: tung độ Thì hệ tọa độ khi ta vẽ là ngược

lại

2.1.6.4 Một số phương thức vẽ được sử dụng trong chương trình

- Public void drawLine(int x1, int y1, int x2, int y2): cho phép ta vẽ một

đường thẳng nối hai điểm có tọa độ (x1,y1), (x2,y2)

Trong chương trình phương thức này dùng để vẽ bàn cờ:

//vẽ bàn cờ bằng phương thức drawLine

for(i=1;i<=9;i++)

{ g.setColor(Color.blue);

g.drawLine(50,i*50,450,i*50);

g.drawLine(i*50,50,i*50,450);

}

- Public void drawOval(int x, int y, int width, int height): vẽ hình elip nằm

trọn trong một hình chữ nhật có tọa độ góc trái trên cùng là (x,y), và có chiều dài,

rộng lần lượt là height và width

- Public void filloval(int x, int y, int width, int height): tương tự cũng để

vẽ một hình elip, nhưng hàm bên trên để vẽ “đường”, còn hàm này dùng để tô

màu cho hình elip

Trong chương trình các hàm fillOval dùng để vẽ các ô được phép đi nhằm

trợ giúp người chơi

//vẽ các ô được phép đi

if(sp&&b[i][j]==6&&b[x][y]==1)

{g.setColor(Color.yellow);g.fillOval(i*50+15,j*50+15,20,20); }

Trang 20

else

if(sp&&b[i][j]==7&&b[x][y]==2)

{g.setColor(Color.blue);g.fillOval(i*50+15,j*50+15,20,20);}

- Public void draw3Drect(int x, int y, int width, int height, boolean raised):

vẽ hình chữ nhật 3D, các thông số x, y, width, height tương tự còn raised là giá trị kiểu boolean cho phép đối tượng nổi lên

Hình chữ nhật được dùng trong chương trình để vẽ khung ghi nhận điểm:

width, int heigth, ImageObserver ob)… Để vẽ ảnh vào trong ứng dụng

Tuy nhiên, để vẽ được ảnh cần phải chỉ ra được đường dẫn tới file ảnh cần

vẽ Do đó để vẽ ảnh trong một ứng dụng độc lập ta có cách nạp ảnh là sử dụng phương thức getImage của đối tượng Toolkit

Toolkit là một đối tượng dùng để lấy hay xử lí tài nguyên ở máy cục bộ, vd:

Trang 21

2.1.7 Xử lý sự kiện

2.1.7.1 Khái quát

Đối tượng nào sản sinh ra sự kiện gọi là nơi phát sinh sự kiện, đối tượng nào tiếp nhận và xử lý các sự kiện được phát sinh ra được gọi là đối tượng listener

Ví dụ như khi ta nhấn một nút nhấn là ta đã sinh ra một sự kiện, việc còn lại sau đó là phải “trả lời” các sự kiện đó như thế nào?

Khi tạo một ứng dụng cửa sổ thì các thành phần của cửa sổ phải có khả năng tiếp nhận sự kiện do người dùng tác động và sau đó chương trình sẽ có những hành động để trả lời cho những tác động đó Vì vậy các thành phần AWT cần được gắn với các Listener tương ứng Java đã thiết kế sẵn các đối tượng listener như sau:

Trang 22

ComponentListener Nhận biết các sự kiện khi đối tượng bị

thay đổi kích thước, di chuyển, hiện

ra, dấu đi

FocusListener Nhận biết sự kiện Focus (luôn dành

được nhiều quyền ưu tiên nhất)

MouseListener Nhận biết các sự kiện nhấn, kích

chuột MouseMotionListener Nhận biết các sự kiện di chuyển chuột WindowListener Nhận biết sự kiện một cửa sổ được

đóng lại, mở ra, thu nhỏ…

ActionListener Nhận biết sự kiện mà đối tượng phải

thực thi một tác vụ nào đó AdjustmentListener Nhận biết sự kiện mà đối tượng thay

đổi giá trị ItemListener Nhận biết một sự kiện mà một đối

tượng thay đổi trạng thái

Có hai cách để tạo đối tượng listener để có thể tiếp nhận sự kiện mà hệ thống đem đến:

- Tạo một đối tượng listener riêng biệt, sau đó các thành phần sẽ đăng ký với hệ thống đối tượng listener này

- Chính bản thân các lớp chứa các thành phần sẽ cài đặt cho các giao tiếp listener này và đăng kí với hệ thống thông qua biến this

Trang 23

Public void mouseClicked(MouseEvent ev) {} …}

Ví dụ cách 2:

Public class vd extends Panel implements MouseListener{

Public void mouseClicked(MouseEvent ev) {}

…}

2.7.1.2 MouseListener

MouseListener là listener nhận biết sự kiện nhấn hay kích chuột Bất cứ một listener nào cũng là một interface (giao tiếp) do đó muốn cài đặt nó thì bắt buộc phải hiện thực hóa cho nó

Lớp MouseListener có các hàm như sau:

Public void mouseClicked(MouseEvent ev) Xử lý sự kiện kích chuột

Public voidmousePressed(MouseEvent ev) Xử lý sự kiện nhấn chuột

Public void mouseExited(MouseEvent ev) Xử lý sự kiện con trỏ thoát khỏi

cửa sổ Public void mouseEntered(MouseEvent ev) Xử lý sự kiện con trỏ di chuyển

vào cửa sổ Public void mouseReleased(MouseEvent ev) Xử lý sự kiện người dùng thôi

không kích hay nhấn chuột nữa

//Xử lý sự kiện thôi không nhấn chuột nữa

public void mouseReleased(MouseEvent ev){

sp=false;

repaint();

}

Trang 24

Vì MouseListener là một giao tiếp do đó ta bắt buộc phải cài hết các hàm của nó mặc dù không dùng khi tiến hành hiện thực hóa cho nó Trong chương trình sự kiện kích chuột dùng để nắm bắt và xử lý các tọa độ mà người chơi chọn nước đi trên bàn cờ, đó cũng là tình huống để kiểm tra và xử lý tính hợp lệ của nước đi

Sự kiện nhấn chuột là để dành cho việc trợ giúp người chơi nhận biết được các nước đi có thể có của mình Khi biến sp=true, hàm paint() sẽ vẽ ra các hình tròn có màu tương ứng tại các ô có thể đi của người chơi Khi người chơi thôi không nhấn chuột nữa thì hàm paint() cũng sẽ thôi không vẽ những chỉ dẫn đó nữa

2.7.1.3 ActionListener

Là Listener nhận biết các sự kiện mà đối tượng sẽ phải thực thi một số tác

vụ nào đó ActionListener được gắn cho các đối tượng như nút bấm, mục chọn, ô văn bản…Listener này có phương thức:

public void actionPerformed(ActionEvent ev){}: để xử lý các sự kiện Cài đặt giao tiếp ActionListener trong chương trình nhằm xử lý các tình huống khi người chơi chọn các mục chọn trong menu:

//Xử lý các sự kiện liên quan đến ActionListener

public void actionPerformed(ActionEvent ev){

Trang 25

LPGAME lp=new LPGAME();

lp.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0);

} }

);

2.1.9 Phân tuyến và đa tuyến

2.1.9.1 Khái quát

Một trong những đặc điểm của Java là tích hợp khả năng đa tuyến

Thread là một đơn vị hành động của hệ điều hành, một chương trình có thể

bị chia nhỏ thành nhiều Thread Khi thực hiện đa nhiệm hệ điều hành cho mỗi chương trình một tiến trình, trên đó lại chia thành các Thread Các Thread trong mỗi tiến trình sẽ được thực hiện một cách tuần tự, nhưng là luân phiên giữa các chương trình

Khái niệm về Thread trong Java là tương tự như trong hệ điều hành Trong một chương trình có nhiều Thread các Thread hoạt động gần như đồng thời với nhau và giao tiếp với nhau qua các interface hay đồng bộ hóa

2.1.9.2 Tạo và sử dụng Thread

Có hai cách tạo Thread:

- Tạo lớp con từ lớp Thread của Java

- Cài đặt giao tiếp Runnable

Khi cài đặt giao tiếp Runnable ta phải cài đặt phương thức run() là phương thức mà thực hiện tất cả các việc phải làm của từng Thread

Sau đó ta khai báo Thread như một vùng dữ liệu của lớp

Khởi tạo đối tượng Thread và cho thực hiện bằng phương thức start() Chấm dứt một Thread bằng phương thức stop()

//Hiện thực hóa giao tiếp runnable

Public class LPGAME extends Frame implements

ActionListener,MouseListener,Runnable,ItemListener{}

Trang 26

//Cài đặt phương thức run

public void run(){

đó

Giao tiếp được khai báo gần giống như một lớp với các vùng và các phương thức tuy nhiên các vùng của nó là các hằng, các phương thức là các hàm trừu tượng (abtract) nghĩa là các phương thức của nó đều rỗng Trong các lớp hiện thực hóa các giao diện này ta phải cài đặt tất cả các phương thức của giao diện

//Khai báo một giao tiếp

Public interface giaoTiep{

Static final int bien=2007;

Public int ham(); …}

Giao tiếp cũng có thể là con của một giao tiếp khác, tuy nhiên giao tiếp khác lớp ở chỗ nó có thể được kế thừa từ nhiều giao tiếp

Trang 27

2.2 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO [1]

2.2.1 Lịch sử hình thành và phát triển của trí tuệ nhân tạo

Những năm gần đây, khá nhiều sách, báo công trình nghiên cứu khoa học

đề cập đến các kỹ thuật tính toán, người ta hay nhắc nhiều đến thuật ngữ như: máy tính thông minh, máy tính thế hệ V, hệ chuyên gia, mạng ngữ nghĩa các ngôn ngữ lập trình như LISP, PROLOG mở đường áp dụng hàng loạt các hệ thống chương trình có khả năng “thông minh”

Trước đây, khi nói đến trí tuệ nhân tạo (TTNT) người ta thường quan tâm đến việc tạo lập các máy tính có khả năng “suy nghĩ” Thậm trí trong một phạm

vi hẹp nào đó, có thể cạnh tranh hoặc vượt quá khả năng bộ não của con người Nhưng hy vọng này trong một thời gian dài đã ảnh hưởng rất nhiều đến các nghiên cứu trong phòng thí nghiệm Mặc dù những mô hình tương tự như máy thông minh đã được đưa ra hàng nhiều năm trước, nhưng chỉ từ khi Alan Turing công bố những kết quả nghiên cứu quan trọng đầu tiên, người ta mới bắt đầu thực

sự nghiên cứu đến các vấn đề TTNT một cách nghiêm túc Phát hiện của Turing cho rằng chương trình có thể được lưu trữ trong bộ nhớ để sau đó được thực hiện trên cơ sở các phép toán cơ bản thao tác với các bit 0,1 Điều này đã tạo lên nền tảng của máy tính hiện đại việc lưu trữ chương trình trong máy cho phép thay đổi chức năng của nó một cách nhanh chóng và dễ dàng thông qua việc nạp một chương trình mới vào bộ nhớ Theo một nghĩa nào đó, khả năng làm cho máy tính có khả năng học và suy nghĩ Đó chính là một trong những biểu hiện quan trọng đầu tiên của những máy tính được trang bị TTNT

Năm 1956, chương trình dẫn xuất kết luận trong hệ hình thức đã được công bố Tiếp theo đó, năm 1959 chương trình chứng minh các định lý hình học phẳng và chương trình giải quyết bài toán vạn năng (GPS- General Problem Solving) đã được đưa ra Tuy vậy chỉ cho đến khoảng năm 1960 McCathy ở MIT (Massachussets Instutite Of Technology) đưa ra ngôn ngữ lập trình đầu tiên dùng cho trí tuệ nhân tạo LISP (List Procesing), các nghiên cứu về TTNT mới phát triển mạnh mẽ, thuật ngữ TTNT do Marvin Misky một chuyên gia nổi tiếng cũng

ở MIT đưa ra năm 1961 trong một bài báo “Steps Forwards To Artificial

Trang 28

Intelligence” Những năm 60 có thể xem là một mốc quan trọng trong quá trình xây dựng các máy có khả năng suy nghĩ Các chương trình chơi cờ và các chương trình chứng minh định lý toán học đầu tiên cũng được công bố trong thời gian này

Đến cuối những năm 70, một số những nghiên cứu cơ bản trong các lĩnh vực như xử lý ngôn ngữ tự nhiên, biểu diễn tri thức, lý thuyết giải quyết vấn đề

đã đem lại diện mạo mới cho TTNT Thị trường tin học đã bắt đầu đón nhận những sản phẩm TTNT ứng dụng đầu tiên mang tính thương mại Đó là các hệ chuyên gia được áp dụng trong các lĩnh vực khác nhau Hệ chuyên gia là các phần mềm máy tính, chứa các thông tin và tri thức về một lĩnh vực cụ thể nào đó

có khả năng giải quyết những yêu cầu của người dùng ở mức độ nào đó với trình

độ như một chuyên gia có kinh nghiệm lâu năm Một trong những hệ chuyên gia (HCG) đầu tiên được sử dụng thành công trong thực tế là hệ MYCIN Được thiết

kế và cài đặt tại trường đại học Stanford

Một sự kiện quan trọng đánh dấu sự phát triển của khoa học TTNT là sự

ra đời của ngôn ngữ PROLOG do Alain Calmerauer đưa ra vào năm 1972 Năm

1981, dự án của Nhật Bản xây dựng các máy tính thế hệ thứ V lấy ngôn ngữ PROLOG như là ngôn ngữ cơ sở đã làm thay đổi khá nhiều tình hình phát triển TTNT ở Mỹ cũng như châu Âu

Giai đoạn 1981 trở đi người ta cảm nhận khá rõ nét rằng các chuyên gia TTNT đang dần chuyển các kết quả nghiên cứu từ phòng thí nghiệm sang cài đặt các ứng dụng cụ thể Có thể nói đây là giai đoạn cạnh tranh ráo riết của các công

ty, các viện nghiên cứu hàng đầu nhằm đưa ra thị trường các sản phẩm phần mềm ứng dụng kỹ thuật TTNT

Cuối những năm 80, đầu những năm 90 thị trường các sản phẩm dân dụng

đã có khá nhiều sản phẩm ở trình độ cao như máy giặt, máy ảnh,… sử dụng TTNT Các hệ thống nhận dạng và xử lý hình ảnh, tiếng nói đang thúc đẩy sự phát triển kỹ thuật mạng Neuron Sự xích lại của hai cách tiếp cận: Tiếp cận mờ trong lập luận xấp xỉ và kỹ thuật mạng Neuron đã và đang gây được sự quan tâm đặc biệt của các chuyên gia tin học Bên cạnh sự xuất hiện của các HCG, các ứng

Trang 29

dụng công nghiệp và quản lý xã hội là sự ra đời của các hệ thống xử lý tri thức -

dữ liệu tích hợp

Thế giới đang chuyển mình trong những nghiên cứu về TTNT Tuy vậy câu hỏi liệu kỹ thuật TTNT có tạo nên những bước nhảy vọt trong công nghệ tin học, đặc biệt là trong công nghệ máy tính như người ta đã mong đợi hay không vẫn chưa có lời giải đáp thoả đáng

2.2.2 Định nghĩa trí tuệ nhân tạo

Các tác giả đã đưa ra rất nhiều định nghĩa về trí tuệ nhân tạo Em xin dẫn

ra dưới đây một số định nghĩa:

 “Trí tuệ nhân tạo là sự nghiên cứu các năng lực trí tuệ thông qua việc sử dụng các mô hình tính toán – Charniak and McDormott, 1985”

 “Trí tuệ nhân tạo là nghệ thuật tạo ra các máy thực hiện các chức năng đòi hỏi sự thông minh khi được thực hiện bởi con người – Kurzweil, 1990”

 “Trí tuệ nhân tạo là lĩnh vực nghiên cứu tìm cách giải thích và mô phỏng các hành vi thông minh trong thuật ngữ các quá trình tính toán – Schalkoff, 1990”

 “Trí tuệ nhân tạo là sự nghiên cứu các tính toán để có thể nhận thức lập luận và hành động – Winston, 1992”

 “Trí tuệ nhân tạo là một nhánh của khoa học máy tính liên quan tới sự tự động hoá các hành vi thông minh – luger and Stubblefield, 1993”

2.2.3 Thử nghiệm Turing

Alan Turing (1950) đã xác định các hành vi thông minh như là các hành vi trong các nhiệm vụ nhận thức đạt tới mức độ có thể đánh lừa được con người Sau đây là dạng tổng quát của thử nghiệm Turing Một người hỏi là người ngồi ở một phòng Đối tác của người hỏi là một máy tính được đặt ở phòng khác Hai bên trao đổi thông tin với nhau thông qua các phương tiện truyền tin hiện đại Nếu máy tính có thể làm cho người hỏi tưởng lầm là có người khác đang nói chuyện với mình thì máy tính được xem là thông minh

Bây giờ chúng ta xét xem, để thực hiện được các hành vi được xem là thông minh, các tác nhân thông minh (TNTM) cần có khả năng gì?

Trang 30

• TNTM cần có khả năng ghi nhớ và lập luận Nó sử dụng các tri thức đã lưu trữ, và bảng lập luận để rút ra các kết luận đáp ứng các câu hỏi mà người hỏi đặt ra

Biểu diễn tri thức và lập luận là lĩnh vực nghiên cứu trung tâm của

có khả năng học để có thể đưa ra hành động thích ứng với hoàn cảnh mới

Học máy là một lĩnh vực nghiên cứu của TTNT đang phát triển mạnh mẽ

và có nhiều ứng dụng trong các lĩnh vực khác nhau, chẳng hạn trong khám phá tri thức và khai thác dữ liệu

• Người hỏi có thể đưa ra một số hình ảnh về các đối tượng và kiểm tra khả năng nhận biết các đối tượng đó của TNTM

Nhìn máy là lĩnh vực nghiên cứu để máy tính có thể hiểu được cấu trúc và

các tính chất của các đối tượng trong không gian ba chiều từ các hình ảnh hai chiều

• Khi được cho các nhiệm vụ cần thực hiện, TNTM cần có khả năng suy

ra các mục đích cần đạt được và đưa ra một dãy các hành động mà nó cần thực hiện để đạt được các mục đích đó Quá trình này được gọi là lập kế hoạch

Lập kế hoạch là một lĩnh vực nghiên cứu quan trọng của TTNT

2.2.4 Khái quát các lĩnh vực ứng dụng của trí tuệ nhân tạo

Hai mối quan tâm nền tảng nhất của các nhà nghiên cứu TTNT là biểu diễn tri thức và tìm kiếm Sự quan tâm thứ nhất chú ý đến vấn đề nắm bắt theo một ngôn ngữ hình thức Trong khi, tìm kiếm là lĩnh vực giải quyết vấn đề theo cách khảo sát có hệ thống một không gian trạng thái bài toán

Trang 31

Giống như tất cả các ngành khoa học khác, TTNT cũng được phân thành các ngành con Trong khi chia sẻ một tiếp cận giải quyết vấn đề cơ bản, các ngành con này quan tâm đến các ứng dụng khác nhau như: Tìm kiếm, trò chơi, Robot đưa thư, hệ chuyên gia…

2.2.4.1 Trò chơi

Ngay thời gian đầu của việc nghiên cứu vấn đề tìm kiếm trong không gian trạng thái, người ta đã tiến hành thử nghiệm bằng cách sử dụng các trò chơi thông dụng có bàn cờ như cờ vây, cơ vua và trò đố 15 ô Ngoài sức quyến rũ do tính chất trí óc vốn có trong các trò chơi có bàn cờ, có nhiều tính nhất định làm cho chúng trở thành một đối tượng lý tưởng của thời kỳ này Hầu hết các trò chơi đều sử dụng một tập hợp các luật chơi được xác định rõ ràng Điều này làm cho việc phát sinh không gian tìm kiếm trở lên dễ dàng và giải phóng nhiều nghiên cứu khỏi những sự mơ hồ và phức tạp vốn có của những bài toán ít cấu trúc hơn Hình dạng của bàn cờ sử dụng trong các trò chơi này dễ dàng biểu diễn vào máy tính, trong khi không đòi hỏi một hình thức khó hiểu cần thiết nào để nắm bắt những tinh tế và ngữ nghĩa trong những lĩnh vực bài toán phức tạp hơn Do có thể chơi các trò chơi một cách dễ dàng nên việc thử nghiệm các chương trình chơi trò chơi không phải trả một gánh nặng nào về tài chính hay đạo đức

Các trò chơi có thể phát sinh ra một số lượng không gian tìm kiếm cực kỳ lớn Những không gian này đủ lớn và phức tạp để đòi hỏi những kỹ thuật mạnh nhằm quyết định xem những lựa chọn nào cần được khảo sát trong không gian bài toán Những kỹ thuật này được gọi là heuristic, nhiều thứ mà chúng ta gọi là thông minh thuộc về các heuristic được người sử dụng để giải quyết các vấn đề

Hầu hết chúng ta đều có một số kinh nghiệm với những trò chơi đơn giản này, nên chúng ta cũng có khả năng nghĩ ra và kiểm nghiệm tính hiệu quả của các heuristic của chính mình Chúng ta không cần đi tìm và hỏi ý kiến chuyên gia trong một số lĩnh vực chuyên môn sâu như y học hay toán học (Các trò chơi cờ, xếp hình là một ngoại lệ dễ thấy với qui tắc này) Vì những lý do đó, các trò chơi cung cấp một không gian mênh mông cho việc nghiên cứu các tìm kiếm heuristic Các chương trình chơi trò chơi, trái ngược với tính đơn giản của chúng,

Ngày đăng: 02/08/2016, 22:06

HÌNH ẢNH LIÊN QUAN

Sơ đồ kế thừa của các thành phần trong thư viện AWT - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Sơ đồ k ế thừa của các thành phần trong thư viện AWT (Trang 12)
Hình chữ nhật, đa giác  Rectangle, Polygon - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình ch ữ nhật, đa giác Rectangle, Polygon (Trang 18)
Hình 5: Mô hình cách đánh giá các vị trí trên bàn cờ. - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 5 Mô hình cách đánh giá các vị trí trên bàn cờ (Trang 44)
Hình 1  Trạng thái ban đầu của bàn cờ - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 1 Trạng thái ban đầu của bàn cờ (Trang 50)
Hình 2  Các nước đi hợp lệ và không hợp lệ. - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 2 Các nước đi hợp lệ và không hợp lệ (Trang 51)
Hình 3  Hình ảnh tổng quan về chương trình. - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 3 Hình ảnh tổng quan về chương trình (Trang 53)
Hình 4  Hướng dẫn về nước đi cho người chơi cầm quân màu xanh. - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 4 Hướng dẫn về nước đi cho người chơi cầm quân màu xanh (Trang 54)
Hình 1:  Xếp tranh rùa - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 1 Xếp tranh rùa (Trang 59)
Hình 3: Xếp hình con bướm - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 3 Xếp hình con bướm (Trang 60)
Hình 2: Xếp tranh hoa - Áp dụng các thuật toán trong trí tuệ nhân tạo xây dựng các chương trình trò chơi bằng ngôn ngữ lập trình java
Hình 2 Xếp tranh hoa (Trang 60)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w