Để giúp mọi người chơi tốt các trò chơi này, ta sẽ xây dựng 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 đó.. Để
Trang 1TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2LỜI MỞ ĐẦU
Ngày nay, vấn đề giải trí là một phần tất yếu của cuộc sống Một đóng gópkhông nhỏ cho phần tất yếu đấy chúng ta không thể không thể không nhắc tớicác trò chơi như cờ vua, cờ tướng…
Để giúp mọi người chơi tốt các trò chơi này, ta sẽ xây dựng 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ó đượcmột chiến lược chơi hiệu quả Dạng bài toán này có đặc điểm độc nhất vô nhị
là ta phải tính đến mọi nước đi mà đối thủ của ta có thể sử dụng Để làm điềunày, các chương trình máy tính chơi cờ, cũng như các dạng khác của trí tuệ
nhân tạo như lập kế hoạch tự động (machine planning), thường sử dụng các
thuật toán tìm kiếm như thuật toán minimax, tỉa cây tìm kiếm, và tỉa cây
alpha-beta (alpha-beta pruning) Để hiểu sâu hơn về các nước đi này em đã
chọn “Chiến lược minimax và phương pháp cắt tỉa alpha-beta” làm đề tàinghiên cứu
Em xin chân thành cảm ơn thầy Lưu Minh Tuấn đã trang bị cho em nhữngkiến thức cần thiết qua môn “Trí tuệ nhân tạo” để có thể hoàn thành bài viếtnày
Tuy nhiên do thời gian cùng với trình độ hiểu biết còn hạn hẹp nên khótránh khỏi những thiếu sót Rất mong nhận được sự đóng góp của quý thầy cô
và các bạn để bài viết được hoàn thiện hơn
Xin chân thành cảm ơn!
Trang 3CHƯƠNG I: CHIẾN LƯỢC MINIMAX
I Giới thiệu chung.
I.1 Khái quát về minimax.
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 íchvốn được dự tính là tối thiểu (maximin) Nó bắt nguồn từ trò chơi có tổngbằng không Nó 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 chắn.Mộ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 1 nước đi, thì "nước đi tốt nhất" chính là nước đi để dẫn đến kếtquả thắng đó Nếu người B biết rằng có một nước đi mà dẫn đến tình huốngngườ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ốtnhấ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úptìm ra đường đi tốt nhất, bằng cách đi ngược từ cuối trò chơi trở về đầu Tạimỗ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ắngcủ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ủaB)
I.2 Tiêu chuẩn Minimax trong lý thuyết quyết định thống kê.
Trong lý thuyết quyết định thống kê cổ điển, ta có một đánh giá δ đượcdùng để đánh giá một tham số Chúng ta cũng giả sử có một hàm rủi ro
Trang 4R(θ,δ), thường được cho như là một tích phân của một hàm thua lỗ Trong cấu
trúc này, được gọi là minimax nếu như nó thỏa mãn
I.3 Định lý Minimax với các bước đi liên tiếp.
Trong ví dụ sau đây của một trò chơi tổng bằng 0, khi A và B đi các bướccùng một lúc, minh họa thuật toán minimax Nếu như mỗi người chơi có 3chọn lựa và ma trận lợi cho A là:
Trang 5vậy, lời giải này là không ổn định, bởi vì nếu B tin rằng A sẽ chọn A2 thì B sẽchọn B1 để thắng 1; sau đó nếu A tin rằng B sẽ chọn B1 thì A sẽ chọn A1 đểthắng 3; và sau đó B sẽ chọn B2; và cuối cùng cả hai người chơi sẽ nhận ra sựkhó khăn của việc chọn lựa Do đó một chiến lược ổn định hơn là cần thiết
Một số chọn lựa bị thống trị bởi những người khác và có thể bị loại bỏ : A
sẽ không chọn A3 bởi vì hoặc A1 hay A2 sẽ sinh ra một kết quả tốt hơn, bất
kể là B chọn gì; B sẽ không chọn B3 bởi vì B2 sẽ sinh ra kết quả tốt hơn, bất
kể là A chọn cái gì
A có thể tránh việc phải trả số lượng dự định (expected payment) hơn 1/3bằng cách chọn A1 với xác suất 1/6 và A2 với xác suất 5/6, bất kể là B đãchọn gì B có thể tính chắc phần lợi dự định (expected gain) ít nhất 1/3 bằngcách sử dụng một chiến thuật ngẫu nhiên của việc chọn B1 với xác suất 1/3 vàB2 với xác suất 2/3, bất kể là A chọn gì Những chiến lược minimax hỗn hợpbây giờ là ổn định và không thể nào cải tiến nữa
John von Neumann chứng minh định lý Minimax vào năm 1928, phát biểurằng những chiến lược như vậy luôn luôn tồn tại trong những trò chơi tổngbằng không cho hai người chơi và có thể tìm ra bằng cách giải một tập hợpcác phương trình trong cùng một lúc
I.4 Minimax khi gặp sự không chắc chắn.
Lý thuyết minimax đã được mở rộng ra các quyết định khi mà không cóngười chơi khác, nhưng các hậu quả của các quyết định dựa trên những sựkiện không biết trước Chẳng hạn, quyết định tương lai phát đạt của một mỏkhoáng chất kèm theo đuôi một giá phải trả nếu như không có khoáng sản ởnơi muốn thăm dò, nhưng sẽ đem lại mối lợi lớn nếu có Một tiếp cận là đối
Trang 6xử việc này như một trò chơi chống với Tự nhiên, và sử dụng một suy nghĩagiống như là luật Murphy, theo một tiếp cận làm tối thiểu các tổn thất dự địnhcực đại (maximum expected loss), sử dụng các kỹ thuật giống như trongnhững trò chơi hai người với tổng bằng không
Thêm vào đó, các cây expectiminimax đã được phát triển, cho những tròchơi trong đó sự ngẫu nhiên (ví dụ, thảy xúc xắc) là một yếu tố.
I.5 Giải thuật Minimax với các nước đi khác nhau
Một thuật toán minimax là một thuật toán đệ quy cho việc lựa chọn bước
đi kế tiếp trong một trò chơi có hai người chơi Một giá trị được gán cho mỗi
vị trí hay một trạng thái của trò chơi Giá trị này được tính toán bằng một hàmtính giá trị vị trí và nó cho biết độ tốt nếu như một người chơi đạt được đến
đó Người chơi sau đó đi một bước làm tối đa giá trị tối thiểu của vị trí là kếtquả từ tập hợp những bước đi có thể của đối thủ Nếu đó là phiên A sẽ đi, A
sẽ cho một giá trị cho mỗi bước đi hợp pháp của anh ta
Một phương pháp bố trí là gán cho một số vị trí thắng cho A như là +1 vàcho B là −1 Điều này sẽ dẫn đến lý thuyết trò chơi tổ hợp được phát triển bởiJohn Horton Conway
Một cách khác là sử dụng một quy định rằng nếu như kết quả của mộtbước đi là một chiến thắng lập tức cho A nó được gán dương vô hạn và, nếunhư là một chiến thắng lập tức cho B, âm vô hạn Giá trị cho A của bất kìnước đi nào khác là giá trị minimum của các giá trị kết quả từ mỗi bước trả lời
có thể của B (A được gọi là người chơi là cực đại và B gọi là người chơi làmcực tiểu), do vậy được gọi là thuật toán minimax Thuật toán trên sẽ gán mộtgiá trị dương hay âm vô hạn cho mỗi vị trí bởi vì giá trị của mỗi vị trí sẽ là giá
Trang 7trị của một số vị trí thắng hay thua nào đó Thông thường nhìn chung điều nàychỉ có thể xảy ra tại điểm cuối của những trò chơi phức tạp như cờ vua hay cờvây, bởi vì về mặt tính toán ta không có khả năng tính xa đến mức kết thúc tròchơi, trừ khi là trò chơi sắp kết thúc, và các vị trí không đi khác nhau đượccho các giá trị hữu hạn như là các đánh giá về mức độ tin tưởng là chúng sẽdẫn đến chiến thắng cho người này hay người khác.
Điều này có thể được mở rộng nếu như chúng ta cung cấp một hàm đánhgiá heuristic đưa ra các giá trị cho các vị trí trò chơi chưa phải là cuối cùng
mà không xét tất cả mọi trường hợp theo sau một chuỗi đầy đủ Chúng ta sau
đó có thể giới hạn thuật toán minimax để chỉ xét một số nào đó các nước đi kếtiếp Số này được gọi là "số bước kế tiếp", đo bằng "ply" Ví dụ, "Deep Blue"nhìn trước 12 ply
Thuật toán này có thể được nghĩ như là khám phá các node của một câytrò chơi Số cắt xén hiệu quả của một cây là trung bình của số các con củamỗi nốt (i.e., trung bình của các nước đi hợp pháp trong một vị trí) Số lượngcác nodes được khám phá thường là tăng theo hàm mũ với số lượng ply (nó sẽnhỏ hơn hàm mũ nếu đánh giá các nước đi bắt buộc hay là các bước lặp lại)
Số lượng các nodes cần khám phá cho việc phân tích một trò chơi do đó gầnbằng số cắt xét nâng lên luỹ thừa số ply Do vậy là không thể phân tích tròchơi ví dụ như cờ vua một cách hoàn toàn chỉ bằng thuật toán minimax Sựtrình diễn của thuật toán minimax ngây thơ có thể được cải tiến đáng kể, màkhông ảnh hưởng đến kết quả, bằng cách sử dụng cắt xén alpha-beta Cácphương pháp cắt xén heuristic khác cũng có thể được sử dụng, nhưng khôngphải tất cả chúng bảo đảm sẽ cho kết quả giống nhau như là tìm kiếm khôngcắt xén
Trang 8I.6 Mô tả thuật toán minimax.
Giả sử chúng ta có một bộ phân tích thế cờ có thể áp dụng tất cả các luật,các phương pháp đánh cờ khác nhau vào từng thế cờ và chuyển đổi chúngthành một con số đại diện (cho điểm thế cờ) Mặt khác, ta giả sử con số đó
là dương khi áp dụng cho thế cờ của một đấu thủ (được gọi là người chơicực đại - maximizer), và là âm khi áp dụng cho đấu thủ bên kia (được gọi làngười chơi cực tiểu - minimizer) Quá trình tính toán cho điểm thế cờ đượcgọi là lượng giá tĩnh (static evaluation) Hàm thực hiện việc tính toán đượcgọi là một bộ lượng giá tĩnh, và giá trị nhận được gọi là điểm lượng giá tĩnh
Cả hai đấu thủ đều cố gắng đi như thế nào đó để đạt được điểm tuyệt đối lớnnhất Người chơi cực đại 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 cực tiểu,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ểmdương của đối thủ nhỏ đi (hình dưới đây)
Trang 9II Thuật toán Minimax.
Trang 10đối phương tiếp theo làm cho điểm giảm xuống Và tương tự như vậy, ngườichơi cực tiểu phải nhận biết được nước đi của người chơi cực đại cố gắng làmtăng điểm lên Thủ tục tìm nước đi tốt nhất trên cây trò chơi như trên được gọi
là thủ tục Minimax do điểm ở mỗi nút có thể là điểm cực đại hoặc có thể làđiểm cực tiểu và có thuật toán như sau:
- Nếu như đạt đến giới hạn tìm kiếm (đến tầng dưới cùng của cây tìmkiế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ả
- Nếu như mức đang xét là của người chơi cực tiểu, áp dụng thủ tụcMinimax này cho các con của nó Ghi nhớ kết quả nhỏ nhất
- Nếu như mức đang xét là của người chơi cực đại, áp dụng thủ tụcMinimax này cho các con của nó
- Ghi nhớ kết quả lớn nhất
II.2 Viết chương trình cho thuật toán Minimax.
Bây giờ, ta thử dựa vào phát biểu trên để viết chương trình cho thuật toánnày bằng ngôn ngữ tựa Pascal Đây là một hàm có tên là Minimax và sẽ làloại đệ qui Trước hết, để hàm này biết đã đạt đến giới hạn tìm kiếm chưa, tacần cung cấp cho nó một tham số về độ sâu tìm kiếm depth (để biết phải tìmđến đâu), đồng thời ta cũng phải cho biết thế cờ hiện tại pos để nó từ đó nóbiết cách tính tiếp Giá trị trả về của hàm chính là điểm của thế cờ (bàn cờ)pos Vậy hàm sẽ có khai báo dạng:
Code:
function Minimax (pos, depth): integer;
// Mỗi khi Minimax được gọi, nó sẽ càng gần đến giới hạn tìm kiếm, do đó
ta sẽ gọi hàm này với độ sâu bằng độ sâu cũ trừ đi một Đạt đến độ sâu giớihạn chính là khi depth = 0 Khi đạt độ sâu này ta sẽ gọi hàm lượng giá Eval để
Trang 11đánh giá chất lượng của thế cờ pos hiện tại (thực hiện điều một của thuậttoán) Như vậy bước đầu hàm này có dạng sau:
Code:
function Minimax (pos, depth): integer;
begin
if depth = 0 then { Đã đạt đến giới hạn }
Minimax := Eval (pos) { Tính giá trị thế cờ pos }
// Ở trên, Minimax được gọi với độ sâu giảm đi một Đó là độ sâu của các thế
cờ là con Các thế cờ con pos' đó là các thế cờ được tạo ra từ pos bằng cách đimột nước đi hợp lệ m nào đó Do đó ta phải có các lệnh thực hiện đi quân đểđến các thế cờ mới Để biết từ thế cờ pos có thể đi được những nước nào, tadùng một thủ tục Gen có tham số là thế cờ cha pos Thủ tục này sẽ cất các thế
cờ con pos' đó vào bộ nhớ (dạng danh sách) Việc tiếp theo là ta lấy từng thế
cờ đó ra và áp dụng tiếp thủ tục Minimax cho nó để tính điểm value của nó.Vậy hàm Minimax bây giờ có dạng:
Trang 12else begin
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
begin
pos := Tính thế cờ mới nhờ đi m;
value := Minimax (pos, depth-1); { Tính điểm của pos }
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
begin
pos := Tính thế cờ mới nhờ đi m;
value := Minimax (pos, depth-1); { Tính điểm của pos }
{ Chọn điểm tốt nhất tuỳ thuộc theo người chơi }
if người chơi là người cực đại then
Trang 13dễ xử lí ta sẽ tuỳ theo mức người chơi mà đổi dấu giá trị đánh giá thế cờ pos.Chú ý rằng, thay đổi độ sâu là chuyển sang đối phương nên phải đổi dấu.Chương trình thực hiện đổi dấu như sau:
Code:
value := -Minimax (pos, depth-1); { Tính điểm của pos }
// Cũng do dùng cùng hàm lượng giá nên khi đến lượt người chơi cực đại vàcực tiểu có cùng cái nhìn như nhau về một thế cờ Điều này dẫn đến có thểdùng cùng cách chọn nước đi tốt nhất cho họ (gộp được điều 2 và 3 lại vớinhau được) Giá trị best cần được khởi đầu rất nhỏ để đảm bảo không vượtmọi giá trị value, tốt nhất là giá trị -vô cùng:
Code:
function Minimax (pos, depth): integer;
Trang 14Gen (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
begin
pos := Tính thế cờ mới nhờ đi m;
value := -Minimax (pos, depth - 1);
if value > best then best := value;
Gen; { Sinh ra mọi nước đi từ thế cờ pos }
while còn lấy được một nước đi m do
Trang 15thực hiện nước đi m;
value := -Minimax (depth - 1);
bỏ thực hiện nước đi m;
if value > best then best := value;
II.3 Đánh giá thuật toán minimax.
Nếu hệ số nhánh trung bình của cây là b và ta thực hiện tìm kiếm đến độsâu d thì số nút phải lượng giá ở đáy cây như ta đã biết là bd Đây chính là số
đo độ phức tạp của thuật toán Nếu b = 40, d = 4 (các con số thường gặp trongtrò chơi cờ) thì số nút phải lượng giá là 40^4 = 2560000 (trên 2 triệu rưỡinút) Còn với b = 40, d = 5 thì số nút phải lượng giá sẽ tăng 40 lần nữa thành40^5 = 102400000 (trên 102 triệu nút)
Lưu ý: toàn bộ ý tưởng của thuật toán này là dựa trên việc chuyển đổimỗi thế cờ thành một con số để đánh giá Rất tiếc là các con số này thườngkhông tốt và không đủ để đánh giá hết mọi điều Mặt khác, thuật toán này cóthể rất tốn kém (chạy chậm) do việc sinh các nước đi và lượng giá rất tốn thờigian tính toán, do vậy độ sâu của cây trò chơi cũng bị hạn chế nhiều Ta cần
có thêm những cải tiến để cải thiện tình hình
Trang 16CHƯƠNG II: PHƯƠNG PHÁP CẮT TỈA
ALPHA—BETA
I Giới thiệu chung.
1.1 Khái quát về thủ tục Alpha-beta.
Tìm kiếm Alpha-Beta là phương pháp làm giảm số nút cần phải xét tớitrong chiến lược Minimax Nó giảm thời gian cần thiết của việc tìm kiếm
và phải được giới hạn để không lãng phí thời gian tìm kiếm những nước đi
đã bất lợi rõ rệt cho người chơi Việc thi hành chính xác của alpha-beta ghilại nước đi tốt nhất cho mỗi bên khi nó duyệt cây
Chúng ta thực hiện theo cùng cách với thuật giải minimax Với những nútMIN, điểm số được tính bắt đầu từ dương vô cực và giảm dần Với nhữngnút MAX, điểm số được tính bắt đầu từ âm vô cực và tăng dần.Hiệu quả của thủ tục Alpha-Beta dựa trên thứ tự kiểm tra những hậu duệcủa một nút Nếu chúng ta may mắn, tại nút MIN chúng ta sẽ luôn xem xétnhững nút theo thứ tự điểm từ thấp đến cao và tại nút MAX, các nút theothứ tự điểm từ cao đến thấp Nói chung, có thể diễn đạt rằng trong hầu hếttrường hợp thuận lợi, phép tìm kiếm alpha-beta mở ra nhiều lá tươngđương với một cây trò chơi minimax có độ sâu gấp đôi