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

Tìm hiểu giải thuật minimax và cắt tỉa anpha beta,ứng dụng vào lập trình trò chơi mang tính đối kháng

17 1,1K 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 3,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lời mở đầuTrong vô vàn các trò chơi,chúng ta thường yêu thích các trò chơi có nhiều người chơi,trong đó được ưa thích hơn cả là các trò chơi mang tính đối kháng nhằm khơi dậy sự hứng thú

Trang 1

Trường đại học Bách Khoa Hà Nội

Viện công nghệ thông tin và truyền thông

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

Môn học:Trí tuệ nhân tạo

Báo cáo bài tập lớn

Đề tài:Tìm hiểu giải thuật Minimax và cắt tỉa Anpha-Beta,ứng

dụng vào lập trình trò chơi mang tính đối kháng

Giáo viên hướng dẫn:Phạm Văn Hải Sinh viên thực hiện: Lê Thành Đạt

MSSV: 20111374 Nhóm 17

Trang 2

Lời mở đầu

Trong vô vàn các trò chơi,chúng ta thường yêu thích các trò chơi có nhiều người chơi,trong đó được ưa thích hơn cả là các trò chơi mang tính đối kháng nhằm khơi dậy sự hứng thú và khả năng suy nghĩ của người chơi.Ta có thể kể đến các trò chơi như:cờ vua,cờ vây,cờ tướng,cờ caro,ô ăn quan…Đặc điểm của những trò chơi này là người chơi cần phải suy nghĩ phán đoán nước đi tiếp theo của đối thủ nhằm đưa ra được nước đi tốt nhất cho mình

Nắm bắt được đặc điểm này,trong lĩnh vực nghiên cứu trí tuệ nhân tạo đã tìm ra giải thuật Minimax và giải thuật cải tiến của nó là cắt tỉa Anpha-Beta áp dụng vào lập trình các trò chơi nói trên.Với ưu điểm tốc độ nhanh,bộ nhớ lớn, máy tính có khả năng duyệt được độ sâu của trò chơi là rất lớn mà con người không thể làm được như vậy.Các trò chơi này thực sự rất tốt cho chúng ta rèn luyện khả năng

tư duy và ghi nhớ

Trong đề tài này em đã áp dụng giải thuật trên vào lập trình trò chơi Ô ăn quan.Do một số hạn chế về mặt thời gian…nên trò chơi còn bộc lộ một số nhược điểm rất mong thầy,cô,các bạn có thể đóng góp ý kiến giúp em hoàn thiện tốt hơn trò chơi này

hần một: Giới thiệu đôi nét về giải thuật tìm kiếm Minimax và cắt tỉa Anpha-Beta.

P

Trang 3

I) Trò chơi đối kháng,các phương pháp tìm kiếm nước đi.

1,Trò chơi đối kháng

Đây là các trò chơi có hai người chơi, ta cũng có thể lập trình cho máy tính để người chơi đấu trí với máy tính

Đặc điểm của các trò chơi này 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

Đôi khi ta gọi đây là các trò chơi Minimax (dựa trên tên của thuật toán tìm kiếm cơ bản áp dụng cho chúng).Sau đây là một số hình ảnh minh họa:

Hình 1:Cờ vua Hình 2:Cờ tướng

Trang 4

Hình 3:Cờ Caro Hình 4: Ô ăn quan

2) Không gian trạng thái của trò chơi

Không gian trạng thái của trò chơi chúng ta có thể biểu diển theo sơ đồ hình cây,Nó là tập các trạng thái cảu trò chơi có thể xảy ra bắt đầu từ trạng thái đang xét(nút gốc của cây trò chơi):

Nhìn vào sơ đồ trên ta liền nghĩ ngay đến một vấn đề là nếu biết toàn

bộ thông tin của cây trò chơi tức là từ nút gốc cho tới nút lá,a 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ẻ, sẽ chẳ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 (hoặc rất may) rằng, cách làm này lại không thể thực hiện nổi do cái gọi là 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 (ta gọi đó là hệ số nhánh con tại mỗi nút là b = 16) Như vậy, sau một tầng ta sẽ 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à 16x16 =

Trang 5

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 16^100 hay xấp xỉ 10^120 - một con số lớn khủng khiếp Để hình dung số đó lớn thế nào, ta giả sử tất cả các nguyên

tử trong vũ trụ đều trở thành máy tính để tính nước đi với tốc độ một giây tính được cỡ 10^10 (10 tỷ) nước đi, và nếu chúng hoạt động cật lực từ thời vụ nổ lớn đến nay (theo một số lý thuyết, thì thế giới này hình thành sau một vụ nổ gọi là vụ nổ lớn bigbang, trước đây cỡ 15 tỷ năm) thì đến bây giờ mới có thể đi được nước đi đầu tiên

II.Thủ tục Minimax.

Để giải quyết vấn đề bùng nổ tổ hợp,một phương pháp đơn giản là thay vì duyệt hết không gian trạng thái của trò chơi(điều không thể vì gây bùng nổ tổ hợp) chúng ta chỉ duyệt đến một độ sâu nhất định nào

đó,trong trò chơi ta có thể gọi đó là “nhìn xa”.Rõ ràng nếu xét được càng sâu,ta càng có thể lường được càng nhiều tình huống xảy ra của trò chơi

để rồi chọn nước đi phù hợp

Thủ tục Minimax áp dụng trong các trò chơi đối kháng nói

trên.Trong trò chơi có hai người chơi là người chơi Max và người chơi Min,theo thuật toán thì người chơi Max sẽ tìm những nước đi dẫn đến

điểm của mình trở nên lớn hơn (hay cao nhất có thể được) hay điểm của đối thủ bớt âm hơn (nhỏ hơn về giá trị tuyệt đối) Còn đấu thủ của anh ta, người chơi Min, lại ra sức phản kháng lại, để dẫn tới điểm âm của anh ta

âm hơn hay điểm dương của đối thủ nhỏ đi

III.Thuật toán cắt tỉa Anpha-Beta

Thủ tục AlphaBeta là một cải tiến 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 Giả sử hình 1.6 là một thế cờ mà hai nút đầu tiên đã được lượng giá Nếu thực hiện thủ tục Minimax đối với các nút đó sẽ cho thấy người chơi cực đại đã được đảm bảo nếu đi nước bên trái sẽ được ít nhất là 2 điểm dù là các lượng giá của các nút khác cho kết quả như thế nào đi nữa

Trang 6

< Theo Phạm Hồng Nguyên>

Nguyên tắc Alpha-Beta

Nếu biết điều đó thật sự tồi thì đừng mất thời gian tìm hiểu nó sẽ tồi tệ đến đâu

Trang 7

hần hai: Áp dụng giải thuật Minimax và cắt tỉa

Anpha-Beta vào lập trình trò chơi Ô ăn quan.

P

I.Giới thiệu về trò chơi Ô ăn quan

Ô ăn quan, hay còn gọi tắt là ăn quan hoặc ô quan là một trò chơi dân gian của

trẻ em người Kinh, Việt Nammà chủ yếu là các bé gái Đây là trò chơi có tính chất chiến thuật thường dành cho hai người chơi và có thể sử dụng các vật liệu đa dạng, dễ kiếm để chuẩn bị cho trò chơi.

<Theo Wikipedia>

Bàn chơi

Bàn chơi là một hình chữ nhật được chia thành mười ô vuông, mỗi bên có năm ô

đối xứng nhau Ở hai cạnh ngắn hơn của hình chữ nhật có hai ô hình bán nguyệt hướng ra phía ngoài Các ô hình vuông gọi là ô quân còn hai ô hình bán nguyệt gọi

là ô quan

Quân chơi

- Gồm hai loại quan và quân, quan có kích thước lớn hơn quân

-Quan có giá trị bằng 10 quân,dùng để tính điểm khi kết thúc trò chơi

- Số lượng quan luôn là 2 còn quân có số lượng là 50

Bố trí quân chơi

- Quan được đặt trong hai ô hình bán nguyệt, mỗi ô một quan Quân được bố trí vào các ô vuông, mỗi ô 5 quân

Hình minh họa

Trang 8

Người chơi

- Gồm hai người chơi, mỗi người ngồi ở 2 vị trí đối xứng nhau ngoài cạnh dài hơn của hình chữ nhật và những ô vuông bên nào thuộc quyền kiểm soát của người chơi ngồi bên đó

Luật chơi

Luật đi quân

 Người chơi 1 tức “Player1” sẽ là người đi trước

 Người chơi chỉ được bốc quân ở phía 5 ô của mình khi bắt đầu Khi đến lượt, người chơi sẽ dùng tất cả quân trong một ô có quân bất kỳ để lần lượt rải vào mỗi ô 1 quân, bắt đầu từ ô gần nhất Người chơi có thể rải ngược hay xuôi chiều kim đồng hồ tùy ý

 Khi rải hết quân cuối cùng, tùy tình huống mà người chơi sẽ phải xử lý tiếp như sau:

 Nếu liền sau đó là một ô vuông có chứa quân thì tiếp tục dùng tất cả số quân

đó để rải tiếp theo chiều đã chọn

 Nếu liền sau đó là một ô trống (không phân biệt ô quan hay ô quân) rồi đến một ô có chứa quân thì người chơi sẽ được ăn tất cả số quân trong ô đó Số quân bị ăn sẽ được bốc ra khỏi bàn chơi để người chơi tính điểm khi kết thúc

 Nếu liền sau ô có quân đã bị ăn lại là một ô trống rồi đến một ô có quân nữa thì người chơi có quyền ăn tiếp cả quân ở ô này

 Nếu liền sau đó là ô quan có chứa quân hoặc 2 ô trống trở lên thì người chơi

bị mất lượt và quyền đi tiếp thuộc về đối phương

Rải quân

 Trường hợp đến lượt đi nhưng cả 5 ô vuông thuộc quyền kiểm soát của người chơi đều không còn quân thì người đó sẽ phải dùng 5 quân của mình đặt vào mỗi ô 1 quân

Trang 9

 Nếu người chơi không đủ 5 quân thì phải vay của đối phương và trả lại khi tính điểm Hệ thống sẽ tự động bốc quân cho người chơi vay

Ăn quân

Nếu người chơi đi quân đến một ô trống, và kế tiếp là một ô có quân thì người chơi

sẽ được ăn số quân ở ô đó

Kết thúc

Cuộc chơi sẽ kết thúc khi toàn bộ quân và quan ở hai ô quan đã bị ăn hết Trường hợp hai ô quan đã bị ăn hết nhưng vẫn còn quân thì quân trong những hình vuông

phía bên nào coi như thuộc về người chơi bên ấy; tình huống này được gọi là hết quan thu quân về nước.

Người chơi nào nhiều quân hơn sẽ là người thắng cuộc,với quan có giá trị bằng 10 quân

II.Ứng dụng giải thuật Minimax và cắt tỉa Anpha-Beta vào lập trình game Ô ăn quan

1.Không gian trạng thái của trò chơi

-Biểu diễn trạng thái bàn cờ:Mỗi trạng thái của bàn cờ có thể mô tả bằng

ma trận một chiều kích thước 12.Mỗi phần tử lưu giá trị của các ô,cụ thể phần tử

0 và 6 lưu giá trị 2 ô Quan,các phần tử còn lại của mảng lưu giá trị ô quân

Trang 10

Việc số hóa bàn cờ này thuận tiện cho việc biểu diễn bàn cờ trên máy tính.

-Cây không gian trạng thái:

Ban đầu,người chơi có thể chọn 1 trong 5 ô bên mình để đi,mỗi ô có 2 cách chọn hướng đi,trái hoặc phải => có 10 nhánh con

2,Những vấn đề gặp phải và phương pháp giải quyết vấn đề

a)Biểu diễn trạng thái bàn cờ trên máy tính

Như đã nói ở trên,ta sẽ biểu diễn bàn cờ bằng một ma trận số nguyên 12 phần tử

Trang 11

b)Hàm lượng giá.

Vấn đề gặp phải:Không giống các trò chơi như cờ vua,cờ tướng,caro…Ta chỉ

nhìn vào một trạng thái bàn cờ bất kì ta có thể biết được rằng lợi thế,điểm thua thiệt của mình và đối thủ mà không cần biết trước đó hai bên đã chơi như thế nào.Ô ăn quan cũng có thể lượng giá như vậy,nhưng để giành chiến thắng chúng

ta căn cứ vào điểm số của hai bên,mà điểm số của hai bên luôn thay đổi,cập nhật trong quá trình chơi, vậy lượng giá cho một trạng thái là không hiệu quả

Phương pháp giải quyết:

Giả sư từ trạng thái a của bàn cờ chuyển sang trạng thái b của bàn cờ,ta sẽ lượng giá cho cặp trạng thái này,và giá trị lượng giá sẽ là điểm giành được trong quá trình chuyển trạng thái đó

c)Giải thuật Minimax và cắt tỉa

Anpha-Beta

Vấn đề gặp phải:tương tự như phần

lượng giá.Nếu đạt đến độ sâu cần

xét,ta chỉ trả lại giá trị lượng giá tại

độ sâu đó thì điều đó thật vô nghĩa

đối với trò chơi dùng điểm để phân

định thắng thua

Thay vì trả lại giá trị của nút

lá,trong suốt quá trình duyệt ta sẽ tính tổng điểm của các nhánh( vì bất kì một sự chuyển trạng thái nào ta cũng lượng giá,với bên Min điểm của nó sẽ là âm,của Max

sẽ là dương).Vậy trong giải thuật Minimax hay cắt tỉa Anpha-Beta,tại các nút ta sẽ trả lại tổng điểm của cả hai bên trong cả nhánh trò chơi.Chính vì dựa vào tổng điểm này,sự lượng giá,và quá trình duyệt cây trò chơi của giải thuật Minimax hay cắt tỉa Anpha-Beta mới thực có ý nghĩa

Giải thuật cắt tỉa Anpha-Beta:

Thêm hai hằng số Anpha và Beta,hằng số anpha chính là giá trị lớn nhất mà người chơi Max đang có vì vậy giá trị anpha này người chơi Max luôn cập nhật khi duyệt

class ObjValuation { public int[]MatrixBefore=new int[12]; public int point;

public int path;

public int sign ; public int []MatrixAfter=new int[12];

… }

Trang 12

các nhánh con,trong khi xét đệ quy nhánh con,bên Max sẽ truyền cho bên Min hằng số anpha này,nếu bên Min có nhánh nào đó đã trả lại giá trị nhỏ hơn anpha thì các nhánh còn lại của Min không cần xét nữa.Tương tự người chơi Min luôn cập nhật giá trị beta,rồi truyền cho nhánh con Max

Vấn đề gặp phải khi sử dụng giải thuật cắt tỉa anpha-beta:

Đó chính là tổng điểm,nó luôn thay đổi khi duyệt từ đáy lên,còn giá trị anpha-beta lại truyền từ trên xuống theo kiểu nút cha cập nhật từ con này rồi truyền cho con khác Không thể đem giá trị không cùng độ sâu so sánh được,giải pháp là nút cha

sẽ truyền cho con thêm một giá trị nữa là father_point,đây là điểm giành được của nút cha,giá trị anpha-beta do cha cập nhật,khi xuống nút con,nút con sẽ lấy điểm của nó cộng với điểm của cha truyền xuống (kết quả là giá trị tại nút cha) khi đó việc so sánh mới đúng

Trang 13

III.Hệ thống chương trình.

Chương trình game được viết hoàn toàn bằng ngôn ngữ Java

1,Cấu trúc hệ thống

Hệ thống gồm 8 lớp,trong đó có 5 lớp chính:

+MainMenu:Chứa giao diện bắt đầu của chương trình +OanQuan:Chứa giao diện chính của trò chơi,đây là lớp trung tâm của chương trình

+AnpaBeta:Đây là lớp cài đặt thuật toán Anpha-Beta +ObjValuation:Đối tượng chính,chứa cặp trạng thái cần lượng giá (MatrixBefore[] và MatrixAfter[]),và giá trị lượng giá(point)

+Valuation:Đối tượng chứa trạng thái đầu(MatrixBefore[]),chứa nước

đi của người chơi( path=ô đi,sign= -1 hướng đi trái, sign=1,hướng đi phải) làm cơ sở phục vụ lớp ObjValuation

Trang 14

Sơ đồ thiết kế chương trình

2.Một số hình ảnh Demo chương trình:

Trang 15

Giao diện bắt đầu:

Giao diện thiết lập các tùy chọn(Option):

Trang 16

Giao diện xem trợ giúp thông tin trò chơi(Help):

Giao diện chính của trò chơi:

Trang 17

IV)Kết luận.

Thông qua đề tài này,em đã hiểu rõ hơn các giải thuật trong học phần Trí tuệ nhân tạo nói chung cũng như giải thuật Minimax và giải thuật cải tiến của nó là cắt tỉa Anpha-Beta nói riêng

Do tự code từ đầu tới cuối nên phần đồ họa còn sơ sài,thiết kế chưa thật tối

ưu.Hướng mở rộng của đề tài là tiếp tục hòa thiện chương trình tốt hơn đồng thời

có thể tìm hiểu các trò chơi khác nhằm củng cố kiến thức trong môn học này!

V) Tài liệu tham khảo

-Slide Trí tuệ nhân tạo (Phạm Văn Hải)

-Cuốn sách:Tự viết trò chơi Cờ tướng(Phạm Hồng Nguyên)

-Trang web http://play.zing.vn/detail-games/chi-tiet.o-an-quan.6.html

và http://my.opera.com/hodawa/blog/?startidx=168

Ngày đăng: 01/07/2016, 12:54

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w