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

Một số thuật toán trong trò chơi đối kháng và xây dựng game cờ caro

58 2,1K 3

Đ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 58
Dung lượng 834,19 KB

Nội dung

Do phải tính cả khả năng chống trả của đối phương nên không dùng được các thuật toán tìm kiếm thông thường mà phải dùng một thuật toán tìm kiếm riêng cho cây trò chơi, đó là thuật toán A

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

****************

NGUYỄN THỊ MAI

MỘT SỐ THUẬT TOÁN TRONG TRÒ CHƠI ĐỐI KHÁNG VÀ

XÂY DỰNG GAME CỜ CARO

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Tin học

HÀ NỘI – 2013

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

****************

NGUYỄN THỊ MAI

MỘT SỐ THUẬT TOÁN TRONG TRÒ CHƠI ĐỐI KHÁNG VÀ

XÂY DỰNG GAME CỜ CARO

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Tin học

Người hướng dẫn khoa học

TH.S LƯU THỊ BÍCH HƯƠNG

HÀ NỘI – 2013

Trang 3

LỜI CẢM ƠN

Trong suốt quá trình học tập và làm khóa luận, em nhận được sự giúp

đỡ, tạo điều kiện của các thầy, cô giáo khoa Công nghệ thông tin Bên cạnh

đó là sự giúp đỡ rất nhiều của người thân, bạn bè để em có được kết quả ngày hôm nay

Trước hết em xin tỏ lòng kính trọng cảm ơn cô giáo Th.S Lưu Thị Bích Hương, cô đã tận tình chỉ bảo, hướng dẫn cho em hoàn thành được bài khóa luận này

Xin cảm ơn các thầy, cô giáo trong khoa Công nghệ thông tin – trường Đại học sư phạm Hà Nội 2, các bạn trong lớp K35 – Tin học đã tận tình giúp

đỡ, giới thiệu tài liệu, sách tham khảo để khóa luận được hoàn thành đúng hạn

Cuối cùng là lòng biết ơn đến sự quan tâm, chăm sóc và tạo điều kiện của gia đình để con tập trung vào việc học tập và hoàn thành bản khóa luận này

Do thời gian thực hiện không nhiều nên khóa luận không tránh khỏi những thiếu sót Rất mong nhận được sự đóng góp của thầy cô giáo và các bạn để khóa luận được hoàn thiện hơn

Xin chân thành cảm ơn!

Hà Nội, tháng 5 năm 2013

Sinh viên

NGUYỄN THỊ MAI

Trang 4

LỜI CAM ĐOAN

Tên em là: NGUYỄN THỊ MAI

Sinh viên lớp: K35 – Tin học, khoa Công nghệ thông tin, trường Đại học sư phạm Hà Nội 2

Em xin cam đoan:

1 Đề tài: “Một số thuật toán trong trò chơi đối kháng và xây dựng game cờ caro” là sự nghiên cứu của riêng em, dưới sự hướng dẫn của cô giáo Th.S Lưu Thị Bích Hương

2 Khóa luận hoàn toàn không sao chép của tác giả nào khác

Nếu sai em xin hoàn toàn chịu trách nhiệm

Hà Nội, tháng 5 năm 2013 Người cam đoan

NGUYỄN THỊ MAI

Trang 5

MỤC LỤC

LỜI CẢM ƠN 1

LỜI CAM ĐOAN 2

MỤC LỤC 3

DANH MỤC HÌNH VẼ 5

MỞ ĐẦU 6

CHƯƠNG 1:TỔNG QUAN VỀ CÁC VẤN ĐỀ TÌM KIẾM 9

1.1 Bài toán tìm kiếm và không gian trạng thái 9

1.1.1.Bài toán tìm kiếm 9

1.1.2.Không gian tìm kiếm 11

1.2 Các kỹ thuật tìm kiếm cơ bản 15

1.2.1.Tìm kiếm không có thông tin 15

1.2.2.Tìm kiếm có thông tin 18

1.2.3.Tìm kiếm đối kháng 19

CHƯƠNG 2: THUẬT TOÁN TÌM KIẾM MINIMAX VÀ ALPHA – BETA 24

2.1 Thuật toán Minimax 24

2.1.1.Ý tưởng 24

2.1.2.Thuật toán 29

2.1.3.Áp dụng thuật toán Minimax đến độ sâu lớp cố định Kuretoer 35

2.1.4.Đánh giá 37

2.2 Thuật toán Alpha - beta 38

2.2.1.Ý tưởng 38

2.2.2.Thuật toán 39

2.2.3.Đánh giá 42

2.3 So sánh hai thuật toán 46

CHƯƠNG 3:XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG 48

3.1 Phát biểu bài toán 48

Trang 6

3.2.1.Thuật toán sinh nước đi 48

3.2.2.Hàm lượng giá thế cờ 51

3.3 Cài đặt chương trình 53

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 54

TÀI LIỆU THAM KHẢO 56

Trang 7

DANH MỤC HÌNH VẼ

Hình 1.1: Mô hình chung của các vấn đề-bài toán 12

Hình 1.2: Trạng thái ban đầu và trạng thái kết thúc của bài toán 8 số 14

Hình 1.3: Cây trò chơi 21

Hình 1.4: Cây tìm kiếm và sự bùng nổ tổ hợp 22

Hình 2.1: Một phần cây trò chơi trong trò chơi Tic-tac-toe 26

Hình 2.2: Không gian trạng thái của trò chơi Nim 28

Hình 2.3: Minh họa chiến lược chơi cờ của người lẫn máy 30

Hình 2.4: Minimax đối với không gian trạng thái giả 36

Hình 2.5: Minimax hai lớp áp dụng vào nước đi mở đầu trò chơi Tic-tac-toe 36

Hình 2.6: Không gian trạng thái của trò chơi Nim 39

Hình 2.7: Minh họa giải thuật Alpha-beta 40

Hình 2.8: Một cây trò chơi có độ sâu 3 và hệ số nhánh 3 44

Hình 2.9: Khảo sát sự bùng nổ tổ hợp 47

Trang 8

MỞ ĐẦU

1 Lí do chọn đề tài

Lý thuyết trò chơi thường được coi là một nhánh của toán học ứng dụng và kinh tế học ứng dụng nhằm nghiên cứu về các tình huống trong đó các bên tham gia trò chơi áp dụng những chiến lược ra quyết định nhằm tối

ưu hóa kết quả nhận được Ban đầu lý thuyết trò chơi được phát triển như một công cụ để nghiên cứu hành vi kinh tế học, ngày nay lý thuyết này được sử dụng trong nhiều ngành khoa học như Sinh học, Triết học, Chính trị học… Đặc biệt lý thuyết trò chơi đã 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

Trí tuệ nhân tạo đã vận dụng lý thuyết trò chơi để nghiên cứu về các trò chơi đối kháng và thiết kế chương trình chơi cờ giữa Người và Máy tính Do bùng nổ tổ hợp quá lớn của cây trò chơi mà cả người và máy không thể (và không bao giờ) có thể tìm kiếm vét cạn (hết mọi khả năng) Do đó phương pháp tìm kiếm duy nhất là chỉ tìm kiếm đến một độ sâu giới hạn nào đó và chọn nước đi dẫn đến một thế cờ có lợi nhất cho mình Do phải tính cả khả năng chống trả của đối phương nên không dùng được các thuật toán tìm kiếm thông thường mà phải dùng một thuật toán tìm kiếm riêng cho cây trò chơi,

đó là thuật toán Alpha - Beta Nhiều tình huống trong thực tế đặc biệt là trong lĩnh vực Kinh tế, Chính trị có thể nhìn nhận như một trò chơi đối kháng Do

đó việc nghiên cứu chiến lược tìm kiếm nước đi cho dạng trò chơi này có thể mang lại những ý nghĩa thực tiễn nhất định

Xuất phát từ tính thực tiễn thiết thực đó em xin chọn đề tài: “Một số

thuật toán trong trò chơi đối kháng và xây dựng game cờ caro”

Trang 9

2 Mục đích nghiên cứu

Mục đích nghiên cứu của đề tài này là tìm hiểu hai thuật toán Minimax

và Alpha – beta, áp dụng thuật toán Alpha – beta để xây dựng được một game caro giữa người và máy tính

3 Nhiệm vụ

- Nghiên cứu về các vấn đề tìm kiếm

- Nghiên cứu tìm hiểu thuật toán Minimax và thuật toán cải tiến của nó là Alpha - beta

- Tìm hiều ngôn ngữ lập trình Java để tiến hành cài đặt game cờ caro

- Xây dựng game cờ caro

4 Phương pháp nghiên cứu

a Phương pháp nghiên cứu lý luận

Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ sở lý thuyết của đề tài và các biện pháp cần thiết để giải quyết các vấn đề của đề tài

b Phương pháp chuyên gia

Tham khảo ý kiến của các chuyên gia để có thể thiết kế chương trình phù hợp với yêu cầu thực tiễn Nội dung xử lý nhanh đáp ứng được yêu cầu ngày càng cao của người sử dụng

Trang 10

6 Giả thuyết khoa học

Nếu đề tài “Một số thuật toán trong trò chơi đối kháng và xây dựng game cờ caro” được nghiên cứu thì sẽ góp phần làm sáng tỏ lý thuyết về trò chơi đối kháng và tạo cơ sở để phát triển các trò chơi khác

7 Cấu trúc của khóa luận

Ngoài phần mở đầu và phần kết luận, khóa luận được tổ chức như sau:

- Chương 1 trình bày một cách tổng quan về các vấn đề tìm kiếm: bài toán tìm kiếm, biểu diễn vấn đề bằng không gian trạng thái và các kỹ thuật tìm kiếm cơ bản

- Chương 2 trình bày thuật toán tìm kiếm Minimax và thuật toán cải tiến Alpha-beta áp dụng cho các trò chơi đối kháng Mỗi thuật toán được trình bày gồm các nội dung: ý tưởng, thủ tục thực hiện thuật toán

và đánh giá, so sánh hai thuật toán

- Chương 3 trình bày một ứng dụng của thuật toán tìm kiếm Alpha - beta

áp dụng cho game cờ caro

Trang 11

CHƯƠNG 1 TỔNG QUAN VỀ CÁC VẤN ĐỀ TÌM KIẾM

1.1 Bài toán tìm kiếm và không gian trạng thái

1.1.1 Bài toán tìm kiếm

Tìm kiếm luôn là thao tác nền móng cho rất nhiều tác vụ tính toán Các bài toán tìm kiếm bao gồm việc tìm cách tốt nhất để thu được thông tin cần cho một quyết định Mỗi bài toán bất kỳ đều chứa trong đó một bài toán con tìm kiếm theo một chiều hướng nào đó, các tình huống tồn tại ở đó việc tìm kiếm cần phải xử lý là: kiểm tra các tài khoản, thanh tra và điều khiển chất lượng…

Một cách tổng quát, tìm kiếm có thể hiểu là tìm một hoặc một số đối tượng thỏa mãn những đòi hỏi nào đó trong tập hợp rộng lớn các đối tượng

Có rất nhiều vấn đề mà việc giải quyết nó được quy về vấn đề tìm kiếm Trong các trò chơi, chẳng hạn cờ vua, cờ caro vấn đề tìm kiếm được thể hiện ở chỗ trong số rất nhiều nước đi được phép thực hiện, phải tìm ra các nước đi dẫn tới tình thế có ưu thế thắng Chứng minh định lý cũng có thể xem như vấn đề tìm kiếm

Có nhiều phát biểu bài toán tìm kiếm khác nhau Trong phần này xem xét một số phát biểu của bài toán tìm kiếm như sau:

Trong lý thuyết tính toán, một bài toán tìm kiếm là một loại bài toán tính toán được biểu diễn bởi một quan hệ nhị phân Nếu R là một quan hệ nhị phân sao cho field(R)  Γ+ và T là một máy Turing, thì T tính hàm như sau:

- Nếu mỗi x có một số giá trị y thỏa mãn R(x,y) thì T truy nhập vào với đầu

ra z thỏa mãn R(x,z) (có thể có nhiều y, và T chỉ cần một trong số chúng)

- Nếu với giá trị x mà không có giá trị y thỏa mãn R(x,y) thì T loại bỏ x Chú ý rằng đồ thị của hàm bộ phận là một quan hệ nhị phân, và nếu T tính một hàm bộ phận thì hầu hết mọi giá trị có thể cho đầu ra

Trang 12

Một quan hệ R có thể được biểu diễn như một bài toán tìm kiếm, và một máy Turing tính R còn được gọi để giải quyết nó Mọi bài toán tìm kiếm đều tương ứng với bài toán quyết định, cụ thể là:

L(R) = {x | y R(x,y)}

Tìm kiếm nghĩa là tìm một hay nhiều mẩu thông tin đã được lưu trữ Thông thường, thông tin được chia thành các mẩu tin (record), mỗi mẩu tin đều có một KHÓA (key) dùng cho việc tìm kiếm Vì vậy sẽ luôn có một khoá cho trước giống như khoá của các mẩu tin cần tìm Mỗi mẩu tin được tìm thấy

sẽ chứa toàn bộ thông tin để cung cấp cho một quá trình xử lý nào đó Việc tìm kiếm được áp dụng rất đa dạng và rộng rãi

Ví dụ: Một ngân hàng nắm giữ tất cả thông tin của rất nhiều tài khoản khách hàng và cần tìm kiếm để kiểm tra các biến động Một hãng Bảo hiểm hay một hệ thống trợ giúp bán vé xe, vé máy bay… Việc tìm kiếm thông tin

để đáp ứng việc sắp đặt ghế và các yêu cầu tương tự như vậy là thực sự cần thiết

Một phát biểu bài toán tìm kiếm thường được sử dụng nhất là: “Cho

một bảng gồm n bản ghi R 1 , R 2 ,… , R n Mỗi bản ghi R i (1 i n) tương ứng với

một khóa k i Hãy tìm bản ghi có giá trị khóa tương ứng bằng X cho trước X

được gọi là khóa tìm kiếm hay đối trị tìm kiếm Công việc tìm kiếm sẽ hoàn thành khi có một trong hai tình huống sau đây xảy ra

 Tìm được bản ghi có giá trị khóa tương ứng bằng X, khi đó phép tìm

kiếm được thỏa (Successful)

 Không tìm được bản ghi nào có khóa bằng X cả phép tìm kiếm không

thỏa (unsuccessful)

Thuật ngữ thường được dùng trong việc mô tả cấu trúc dữ liệu của việc tìm kiếm là TỪ ĐIỂN và BẢNG KÝ HIỆU Một ví dụ điển hình như xây dựng hệ thống tra từ điển Tiếng Anh chẳng hạn Ở đây, “khoá” là từ và “mẩu tin” là diễn giải cho từ đó, mỗi mẩu tin chứa định nghĩa, cách phát âm và các

Trang 13

thông tin khác BẢNG KÝ HIỆU chính là từ điển cho chương trình và các mẩu tin chứa thông tin mô tả đối tượng được đặt tên

Một cách tổng quát, bài toán tìm kiếm có thể được phát biểu dựa vào

không gian trạng thái với bộ 4 (S, T o , Op, T G ) hoặc bộ 5: (S, T 0 , Op, T G ,, Pcost)

Trong đó: S là tập các trạng thái, T 0 là trạng thái ban đầu, Op là tập các

toán tử hay tập các phép chuyển trạng thái mà có thể chuyển một trạng thái

này sang trạng thái khác, T G là trạng thái đích Pcost là chi phí đường đi Mục

đích của bài toán là tìm ra cách chuyển từ trạng thái ban đầu sang trạng thái

đích, nếu theo bộ 5 có thêm Pcost thì bài toán cần tìm nghiệm tốt nhất nghĩa

là tìm cách chuyển từ trạng thái ban đầu đến trạng thái đích với chi phí nhỏ nhất (hoặc lớn nhất)

Phát biểu chi tiết hơn của cách biểu diễn này sẽ được xét trong mục không gian tìm kiếm dưới đây

1.1.2 Không gian tìm kiếm

Khái niệm về không gian tìm kiếm

Khi muốn giải quyết một vấn đề nào đó bằng tìm kiếm, trước hết phải xác định không gian tìm kiếm Không gian tìm kiếm bao gồm tất cả các đối tượng cần quan tâm để tìm ra trong đó đối tượng yêu cầu Đó có thể là không gian liên tục, chẳng hạn không gian các véctơ thực n chiều; hoặc cũng có thể

là không gian các đối tượng rời rạc như tập các nút của đồ thị hay tập các lời giải của bài toán

Một cách chung nhất, nhiều bài toán phức tạp đều có dạng "tìm đường

đi trong đồ thị" hay nói một cách hình thức hơn là "xuất phát từ một đỉnh của

một đồ thị, tìm đường đi hiệu quả nhất đến một đỉnh nào đó" Một phát biểu

khác thường gặp của dạng bài toán này là:

Trang 14

Cho trước hai trạng thái T 0 và T G hãy xây dựng chuỗi trạng thái T 0 , T 1 ,

T 2 ,…, T n-1 , T n = T G sao cho  

n

i

T t P

1

1

i , ) T ( cos thỏa mãn một điều kiện cho trước (thường là nhỏ nhất)

Trong đó, T i thuộc tập hợp S (gọi là không gian trạng thái – state space) bao gồm tất cả các trạng thái có thể có của bài toán và Pcost(T i-1 ,T i) là chi phí

để biến đổi từ trạng thái T i-1 sang trạng thái T i Tuy nhiên, từ một trạng thái

T i-1 có nhiều cách để biến đổi sang trạng thái T i Khi nói đến một biến đổi cụ

thể từ T i-1 sang T i dùng thuật ngữ hướng đi (với ngụ ý nói về sự lựa chọn)

Hình 1.1: Mô hình chung của các vấn đề - bài toán

phải giải quyết bằng phương pháp tìm kiếm lời giải

Không gian tìm kiếm là một tập hợp trạng thái - tập các nút của đồ thị Chi phí cần thiết để chuyển từ trạng thái này sang trạng thái khácđược biểu diễn dưới dạng các con số nằm trên cung nối giữa hai nút tượng trưng cho hai trạng thái

Biểu diễn vấn đề trong không gian trạng thái

Xét việc biểu diễn một vấn đề trong không gian trạng thái sao cho việc giải quyết vấn đề được quy về việc tìm kiếm trong không gian trạng thái Một phạm vi rộng lớn các vấn đề, đặc biệt các câu đố, các trò chơi, có thể mô tả bằng cách sử dụng khái niệm trạng thái và phép chuyển trạng thái hay là phép chuyển (phép biến đổi trạng thái)

T 0

T G

Trang 15

Ví dụ: Trong trò chơi cờ vua, mỗi cách bố trí các quân trên bàn cờ là một trạng thái Trạng thái ban đầu là sự sắp xếp các quân lúc đầu cuộc chơi Mỗi nước đi hợp lệ là một phép chuyển trạng thái, nó biến đổi một trạng thái trên bàn cờ thành một trạng thái khác

Như vậy muốn biểu diễn một vấn đề trong không gian trạng thái cần xác định các yếu tố sau:

- Trạng thái ban đầu

- Tập hợp các phép chuyển trạng thái Trong đó mỗi toán tử hay phép chuyển mô tả một hành động hoặc một phép biến đổi có thể đưa một trạng thái tới một trạng thái khác

Tập hợp tất cả các trạng thái có thể đạt tới từ trạng thái ban đầu bằng cách áp dụng một dãy phép chuyển trạng thái, lập thành không gian trạng thái của bài toán

Ký hiệu không gian trạng thái là S, trạng thái ban đầu là T 0 (T 0S)

Mỗi phép chuyển R có thể xem như một ánh xạ R: SS Nói chung R là một

ánh xạ không xác định khắp nơi trên S

- Một tập hợp T G các trạng thái kết thúc (trạng thái đích) T G là tập con

của không gian S Trong nhiều vấn đề (chẳng hạn các loại cờ) có thể có nhiều

trạng thái đích và không thể xác định trước được các trạng thái đích Nói chung trong phần lớn các vấn đề hay chỉ có thể mô tả các trạng thái thỏa mãn một số điều kiện nào đó

Khi biểu diễn một vấn đề thông qua các trạng thái và các phép chuyển, thì việc tìm nghiệm của bài toán được quy về việc tìm đường đi từ trạng thái ban đầu tới trạng thái đích (Một đường đi trong không gian trạng thái là một dãy phép chuyển dẫn một trạng thái tới một trạng thái khác)

Biểu diễn không gian trạng thái bằng đồ thị định hướng, trong đó mỗi

đỉnh đồ thị tương ứng với một trạng thái Nếu có phép chuyển R biến đổi trạng thái u thành trạng thái v, thì có cung gán nhãn R đi từ đỉnh u tới đỉnh v

Trang 16

Khi đó một đường đi trong không gian trạng thái sẽ là một đường đi trong đồ thị

Ví dụ: Bài toán 8 số Cho bảng 3x3 ô và 8 quân mang số hiệu từ 1 đến

8, còn lại một ô trống Mỗi quân ở cạnh ô trống có thể được chuyển dịch tới ô trống đó Yêu cầu của bài toán là tìm ra một dãy các chuyển dịch để biến đổi trạng thái ban đầu của bảng (hình bên trái) thành một trạng thái xác định nào

đó, chẳng hạn trạng thái trong hình bên phải Xem hình minh họa dưới đây:

Hình 1.2: Trạng thái ban đầu và trạng thái kết thúc của bài toán 8 số Trong bài toán này, trạng thái ban đầu là trạng thái ở bên trái hình, trạng thái kết thúc ở bên phải hình Tương ứng với các quy tắc chuyển dịch của các

quân có bốn phép chuyển: up (đẩy quân lên ), down (đẩy quân xuống ), left

(đẩy quân sang trái ), right (đẩy quân sang phải ) Rõ ràng là, các phép chuyển này chỉ là các phép chuyển bộ phận; chẳng hạn, từ trạng thái ban đầu

(hình bên trái), chỉ có thể áp dụng các phép chuyển down, left, right

Trong ví dụ trên việc tìm ra một biểu diễn thích hợp để mô tả các trạng thái của vấn đề là khá dễ dàng và tự nhiên Song trong nhiều vấn đề việc tìm hiểu được biểu diễn thích hợp trong các trạng thái của vấn đề là hoàn toàn không đơn giản Việc tìm ra dạng biểu diễn tốt cho các trạng thái đóng vai trò hết sức quan trọng trong quá trình giải quyết một vấn đề Có thể nói rằng, nếu tìm được dạng biểu diễn tốt cho các trạng thái của vấn đề, thì vấn đề hầu như

đã được giải quyết

Trang 17

1.2 Các kỹ thuật tìm kiếm cơ bản

Có nhiều kỹ thuật tìm kiếm khác nhau để giải quyết các bài toán tìm kiếm Tuy nhiên với mỗi bài toán tùy theo đặc điểm, cách tổ chức dữ liệu có thể lựa chọn và áp dụng kỹ thuật phù hợp và hiệu quả

Một số kỹ thuật tìm kiếm cơ bản: Tìm kiếm không có thông tin, tìm

kiếm có thông tin và tìm kiếm đối kháng Trong đó, tập trung vào kỹ thuật tìm

kiếm đối kháng để làm cơ sở cho phát triển chương 2 của khóa luận này 1.2.1 Tìm kiếm không có thông tin

Một giải thuật tìm kiếm không có thông tin là giải thuật không tính đến bản chất cụ thể của bài toán Khi đó, các giải thuật dạng này có thể được cài đặt tổng quát, và cùng một cài đặt có thể được sử dụng trong một diện rộng các bài toán (do sử dụng trừu tượng hóa) Nhược điểm của các giải thuật này

là phần lớn các không gian tìm kiếm có kích thước cực kì lớn, và một quá trình tìm kiếm (đặc biệt tìm kiếm theo cây) sẽ cần một khoảng thời gian đáng

kể cho các ví dụ nhỏ

a Tìm kiếm trên danh sách

Các giải thuật tìm kiếm trên danh sách là loại giải thuật tìm kiếm cơ bản nhất Mục đích là tìm trong một tập hợp một phần tử chứa một khóa nào

đó Các giải thuật tìm kiếm tiêu biểu nhất trên danh sách là: Tìm kiếm tuần tự (hay tìm kiếm tuyến tính), tìm kiếm nhị phân

Tìm kiếm tuần tự kiểm tra từng phần tử trong danh sách theo thứ tự

của danh sách đó Nó có thời gian chạy khá lớn: O(n), trong đó n là số phần tử

trong danh sách, nhưng có thể sử dụng cho một danh sách bất kỳ mà không cần tiền xử lý

Tìm kiếm nhị phân là một thuật toán cao cấp hơn so với thuật toán tìm

kiếm tuần tự với thời gian chạy là O(log n) Đối với các danh sách lớn, thuật

toán này tốt hơn hẳn tìm kiếm tuyến tính nhưng nó đòi hỏi danh sách phải được sắp xếp từ trước và đòi hỏi khả năng truy cập ngẫu nhiên Thuật toán

Trang 18

tìm kiếm nội suy tốt hơn so với thuật toán tìm kiếm nhị phân đối với danh sách rất lớn và với phân bố gần đều

Ngoài ra bảng băm (hash table) cũng được dùng cho tìm kiếm trên

danh sách Nó đòi hỏi thời gian hằng số trong trường hợp trung bình, nhưng

lại cần nhiều chi phí về không gian bộ nhớ và thời gian chạy O(n) cho trường

hợp xấu nhất Một phương pháp tìm kiếm khác dựa trên các cấu trúc dữ liệu

chuyên biệt sử dụng cây tìm kiếm nhị phân cân bằng (self-balancing binary

search tree) và đòi hỏi thời gian chạy O(log n) Các giải thuật loại này có thể

coi là mở rộng của tư tưởng chính về tìm kiếm nhị phân để cho phép chèn và xóa nhanh

b Tìm kiếm trên cây

Tìm kiếm trên cây là trung tâm của các kỹ thuật tìm kiếm Các thuật toán này tìm kiếm trên các cây gồm các nút, cây này có thể là cây tường minh hoặc được xây dựng dần trong quá trình tìm kiếm

Nguyên lý cơ bản là: một nút được lấy ra từ một cấu trúc dữ liệu, các nút con của nó được xem xét và bổ sung vào cấu trúc dữ liệu đó Bằng cách thao tác trên cấu trúc dữ liệu này, cây tìm kiếm được duyệt theo các thứ tự khác nhau, chẳng hạn theo từng mức (tìm kiếm theo chiều rộng) hoặc đi tới một nút lá trước rồi quay lui (tìm kiếm theo chiều sâu)

Tìm kiếm theo chiều rộng

Tìm kiếm chiều rộng mang hình ảnh của vết dầu loang Từ trạng thái

ban đầu, xây dựng tập hợp S bao gồm các trạng thái kế tiếp (mà từ trạng thái ban đầu có thể biến đổi thành) Sau đó, ứng với mỗi trạng thái T k trong tập S, xây dựng tập S k bao gồm các trạng thái kế tiếp của T k rồi lần lượt bổ sung các

S k vào S Quá trình này cứ lặp lại cho đến lúc S có chứa trạng thái kết thúc hoặc S không thay đổi sau khi đã bổ sung tất cả S k

Trang 19

Tìm kiếm theo chiều sâu

Trong tìm kiếm theo chiều sâu, tại trạng thái (đỉnh) hiện hành, chọn một trạng thái kế tiếp (trong tập các trạng thái có thể biến đổi thành từ trạng thái hiện hành) làm trạng thái hiện hành cho đến lúc trạng thái hiện hành là trạng thái đích Trong trường hợp tại trạng thái hiện hành, không thể biến đổi thành trạng thái kế tiếp thì phải quay lui (back-tracking) lại trạng thái trước trạng thái hiện hành (trạng thái biến đổi thành trạng thái hiện hành) để chọn đường khác Nếu ở trạng thái trước này mà cũng không thể biến đổi được nữa thì quay lui lại trạng thái trước nữa và cứ thế Nếu đã quay lui đến trạng thái khởi đầu mà vẫn thất bại thì kết luận là không có lời giải

Tìm kiếm chiều sâu và tìm kiếm chiều rộng đều là các phương pháp tìm kiếm có hệ thống và chắc chắn tìm ra lời giải Tuy nhiên, do bản chất là vét cạn nên với những bài toán có không gian lớn thì không thể dùng hai chiến lược này được Hơn nữa, hai chiến lược này đều có tính chất "mù quáng" vì chúng không chú ý đến những thông tin (tri thức) ở trạng thái hiện thời và thông tin về đích cần đạt tới cùng mối quan hệ giữa chúng Các tri thức này

vô cùng quan trọng và rất có ý nghĩa để thiết kế các giải thuật hiệu quả hơn

Do đó hai chiến lược trên được cải tiến thành một số thuật toán tìm kiếm mới trên cây bao gồm: tìm kiếm lặp sâu dần, tìm kiếm chiều sâu giới hạn, tìm kiếm hai chiều và tìm kiếm chi phí đều

c Tìm kiếm trên đồ thị

Nhiều dạng bài toán tìm kiếm cụ thể trên đồ thị như: Tìm đường đi ngắn nhất, tìm cây bao trùm nhỏ nhất, tìm bao đóng bắc cầu,… Tuy nhiên ứng với mỗi dạng bài toán có một số giải thuật tìm kiếm thích hợp để giải quyết Chẳng hạn thuật toán Dijkstra, thuật toán Kruskal, giải thuật láng giềng gần nhất và giải thuật Prim Các thuật toán này có thể được coi là các mở rộng của các thuật toán tìm kiếm trên cây: tìm kiếm theo chiều sâu, tìm kiếm theo chiều rộng

Trang 20

Thuật toán Dijkstra là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng số

âm Thuật toán này có thể tính toán tất cả các đường đi ngắn nhất từ một đỉnh xuất phát cho trước tới mọi đỉnh khác mà không làm tăng thời gian chạy

Thuật toán Kruskal là thuật toán xây dựng cây bao trùm ngắn nhất bằng cách chọn thêm dần các cung vào cây

Thuật toán Prim là thuật toán nhằm xây dựng cây bao trùm ngắn nhất

Tư tưởng của thuật giải Prim là chọn đưa dần vào cây T các đỉnh kề “tốt nhất”

trong số các đỉnh còn lại Thời gian thực hiện giải thuật Prim là O(n 2)

1.2.2 Tìm kiếm có thông tin

Các kỹ thuật tìm kiếm không có thông tin trong một số trường hợp rất kém hiệu quả và thậm chí không áp dụng được Để tăng tốc độ của các quá trình tìm kiếm có thể dùng các giải thuật tìm kiếm có thông tin Trong mục này sẽ hệ thống một số chiến lược tìm kiếm có thông tin hay còn gọi là chiến lược tìm kiếm heuristic (tìm kiếm kinh nghiệm), đó là các phương pháp sử dụng hàm đánh giá để hướng dẫn sự tìm kiếm

Trong nhiều vấn đề, có thể sử dụng kinh nghiệm, tri thức của con người

về vấn đề để đánh giá các trạng thái của vấn đề Với mỗi trạng thái u ta xác định một giá trị số h(u), số này đánh giá “sự gần đích” của trạng thái u Hàm

h(u) được gọi là hàm đánh giá Trong tìm kiếm có thông tin sử dụng hàm

đánh giá này như một đánh giá heuristic đặc thù cho bài toán cần giải quyết với vai trò hướng dẫn cho quá trình tìm kiếm Một cách đánh giá heuristic tốt

sẽ làm cho quá trình tìm kiếm có thông tin hoạt động hiệu quả hơn hẳn một phương pháp tìm kiếm không có thông tin bất kỳ Trong quá trình tìm kiếm, tại mỗi bước chọn trạng thái để phát triển là trạng thái có giá trị hàm đánh giá

là nhỏ nhất, trạng thái này được xem là trạng thái có nhiều hứa hẹn nhất hướng tới đích

Trang 21

Các kỹ thuật tìm kiếm sử dụng hàm đánh giá để hướng dẫn sự tìm kiếm được gọi chung là các kỹ thuật tìm kiếm có thông tin hay tìm kiếm kinh nghiệm (tìm kiếm heuristic) Các giai đoạn cơ bản để giải quyết vấn đề bằng tìm kiếm heuristic như sau:

- Tìm biểu diễn thích hợp mô tả các trạng thái và các toán tử hay phép chuyển của vấn đề

- Xây dựng hàm đánh giá

- Thiết kế chiến lược chọn trạng thái để phát triển ở mỗi bước

Hai chiến lược tìm kiếm có thông tin quan trọng: tìm kiếm tốt nhất-đầu tiên (best-first-search) và tìm kiếm leo đồi (hill-climbing search)

Tìm kiếm tốt nhất đầu tiên: là tìm kiếm theo chiều rộng được hướng dẫn bởi hàm đánh giá Nhưng nó khác tìm kiếm theo chiều rộng ở chỗ, trong tìm kiếm theo chiều rộng lần lượt phát triển tất cả các đỉnh ở mức hiện tại để sinh các đỉnh ở mức tiếp theo, còn trong tìm kiếm tốt nhất-đầu tiên chọn đỉnh

để phát triển là đỉnh tốt nhất được xác định bởi hàm đánh giá (tức là đỉnh có giá trị hàm đánh giá là nhỏ nhất), đỉnh này có thể ở mức hiện tại hoặc ở các mức trên

Thuật toán tìm kiếm leo đồi: thực chất là thuật toán tìm kiếm theo chiều sâu được hướng dẫn bởi hàm đánh giá Song khác với tìm kiếm theo

chiều sâu, khi ta phát triển một đỉnh u thì bước tiếp theo, chọn trong số các đỉnh con của u đỉnh có nhiều hứa hẹn nhất để phát triển, đỉnh này cũng được

xác định bởi hàm đánh giá

1.2.3 Tìm kiếm đối kháng

Tìm kiếm đối kháng còn gọi là tìm kiếm có đối thủ là chiến lược tìm kiếm được áp dụng để tìm ra nước đi cho người chơi trong các trò chơi đối kháng Chơi cờ có thể xem như vấn đề tìm kiếm trong không gian trạng thái

Trang 22

a Trò chơi đối kháng

Trong các trò chơi đấu trí như các trò chơi cờ Vua, cờ Tướng, cờ vây,

cờ caro (go-moku), có một cây trò chơi bao gồm tất cả các nước đi có thể của

cả hai đấu thủ và các cấu hình bàn cờ là kết quả của các nước đi đó Có thể tìm kiếm trên cây này để có được một chiến lược chơi hiệu quả Các trò chơi này còn gọi là các trò chơi đối kháng, diễn ra giữa hai đấu thủ Nói chung, các trò chơi đó đều có thể chuyển về một dạng bài toán tìm kiếm đặc biệt: tìm đường đi đến các điểm cao nhất giữa hai đấu thủ Trong trò chơi này phải tính đến mọi nước đi mà đối thủ có thể sử dụng

Đặc điểm của các trò chơi trên như sau:

- 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 mọi thông tin về tình trạng trận đấu

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

b Cây trò chơi

Các trạng thái bàn cờ khác nhau (hay còn gọi là một thế cờ, tình huống cờ) trong quá trình chơi có thể biểu diễn thành một cây tìm kiếm (được gọi là cây trò chơi - Hình 1.3) và tiến hành tìm kiếm trên cây để tìm được nước đi tốt nhất Cây trò chơi có các nút là các tình huống khác nhau của bàn cờ, các nhánh nối giữa các nút sẽ cho biết từ một tình huống bàn cờ chuyển sang tình huống khác thông qua chỉ một nước đi đơn nào đó Tuy nhiên, các nước đi này diễn ra theo cặp do hai đấu thủ lần lượt tiến hành Độ sâu của cây trò chơi

là số tầng của cây Thuật ngữ “nước đi” được thống nhất là một lần đi của một đấu thủ hoặc một lần đi phản ứng lại của đối thủ bên kia Chú ý điều này khác với thói quen dùng trong thực tế một nước đi bao gồm lần đi của ta và một lần đi của đối thủ Nói cách khác, nước đi ở đây thực chất chỉ là "nửa nước" theo cách hiểu của làng cờ

Trang 23

Hình 1.3: Cây trò chơi

Tóm lại cây trò chơi dùng các nút để thể hiện trạng thái của trò chơi Cây này là một dạng của cây ngữ nghĩa, có các nhánh ứng với việc chuyển cấu hình sau một nước đi Có thể xem hai nhánh xuất phát từ một nút là hai quyết định của hai đấu thủ

Gọi p là số mức của cây thì độ sâu của cây là d = p-1 Mỗi lựa chọn

hay bước chuyển là một nước đi

c Vét cạn

Dùng một thuật toán vét cạn để tìm kiếm trên cây trò chơi dường như là một ý tưởng đơn giản Chỉ cần chọn nhánh cây sẽ dẫn tới nước thắng để đi quân là đảm bảo thắng lợi Nếu đúng vậy, các loại cờ sẽ trở thành các trò chơi buồn tẻ, và không còn đâu những bí quyết huyền ảo thần kì và bàn cờ sẽ chẳng khác gì bàn tính Rất tiếc rằng, cách làm này lại không thể thực hiện được do có hiện tượng bùng nổ tổ hợp Ví dụ, nếu từ một thế cờ, trung bình

có khả năng đi được 16 nước đi khác nhau (hệ số nhánh con tại mỗi nút là b =

16) Như vậy, sau một tầng có 16 nút con, mỗi nút này lại có thể có 16 con

nữa Tổng số nút con ở độ sâu thứ hai là 16 x 16 = b 2 Cứ như vậy ở độ sâu d

sẽ có b d nút Nếu giả sử độ sâu của cây là 100 (hệ số nhánh 16 và độ sâu 100 đều là những con số còn nhỏ hơn con số thường gặp trong trò chơi cờ), thì số nhánh phải duyệt lên đến 16100 hay xấp xỉ 10120 - một con số quá lớn

Vì số các khả năng tăng quá nhanh, chỉ có một số ít những vấn đề đơn giản là thích hợp với kiểu tìm kiếm vét hết mọi khả năng này (kiểu tìm kiếm

Trạng thái bàn cờ gốc (ply=0) Lượt “ta” đi

Trạng thái bàn cờ mới (ply=1) Lượt đối phương đi

Trạng thái bàn cờ mới (ply=2)

Trang 24

vét cạn đòi hỏi phải kiểm tra tất cả các đỉnh) Do đó, các phương pháp tìm kiếm khác đã ra đời và phát triển Ngược lại, nếu có một phương pháp luôn luôn chính xác nhằm đánh giá một thế cờ này là tốt hay kém so với thế kia, thì trò chơi trở thành đơn giản bằng cách chọn nước đi dẫn tới thế cờ tốt nhất Do

đó sẽ không cần phải tìm kiếm gì nữa Rất tiếc, các thủ tục như vậy không hề

có và phải có chiến lược tìm kiếm trong trò chơi

Hình 1.4: Cây tìm kiếm và sự bùng nổ tổ hợp

d Chiến lược tìm kiếm trong trò chơi

Trong lý thuyết trò chơi đã 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 kết quả nhận được Nói cách khác, lý thuyết trò chơi nghiên cứu cách lựa chọn hành vi tối ưu khi chi phí và lợi ích của mỗi lựa chọn là không cố định mà phụ thuộc vào lựa chọn của các cá nhân khác

Một chiến lược thường được cả người lẫn máy dùng là phân tích thế cờ chỉ sau một số nước đi nào đó của cả hai bên Sau khi "nhìn xa" xem bàn cờ

có những khả năng biến đổi như thế nào sau một số nước, đánh giá độ xấu tốt của các thế cờ nhận được Tiếp theo, chọn nước đi dẫn tới một thế cờ tốt nhất trong số đó có cân nhắc đến cách đi của cả hai bên Với máy, thế cờ này được đánh giá là tốt hơn thế cờ kia nhờ so sánh điểm của thế cờ đó do bộ lượng giá

Trang 25

trả lại Người chơi chỉ có khả năng xét trước một số hữu hạn các nước (ví dụ đại kiện tướng chơi cờ vua có thể xét trước 8-10 nước đi, người thường chỉ 2-

4 nước đi) Rõ ràng là nếu xét càng sâu thì chơi càng giỏi Nhưng không thể thực hiện điều này với độ sâu quá lớn được, do số nút ở độ sâu đó có thể trở nên rất lớn và không đủ thời gian để phân tích Nếu dừng ở một độ sâu hợp lý thì bộ phân tích có thể hoàn thành việc tính toán trong một thời gian hạn định

Các thuật toán được dử dụng trong trò chơi đối kháng: thuật toán Minimax, và thuật toán Alpha – beta

Thuật toán Minimax là thuật toán giúp tìm ra nước đi tốt nhất, bằng cách đi ngược từ cuối trò chơi trở về đầu Tại mỗi bước, nó sẽ ước định rằng người MAX đang cố gắng tối đa hóa cơ hội thắng của MAX khi đến phiên MAX, còn ở nước đi kế tiếp thì người chơi MIN cố gắng để tổi thiểu hóa cơ hội thắng của người MAX (nghĩa là tối đa hóa cơ hội thắng của MIN)

Thuật toán Alpha-beta là một cải tiến của thuật toán Minimax nhằm tỉa bớt nhánh của cây trò chơi, làm giảm số lượng nút phải sinh và lượng giá,

do đó có thể tăng độ sâu của cây tìm kiếm

Trang 26

CHƯƠNG 2 THUẬT TOÁN TÌM KIẾM MINIMAX VÀ ALPHA – BETA

2.1 Thuật toán Minimax

Xét một trò chơi đối kháng trong đó hai người thay phiên nhau đi nước của mình như cờ vua, cờ tướng, cờ carô, Trò chơi có một trạng thái bắt đầu

và mỗi nước đi sẽ biến đổi trạng thái hiện hành thành một trạng thái mới Trò chơi sẽ kết thúc theo một quy định nào đó, theo đó thì cuộc chơi sẽ dẫn đến một trạng thái phản ánh có một người thắng cuộc hoặc một trạng thái mà cả hai đấu thủ không thể phát triển được nước đi của mình, ta gọi nó là trạng thái hòa cờ Tìm cách phân tích xem từ một trạng thái nào đó sẽ dẫn đến đấu thủ nào sẽ thắng với điều kiện cả hai đấu thủ đều có trình độ như nhau

2.1.1 Ý tưởng

Hai đối thủ trong một trò chơi được gọi là MIN và MAX MAX đại diện cho đối thủ quyết giành thắng lợi hay cố gắng tối đa hóa ưu thế của mình Ngược lại MIN là đối thủ cố gắng tối thiểu hóa điểm số của MAX Giả thiết MIN cũng dùng cùng những thông tin như MAX

Một trò chơi như vậy có thể được biểu diễn bởi một cây trò chơi Mỗi một nút của cây biểu diễn cho một trạng thái Nút gốc biểu diễn cho trạng thái bắt đầu của cuộc chơi Mỗi nút lá biểu diễn cho một trạng thái kết thúc của trò

chơi (trạng thái thắng, thua hoặc hòa) Nếu trạng thái x được biểu diễn bởi nút

n thì các con của n biểu diễn cho tất cả các trạng thái kết quả của các nước đi

có thể xuất phát từ trạng thái x Do hai đấu thủ luân phiên nhau đi nước của

mình nên các mức (lớp) trên cây trò chơi cũng luân phiên nhau là MAX và MIN Cây trò chơi vì thế còn có tên là cây MIN-MAX Trên cây trò chơi các nút ứng với trạng thái mà từ đó người chơi MAX chọn nước đi sẽ thuộc lớp MAX, các nút ứng với trạng thái mà từ đó người chơi MIN chọn nước đi sẽ

Trang 27

thuộc lớp MIN Chiến lược Minimax thể hiện qua quy tắc định trị cho các nút trên cây trò chơi như sau:

- Nếu nút là nút lá gán cho nút đó một giá trị để phản ánh trạng thái thắng thua hay hòa của các đấu thủ

- Sử dụng giá trị của các nút lá để xác định giá trị của các nút ở các mức trên trong cây trò chơi theo quy tắc:

+ Nút thuộc lớp MAX thì gán cho nó giá trị lớn nhất của các nút con của nút đó

+ Nút thuộc lớp MIN thì gán cho nó giá trị nhỏ nhất của các nút con của nút đó

Giá trị được gán cho từng trạng thái theo quy tắc trên chỉ rõ giá trị của trạng thái tốt nhất mà mỗi đối thủ có thể hy vọng đạt được Người chơi sẽ sử dụng các giá trị này để lựa chọn các nước đi cho mình Đối với người chơi MAX khi đến lượt đi, người chơi này sẽ chọn nước đi ứng với trạng thái có giá trị cao nhất trong các trạng thái con, còn với người chơi MIN khi đến lượt

sẽ chọn nước đi ứng với trạng thái có giá trị nhỏ nhất trong các trạng thái con

Ví dụ 1: Xét trò chơi carô có 9 ô (Tic tac toe) Hai người MAX và MIN

thay phiên nhau đi X hoặc O (MAX đi X, MIN đi O) Người nào đi được 3 ô thẳng hàng (ngang, dọc, xiên) thì thắng cuộc Nếu đã hết ô đi mà chưa phân thắng bại thì hai đấu thủ hòa nhau Một phần của trò chơi này được biểu diễn bởi cây sau:

Trang 28

Hình 2.1: Một phần cây trò chơi trong trò chơi Tic-tac-toe

Trong cây trò chơi trên, gán mỗi nút lá một giá trị để phản ánh trạng thái thắng thua hay hòa của các đấu thủ Chẳng hạn gán cho nút lá các giá trị như sau:

Trang 29

1 nếu tại đó người đi X đã thắng

-1 nếu tại đó người đi X đã thua

0 nếu hai đấu thủ đã hòa nhau

Như vậy từ một trạng thái bất kỳ, đến lượt mình, người đi X sẽ chọn cho mình một nước đi sao cho dẫn đến trạng thái có giá trị lớn nhất (trong trường hợp này là 1) Nói X chọn nước đi MAX, nút mà từ đó X chọn nước đi của mình được gọi là nút MAX Người đi O đến lượt mình sẽ chọn một nước

đi sao cho dẫn đến trạng thái có giá trị nhỏ nhất (trong trường hợp này là -1, khi đó X sẽ thua và do đó O sẽ thắng) Có thể nói O chọn nước đi MIN, nút

mà từ đó O chọn nước đi của mình được gọi là nút MIN Áp dụng chiến lược Minimax cho một nhánh trong cây trò chơi của trò chơi Tic-tac-toe ta có giá trị (phía trên mỗi nút) của các nút được thể hiện trong hình 3

Ví dụ 2: Xét trò chơi Nim Để chơi Nim, một số token (vật biểu hiện

như đồng xu, lá bài, mảnh gỗ…) được đặt trên bàn giữa hai đối thủ Ở mỗi nước đi, người chơi phải chia đống token thành hai đống nhỏ có số lượng khác nhau Người chơi nào đến lượt mà không chia được là thua cuộc Ứng với một token vừa phải, không gian trạng thái này có thể triển khai đến cùng

Ngày đăng: 08/11/2015, 20:02

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w