1. Trang chủ
  2. » Công Nghệ Thông Tin

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

23 2,8K 13

Đ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 23
Dung lượng 706,29 KB

Nội dung

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.

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

***

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ờ

Trang 2

Nhóm 6 1

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

1 Giới thiệu về trò chơi cờ tướng 1

2 Windows Phone và framework XNA 4.0 2

Phần 2: Xây dựng game cờ tướng 3

1 Biểu đồ UseCase 3

2 Tìm lớp và xác định trách nhiệm cho lớp 3

3 Thiết kế chi tiết cho các lớp 5

Xác định nước đi kế tiếp cho các quân cờ 5

Phần 2: Xây dựng thuật giải Alpha-Beta Pruning 11

1 Thuật giải Minimax 11

2 Thuật giải Alpha-beta cắt tỉa 12

3 Áp dụng vào bài toán chơi cờ tướng 16

a) Hàm lượng giá 16

b) Thiết kế giải thuật trong game 17

c) Biểu diễn cây trò chơi 19

4 Phương án tối ưu cho bài toán 20

a) Tối ưu hàm lượng giá 20

b) Tối ưu thời gian tìm kiếm 20

5 Thống kê cài đặt thuật toán thành công 20

Phần 3: Kết luận 21

Trang 3

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 Pruning

2

Tài liệu tham khảo 22

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ướngTrò 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.0Hiệ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ảnWindows Phone 8.0 với nhiều tính năng thông minh hỗ trợ

Trang 4

Nhóm 6 3

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

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

Trang 5

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 Pruning

4

Entity

EntityChess ChessBoard

ChessPiece BoundingBox

Rook Artillery Elephant Guard Horse

Pawn King Move

Figure 2: biểu đồ lớp tổng quan

Trang 6

ImageWidth

GetBounding

WidthDisplay ImageHeight _id

LoadContent( ContentManager

content)

_isDied _color _canMove _type

Update( GameTime gameTime) Draw( SpriteBatch spriteBatch,

Point p) Move( Point destination,

ChessBoard board) ChangeColor() GetNextMoves( ChessBoard board) Clone( ChessPiece piece) ChessPiece( EColor color) ChessPiece( int id, EColor color,

Point point) ChessPiece( ChessPiece piece)

BoundingBox

Rectangle GetBounding LoadContent(Microsoft.Xna.Framew ork.Content ContentManager

content) BoundingBox() Draw( SpriteBatch spriteBatch)

Draw( SpriteBatch spriteBatch)

GetPosition( TouchLocation touch)

ChangeColor()

SetPoint( ChessPiece chess, Point

p)

GetPoint( Point p)

GetPoint( int x, int y)

SetPoint( Point p, int value)

GenerateBoardNegativeTeam( ChessB oard board)

Minimax( ChessBoard board, int

player) AlphaBetaPruning( ChessBoard

board, int alpha, int beta, int

depth, int player)

rd board) _value

Guard _type Draw(SpriteBatch spriteBatch) GetNextMoves( ChessBoa

rd board) _value

Horse _type Draw(SpriteBatch spriteBatch) GetNextMoves( ChessBoa

rd board) _value

King _type Draw(SpriteBatch spriteBatch) GetNextMoves( ChessBoa

rd board) _value

Pawn _type Draw(SpriteBatch spriteBatch) GetNextMoves( ChessBoa

rd board) _value

Rook _type Draw(SpriteBatch spriteBatch) GetNextMoves( ChessBoa

rd board) _value

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 :

Trang 7

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 Pruning

6

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ờ

Trang 8

Nhóm 6 7

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 :

3< j<7 0<i<4 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 ô {a[i+1 , j−1]a[i+1 , j+1]

a[i−1 , j−1] a[i−1 , j+1]

Trang 9

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 Pruning

8

3< j<7 0<i<4 thì cập nhật vị trí quân sỹ có thể đi

3 Tượng :

If {a a[[i−1 , j−1] i−2 , j−2]=0<1

0<i−2<11 0< j−2<10

then ( quân tượng đi được tới ô a[i-2,j-2]

If {a a[[i−1 , j+1] i−2 , j+2]=0<1

0<i−2<11 0< j+2<10

then ( quân tượng đi được tới ô a[i-2,j+2]

If {a a[[i+1 , j−1] i+2 , j−2]=0<1

0<i+2<11 0< j−2<10

then ( quân tượng đi được tới ô a[i+2,j-2]

If {a a[[i+1 , j+1] i+2 , j+2]=0<1

0<i+2<11 0< j+2<10

then ( quân tượng đi được tới ô a[i+2,j+2]

Trang 11

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 Pruning

10

If {a a[i+1 , j−2][i, j−1]=0<1

0<i+1<11 0< j−2<10

then ( quân mã đi được tới ô a[i+1,j-2] )

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 :

5< j<11 0<i<10 thì cập nhật vị trí quân tốt có thể đi

Trang 12

Nhóm 6 11

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á

1 Thuật giải Minimax

đố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

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

và các nước đi hợp lệ của Max (Min)

đá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

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

Trang 13

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 Pruning

12

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

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

Trang 14

Nhóm 6 13

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

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 cutoffs 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á

có thể được đánh giá trước những người khác Khác thường, và rất

Trang 15

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 Pruning

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

Trang 16

Nhóm 6 15

min

min

max

Min

max

Trang 17

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 Pruning

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à

thống nhất nào để tính điểm cả Điểm của một thế cờ dựa trên

Trang 18

Nhóm 6 17

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ờ

h (n)=Tổng giá trị quân mình−Tổng giá trị quân đối phương

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

Tốt sang sông ở vị trí biên

Hai tốt cặp kè nhau khi sang sông

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

Trang 19

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 Pruning

18

public Computer AlphaBetaPruning(ChessBoard board, int alpha, int beta, int

depth, int player)

Trang 20

Nhóm 6 19

}

c) Biểu diễn cây trò chơi

Figure 5: 1 trường hợp của cây trò chơi

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

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

Ngày đăng: 23/10/2014, 23:51

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w