Tải bản đầy đủ (.docx) (20 trang)

báo cáo môn trí tuê nhân tạo áp dụng minimax và cắt tỉa alpha-beta xây dựng game cờ tướng trên windows phone

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (473.07 KB, 20 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
***
BÁO CÁO MÔN TRÍ TUỆ NHÂN TẠO
Ứng dụng Alpha-beta cắt tỉa xây dựng game cờ tướng
GVHD: Thầy Phạm Văn Hải
Nhóm thực hiện: 6
Lê Văn Thành 20102156
Lê Minh Quân 20102034
Tạ Văn Trường 20102404
Nguyễn Đức Thọ 20102258
Nguyễn Văn Thông 20102261
Nguyễn Trọng Hiển 20101533
Mục lục
Phần 1: Tổng quan về các vấn đề liên quan
1. Giới thiệu về trò chơi cờ tướng
Trò chơi cờ tướng là một trong những trò chơi thể thao trí tuệ hấp dẫn,
được đưa vào thi đấu quốc tế. Cờ tướng có xuất xứ từ Trung Quốc và nhanh
chóng được nhiều người chơi trên toàn thế giới. Cờ tướng cũng giống như các
môn cờ khác là trò chơi đối kháng 2 người, người chơi sử dụng kĩ năng, tư duy
chiến thuật để giành chiến thắng. Cờ tướng cũng là một loại cờ có nhiều chiến
thuật, áp dụng nhiều tư duy nhất. Cờ tướng nhìn qua có vẻ giống cờ vua nhưng
luật di chuyển và khống chế phạm vi của quân cờ được áp đặt lên, làm cho
người chơi có thêm nhiều chiến thuật trong cách phòng ngự và tấn công.
Bàn cờ tướng có kích thướng 9x10, ở thời điểm xuất phát 2 bên được phân
cách bởi sông (còn gọi là “hà”), người chiếm được “hà” sẽ có nhiều lợi thế
trong tấn công. Cờ tướng gồm 7 quân cờ chính: Tướng, Sĩ, Tượng, Xe, Pháo,
Mã, Tốt.
2. Windows Phone và framework XNA 4.0
Hiện nay, điện thoại di động ngày càng phổ biến và tiện lợi, việc sở hữu 1
chiếc smartphone là rất dễ dàng. Các ứng dụng trên điện thoại có rất nhiều với


mục đích giải trí, học tập… Nhóm quyết định xây dựng game cờ tướng trên
nền tảng Windows Phone.
Windows Phone (Windows Phone 7 Series) là hệ điều hành của Microsoft
dành cho SmartPhone kế tục nền tảng Windows. Khác với Windows Mobile,
Windows Phone tập trung vào sự phát triển Marketplace – nơi các nhà phát
triển có thể cung cấp sản phẩm tới người dùng.
Với Windows Phone 7, Microsoft đã phát triển giao diện người dùng mới mang
tên Metro – tích hợp khả năng liên kết phần cứng với phần mềm của hãng thứ
3 một cách dễ dàng
Sau đó là các phiên bản 7.1, 7.5, 7.8 và gần đây nhất là phiên bản Windows
Phone 8.0 với nhiều tính năng thông minh hỗ trợ
2
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
2
Vì mới bắt đầu tìm hiểu và làm ứng dụng Windows Phone đầu tiên, nhóm đã
quyết định lựa cho nền tảng Windows Phone 7.1 không quá mới như 8.0 chạy
ổn định, và hỗ trợ nhiều hơn so với 7.0
Ứng dụng viết trên nền XNA 4.0 framwork chuyển cho lập trình game trên các
loại hệ điều hành windows.
Phần 2: Xây dựng game cờ tướng
1. Biểu đồ UseCase
Figure 1: Biểu đồ Usecase
2. Tìm lớp và xác định trách nhiệm cho lớp
Game cờ tướng gồm có: bàn cờ và các quân cờ trên bàn cờ. Quân cờ gồm 7
loại quân với cách di chuyển khác nhau, nhưng có nhiều thuộc tính chung của 1
quân cờ.
Bàn cờ được hình thành từ các quân cờ, như vậy ta xây dựng lớp quân cờ kết
tập nên bàn cờ. 7 quân cờ cụ thể lại được kết thừa từ lớp quân cờ này.
Người chơi chơi game ở màn chơi -> xây dựng lớp Game

Xây dựng thuật toán chạy AI -> lớp computer
3
Nhóm 63
Figure 2: biểu đồ lớp tổng quan
Figure 3: biểu đồ lớp kết tập
4
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
4
3. Thiết kế chi tiết cho các lớp
Figure 4: Biểu đồ lớp chi tiết
Xác định nước đi kế tiếp cho các quân cờ
Tại mỗi bàn cờ nhất định, chúng ta cần duyệt qua tất cả các cách đi của các
quân cờ để tìm ra nước đi tối ưu tiếp theo. Muốn làm được điều đó ta cần biết
đặc điểm và cách đi của từng quân cờ.
Luật chơi cờ tướng cơ bản :
5
Nhóm 65
Luật di chuyển các quân cờ như sau:
1. Tướng: Mỗi nước đi một ô, đi ngang hoặc dọc. Tướng luôn ở trong phạm vi
cung."Cung" gồm 4 hình vuông nhỏ được gạch đường chéo.
2. Sĩ: Đi chéo, mỗi nước một ô. Sĩ luôn ở trong "Cung" giống như Tướng.
3. Tượng: Đi chéo 2 ô mỗi nước, đi ngang hoặc dọc. Tượng không được phép
qua sông sang bàn cờ của đối phương.Nước đi của Tượng không hợp lệ khi có
quân cờ chặn giữa đường.
4. Xe: Đi ngang hoặc dọc khắp bàn cờ miễn không có quân khác cản trên
đường đi.
5. Mã: Đi ngang 2 ô và đi dọc 1 ô ( hoặc đi dọc 2 ô và đi ngang 1 ô) cho mỗi
nước đi.Nếu có quân khác nằm cạnh mã và cản đường ngang 2 hoặc cản
đường dọc 2, thì mã không được đi đường đó.

6. Pháo: Đi ngang hoặc dọc giống như Xe. Điểm khác là khi Pháo muốn ăn
quân của đối phương thì giữa Pháo và quân muốn ăn phải có quân cản ở giữa.
7. Tốt: Đi mỗi nước một ô. Nếu Tốt chưa qua sông thì chỉ được đi thẳng tiến.
Khi đã vượt qua sông có thể đi ngang hoặc đi thẳng tiến, mỗi nước một ô.
8. Ăn quân: Khi quân di chuyển đến một vị trí đang đứng của quân đối
phương, quân đối phương bị ăn và bị lấy ra khỏi bàn cờ.
9. Chống tướng: 2 tướng trên bàn không được nằm trên cùng một cột dọc
mà không có quân cản ở giữa.Nước đi để 2 quân tướng ở vị trí chống tướng là
không hợp lệ.
Dựa vào luật chơi cờ tướng cơ bản trên, ta xây dựng được phương pháp xác
định nước đi tiếp theo của từng quân cờ.
6
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
6


Coi bàn cờ là một mảng 2 chiều a[i,j] với a[i,j]=0 tức là chưa có quân cờ và
a[i,j]={1,2,3,4,5,6,7} tương ứng với quân {tướng, sỹ, tượng, xe, mã , pháo, tốt}
của quân ta và a[i,j]={-1,-2,-3,-4,-5,-6,-7} tương ứng quân {tướng, sỹ, tượng, xe ,
mã , pháo, tốt } của quân địch.
Bây giờ ta cần xác định những ô có thể đi của các quân cờ với vị trị hiện tại của
chúng là a[i,j]
1. Tướng :
Ta kiểm tra tất cả các ô
Nếu thỏa mãn 3 điều kiện thì cập nhật vị trí quân tướng có thể đi.
2. Sỹ :
Ta kiểm tra tất cả các ô
Nếu thỏa mãn 3 điều kiện thì cập nhật vị trí quân sỹ có thể đi.
3. Tượng :

If then ( quân tượng đi được tới ô a[i-2,j-2]
If then ( quân tượng đi được tới ô a[i-2,j+2]
If then ( quân tượng đi được tới ô a[i+2,j-2]
7
Nhóm 67
If then ( quân tượng đi được tới ô a[i+2,j+2]
4. Xe :
+ For (k=i+1 , k<11 , k++)
If ( a[k,j]==0 ) then (cập nhật nước đi của quân xe)
else break;
+ For (k=i-1 , k>0 , k )
If ( a[k,j]==0 ) then (cập nhật nước đi của quân xe)
else break;
+ For (k=j+1 , k<10 , k++)
If ( a[i,k]==0 ) then (cập nhật nước đi của quân xe)
else break;
+ For (k=j-1 , k>0 , k )
If ( a[i,k]==0 ) then (cập nhật nước đi của quân xe)
else break;
5. Mã :
If then ( quân mã đi được tới ô a[i-2,j-1] )
If then ( quân mã đi được tới ô a[i-2,j+1] )
If then ( quân mã đi được tới ô a[i+1,j+2] )
If then ( quân mã đi được tới ô a[i-1,j+2] )
If then ( quân mã đi được tới ô a[i-2,j+1] )
If then ( quân mã đi được tới ô a[i-2,j-1] )
If then ( quân mã đi được tới ô a[i-1,j-2] )
If then ( quân mã đi được tới ô a[i+1,j-2] )
6. Pháo :
+ For (k=i+1 , k<11 , k++)

8
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
8
If ( a[k,j]==0 ) then (cập nhật nước đi của quân pháo)
else break;
+ For (k=i-1 , k>0 , k )
If ( a[k,j]==0 ) then (cập nhật nước đi của quân pháo)
else break;
+ For (k=j+1 , k<10 , k++)
If ( a[i,k]==0 ) then (cập nhật nước đi của quân pháo)
else break;
+ For (k=j-1 , k>0 , k )
If ( a[i,k]==0 ) then (cập nhật nước đi của quân pháo)
else break;
7. Tốt
Chưa sang sông :
if a[i+1,j] < 1 then ( quân tốt đi được tới vị trí a[i+1,j] )
Đã sang sông :
Ta kiểm tra tất cả các ô
Nếu thỏa mãn 3 điều kiện thì cập nhật vị trí quân tốt có thể đi.
Phần 2: Xây dựng thuật giải Alpha-Beta Pruning
Game cờ tướng là một trong những game chơi đối kháng, phù hợp với việc
áp dụng thuật giải Minimax kết hợp với Alpha-beta cắt tỉa trong đó 1 người
chơi là Max, 1 người chơi là Min, thay phiên nhau đi các nước, kết thúc ván
cờ có 1 thắng 1 người thua, hoặc rơi vào trạng thái hòa thì cần phải có trọng
tài để đánh giá.
9
Nhóm 69
1. Thuật giải Minimax

• Mimimax là giải thuật áp dụng vào các trò chơi mang tính đối kháng, 1
người chơi là Max, 1 người chơi là Min. Minimax sử dụng tri thức là 1 hàm
lượng giá, khi khởi tạo hàm lượng giá này có giá trị là 0, ứng với khả năng
giành chiến thắng của Max và Min là như nhau.
• Nước đi của Max ảnh hướng đến nước đi của Min và ngược lại, Max tìm
cách cực đại hóa hàm lượng giá, Min tìm cách cực tiểu giá trị này.
• Cây trò chơi Minmax được hình thành từ trạng thái bắt đầu và các nước
đi hợp lệ của Max (Min).
• Giải thuật Minimax tìm kiếm nước đi có lợi nhất dựa và hàm đánh giá, ở
các cây con của Max, Max chọn các trạng thái tốt nhất với nó là những
trạng thái hàm đánh giá cực đại và ngược lại với Min, nó chọn các trạng
thái sao cho hàm đánh giá là nhỏ nhất.
• Độ phức tạp của Minimax tăng theo hàm mũ và phụ thuộc vào độ sâu tìm
kiếm. Trên thực tế không có máy tính nào cho phép tính đến trạng thái
đích từ trạng thái bắt đầu, vì cây trò chơi là quá lớn vì thế chỉ có thể cài
đặt ở một độ sâu nhất định, đảm bảo về mặt thời gian.
Với sự bùng nổ của cây trò chơi Minimax và giải thuật Minimax cổ điển không
có sự tối ưu nào để giảm bớt sự phức tạp tìm kiếm, bỏ bớt những nút không
tối ưu. Chính vì thế người ta đã áp dụng cắt tỉa Alpha-beta vào việc tối ưu tìm
kiếm.
10
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
10
2. Thuật giải Alpha-beta cắt tỉa
Tư tưởng của cắt tải alpha-beta: “Nếu một nhánh tìm kiếm nào đó không
thể cải thiện đối với giá trị (hàm tiện ích) mà chúng ta đã có, thì không cần
xét đến nhánh tìm kiếm đó nữa!”
Cắt tỉa Alpha-beta được áp dụng vào nhằm cắt tỉa bớt những nhánh tồi tiết
kiệm chi phí thời gian, bộ nhớ cho cây tìm kiếm.

Lợi ích của việc cắt tỉa alpha-beta nằm trong thực tế là chi nhánh của cây tìm
kiếm có thể được loại bỏ. Bằng cách này, thời gian tìm kiếm có thể được giới
hạn trong 'hứa hẹn' cây con, và tìm kiếm sâu hơn có thể được thực hiện trong
cùng một lúc. Giống như người tiền nhiệm của nó, nó thuộc về chi nhánh và
ràng buộc lớp của các thuật toán. Việc tối ưu hóa làm giảm độ sâu hiệu quả để
nhẹ hơn một nửa so với minimax đơn giản nếu các nút được đánh giá trong
một trật tự tối ưu tối ưu hoặc gần (sự lựa chọn tốt nhất cho các bên trên di
chuyển ra lệnh đầu tiên tại mỗi nút).
• α là giá trị của nước đi tốt nhất đối với Max (giá trị tối đa tính đến thời
điểm hiện tại đối với nhánh tìm kiếm
• Nếu v là giá trị tồi hơn α, Max sẽ bỏ đi nước đi ứng với v, cắt tỉa nhánh
ứng với v
• β là giá trị tốt nhất đối với Min, β khi khởi tạo mang giá trị âm vô cùng,
sau đó được cập nhật các giá trị giảm dần, nếu một nhánh tìm thấy có giá
trị cao hơn β nó sẽ cắt tỉa nhánh đó
Mã giả thuật toán:
chức năng alphabeta (nút, chiều sâu, α, β, maximizingPlayer)
nếu độ sâu = 0 hoặc nút là một nút thiết bị đầu cuối
trả về giá trị theo kinh nghiệm của nút
nếu maximizingPlayer
cho mỗi đứa trẻ của nút
α: = max (α, alphabeta (trẻ em, độ sâu - 1, α, β, không
(maximizingPlayer)))
nếu β ≤ α
phá vỡ (* Beta cắt *)
trở α
khác
11
Nhóm 611
cho mỗi đứa trẻ của nút

β: = min (β, alphabeta (trẻ em, độ sâu - 1, α, β, không
(maximizingPlayer)))
nếu β ≤ α
phá vỡ (* Alpha cắt *)
trở β
(* Ban đầu gọi *)
alphabeta (nguồn gốc, độ sâu, vô tận, vô cực, TRUE)
Cải thiện hơn nữa có thể đạt được mà không bị mất độ chính xác, bằng cách sử
dụng heuristic để tìm kiếm các bộ phận của cây có khả năng buộc cuto•s alpha-
beta đầu. Ví dụ, trong cờ vua, di chuyển mà phải mất mảnh có thể được kiểm
tra trước khi di chuyển mà không làm, hoặc di chuyển mà đã ghi được đánh giá
cao trong đường chuyền trước đó thông qua phân tích trò chơi cây có thể
được đánh giá trước những người khác. Khác thường, và rất rẻ, heuristic là
các phỏng đoán kẻ giết người , mà di chuyển cuối cùng gây ra một phiên bản
beta-cắt cùng cấp trong việc tìm kiếm cây luôn luôn kiểm tra đầu tiên. Ý tưởng
này có thể được khái quát thành một tập hợp các bảng bác bỏ .
Tìm kiếm alpha-beta có thể được thực hiện nhanh hơn bằng cách xem xét chỉ
có một cửa sổ tìm kiếm hẹp (thường được xác định bởi các dự đoán dựa trên
kinh nghiệm). Này được gọi là tìm kiếm khát vọng. Trong trường hợp cực đoan,
việc tìm kiếm được thực hiện với alpha và beta bằng, một kỹ thuật được gọi
là không-cửa sổ tìm kiếm, null-cửa sổ tìm kiếm, hoặc tìm kiếm trinh sát. Điều
này đặc biệt hữu ích cho thắng / thua tìm kiếm ở gần cuối của một trò chơi, nơi
độ sâu thêm thu được từ cửa sổ hẹp và thắng / thua chức năng đánh giá đơn
giản có thể dẫn đến một kết quả thuyết phục. Nếu một khát vọng tìm kiếm thất
bại, nó là đơn giản để phát hiện xem nó không thành công cao (cạnh cao của
cửa sổ quá thấp) hoặc thấp (cạnh dưới của cửa sổ là quá cao). Điều này cung
cấp thông tin về những gì giá trị cửa sổ có thể có ích trong một lại tìm kiếm vị
trí này.
Một số biểu diễn minh họa
12

Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
12
≥4
4
12
6
4
≥4
4
12 6 4
≤5
5 x x
13
Nhóm 613
≥4
4
12 6 4
≤3
5 3 x
≥4
4
12
6
4
≤3
5
3
x
≤2

2
3. Áp dụng vào bài toán chơi cờ tướng
a) Hàm lượng giá
Tri thức áp dụng vào bài toán sao cho đánh giá đúng được thế cờ, giá trị bàn cờ
để có được lợi thế trong trò chơi cờ tướng.
Máy tính muốn tìm được lời giải bài toán buộc phải qui bài toán về các con số
có thể tính toán được, do đó căn cứ vào thế cờ (bàn cờ) máy sẽ gán cho nó
một điểm số (lượng giá tĩnh) để đánh giá độ tốt xấu. Nhờ điểm này máy mới có
thể so sánh các thế cờ với nhau và biết chọn nước đi tốt nhất. Đâylà một nhiệm
vụ rất khó khan và phức tạp do không tồn tại một thuật toán tổng quát và
14
min
min
max
max
min
max
Min
max
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
14
thống nhất nào để tính điểm cả. Điểm của một thế cờ dựa trên rấtnhiều yếu tố
mà khó có thể số hoá hết được như phụ thuộcvào số lượng và giá trị các quân
cờ hiện tại, phụ thuộc vào tính hãm, tính biến, thếcông, thế thủ của từng quân
cờ cũng như cả cục diệntrận đấu. Ví dụ, một cặp Mã giao chân, có thể sát
Cánh tiến quân và tựa lưng phòng thủ thường có giá hơn hai Mã đứng rời.
Nhưng cũng có lúc hai Mã đứng rời lại tốthơn hai Mã giao chân khi Mã này lại
cản Mã kia trong một thế trận nào đó. Ta cũng biết rằng, "lạc nước hai Xe đành
bỏ phí, gặp thời một Tốt cũng Thành công", thế nhưng số hoá điều này qua

hàm lượng giá quả là một điều khó quá sức.
Trong bài toán này, nhóm sử dụng cách lượng giá đơn giản và dễ hiểu nhất.
Đánh giá giá trị bàn cờ thông qua giá trị của các quân cờ
Cách đánh giá này tuy không đem lại nhiều chiến thuật trong cách chơi cờ,
nhưng là đơn giản và dễ hiểu khi một bên sở hữu nhiều quân cờ có giá trị cao
hơn sẽ có nhiều lợi thế hơn trong việc giành chiến thắng.
Nhóm đánh giá giá trị các quân cờ như sau:
• Giá trị quân tốt
Tốt
thường
Tốt sang
sông
Tốt đầu sang
sông
Tốt sang sông ở vị trí
biên
Hai tốt cặp kè nhau khi sang
sông
30 40 45 35 60
• Giá trị các quân khác
Sĩ Tượng Pháo Pháo đầu Mã Xe Tướng
120 125 285 300 270 600 6000
b) Thiết kế giải thuật trong game
Từ mã giả ở phần trên nhóm đã thiết kế phương thức
AlphaBetaPruning(ChessBoard board, int alpha, int beta, int depth, int player)
nằm trong lớp Computer

public Computer AlphaBetaPruning(ChessBoard board, int alpha, int beta, int depth, int
player)
15

Nhóm 615
{
Computer com = new Computer();
if (depth == 0 || board.CheckWinNegativeTeam() ||
board.CheckWinPositiveTeam())
{
com.Value = board.Value;
com.Board = board.Clone();
return com;
}
if (player == 1)
{
foreach (var b in GenerateBoardPositiveTeam(board))
{
int temp = AlphaBetaPruning(b, alpha, beta, depth - 1, -1).Value;
i++;
if (temp > alpha)
{
alpha = temp;
com.Value = alpha;
com.Board = b.Clone();
}

if (beta <= alpha) return com;
}
return com;
}
else
{
foreach (var b in GenerateBoardNegativeTeam(board))

{
int temp = AlphaBetaPruning(b, alpha, beta, depth - 1, 1).Value;
i++;
if (temp < beta)
{
beta = temp;
com.Board = b.Clone();
com.Value = beta;
}
if (beta <= alpha) return com;
}

return com;
}
}
16
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
16
c) Biểu diễn cây trò chơi
Figure 5: 1 trường hợp của cây trò chơi
Với nhánh đầu tiên, ta có giá trị của nhánh là . Ta sẽ có . Khi sang nhánh thứ 2,
với NODE con đầu tiên của nhánh thứ 2 ta có giá trị -640, vậy giá trị của nhánh
con thứ 2 ngay lập tức sẽ xác định được là . Và ta có . Từ đó ta thấy dù có kiểm
tra tiếp nhánh thứ 2 thế nào, ta cũng có thể biết được là kết quả ở nhánh thứ 2
sẽ tồi hơn kết quả tìm được ở nhánh con thứ 1. Bởi vậy ta sẽ không tiếp tục
duyệt tiếp ở các NODE con ở nhánh thứ 2. Áp dụng tương tự với nhánh thứ 3,
ta sẽ không cần duyệt tiếp NODE thứ 2 của nhánh thứ 3. Áp dụng liên tục
phương pháp này, cập nhật lại các kết quả α nếu tìm được các kết quả tốt hơn,
ta sẽ có thể cắt bớt được các nhánh không cần thiết. Từ đó tốc độ của chương

trình sẽ nhanh hơn và tối ưu hơn.
17
Nhóm 617
4. Phương án tối ưu cho bài toán
a) Tối ưu hàm lượng giá
• Đánh giá giá trị các quân cờ 1 cách chính xác và tỉ mỉ hơn: Phân tích tình
huống cờ theo giai đoạn: Khai cuộc – Trung cuộc - Tàn cuộc, ở mỗi giai
đoạn có các định giá khác nhau.
• Với mỗi quân cờ cũng có nhiều thay đổi về giá trị (ví dụ: mã ở thế kẹt,
pháo mất nòng, …).
b) Tối ưu thời gian tìm kiếm
Thời gian chạy giải thuật Alpha-beta phụ thuộc nhiều vào độ sâu và sự phân
nhánh. Độ sâu ở một mức là cố định như vậy ta cố gắng tìm kiếm tối ưu sư
phân nhánh.
Nếu lời giải càng nằm về phía bên trái, nhánh được tìm thấy trước sẽ càng cắt
tải được nhiều. Do đó nhóm đề xuất cách sắp xếp các quân cờ để khi sinh các
bàn cờ, mình có những bàn cờ tối ưu đặt trước, xét trước như vậy sẽ cắt tỉa
được nhiều
Nhóm đã áp dụng sắp xếp các quân Xe, Pháo, Mã lên trước, vì các bàn cờ
do các con này sinh có giá trị hơn các bàn cờ do quân Tốt, Sĩ, Tượng,
Tướng gây ra. Do đó cắt tỉa được nhiều.
Cách sắp xếp còn tỏ ra hiệu quả khi các bàn cờ có giá trị bằng nhau thì chọn bàn
cờ nào trước, cách sắp xếp như vậy tuy chưa hoàn toàn hiệu quả, nhưng đem
lại nhiều lợi ích và nhiều nước đánh giá được cho là tốt
5. Thống kê cài đặt thuật toán thành công
Việc triển khai ứng dụng chạy trên thiết bị di động Nokia Lumia 520 hệ điều
hành Windows Phone 8 vô cùng khó khawn khi thuật toán chạy ì ạch ở mức độ
sâu thấp
Vì thế nhóm đã triển khai một phiên bản tương tự chạy trên desktop có thể
test được ở độ sâu 4 thời gian chờ ~3s

18
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
18
Độ sâu Số nút Thời gian
1 45 0.104 s
2 1162 0.044 s
3 37746 0.956 s
4 152734 4.013 s
5 2753232 1’ 13s
6 6037273 2’ 39s
Tính toán ở độ sâu 4
Nước Nút Thời gian
1 152734 3.668 s
2 99714 2.668 s
3 65471 2.071 s
4 87 708 3.419 s
5 82 126 2.675 s
6 41 044 2.043 s
Phần 3: Kết luận
• Nhóm cài đặt và sử dụng thành công thuật toán, test trên máy thật Nokia
Lumia 520
• Giao diện còn sơ sài khi chỉ tập trung vào thiết kế và giải thuật
• Một số việc tối ưu nhằm cài thiện tốc độ, lượng giá tốt hơn chưa sử dụng
được.
19
Nhóm 619

Phần 4: Phân công công việc
Lê Văn Thành Thiết kế mô hình lớp, code chi tiết,

viết báo cáo, làm slide, test chương
trình
Nguyễn Đức Thọ Cài đặt giải thuật, xây dựng cây trò
chơi, đề xuất các phương án tối ưu,
lượng giá cho quân cờ
Tạ Văn Trường Nghiên cứu giải thuật để đi đến cài
đặt, lượng giá cho quân cờ
Lê Minh Quân Code chi tiết các lớp quân cờ, bàn cờ,
test chương trình
Nguyễn Văn Thông Xây dựng phương thức sinh các nước
đi kế tiếp cho các quân cờ
Nguyễn Trọng Hiển Thiết kế giao diện
Tài liệu tham khảo
Slide môn Trí tuệ nhân tạo – Nguyễn Nhật Quang
Thuật giải Minimax dịch trên mạng – Phạm Hồng Nguyên
Discovering Chinese Chess Strategies through Coevolutionary
Approaches - C. S. Ong, H. Y. Quek, K. C. Tan and A. Tay
20
Phần 2: Xây dựng thuật giải Alpha-Beta PruningPhần 2: Xây dựng thuật giải
Alpha-Beta PruningPhần 2: Xây dựng thuật giải Alpha-Beta Pruning
20

×