Bên cạnh đó, chú́ng ta ngày càng đặt ra nhữ̃ng bàitoán trong thực tế, nhằm giải quyết được các vấn đề, nhu cầ̀u củ̉a con ngườ̀i, vớimột lượng thông tin, dữ̃ liệu khổng lồ, cầ̀n ph
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN NHẬP MÔN TRÍ TUỆ NHÂN TẠO
ĐÊ TÀI:
Áp dụng thuật toán minimax và cắt tỉa alpha vào trò chơi cờ tướng
NGUYỄN TIẾN ĐẠT
Hà Nội, tháng 12 năm 2021
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI NÓI ĐẦU 2
MỞ ĐẦU 3
I Đặt vấn đề 3
CHƯƠNG 1: THUẬT TOÁN MINIMAX VÀ̀ CẮT TỈA ALPHA 4
1.1 Đặt ý tưởng 4
1.2 Thuật toán MiniMax và AlphaBeta 5
1.2.1 Thuật toán MiniMax 5
1.2.2 Thuật toán cắt tỉa AlphaBeta 12
Chương 2: PHÂN TÍCH VÀ̀ LẬP TRÌNH GAME 21
2.1 Mô tả ý tưởng 21
2.2 Xây dựng chương trình 21
2.2.1 Lượng giá 21
2.2.2 Sinh nước đi 26
2.2.3 Giao diện chương trình 32
2.3 Cài đặt chương trình 32
CHƯƠNG 3 : KẾT LUẬN 33
3.1 Các vấn đề khó khăn và cách thức giải quyết 33
3.2 Đánh giá chương trình 33
3.3 Hướng phát triển 33
TÀ̀I LIỆU THAM KHẢO 34
Trang 4LỜI CẢM ƠN
Trong thời gian nghiên cưu va hoc tâp ̣ môn Nhập môn Trí tuệ nhân tạo(Vơingôn ngữ lâp ̣ trinh java), môn đồ họa máy tính cùng vơi viêc ̣ tim hiêu va đoc cactai liêụ trên thư viêṇ Trường va viêc ̣ tim hiêu thêm tai liêụ hoc tâp ̣ trên internet
nhóm em đã găp ̣ không it kho khăn vê viêc ̣ xây dưng va thiêt kê game Cờ tướng
sử dụng ngôn java ưng dụng đồ họa máy tính và kiến thức lập trình hướng đốitượng Vơi sư giúp đỡ quy bau của cac thầy cô giao va cac ban nhom em đã hoan
thanh game va bai bao cao môn học Xây game cờ tướng
Đông thời em xin gửi lời cam ơn đăc ̣ biêṭvê sư hương dẫn va chi bao nhiêṭtinh
của thầ̀y giáo Phạm Đức Hồng đã tâṇ tinh giúp đỡ nhóm em trong suât qua trinh
hoan thanh game cũng như bai bao cao nay
Tuy nhiên, kinh nghiêṃ còn thiêu nên trong game cũng như bai bao cao naychắc chắn sẽ không tranh khỏi những thiêu sot, han chê nhât định Những y kiênnhâṇ xét va gop y quy bau của thầy cô va cac ban la cơ sơ đê nhóm em hoc hỏithêm va hoan thiêṇ thêm kiên thưc va củng cô thêm kinh nghiêṃ của ban thânminh Nhóm em rât mong nhâṇ đươc sư nhâṇ xét va gop y từ thầy cô va cacban.Mặc dù̀ đã̃ rất nỗ lực và cố gắng nhưng chắc chắn rằng đề tài vẫ̃n cò̀n nhiềuthiếu sót,nhóm em mong sẽ̃ nhận đuợc sự góp ý, phê bình củ̉a cac thầ̀y cô, va cácbạn để đề tài hoàn thiện hơn
Em xin chân thành cảm ơn!
Trang 5LỜI NÓI ĐẦU
Các chiến lược tìm kiếm cơ bản chỉ sử̉ dụ ̣ng các thông tin chung củ̉a bài toán, nókhông phù̀ hợp với nhiều bài toán thực tế trong cuộc sống vì chú́ng đò̀i hỏ̉i quánhiều về thờ̀i gian và bộ nhớ Bên cạnh đó, chú́ng ta ngày càng đặt ra nhữ̃ng bàitoán trong thực tế, nhằm giải quyết được các vấn đề, nhu cầ̀u củ̉a con ngườ̀i, vớimột lượng thông tin, dữ̃ liệu khổng lồ, cầ̀n phải đưa ra nhữ̃ng chiến lượng giảiquyết tối ưu, thông mình để đạt hiệu quả hơn, vậy nên cầ̀n nghiên cứu, thiết lập vàcải thiện nhữ̃ng chiến lược tìm kiếm với tri thức bổ sung (informed searchstrategies) sử̉ dụ ̣ng các tri thức cụ ̣ thể củ̉a bài toán.Trong đồ án này, nhóm sinhviên chú́ng em đã̃ chọn ra một trong các giải thuật tìm kiếm để mô phỏ̉ng vào mộtbài toán thực tế đó là chương trình “Cờ̀ tướng”, một trò̀ chơi rất quen thuộc vớichú́ng ta.Với mụ ̣c tiêu đặt là có thể hiểu và vận dụ ̣ng được giải thuật tìm kiếm trithức, và củ̉ng cố được kĩ năng lập trình để tạo nên bản demo hoàn chỉnh
Quá trình thực hiện bao cao gặp nhiều khó khăn vì ngôn ngữ̃ lập trình mới, kinhnghiệm thực tế cò̀n hạn chế, em mong sẽ̃ nhận được sự góp ý, phê bình củ̉a cô để
đề tài này hoàn thiện hơn
Em xin chân thành cảm ơn sự giúp đỡ của Thầy!
Trang 6MỞ ĐẦU
I Đặt vấn đề
Game cờ̀ tướng đã̃ xuất hiện từ̀ rất lâu đờ̀i, được nhiều các thế hệ yêu thíchbởi việc chơi cờ̀ cũ̃ng như việc cầ̀n quân đánh trận Hiện nay, Cờ̀ Tướng trở thànhmột trò̀ chơi trí tuệ mang tầ̀m cỡ̃ quốc tế
Trò̀ chơi Cờ̀ Tướng (tên phiên âm Trung Quốc XiangQi, tên tiếng Anh ChineseChess) là một minh hoạ rất tốt cho bài toán tìm kiếm trên cây trò̀ chơi và áp dụ ̣ngthuật toán AlphaBeta trên cây này như thế nào Đây là một trò̀ chơi thú́ vị ̣ và tươngđối phổ biến ở Việt nam, châu Á cũ̃ng như trên toàn thế giới Nó tạo cảm giácdườ̀ng như máy tính có thể suy nghĩ và đọ sức với con ngườ̀i (thực tế cho đến nay
nó vẫ̃n chỉ tính toán mà thôi) Cờ̀ Tướng là loại cờ̀ có độ phức tạp và rất nhiều mặttương đương với cờ̀ Vua
Trang 7CHƯƠNG 1: THUẬT TOÁN MINIMAX VÀ CẮT TỈA ALPHA
1.1 Đặt ý tưởng
Cờ tương la trò chơi đôi khang, trong đo hai người luôn phiên nhau đi nươc
đi của minh Trang thai băt đầu la trang thai khơi tao ban cờ, sau môi nươc đi của môṭbên, trang thai ban cờ sẽ đươc thay đôi thanh môṭtrang thai mơi hiêṇ hanh Cờ tương co luâṭcủa no, va trò chơi sẽ kêt thúc khi môṭngười co đươc trang thai phan anh sư thăng cuôc ̣ hoăc ̣ hai người rơi vao trang thai hòa cờ Ta tim cach phân tich xem từ môṭtrang thai nao đo sẽ dẫn đên đâu thủ nao sẽ thăng vơi điêu kiêṇ ca hai
co trinh đô ̣như nhau Giai thuâṭMinimax sẽ đươc ap dụng vao trong trò chơi cờ tương Hai đâu thủ trong trò chơi sẽ đươc goi la MIN va MAX va hai đâu thủ đêu biêt rõ thông tin trên ban cờ như nhau
- MAX đai diêṇ cho đâu thủ quyêt danh thăng lơi hoăc ̣ tôi đa hoa ưu thê của minh
- MIN ngươc lai, cô găng tôi thiêu hoa điêm sô của MAX
Ban cờ tương cũng chinh la môṭkhông gian trang thai vơi cac mưc va đươc biêu diên băng cây trò chơi Môi nút của cây biêu diên cho môṭtrang thai trên ban cờ Nút gôc biêu diên trang thai băt đầu van cờ Cac nút la thê hiêṇ trang thai kêt thúc của trò chơi (khi môṭđâu thủ gianh phần thăng, thua, hay hai đâu thủ hòa nhau)
Hai đâu thủ đươc goi la MAX va MIN va luân phiên đi nươc cờ của minh nênmôi mưc trên cây đươc biêu diên luân phiên la MAX va MIN Cac nút ưng vơi trang thai ma từ đo đâu thủ MAX chon nươc đi ưng vơi lơp MAX, cac nút ma đâu thủ MIN chon nươc đi ưng vơi lơp MIN Vơi môi nươc đi trong ban cờ, tương ưngvơi cac mưc trên cây, giai thuâṭminimax sẽ định gia trị cho cac nút như sau:
- Nêu nút la nút la gan cho nút đo môṭgia trị đê phan anh trang thai thăng, thua hay hòa của cac đâu thủ
- Sử dụng gia trị cac nút la đê xac định gia trị của cac nút ơ mưc trên
no:
+ Nút thuôc ̣ lơp MAX gan cho no gia trị lơn nhât trong cac nút la
+ Nút thuôc ̣ lơp MIN gan cho no gia trị nhỏ nhât trong cac nút la
Gan gia trị cho từng thê cờ theo quy tăc trên chi rõ gia trị của trang thai tôt nhât ma môi đâu thủ hi vong đat đươc Cũng giông như viêc ̣tinh toan nươc đi va thưc hiêṇ môṭnươc cờ thưc sư của đâu thủ Giai thuâṭMinimax thê hiêṇ viêc ̣tinh toan nươc đi tôi ưu cho cac đâu thủ thông qua gia trị của cac nút đươc gan Trong môṭnươc cờ, khi đâu thủ MAX đên lươt đi, đâu thủ nay sẽ chon nươc đi ưng vơi trang thai co gia trị cao nhât trong cac trang thai con, còn đâu thủ MIN sẽ chon môṭ nươc đi ưng vơi trang thai co gia trị nhỏ nhât trong cac trang thai con
Tuy nhiên, cờ tương la môṭtrò chơi co thê noi la phưc tap, viêc ̣mơ rông ̣
không gian trang thai khi ap dụng giai thuâṭMinimax co thê găp ̣ kho khăn Vi thê
Trang 8ma chúng ta chi xét đên viêc ̣triên khai giai thuâṭMinimax vơi trò chơi cờ tương
co mưc đô ̣sâu đươc định trươc (khoang 5 mưc) Viêc ̣định trươc mưc hay đô ̣sâu sẽ lam giam thời gian tinh toan cho giai thuâṭva AI (may) sẽ đưa ra đươc môṭ nươc đi nhanh hơn va chinh xac hơn Phần sau đây nhóm em sẽ trinh bay vê quatrinh xây dưng giai thuâṭMinimax
1.2 Thuật toán MiniMax và AlphaBeta
1.2.1 Thuật toán MiniMax
1.2.1.1 Mô tả
Trang 9Giả 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ú́ng thà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ơi cự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ờ̀ được gọi là lượng giá tĩnh (static evaluation) Hàm thực hiện việc tính toán được gọ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ớn nhấ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 bé́ hơn hay điểm dương củ̉a đối thủ̉ nhỏ̉ đi (hình 1)
Trang 10Ví dụ ̣ một phầ̀n cây trò̀ chơi trong hình 2
Ngườ̀i chơi cực đại hi vọng chọn nước đi bên phải để đạt được điểm 8.Thế nhưng nếu đi như vậy thì khi đến lượt đi củ̉a ngườ̀i chơi cực tiểu, anh ta sẽ̃
cố gắng không cho ngườ̀i chơi cực đại đạt được điểm này bằng cách chọn nước
đi nhánh bên trái và như vậy, ngườ̀i chơi cực đại chỉ được có 1 điểm thay vì 8.Ngược lại, nếu ngườ̀i chơi cực đại chọn nước đi bên trái, thì trong tình huốngxấu nhất anh ta vẫ̃n cò̀n được 2 điểm, lớn hơn là chọn nước đi bên phải Nóichung, ngườ̀i chơi cực đại sẽ̃ phải tìm cách nhận ra các nước đi củ̉a đối phươngtiếp theo làm cho điểm giảm xuống Và tương tự như vậy, ngườ̀i chơi cực tiểuphải nhận biết được nước đi củ̉a ngườ̀i chơi cực đại cố gắng làm tă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ụ ̣cMinimax 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:
Trang 11Thuật toán Minimax
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ì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ả
Nếu như mức đang xé́t là củ̉a ngườ̀i chơi cực tiểu, áp dụ ̣ng thủ̉ tụ ̣c Minimax
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ụ ̣c Minimax
này cho các con củ̉a nó Ghi nhớ kết quả lớn nhất
1.2.1.2 Xây dựng chương trình cho thuật toán Minimax
Dựa vào phát biểu trên để viết chương trình cho thuật toán này bằng ngônngữ̃ tựa Java Đây là một phương thức có tên là Minimax và sẽ̃ là loại đệ qui.Trước hết, để phương thức này biết đã̃ đạt đến giới hạn tìm kiếm chưa, ta cầ̀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) Giá trị ̣ trả về củ̉a hàm chính là điểm củ̉a thế cờ̀ (bàn cờ̀) pos.
Mỗi khi Minmax đượ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ới hạn
chính là khi depth = 0 Khi đạt độ sâu này ta sẽ̃ gọi phương thức lượng giá Eval
để đá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ật
toán) Như vậy bước đầ̀u phương này có dạng sau:
Public int MinMax (int pos, int depth){
else{
//Gọi đệ qui với độ sâu giản
MinMax (pos, depth - 1);
dần
}}
Ở trên, Minmax đượ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 đi mộ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, ta dù̀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ụ ̣ngtiếp thủ̉ tụ ̣c Minimax cho nó để tính điểm value củ̉a nó
Trang 12Vậy phương thức MinMax có dạng:
public int MinMax (int pos, int depth){
if (depth == 0)
return Eval (pos) // Tính giá trị thế cờ pos else{
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){
pos = Tính thế cờ̀ mới nhờ̀ đi m;
//Tính điểm của pos
value = Minimax (depth-1);
Theo phát biểu củ̉a thuật toán, ta thấy các điều 2 và 3 chỉ khác nhau ở
cách chọn kết quả tốt nhất best phụ ̣ thuộc vào ngườ̀i chơi đang là ngườ̀i chơi
cực đại hay cực tiểu Cuối cù̀ng thuật toán sẽ̃ trả về điểm tốt nhất đạt được Vậyhàm này được phát triển tiếp thành:
public int MinMax (int pos, int depth){
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) {
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) {
if (value > best) best = value;
Trang 13dương: dấu dương dành cho ngườ̀i chơi cực đại và dấu âm cho ngườ̀i chơi cựctiểu Với ngườ̀i chơi cực đại sẽ̃ mong muốn điểm này càng dương càng tốt, cò̀nngườ̀i chơi cực tiểu lại mong muốn điểm này càng âm càng tốt Do đó để dễ 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ươngtrình thực hiện đổi dấu như sau:
value = -Minimax (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ới nhauđược) Giá trị ̣ best cầ̀n được khởi đầ̀u rất nhỏ̉ để đảm bảo không vượt mọi giá trị ̣value, tốt nhất là giá trị ̣ - vô cù̀ng:
Public int MinMax (int pos, int depth){
if depth = 0 then
return Eval (pos); //Trả về giá trị thế cờ pos else{
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) {
pos = Tính thế cờ̀ mới nhờ̀ đi m;
value = -MinMax (pos, depth - 1);
if (value > best) best = value;
}
return best;
} }
Thông thườ̀ng, bàn cờ̀ được biểu diễn bằng các biến toàn cụ ̣c Do đó thaycho truyền tham số là một bàn cờ̀ mới pos vào thủ̉ thụ ̣c Minimax thì ngườ̀i tabiến đổi luôn biến toàn cụ ̣c này nhờ̀ thực hiện nước đi "thử̉" (nước đi dẫ̃n đến
bàn cờ̀ mới pos) Sau khi Minimax thực hiện việc tính toán dựa vào bàn cờ̀ lưu
ở biến toàn cụ ̣c thì thuật toán sẽ̃ dù̀ng một số thủ̉ tụ ̣c để loại bỏ̉ nước đi này
Minimax bỏ̉ các tham số pos và được xây dựng hoàn chỉnh như sau:
public int MinMax(int depth) {
if (!run) {return -1;
}
Trang 14int best, i, value;
if (depth == 0) {return Eval();
} else {best = -INFINITY;
Gen();
i = gen_begin[ply];
while (i < gen_end[ply]) {makeMove(gen_dat[i].m);
value = MinMax(depth - 1);
unMakeMove();
if (value > best) {best = value;
if (ply == 0) {newMove = gen_dat[i].m;
}}++i;
}return best;
}}
1.2.1.3 Đánh giá
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à b d Đâ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 trong trò̀
chơi cờ̀) thì số nú́t phải lượng giá là 404 = 2560000 (trên 2 triệu rưỡ̃i nú́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ành 405 =
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 đổi mỗi thế cờ thành một con số để đánh giá Rất tiếc là các con số này thường khô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ời gian 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.
1.2.2 Thuật toán cắt tỉa AlphaBeta
1.2.2.1 Mô tả
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ó
Trang 15thể tăng độ sâu củ̉a cây tìm kiếm Giả sử̉ hình 3 là một thế cờ̀ mà hai nú́t đầ̀utiê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 ítnhấ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 đinữ̃a.
Trang 17Bâ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 đivà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ôngthể 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 đảmbả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.
Trang 18nó Rất có thể do có đủ̉ thông tin từ̀ cha, ông nên không cầ̀n phải làm bất cứ việc gìnữ̃a cho nú́t này Cũ̃ng vậy, nguyên tắc này cũ̃ng giú́p chỉnh sử̉a hoặc xác đị ̣nhchính xác giá trị ̣ tại nú́t cha, ông nó Như trên nói, một cách để tiện theo dõ̃i quátrình tính toán là dù̀ng các tham số alpha và beta để ghi lại các thông tin theo dõ̃icầ̀n thiết Thủ̉ tụ ̣c AlphaBeta được bắt đầ̀u tại nú́t gốc với giá trị ̣ củ̉a alpha là -vôcù̀ng và beta là +vôcù̀ng Thủ̉ tụ ̣c sẽ̃ tự gọi đệ quy chính nó với khoảng cáchgiữ̃a các giá trị ̣ alpha và beta ngày càng hẹp hơn.
Trang 19Thuật toán AlphaBeta
Nếu mức đang xé́t là đỉnh (gốc cây), đặt giá trị ̣ củ̉a alpha
là -vôcù̀ng và beta là +vôcù̀ng
*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ì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 lại kết quả
* Nếu như mức đang xé́t là củ̉a ngườ̀i chơi cực tiểu
o 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 AlphaBeta hoặc cho đến khi alpha là bằng hoặc lớn hơnbeta
- Áp dụ ̣ng thủ̉ tụ ̣c AlphaBeta với giá trị ̣ alpha và betahiệ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ì đặt beta bằng giá trị ̣ mới này
*Nếu như mức đang xé́t là củ̉a ngườ̀i chơi cực đại,
o 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 AlphaBeta hoặc cho đến khi alpha là bằng hoặc lớn hơnbeta
- Áp dụ ̣ng thủ̉ tụ ̣c AlphaBeta với giá trị ̣ alpha và betahiệ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ị ̣ đó lớn hơn thì đặt alpha bằng giá trị ̣ mới này
16