Giải thuật tìm kiếm Minimax trong các trò chơi có tổng bằng không

MỤC LỤC

Các kỹ thuật tìm kiếm cơ bản

Tìm kiếm không có thông tin

    Trong tìm kiếm theo chiều sâu, tại trạng thái (đỉnh) hiện hành, ta chọn một trạng thái kế tiếp (trong tập các trạng thái có thể biến đổi thành từ trạng thái hiện hành) làm trạng thái hiện hành cho đến lúc trạng thái hiện hành là trạng thái đích. Trong trường hợp tại trạng thái hiện hành, ta không thể biến đổi thành trạng thái kế tiếp thì ta sẽ quay lui (back-tracking) lại trạng thái trước trạng thái hiện hành (trạng thái biến đổi thành trạng thái hiện hành) để chọn đường khác.

    Tìm kiếm có thông tin

    Nhưng nó khác tìm kiếm theo chiều rộng ở chỗ, trong tìm kiếm theo chiều rộng ta lần lượt phát triển tất cả các đỉnh ở mức hiện tại để sinh các đỉnh ở mức tiếp theo, còn trong tìm kiếm tốt nhất - đầu tiên ta chọn đỉnh để phát triển là đỉnh tốt nhất được xác định bởi hàm đánh giá (tức là đỉnh có giá trị hàm đánh giá là nhỏ nhất), đỉnh này có thể ở mức hiện tại hoặc ở các mức trên. Song khác với tìm kiếm theo chiều sâu, khi ta phát triển một đỉnh u thì bước tiếp theo, ta chọn trong số các đỉnh con của u đỉnh có nhiều hứa hẹn nhất để phát triển, đỉnh này cũng được xác định bởi hàm đánh giá.

    Tìm kiếm đối kháng

      Các trạng thái bàn cờ khác nhau (hay còn gọi là một thế cờ, tình huống cờ) trong quá trình chơi có thể biểu diễn thành một cây tìm kiếm (được gọi là cây trò chơi - hình 1.3) 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 trò chơi có các nút là các tình huống khác nhau của bàn cờ, các nhánh nối giữa các nút sẽ cho biết từ một tình huống bàn cờ chuyển sang tình huống khác thông qua chỉ một nước đi đơn nào đó.

      GIẢI THUẬT TÌM KIẾM MINIMAX 2.1 Giới thiệu

      Trò chơi có tổng bằng không (Zero-sum-game)

      Bất đẳng thức (2) nghĩa là v1 là giá trị thấp nhất (lợi nhuận cực tiểu) mà người chơi 1 có thể nhận được khi chơi chiến lược p*, nếu người chơi 2 không chọn chiến lược khôn ngoan thì người chơi 1 sẽ nhận được lợi lớn hơn v1. Tương tự, nếu người chơi 2 dùng chiến lược Minimax, nó đảm bảo tổn thất không lớn hơn v2, nghĩa là tương đương với việc đảm bảo người chơi 1 có thể nhận được lợi nhuận không lớn hơn v2. Nói cách khác, cân bằng Nash đạt được nếu như thay đổi một cách đơn phương của bất cứ ai trong số các đối thủ cũng sẽ làm cho chính người đó thu lợi ít hơn mức có được với chiến lược hiện tại.

      Khái niệm này áp dụng cho những trò chơi gồm từ hai đối thủ trở lên và Nash đã chỉ ra rằng tất cả các khái niệm khác nhau về giải pháp trong các trò chơi được đưa ra trước đó đều có cân bằng Nash.

      Định lý Minimax Định lý

      Vì mối quan hệ giữa giá trị cực đại và giá trị cực tiểu đã được thiết lập, chúng ta có thể định nghĩa một giá trị cân bằng của trò chơi. Tương tự điều kiện (3b) nói tổn thất trung bình của người chơi 1 dùng chiến thuật thuần túy bất kỳ thì không lớn hơn v. Trong định lý Minimax, von Neumann (1928) chứng minh sự tồn tại tổng quát của các nghiệm Minimax trong các chiến lược ngẫu nhiên hóa cho các trò chơi hữu hạn bước, hai người chơi và tổng bằng không.

      Từ đặc điểm của trò chơi có tổng bằng không với hai người chơi (Zero-sum-game) và từ định lý Minimax nên thuật toán Minimax thích hợp với loại trò chơi này.

      Giải thuật Minimax

        Đối với người chơi MAX khi đến lượt đi, người chơi này sẽ chọn nước đi ứng với trạng thái có giá trị cao nhất trong các trạng thái con, còn với người chơi MIN khi đến lượt sẽ chọn nước đi ứng với trạng thái có giá trị nhỏ nhất trong các trạng thái con. Vì tất cả các nước đi đầu tiên có thể xảy ra cho MIN sẽ dẫn đến các nút có giá trị 1 nên đối thủ MAX luôn có thể bắt trò chơi giành thắng lợi cho mình bất kể nước đi đầu tiên của MIN là như thế nào (đường đi thắng lợi của MAX được cho theo mũi tên đậm). Các trạng thái trên mức đó được đánh giá theo các heuristic và các giá trị này sẽ được truyền ngược lên bằng thủ tục Minimax, sau đó thuật toán tìm kiếm sẽ dùng các giá trị vừa nhận được để chọn lựa một nước trong số các nước đi kế tiếp.

        Có thể tiết kiệm được nhiều thời gian bằng việc dùng các thuật toán tìm kiếm thông minh hơn như thuật toán Alpha-beta, thuật toán này không thăm tất cả các nút lá mà vẫn cho kết quả đúng với thuật toán Minimax [9].

        Hình 2.1. Một phần cây trò chơi trong trò chơi tic-tac-toe.
        Hình 2.1. Một phần cây trò chơi trong trò chơi tic-tac-toe.

        Giải thuật cải tiến Alpha-beta

          Nên độ phức tạp của thuật toán này tương ứng trực tiếp với kích thước không gian tìm kiếm bd, trong đó b là hệ số phân nhánh của cây hay chính là nước đi hợp pháp tại mỗi điểm, d là độ sâu tối đa của cây. 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 ít nhấ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 đi nữa. Hai tham số của thủ tục này được gọi là alpha và beta được dựng để theo dừi cỏc triển vọng - chỳng cho biết cỏc giỏ trị nằm ngoài khoảng [alpha, beta] là các điểm "thật sự tồi" và không cần phải xem xét nữa.

          - Nếu như mức đang xét là của người chơi cực tiểu (MIN), 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 Alpha-beta hoặc cho đến khi alpha là bằng hoặc lớn hơn beta.

          So sánh giải thuật Minimax và giải thuật Alpha-beta

          [15] Như vậy nhờ việc khảo sát nhánh cây bên phải người chơi cực tiểu thấy rằng nếu chọn đi theo nhánh này thì người chơi cực đại chỉ được có 4 điểm thay cho 8. Số lần tăng của Alpha-beta ít hơn nhiều: chỉ cỡ 1.7 lần khi tăng từ d lẻ sang d chẵn và 23.2 lần khi từ d chẵn sang lẻ, trung bình chỉ tăng khoảng hơn 6 lần khi tăng d. Công thức tính số nút cho thấy số nút phải xét khi dùng Alpha-beta ít hơn nhiều so với Minimax nhưng vẫn là hàm số mũ và vẫn dẫn tới bùng nổ tổ hợp.

          Tuy cả hai thuật toán đều không tránh được bùng nổ tổ hợp nhưng thuật toán Alpha-beta làm chậm bùng nổ tổ hợp hơn nên được dùng nhiều trong các trò chơi cờ.

          Hình 2.10 : Khảo sát sự bùng nổ tổ hợp, Thuật toán Alpha-beta chỉ làm giảm sự bùng  nổ tổ hợp chứ không chống được nó
          Hình 2.10 : Khảo sát sự bùng nổ tổ hợp, Thuật toán Alpha-beta chỉ làm giảm sự bùng nổ tổ hợp chứ không chống được nó

          ỨNG DỤNG

          Phân tích bài toán .1 Trò chơi

            Mặt khác nếu viết chương trình để người chơi với người thì chỉ cần xây dựng các tập luật chơi để người chơi không phạm quy và kết thúc khi có người thắng. Vì vậy chúng ta sẽ viết chương trình cho Người chơi với Máy, trong trường hợp này ta phải tính toán như thế nào để khả năng máy tính thắng cao hơn người. Máy tính có lợi thế là khả năng tính toán nhanh, khả năng nhớ tốt gấp nhiều lần so với con người, vậy để máy tính thắng thì thật dễ, vấn đề là làm sao để máy có thể nghĩ được như người?.

            Vậy phải có thuật toán để máy có thể quét qua các phương án đi, và chọn phương án cuối cùng là tốt nhất sao cho máy tính có thể thắng.

            Hình 3.1 dưới đây minh họa hai trường hợp: Hai con hậu không khống chế nhau và  hai con hậu khống chế nhau:
            Hình 3.1 dưới đây minh họa hai trường hợp: Hai con hậu không khống chế nhau và hai con hậu khống chế nhau:

            Cài đặt chương trình

              Trong ứng dụng này ta chọn thuật toán Minimax và thuật toán cải tiến Alpha-beta (chương 2) để cài đặt cho máy tính chơi. form), lớp CBoard và lớp gameAI. - Nhận thông tin khởi tạo một ván chơi từ người sử dụng như: kích thước bàn cờ, trình độ của máy, số ô đá (hay vật cản) sử dụng, ai là người đi trước để cung cấp thông tin cho lớp CBoard khởi tạo một ván chơi mới. Lưu ý trường hợp ô (i, j) ở biên của bàn cờ, ta phải sử dụng kỹ thuật lính canh: đặt bên ngoài biên của bàn cờ là các ô đá để tránh trường hợp tràn mảng.

              Phương thức đơn giản chỉ quét các ô trên bàn cờ, nếu giá trị tuyệt đối của ô đó bằng x thì ta gán lại giá trị bằng 0, đồng thời giảm giá trị số ô bị chiếm đi 1.

              Hình 3.2: Sơ đồ thể hiện mối liên quan giữa 3 lớp chính.
              Hình 3.2: Sơ đồ thể hiện mối liên quan giữa 3 lớp chính.

              Mã nguồn lớp gameAI

              Một số giao diện và kết quả chạy chương trình Màn hình ban đầu như sau

              Sau khi chọn xong các thông số người chơi ấn vào nút “Bắt đầu chơi” để chơi. Ô màu xanh là ô mà máy chiếm được sau 1 nước đi của nó, Ô mày vàng là ô mà người chiếm được sau 1 nước đi của người. Trong đó thể hiện số điểm của hai đối thủ, đến lượt ai đang chơi và danh sách các nước đi cụ thể của 2 đối thủ.

              Hình 3.4: Màn hình ban đầu của trò chơi Trong đó có các tùy chọn để tạo một ván chơi mới
              Hình 3.4: Màn hình ban đầu của trò chơi Trong đó có các tùy chọn để tạo một ván chơi mới