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

báo cáo chuyên đề học phần môn nhập môn trí tuệ nhân tạo đề tài áp dụng thuật toán minimax và alpha beta pruning vào game cờ vua

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 (362.67 KB, 26 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<small>TRƯỜNG ĐẠI HỌC ĐIỆN</small> <b><small>MINIMAX VÀ ALPHA BETAPRUNING VÀO GAME CỜ VUA</small></b>

<b><small>Sinh viên thực hiện : NGUYỄN HỒNG TÌNH</small></b>

<b><small>: NGUYỄN HUY ANH</small></b>

<b><small>: PHAN HẢI SƠN</small></b>

<b><small>Giảng viên hướng dẫn : VŨ VĂN ĐỊNH</small></b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b><small>Ngành : CÔNG NGHỆ THƠNG TIN</small></b>

<small>Tài liệu tham khảo...4</small>

<small>Phân cơng cơng việc trong đề tài...5</small>

<small>Lời nói đầu...6</small>

<small>Chapter 2 Nội dung...7</small>

<b><small>I.LÝ THUYẾT...7</small></b>

<b><small>1.Tổng quan về trị chơi Cờ Vua...7</small></b>

<b><small>1.1.Giới thiệu trò chơi...7</small></b>

<b><small>1.2.Các quy tắc của trò chơi...7</small></b>

<b><small>3.2.Thuật toán Minimax...13</small></b>

<b><small>3.3.Cải tiến Alpha – Beta:...14</small></b>

<b><small>3.4.Hướng cải thiện việc tỉa nhánh của thuật toán AlphaBeta...18</small></b>

<b><small>II. GIAO DIỆN ỨNG DỤNG...18</small></b>

<b><small>II.1. Biểu diễn bàn cờ và quân cờ...18</small></b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b><small>II.2. Sinh nước đi...19</small></b>

<b><small>II.3. Kiểm tra giới hạn bàn cờ...20</small></b>

<b><small>II.4. Đánh giá một thế cờ...21</small></b>

<b><small>II.5. Xử lí một nước đi "thử"...22</small></b>

<b><small>II.6. Xử lí điều khiển của người chơi...25</small></b>

<b><small>II.7. Cập nhật một nước đi...26</small></b>

<b><small>II.8. Vịng lặp chính xử lí trị chơi...26</small></b>

<b><small>II.9. Chạy thử...26</small></b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Tài liệu tham khảo

Giáo trình Artificial Intelligence – Stuart Russell, Peter Norvig 1994

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Phân công công việc trong đề tài

1. Nguyễn Hồng Tình: tìm tài liệu, tìm hiểu thuật toán minimax, cắt tỉa alpha-beta

2. Phan Hải Sơn: làm báo cáo

3. Nguyễn Hồng Tình: cài đặt thử nghiệm. 4.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Lời nói đầu

Trong một thời đại mà nền cơng nghiệp tự động hóa chiếm một vị trí khơng thể thiếu của một nền kinh tế phát triển, máy móc càng chứng tỏ những ưu thế vượt trội nhờ sự chính xác, độ ổn định cao,… Nhưng đằng sau đó, mỗi chiếc máy là do con người điều khiển, trí tuệ của máy móc cũng là do con người cài đặt mà có được. Vì vậy, tri thức con người vẫn ln là yếu tố then chốt.

Từ những năm 50 của thế kỉ XX, trí tuệ nhân tạo mới bắt đầu nhen nhóm, vậy mà giờ đây, ta có thể thấy nó đã có những bước phát triển vượt bậc, khơng ngừng.

Để hiểu rõ hơn về AI, chúng em đã quyết định lựa chọn trò chơi cờ vua, một trò chơi cổ điển nhưng là một trong những trị chơi biểu tượng của trí tuệ để hồn thành bài tập lớn mơn học này. Dưới đây là phần trình bày báo cáo môn học thông qua đề tài đã nêu ở trên. Hiện tại, chương trình của chúng em cịn nhiều thiếu sót, rất mong nhận được những ý kiến góp ý và tư vấn từ thầy và các bạn để chúng em có thể trau dồi thêm cho bản thân những kiến thức hữu ích .

<i><b> Chúng em xin chân thành cảmơn !</b></i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>I.LÝ THUYẾT</b>

<b>1. Tổng quan về trò chơi Cờ Vua</b>

<b>Cờ vua (tên </b>tiếng Anh: Chess), trước kia còn được gọi

<b>là Cờ quốc tế, là trò chơi quốc tế và là mơn thể thao trí tuệ cho 2</b>

người chơi. Ngày nay, cờ vua là một trong những trò chơi phổ biến nhất thế giới với hàng triệu người tại nhà riêng, trong câu lạc bộ, trực tuyến, từ xa và trong các giải đấu. Trò chơi này diễn ra trên một bảng hình vuông, gọi là bàn cờ, gồm 8 hàng (đánh số từ 1 đến 8) và 8 cột (đánh các chữ cái từ a đến h), tạo ra 64 ô hình vuông với các màu đậm và nhạt xen kẽ nhau, với mỗi người chơi sẽ có ô màu nhạt ở hàng cuối cùng bên tay phải của mình khi ngồi vào bàn chơi cờ. Mỗi người sẽ bắt đầu ván cờ với 16 quân cờ và sẽ lần lượt đi các quân của mình sau khi đối phương đã đi xong một nước (hoàn thành nước đi).

Các quân cờ của mỗi bên bao gồm 8 Tốt, 2 Mã, 2 Tượng, 2 Xe, 1 Hậu và 1 Vua. Người cầm quân trắng luôn là người đi đầu tiên; người kia cầm quân đen. Các quân Hậu và Xe được gọi là quân nặng, còn Tượng và Mã được gọi là quân nhẹ.

<b>1.2. Các quy tắc của trò chơi</b>

Khi một ván cờ vua bắt đầu, một người chơi sẽ cầm quân đen và người chơi còn lại cầm quân trắng. Việc chọn lựa ai sẽ cầm quân đen hay trắng phụ thuộc vào thể thức chơi là giải trí hay thi đấu trong hệ thống có tổ chức. Nó có thể là do hai người thỏa thuận (giải trí) hoặc do quyết định của trọng tài trong giải đấu . Bên cầm quân

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

trắng ln ln được đi trước và do đó có ưu thế nhỏ so với bên cầm quân đen. Các quân cờ cần phải xếp trên bàn cờ tiêu chuẩn với ô nằm ở hàng cuối cùng bên tay phải người chơi bao giờ cũng có màu nhạt.

Các quân cờ có nước đi khác nhau:

<b>Xe (ký hiệu quốc tế R - Rook) di chuyển theo các đường thẳng dọc </b>

theo cột hay hàng tới ơ cịn trống mà khơng có qn nào cản trên đường đi hay tới ô bị quân đối phương chiếm giữ (ăn quân) nhưng không thể vượt qua qn đang đứng ở ơ đó. Ngoại lệ duy nhất là trường hợp nhập thành. Khi đó nó có thể nhảy qua quân Vua của mình để đứng cạnh nó. Chỉ có Xe mới có nước đi như vậy.

<b>Tượng (ký hiệu quốc tế B - Bishop) di chuyển theo đường chéo tới </b>

ơ có cùng màu với nguyên lý tương tự như Xe tới ô cịn trống hay ơ bị qn đối phương chiếm giữ (ăn quân).

<b>Hậu (ký hiệu quốc tế Q - Queen) có nước đi là tổ hợp đơn giản của </b>

chuyển động của Xe và Tượng. Trong một nước đi nó có thể di chuyển theo đường chéo hoặc đường thẳng dọc theo cột hay hàng, với nguyên lý đi và ăn quân giống như Tượng và Xe.

<b>Mã (ký hiệu quốc tế N - Knight) có thể di chuyển tới ơ cịn trống </b>

hay ơ bị qn đối phương chiếm giữ (ăn quân) theo dạng hình chữ L (hình chữ nhật 3×2 hay 2×3). Qn Mã khơng bị cản như trong cờ tướng.

<b>Tốt (không cần ký hiệu) có thể di chuyển thẳng về phía trước chỉ </b>

một ô một lần tới ô còn trống (đi mà không ăn quân), nhưng khi di chuyển quân để ăn quân đối phương thì đi chéo. Ví dụ, Tốt trắng tại ơ c4 có quyền ăn qn đối phương tại b5 hoặc d5 nếu một trong hai ô này có quân đối phương chiếm hoặc di chuyển xuống ô c5 nếu ô này còn trống, trừ hai trường hợp sau:

Nó có thể di chuyển 1 hoặc 2 ơ nếu nó đi từ vị trí xuất phát ban đầu tới ô chưa bị chiếm giữ, nhưng không thể nhảy qua một quân khác để tới ô đó. Ví dụ Tốt trắng tại g2 có thể đi tới g3 hoặc g4 nếu đây

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

là nước đi đầu tiên của nó và các ơ này chưa bị chiếm giữ, nhưng nó khơng thể đi tới g4 nếu ơ g3 đã có một qn nào đó chiếm giữ.

Trong trường hợp khi một quân Tốt nào đó của bên trắng đạt tới hàng 5 (ví dụ tới ô e5) và quân Tốt thuộc một trong hai cột của bên đen nằm ngay bên cạnh cột mà Tốt trắng này đang chiếm giữ (trong trường hợp đã cho là cột d và cột f) đi từ vị trí xuất phát đầu tiên (d7

<b>hay f7) nhảy liền 2 ô tới ô d5/f5 thì Tốt trắng tại vị trí e5 ngay tại </b>

nước đi sau đó có quyền ăn Tốt đen tại ơ d5/f5 và di chuyển tiếp tới ô d6/f6. Quyền này sẽ tự động mất, nếu tại nước đi ngay sau đó quân trắng di chuyển quân khác. Tương tự như vậy cho Tốt đen khi nó đã chiếm giữ hàng 4. Đây là trường hợp mà trong cờ vua người ta gọi là bắt tốt qua đường (en passant).

Tốt cịn một đặc điểm nữa là khi nó di chuyển đến hàng cuối cùng thì người chơi có quyền phong cấp cho nó thành bất kỳ quân nặng hay nhẹ nào (Hậu, Xe, Tượng, Mã).

<b>Vua (ký hiệu quốc tế là K - King) là quân quan trọng nhất, nếu mất </b>

Vua thì người chơi thua cuộc. Mỗi lần đi nó có thể ăn quân hoặc di chuyển sang các ơ bao quanh ơ mà nó hiện tại đang chiếm giữ, nhưng không thể tới ô mà quân của mình đang chiếm giữ hay các ô bị quân đối phương kiểm soát. Ngoại lệ duy nhất là trường hợp nhập thành. Khi đó nó có thể di chuyển qua hai ô đồng thời với việc di chuyển quân Xe của mình để quân Xe đó đứng bên cạnh nó về phía cột trung tâm. Ký hiệu của nhập thành là 0 (nhập thành gần) và 0-0-0 (nhập thành xa). Xem thêm nhập thành.

Khi ăn quân đối phương, quân tấn công sẽ di chuyển tới ơ đó và

<i>thay thế cho qn đối phương tại vị trí này, bắt tốt qua đường (en </i>

passant) là ngoại lệ duy nhất. Quân bị ăn được loại ra khỏi bàn cờ. Vua không thể không bảo vệ khỏi nước chiếu, do đó khi bị chiếu thì người chơi phải thực hiện các biện pháp nhằm cứu Vua (di chuyển Vua khỏi vị trí bị chiếu, ăn quân đang chiếu hay dùng quân khác của mình cản đường chiếu nếu có thể). Nếu khơng thể có nước đi để cứu Vua thì người chơi bị chiếu bí và thua cuộc.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Các ván cờ không phải bao giờ cũng kết thúc bằng chiếu bí. Có thể một bên xin thua, có thể thua do hết giờ. Có thể xảy ra các ván cờ hòa. Một ván cờ vua là hòa khi: do thỏa thuận của hai bên do không bên nào dám mạo hiểm hay khi không đủ lực lượng để chiếu hết, rơi vào trạng thái hết nước đi (stalemate), cả hai bên lặp lại nước đi ba lần.

<b>2. Một số khái niệm :2.1. Dạng trò chơi:</b>

Các trò chơi có dạng như cờ Vua, cờ Tướng, cờ Vây, cờ Caro,… là những trò chơi đối kháng, diễn ra giữa hai đấu thủ. Nói chung, các trị chơi này đề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ủ. Đặc điểm của loại trị chơi này 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ài hoà, hoặc một bên thắng và bên kia thua.

<b>2.2. Cây trò chơi: </b>

các trạng thái bàn cờ khác nhau trong quá trình chơi có thể biểu diễn thành một cây tìm kiếm và ta sẽ tiến hành tìm kiếm trên cây để tìm được nước đi tốt nhất. Ở cây này, các nút của cây là các tình huống khác nhau của bàn cờ, các nhánh nối sẽ cho ta biết từ một tình huống cờ thế này chuyển sang tình huống cờ như thế khác thông qua một nước đi đơn nào đó. Các nước đi này diễn ra theo cặp do hai đấu thủ lần lượt tiến hành. Độ sâu của cây trò chơi là số tầng của cây

<b>2.3. Vét cạn: </b>

thuật toán vét cạn có thể hiểu đơn giản là sinh ra hết tất cả mọi khả năng có thể xảy ra trong trị chơi. Sau đó tiến hành lựa chọn đánh giá trên từng khá năng, từ đó chọn ra phương án tối ưu nhất. Trong cờ vua, nếu bạn áp dụng thuật toán này để tính toán nước đi, kết quả

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

trả về sẽ rất chính xác. Nếu vậy thì việc cho máy tính chơi cờ vua chẳng có gì gọi là khó khăn.

Tuy nhiên, may mắn thay cách làm này không thể thực hiện được do một hiện tượng gọi là bùng nổ tổ hợp. Ví dụ nếu một thế cờ trung bình với khả năng đi được 16 nước khác nhau (ta gọi hệ số nhánh con tại mỗi nút là b = 16). Như vậy, sau một tầng ta sẽ có 16 nút con, mỗi nút có thể có 16 nút con nữa. Tổng số nút con tại độ sâu thứ hai là 16*16 = 16^2. Cứ như vậy ở độ sâu d sẽ có b^d nút. Thử làm một phép toán nhỏ, nếu giả sử độ sâu của cây là 100 (hệ số nhánh 16 và độ sâu 100 đều là những con số nhỏ hơn con số thường gặp trong cá trò chơi cờ), áp dụng thuật toán vét cạn, ta phải duyệt 16^100 nhánh hay xấp xải 10^120 nhánh – một con số lớn khủng khiếp.

Qua phân tích trên ta thấy khơng thể áp dụng hồn tồn thuật toán vét cạn vào trò chơi được. Để tạo ra một thuật toán đánh cờ vua tối ưu cho máy tính, chúng ta phải xác định được chiến lược tìm kiếm trong trò chơi rồi dựa vào đó xây dựng nên những thuật toán tối ưu cho máy tính.

<b>2.4. Chiến lược tìm kiếm</b>

<i>Chiến lược tìm kiếm: Một chiến lược thường được cả người lẫn </i>

máy dùng là phân tích thế cờ chỉ sau một số nước đi nào đó của cả hai bên. Sau khi “nhìn xa” xem bàn cớ có những khả năng biến đổi như thế nào sau một số nước, ta sẽ đánh giá độ tốt xấu của các thế cờ nhận được. Tiếp theo, ta sẽ chọn nước đi sẽ dẫn tới một thế cờ tốt nhất trong đó số đó có cân nhắc đến cách đi của cả hai bên (thường chúng ta xem như cả hai người đều đưa ra những lựa chọn tối ưu). Với máy thế cờ này được đánh giá tối hơn thế cờ kia nhờ so sánh điểm của thế đó do bộ lượng giá đáp trả lại.

Việc lượng giá quân cờ có thể hiểu đơn giản rằng, gán mỗi quân cờ một số điểm, trong khuôn khổ bài tập này đề cập đến thì là như sau: Hậu trị giá 9 điểm, Xe trị giá 5 điểm, Tượng và Mã đều trị giá 3 điểm và Tốt trị giá 1 điểm. Do việc mất Vua tương đương với thua cờ nên giá trị của nó là vơ hạn, trong cờ tàn nó khoảng 3,5 điểm,

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

trong bài tập này, giá trị của tướng là 900 điểm. Tuy nhiên, giá trị thực sự và tầm quan trọng của một quân cờ không thể chỉ đơn giản như vậy. Nó cịn phụ thuộc vào thế cờ. Ví dụ một qn Xe đang nằm ở vị trí xấu khơng có giá trị bằng một con Mã đang có thế đứng tốt. Nếu một người chơi thực hiện việc thí quân (cho phép đối

phương bắt quân có trị giá cao của mình) thì thông thường họ sẽ bỏ qua các giá trị danh định dành cho quân đó để đổi lấy các ưu thế về chiến lược hay ưu thế về vị trí của các quân đang tấn công.

Khi chơi cờ, chắc chắn bạn phải xét trước một số hữu hạn các nước đi, đề tự tìm chiến thuật cho riêng mình. Người bình thường xét 2-4 nước đi, trong khi các đại kiện tướng có thể xét từ 8-10 nước đi. Rõ ràng nếu càng xét sâu, nước đi càng chắc chắn và cơ hội chiến thắng càng cao.

Như vậy, dựa vào chiến lược tìm kiếm ta hiểu ra rằng thay vì xét hết toàn bộ quá trình chơi, các nước đi từ khi bắt đầu đến khi kết thúc, ta có thể xét trong một số hữu hạn các nước. Điều này đảm bảo về mặt thời gian, nhưng cũng góp phần tăng độ chắc chắn trong các nước đi của chúng ta.

<b>3. THUẬT TOÁN</b>

<b>3.1. Lượng giá thế cờ :</b>

<b> Giả sử chúng ta có một bộ phân tích thế cờ có thể áp dụng tât cả </b>

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). Qúa trình tính toán điểm cho thế cờ được gọi là quá trình 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.

Việc lượng giá quân cờ là một phần quan trọng khi thực hiện việc đổi quân trong cờ vua. Các lượng giá khác nhau không đáng kể trong các sách dạy chơi cờ vua, Hậu trị giá 90 điểm, Xe trị giá 50

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

điểm, Tượng và Mã đều trị giá 30 điểm và Tốt trị giá 10 điểm. Do việc mất Vua tương đương với thua cờ nên giá trị của nó là vơ hạn, trong cờ tàn nó khoảng 35 điểm, trong bài tập này, giá trị của tướng là 900 điểm.

Giá trị thực sự và tầm quan trọng của quân cờ thực ra là không thể chỉ gán đơn giản như vậy do nó cịn phụ thuộc vào thế cờ. Ví dụ một qn Xe đang nằm ở vị trí xấu khơng có giá trị bằng một con Mã đang có thế đứng tốt. Nếu một người chơi thực hiện việc thí quân (cho phép đối phương bắt quân có trị giá cao của mình) thì thông thường họ sẽ bỏ qua các giá trị danh định dành cho quân đó để đổi lấy các ưu thế về chiến lược hay ưu thế về vị trí của các quân

<i>đang tấn cơng. </i>

<b>3.2. Thuật tốn Minimax</b>

Trong quá trình chơi, cả hai đấu thủ đều cố gắng đi như thế nào đó để đạt đ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 cao nhất có thể (hay chính là đẩy điểm của người chơi cực tiểu bớt âm hơn). Trái lại, người chơi cực tiểu cố đi để đạt tới vị trí mà điểm của mình nhỏ nhất có thể.

Từ đó ta hình thành tư tưởng thuật toán Minmax như sau: bắt đầu ở một nút (một thế cờ), ta thực hiện tất cả các nước có thể đi, thăm tồn bộ các nút con của nó trong cây trị chơi. Sau khi đã thăm toàn bộ các nút, kiểm tra xem hiện tại là lượt chơi của đấu thủ nào.

Nếu đang là lượt chơi của đấu thủ maximizer, ta xét toàn bộ các nút con của nó, chọn ra nút con có giá trị lớn nhất.

Nếu đang là lượt chơi của đấu thủ minimizer, ta xét toàn bộ các nút con của nó, chọn ra nút con có giá trị nhỏ nhất.

Cài đặt thuật toán có thể biểu diễn như mã giả dưới đây:

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Ta có thể thấy cách cài đặt của thuật toán Minmax khá tương tự với cách cài đặt đệ quy quay lui, kết hợp với quy hoạch động trên một đoạn cây từ đó chọn ra cách đi tối ưu nhất.

Đánh giá thuật toán Minmax: 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 lượng giá là 2560000 nút. Còn với b = 40, d = 5 thì số nút lượng giá sẽ tăng lên 40 lần = 102400000 nút.

<b>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 </b>

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.

<b>3.3. Cải tiến Alpha – Beta:</b>

</div>

×