MỤC LỤC
MỞ ĐẦU 2
I CHIẾN LƯỢC MINIMAX VÀ PHƯƠNG PHÁP CẮT TỈA ALPHA- BETA 3 1 Tổng quan về tìm kiếm đối kháng 3
2 Chiến lược Minimax 3
3 Phương pháp cắt cụt Alpha-Beta 8
4 Các ứng dụng của thuật toán 12
5 Đánh giá thuật toán 13
II GIỚI THIỆU BÀI TOÁN “GAME CỜ CARO” 15
1 Giới thiệu bài toán 15
2 Áp dụng thuật toán để giải quyết bài toán 16
3 Đề xuất giải pháp tối ưu hơn để giải quyết bài toán 21
Trang 2Hình 3 Cây trò chơi cho game cờ caro 16
Hình 4 Các phương thức và biến trong lớp CaroAI 19
Hình 5 Các phương thức và biến trong lớp Heuristic 20
Trang 3MỞ ĐẦU
Trí tuệ nhân tạo (Artificial Intelligence - AI) đã từ lâu trở thành một lĩnh vực nghiên cứu quan trọng trong ngành khoa học máy tính Với khả năng của nó trong việc mô phỏng, phân tích và tự động hóa quá trình tư duy, trí tuệ nhân tạo đã tạo ra những ứng dụng đáng kinh ngạc và đột phá trong nhiều lĩnh vực, từ y tế đến giao thông, từ ngôn ngữ tự nhiên đến trò chơi.
Trò chơi cờ caro là một trò chơi cổ điển và phổ biến, đòi hỏi người chơi có khả năng tư duy chiến thuật và tính toán để đạt được chiến thắng Tuy nhiên, việc tìm kiếm nước đi tối ưu trong trò chơi này là một thách thức lớn đối với con người Đó là lý do tại sao em quyết định áp dụng trí tuệ nhân tạo vào việc xây dựng một hệ thống thông minh có khả năng chơi cờ caro.
Qua việc xây dựng một AI thông minh cho trò chơi cờ caro, chúng ta có thể khám phá và tận dụng tiềm năng của trí tuệ nhân tạo trong việc tạo ra các đối thủ ảo có khả năng chơi cờ thông minh và thách thức người chơi Điều này có thể mang lại lợi ích trong việc nghiên cứu các thuật toán trí tuệ nhân tạo, cũng như cung cấp cho người chơi một trải nghiệm thú vị và tăng cường kỹ năng chiến thuật của họ.
Với việc kết hợp giữa trí tuệ nhân tạo và giải thuật Minimax cùng cắt tỉa Alpha-beta, em hy vọng rằng bài tiểu luận này sẽ cung cấp một cái nhìn tổng quan về việc xây dựng một đối thủ AI thông minh cho trò chơi cờ caro Các kỹ thuật và phương pháp mà em trình bày có thể được áp dụng và mở rộng cho các trò chơi khác, đồng thời khám phá thêm các phương pháp và thuật toán mới để nâng cao khả năng chơi của AI.
Trang 4I CHIẾN LƯỢC MINIMAX VÀ PHƯƠNG PHÁP CẮT TỈAALPHA- BETA
1 Tổng quan về 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 Sau đây chúng ta sẽ xem thế nào trò chơi đối kháng và chiến lược tìm kiếm nào sẽ được áp dụ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 đó Ta 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ủa ta 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.
2 Chiến lược Minimax
2.1 Giới thiệu
Thuật toán Minimax là thuật toán tìm kiếm chuyên dùng để trả về chuỗi nước đi tối ưu cho một người chơi trong trò chơi có tổng bằng không Minimax (còn gọi là Minmax) là một phương pháp trong lý thuyết quyết định có mục đích là tối thiểu hóa (minimize) tổn thất vốn được dự tính có thể là tối đa (maximize) Có thể hiểu ngược lại là, nó nhằm tối đa hóa lợi ích vốn được dự tính là tối thiểu (maximin) Thuật toán này cũng được mở rộng cho nhiều trò chơi phức tạp hơn và giúp đưa ra các quyết định chung khi có sự hiện diện của sự không chắc
Trang 5Một phiên bản của giải thuật áp dụng cho các trò chơi như tic-tac-toe, khi mà mỗi người chơi có thể thắng, thua, hoặc hòa Nếu người chơi A có thể thắng trong một nước đi, thì “nước đi tốt nhất” chính là nước đi để dẫn đến kết quả thắng đó Nếu người B biết rằng có một nước đi mà dẫn đến tình huống người A có thể thắng ngay ở nước đi tiếp theo, trong khi nước đi khác thì sẽ dẫn đến tình huống mà người chơi A chỉ có thể tốt nhất là hòa thì nước đi tốt nhất của người B chính là nước đi sau.
Ta sẽ nắm rõ, thế nào là một nước đi “tốt nhất” Giải thuật Minimax 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 A đang cố gắng tối đa hóa cơ hội thắng của A khi đến phiên anh ta, còn ở nước đi kế tiếp thì người chơi B cố gắng để tổi thiểu hóa cơ hội thắng của người A (nghĩa là tối đa hóa cơ hội thắng của B).
Lý thuyết trò chơi coi trò chơi là sự kết hợp hoặc trao đổi giữa hai hay nhiều đối thủ ở đó mỗi đối thủ cố gắng lựa chọn tối ưu hành động (hay nước đi) của mình nhằm đạt được lợi ích tối đa Trong lý thuyết trò chơi có một cách phân loại các trò chơi thành hai loại: trò chơi có tổng bằng không và trò chơi có tổng khác không.
2.2 Trò chơi có tổng bằng không
Trò chơi có tổng bằng không là trò chơi có tổng giá trị kết quả (mà người thắng được hưởng) là cố định Bất cứ bên nào thắng (+1) cũng làm cho bên kia thua cuộc (-1), tương ứng với tình huống ganh đua thuần tuý, cuối cùng dẫn tới tổng (+1 - 1) = 0.
Cờ vua là một trò chơi có tổng bằng không bởi không thể có trường hợp cả hai bên đều thắng hoặc đều thua Nếu một bên thắng thì bên kia nhất định là thua và ngược lại Thể thao là những ví dụ điển hình nhất của trò chơi có tổng bằng không Nhà vô địch chỉ có thể đạt được vinh quang khi toàn bộ các đối thủ khác đều thua cuộc Trong một giải bóng đá tổng số trận thắng luôn bằng tổng số trận thua cũng là bởi cái tính chất tổng bằng không ấy.
Việc đầu tư kinh doanh chứng khoán cũng chính là một trò chơi có tổng bằng không, bởi vì ở đó, số tiền thua lỗ của nhà đầu tư này sẽ là tiền lãi của nhà đầu tư khác Nhà đầu tư có thể mất trắng hoặc thắng lớn, lợi nhuận mà anh ta thu
Trang 6được có thể đổi bằng cả gia tài, đôi khi mạng sống của những nhà đầu tư tài chính khác.
2.3 Ý tưởng thuật toán
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 Ta 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ẽ 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á
Trang 7trị 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.
Phân tích:
Ý tưởng cơ bản của chiến lược Minimax theo đệ quy:
- Nếu mức đang xét là người chơi cực tiểu thì áp dụng thuật toán Minimax cho các con của nó Lưu kết quả là giá trị nhỏ nhất.
- Nếu mức đang xét là người chơi cực đại thì áp dụng thuật toán Minimax cho các con của nó Lưu kết quả là giá trị lớn nhất.
- Nếu mức đang xét là lá (tầng cuối cùng của cây tìm kiếm), tính giá trị tĩnh của thế cờ hiện tại ứng với người chơi ở đó Ghi nhớ kết quả.
Mã giả 1: Thuật toán Minimax
Tuy nhiên trên một cây có kích thước lớn thì ta không thể tìm hết tất cả các nút mà ta chỉ giới hạn trong một số tầng của cây và xem như đây là mô phỏng đúng của một cây Minimax (chưa biết) bằng cách gán trọng số cho các lá của nó Trọng số ở đây là trọng số không còn chính xác tuyệt đối mà là ước lượng Trọng số nhận được theo cách này gọi là được tính toán với sự giúp đỡ của hàm lượng giá (hàm đánh giá), hàm này được xây dựng với người dùng trên sự hiểu biết và kinh nghiệm
Hàm đánh giá:
Trang 8Hàm đánh giá Eval ứng với mỗi trạng thái pos của trò chơi cới một giá trịsố Eval(pos) Giá trị này là sự đánh giá độ lợi thế của trạng thái pos Trạng tháipos càng thuận lợi cho MAX thì Eval(pos) là số dương càng lớn, pos càng thuậnlợi cho MIN thì Eval(pos) là số âm càng nhỏ, Eval(pos) = 0 là trạng thái không
lợi thế cho ai cả Hàm đánh giá đóng vai trò rất quan trọng trong các trò chơi, nếu hàm đánh giá tốt sẽ định hướng chính xác việc lựa chọn các nước đi tốt Việc thiết kế hàm đánh giá phụ thuộc vào nhiều yếu tố: các quân cờ còn lại của hai bên, sự bố trí các quân cờ này,…Để đưa ra hàm đánh giá chính xác đòi hỏi nhiều thời gian tính toán, tuy nhiên, trong thực tế người chơi bị giới hạn thời gian đưa ra nước đi Vì vậy, việc đưa ra hàm đánh giá phụ thuộc vào kinh nghiệm của người chơi.
Ví dụ 1: Hàm đánh giá cho cờ vua Mỗi loại quân được gán một giá trị số phù hợp với “sức mạnh” của nó Chẳng hạn, quân tốt Trắng (Đen) được gán giá trị 1 (-1), mã hoặc tượng Trắng (Đen) được gán giá trị 3 (-3), xe Trắng (Đen) được gán giá trị 5 (-5) và hậu Trắng (Đen) được gán giá trị 9 (-9) Hàm đánh giá của một trạng thái được tính bằng cách lấy tổng giá trị của tất cả các quân cờ trong trạng thái đó Hàm đánh giá này được gọi là hàm tuyến tính có trọng số, vì có thể biểu diễn dưới dạng:
s1w1 + s2w2 + … + snwn
Trong đó, wi là giá trị của quân cờ loại i, si là số quân loại đó Đây là cách đánh giá đơn giản, vì nó không tính đến sự bố trí của các quân cờ, các mối tương quan giữa chúng.
Mã giả 2: Áp dụng thuật toán Minimax đến độ sâu lớp nhất định
Để hạn chế không gian tìm kiếm, khi xác định nước đi cho MAX tại đỉnh
u, ta chỉ xem xét cây gốc u tại độ sâu depth nào đó Áp dụng chiến lượcMinimax cho cây trò chơi gốc u, độ sâu depth và sử dụng hàm đánh giá để xác
định giá trị cho các lá của cây.
function Minimax(pos, depth): integer;{
if depth = 0 then //Đạt đển giới hạn
Minimax = Eval(pos) //Tính giá trị thể cờ pos
else
Trang 9{best = -INFINITY;
Gen(pos); //Sinh ra mọi nước đi từ thể cờ pos
While còn lấy đươc một nước đi m do
pos = Tính thể cờ mới nhờ đi m;
value = Minimax(pos, depth-1); //Tính điểm cua
2.4 Ưu, nhược điểm của thuật toán
- Tìm kiếm được mọi nước đi tiếp theo sau đó lựa chọn nước đi tốt nhất, vì giải thuật có tính chất vét cạn nên không bỏ soát trạng thái
- Đối với các trò chơi có không gian trạng thái lớn như caro, cờ tướng… việc chỉ áp dụng giải thuật Minimax có lẽ không còn hiệu quả nữa do sự bùng nổ tổ hợp quá lớn.
- Giải thuật áp dụng nguyên lý vét cạn không tận dụng được thông tin của trạng thái hiện tại để lựa chọn nước đi, vì duyệt hết các trạng thái nên tốn thời gian.
- Thời gian tính toán và không gian lưu trữ tăng lên nhanh chóng với số lượng nút trong cây trò chơi
3 Phương pháp cắt cụt Alpha-Beta
3.1 Giới thiệu
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 Giả sử hình sau 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
Trang 10nhấ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.
Bây giờ, ta lại giả sử nút tiếp theo được lượng giá và cho kết quả là 1 Nếu đi vào nhánh này thì đối phương sẽ đảm bảo làm điểm của người chơi cực đại không thể vượt quá được giá trị 1 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 Do đó đến đây, nước đi tốt nhất là chọn nước đi bên trái với đảm bảo là ít nhất đạt được 2 điểm Và do đó, hoàn toàn không cần thiết phải lượng giá nút còn lại.
3.2 Ý tưởng thuật toán
Thuật toán cắt tỉa Alpha-beta là cải tiến của thuật toán Minimax với tư tưởng
“Nếu đã thấy một việc làm là tệ thì không nên mất thời gian xem nó tệ đến mứcnào”.
Thuật toán làm giảm số nút cần thiết của việc tìm kiếm để không lãng phí thời gian tìm kiếm những nước đi đã bất lợi cho người chơi Tìm kiếm
Alpha-beta thực hiện theo kiểu tìm kiếm sâu với hai giá trị, gọi là alpha và Alpha-beta được
tạo ra trong quá trình tìm kiếm:
Trang 11- Giá trị alpha liên quan với các nút MAX và có khuynh hướng không bao
giờ giảm
- Giá trị beta liên quan đến các nút MIN và có khuynh hướng không bao
giờ tăng.
Giả sử có giá trị alpha của một nút MAX là 6, MAX không cần phải xem xét giá trị truyền ngược nào nhỏ hơn hoặc bằng 6 có liên quan với một nút MIN nào đó bên dưới Giá trị alpha là giá trị thấp nhất mà MAX có thể nhận được sau khi cho rằng MIN cũng sẽ nhận giá trị tốt nhất của nó Tương tự nếu MIN có giá trị beta là 6 nó cũng không cần xem xét các nút nằm dưới nó có giá trị lớn hơn hoặc bằng 6
Để bắt đầu thuật toán tìm kiếm Alpha-beta, ta đi xuống hết độ sâu lớp
theo kiểu tìm kiếm sâu, đồng thời áp dụng đánh giá heuristic cho một trạng thái
và tất cả các trạng thái anh em của nó Giả thuyết tất cả đều là nút MIN Giá trị tối đa của các nút MIN này sẽ được truyền ngược lên cho nút cha mẹ (là một nút MAX) Sau đó giá trị này được gán cho ông bà của các nút MIN như là một giá trị beta kết thúc tốt nhất Tiếp theo thuật toán này sẽ đi xuống các nút cháu khác và kết thúc việc tìm kiếm đối với nút cha mẹ của chúng nếu gặp bất kỳ một giá
trị nào lớn hơn hoặc bằng giá trị beta này Quá trình này gọi là cắt tỉa Beta (βcut) Cách làm tương tự cũng được thực hiện cho việc cắt tỉa Alpha (α cut) đối
với các nút cháu của một nút MAX.
Hai quy luật cắt tỉa dựa trên các giá trị alpha và beta là:
1 Quá trình tìm kiếm có thể có kết thúc bên dưới một nút MIN nào có giá trị
beta nhỏ hơn hoặc bằng giá trị alpha của một nút cha MAX bất kỳ của nó.
2 Quá trình tìm kiếm có thể kết thúc bên dưới một nút MAX nào có giá
trị alpha lớn hơn hoặc bằng giá trị beta của một nút cha MIN bất kỳ của
Việc cắt tỉa Alpha-beta như vậy thể hiện quan hệ giữa các nút ở lớp n vàcác nút ở lớp n+2 và do quan hệ đó toàn bộ các cây con bắt nguồn ở lớp n+1
đều có thể loại khỏi việc xem xét.
Chú ý rằng giá tị truyền ngược thu được hoàn toàn giống như kết quả Minimax, đồng thời tiết kiệm được các bước tìm kiếm một cách đáng kể.
Trang 12Giải thuật:
- Nếu mức đang xét là đỉnh (gốc cây), đặt giá trị của alpha là -∞ và beta là+∞.
- Nếu như đạt đến mức giới hạn tìm kiếm (đến tầng dưới cùng của cây tìm kiếm, nút lá), tính giá trị tĩnh của thế cờ hiện tại ứng với người chơi ở đó Ghi lại kết quả.
- Nếu như mức đang xét là của MIN, thực hiện các công việc sau cho đến khi tất cả các con của nó đã được xét với thủ tục Alpha – beta hoặc cho đến khi
alpha là bằng hoặc lớn hơn beta.
+ Áp dụng thủ tục Alpha – beta với giá trị alpha và beta hiện tại cho một
con Ghi nhớ lại kết quả.
+ So sánh giá trị ghi nhớ với giá trị beta, nếu giá trị đó nhỏ hơn thì đặtbeta bằng giá trị mới này Ghi nhớ lại beta (thu hẹp khoảng [alpha, beta]bằng cách giảm giá trị beta).
- Nếu như mức đang xét là của MAX, thực hiện các công việc sau cho đến khi tất cả các con của nó đã được xét với thủ tục Alpha – beta hoặc cho đến
khi alpha là bằng hoặc lớn hơn beta.
+ Áp dụng thủ tục Alpha – beta với giá trị alpha và beta hiện tại cho một
con Ghi nhớ lại kết quả.
+ So sánh giá trị ghi nhớ với giá trị alpha, nếu giá trị đó nhỏ hơn thì đặtalpha bằng giá trị mới này Ghi nhớ lại alpha (thu hẹp khoảng [alpha,beta] bằng cách giảm giá trị alpha).
Trang 13Mã giả thuật toán cắt cụt Alpha-beta:
function AlphaBeta(alpha, beta, depth): integer;begin
if (depth = 0) or (pos là nút lá) then
Result := Eval { Tính giá trị thể cờ pos } else
begin
best := -INFINITY;
Gen; { Sinh ra mọi nước đi từ vị trí pos }
while (còn lấy được một nước đi m) and (best < beta)
begin
if best > alpha then alpha := best; Thực hiện nước đi m;
value := -AlphaBeta(-beta, -alpha, depth-1); Bo thực hiện nước đi m;
if value > best then best := value; end;
Result := best; end;
4 Các ứng dụng của thuật toán
Thuật toán Minimax và phương pháp cắt cụt Alpha-Beta là hai phương pháp quan trọng trong lĩnh vực trò chơi và trí tuệ nhân tạo Dưới đây là một số ứng dụng của hai phương pháp này trong thực tế:
- Trò chơi điện tử: Cả thuật toán Minimax và phương pháp cắt cụt
Alpha-Beta được sử dụng rộng rãi trong phát triển trò chơi điện tử Chúng giúp máy tính đưa ra những quyết định tối ưu và tính toán các nước đi hay hành động dựa trên hành vi của người chơi hoặc đối thủ ảo.
- Trò chơi bài: Thuật toán Minimax và phương pháp cắt cụt Alpha-Beta
cũng có thể được áp dụng trong các trò chơi bài như Poker, Bridge, hay Chess Chúng giúp tính toán và ước lượng xác suất chiến thắng trong các tình huống khác nhau, từ đó đưa ra quyết định tốt nhất cho người chơi.