1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo nhập môn trí tuệ nhân tạo Đề tài bài toán bốc diêm với giải thuật minimax

15 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Bài Toán Bốc Diêm Với Giải Thuật Minimax
Tác giả Phạm Lê Hoàn, Đỗ Hoàng Phúc
Người hướng dẫn GV Lưu Thị Bích Hương
Trường học Trường Đại Học Sư Phạm Hà Nội 2
Thể loại báo cáo
Định dạng
Số trang 15
Dung lượng 473,07 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Error: Reference source not found b Các thuộc tính của thuật toán Error: Reference source not found Chương II: BÀI TOÁN BỐC DIÊM.. Minimax là giải thuật là một thuật toán đệ quy lựa ch

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

VIỆN CNTT

***

BÁO CÁO NHẬP MÔN TRÍ TUỆ NHÂN TẠO

ĐỀ TÀI:

BÀI TOÁN BỐC DIÊM VỚI GIẢI THUẬT MINIMAX

-GV Hướng dẫn: Lưu Thị Bích Hương

-Sinh viên thực hiện:

Trang 2

MỤC LỤC

Chương I: GIẢI THUẬT MINIMAX Error: Reference source not

found

1.

Sơ lược về giải thuật minimax . Error: Reference source

not found

a)

Thuật toán minimax là gì? Error: Reference source not

found

b)

Tại sao cần dùng minimax Error: Reference source not

found

c)

Các khái niệm Error: Reference source not found d)

Giải thuật minimax Error: Reference source not found

2.

Giải thuật minimax Error: Reference source not found

a)

Hoạt động của thuật toán minimax Error: Reference

source not found

b)

Các thuộc tính của thuật toán Error: Reference source not

found

Chương II: BÀI TOÁN BỐC DIÊM Error: Reference source not

found

1.

Giới thiệu bài toán Error: Reference source not found

2.

Cách giải bài toán Error: Reference source not found

a)

Các bước giải quyết bài toán Error: Reference source not

found

b)

Cài đặt thuật toán minimax Error: Reference source not

found

3. Giao diện chương trình Error: Reference source not found

a)

Biểu diễn lời giải thuật toán bằng ngôn ngữ C++ Error:

Reference source not found

b)

Giải thích chương trình Error: Reference source not found

PHỤ LỤC Error: Reference source not found

TÀI LIỆU THAM KHẢO Error: Reference source not found

Trang 3

Phân công công việc

ST

công việc

Mức độ tham gia

1 Phạm Lê Hoàn Tìm tài liệu, viết

chương trình, viết báo cáo

100% Nhiệt

tình

2 Đỗ Hoàng Phúc Tìm tài liệu, viết

chương trình, làm slide thuyết trình

100% Nhiệt

tình

Trang 4

Chương I: GIẢI THUẬT MINIMAX

1 Sơ lược về giải thuật minimax.

a Thuật toán minimax là gì?

Minimax là giải thuật là một thuật toán đệ quy lựa chọn bước đi kế tiếp trong một trò chơi có hai người bằng cách định giá trị cho các Node trên cây trò chơi sau đó tìm Node

có giá trị phù hợp để đi bước tiếp theo

b Tại sao phải cần dùng minimax?

Như các bạn đã biết thì có rất nhiều thuật toán tìm kiếm

để làm AI trong game như A, Heuristic Mỗi thuật toán thì

sẽ phù hợp với từng loại game cho nó Những game đối kháng trong đối người chơi luân phiên đánh như cờ vua, cờ tường, caro Khi chơi bạn có thể khai triển hết không gian trạng thái nhưng khó khăn chủ yếu là bạn phải tính toán được phản ứng và nước đi của đối thủ mình như thế nào? Cách xử lý đơn giản là bạn giả sử đối thủ của bạn cũng sử dụng kiến thức về không gian trạng thái giống bạn Giải thuật Minimax áp dụng giả thuyết này để tìm kiếm không gian trạng thái của trò chơi Trường hợp này thuật toán minimax sẽ đáp ứng những gì mình cần

c Các khái niệm

 Cây trò chơi (Game tree) - Đại khái là một sơ đồ hình cây thể hiện từng trạng thái, từng trường hợp của trò chơi theo từng nước đi

 Mỗi node biểu diễn 1 trạng thái của trò chơi hiện tại trên cây trò chơi

 Node được gọi nút lá là tại đó trò chơi kết thúc (trạng thái trò chơi lúc đó có thể thắng, thua hoặc hòa)

d Giải thuật Minimax

Hai người chơi trong game được đại diện là MAX và MIN MAX đại diện cho người chơi luôn muốn chiến thắng và cố gắng tối ưu hóa ưu thế của mình còn MIN đại diện cho người chơi cố gắng cho người MAX giành số điểm càng thấp càng tốt Giải thuật Minimax thể hiện bằng cách định trị các Node trên cây trò chơi: Node thuộc lớp MAX thì gán cho nó giá trị lớn nhất của con Node đó Node thuộc lớp

Trang 5

MIN thì gán cho nó giá trị nhỏ nhất của con Node đó Từ các giá trị này người chơi sẽ lựa chọn cho mình nước đi tiếp theo hợp lý nhất

2 Giải thuật minimax.

a Hoạt động của thuật toán Minimax

 Có thể dễ dàng mô tả hoạt động của thuật toán minimax bằng cách sử dụng một ví dụ Dưới đây chúng tôi đã lấy một ví dụ về Game Tree đại diện cho trò chơi hai người chơi

 Trong ví dụ này, có hai người chơi, một người được gọi là Maximizer và người khác được gọi là Minimizer

 Maximizer sẽ cố gắng đạt được số điểm Tối đa có thể,

và Minimizer sẽ cố gắng đạt được số điểm tối thiểu có thể

 Thuật toán này áp dụng DFS, vì vậy trong Game Tree này, chúng ta phải đi hết các lá để đến được các nút đầu cuối

 Tại nút đầu cuối, các giá trị đầu cuối được đưa ra vì vậy chúng tôi sẽ so sánh các giá trị đó và điều chỉnh lại cây cho đến khi trạng thái ban đầu xảy ra Sau đây là các bước chính liên quan đến việc giải quyết Game Tree hai người chơi:

Bước 1: Trong bước đầu tiên, thuật toán tạo ra Game Tree và

áp dụng hàm tiện ích để nhận các giá trị và các trạng thái kết thúc. 

Trong sơ đồ cây dưới đây, hãy lấy A là trạng thái bắt đầu của Tree Giả sử bộ tối đa hóa thực hiện lượt đi đầu tiên có giá trị ban đầu trong trường hợp xấu nhất = – infinite và minimizer sẽ thực hiện lượt tiếp theo có giá trị ban đầu trong trường hợp xấu nhất = + infinity

Trang 6

Bước 2: Bây giờ, đầu tiên chúng ta tìm giá trị tiện ích cho Maximizer, giá trị ban đầu của nó là -∞, vì vậy chúng ta sẽ so sánh từng giá trị ở trạng thái đầu cuối với giá trị ban đầu của Maximizer và xác định các giá trị nút cao hơn Nó sẽ tìm thấy mức tối đa trong số tất cả

Đối với nút D max (-1, – -∞) => max (-1,4) = 4

Đối với nút E max (2, -∞) => max (2, 6) = 6

Đối với nút F max (-3, -∞) => max (-3, -5) = -3

Đối với nút G max (0, -∞) = max (0, 7) = 7

Trang 7

Bước 3: Trong bước tiếp theo, đến lượt trình thu nhỏ, vì vậy nó

sẽ so sánh giá trị tất cả các nút với + ∞ và sẽ tìm giá trị nút lớp thứ 3

Đối với nút B = min (4,6) = 4

Đối với nút C = min (-3, 7) = -3

Bước 4: Bây giờ đến lượt Maximizer, nó sẽ lại chọn giá trị lớn nhất của tất cả các nút và tìm giá trị lớn nhất cho nút gốc Trong Game Tree này, chỉ có 4 lớp, do đó chúng tôi truy cập ngay đến nút gốc, nhưng trong trò chơi thực, sẽ có nhiều hơn 4 lớp

Đối với nút A max (4, -3) = 4

Trang 8

b Các thuộc tính của thuật toán minimax

Complete– Thuật toán Min-Max đã hoàn thành Nó chắc

chắn sẽ tìm thấy một giải pháp (nếu tồn tại), trong cây tìm kiếm hữu hạn

Optimal– Min-Max là tối ưu nếu cả hai đối thủ đều chơi tối

ưu

Time complexity– Vì nó thực hiện DFS cho Game Tree,

do đó độ phức tạp thời gian của thuật toán Min-Max là O (bm), trong đó b là hệ số phân nhánh của Game Tree và m

là độ sâu tối đa của cây

Space Complexity – Độ phức tạp không gian của thuật

toán Mini-max cũng tương tự như DFS là O (bm)

c Giới hạn của thuật toán minimax

đối với các trò chơi phức tạp như Cờ vua, cờ vây, v.v Loại trò chơi này có hệ số phân nhánh rất lớn và người chơi có rất nhiều lựa chọn recursive Hạn chế này của thuật toán

minimax có thể được cải thiện từ việc lược bớt alpha-beta

mà chúng ta đã thảo luận trong chủ đề tiếp theo

Chương II: BÀI TOÁN BỐC DIÊM

1 Giới thiệu bài toán

Phân tích bài toán bốc diêm

Bài toán bốc diêm là một ví dụ điển hình của lý thuyết trò chơi, nơi hai người chơi cạnh tranh để đạt được mục tiêu cuối cùng Dưới đây là phân tích chi tiết về các khía cạnh của bài toán này

1 Mô hình trò chơi

Người chơi: Hai người chơi, thường được gọi là P1 và P2.

Trạng thái: Số lượng que diêm còn lại trên bàn.

Nước đi: Mỗi người chơi có thể bốc từ 1 đến MMM que

diêm trong mỗi lượt

2 Luật chơi

Số diêm ban đầu (N): Thường được xác định trước (ví

dụ: 18 que)

Số diêm tối đa có thể bốc (M): Giới hạn cho mỗi lượt (ví

dụ: 4)

Trang 9

Người thắng: Người nào bốc que diêm cuối cùng sẽ

thắng

3 Phân tích trạng thái thắng/thua

Trạng thái thua: Các số diêm còn lại là 1,2,3,4,5,61, 2, 3,

4, 5, 61,2,3,4,5,6 Nếu đối thủ chơi tốt, người chơi sẽ không thể thắng từ những trạng thái này

Trạng thái thắng: Các số diêm còn lại như

7,8,9,10,11,12, 7, 8, 9, 10, 11, 12, 7,8,9,10,11,12, Từ những trạng thái này, người chơi có thể bốc để đưa đối thủ vào trạng thái thua

4 Chiến lược tối ưu

Lập kế hoạch: Người chơi cần lập kế hoạch nước đi của

mình để luôn giữ cho đối thủ ở các trạng thái thua Điều này thường yêu cầu dự đoán các nước đi của đối thủ

Số lượng diêm còn lại: Người chơi nên cố gắng đưa số

diêm còn lại về một bội số của M+1M + 1M+1 (ví dụ: nếu M=4M = 4M=4, thì các số thua sẽ là 1, 6, 11, 16)

5 Áp dụng thuật toán Minimax

Minimax: Một phương pháp trong lý thuyết trò chơi, được

sử dụng để tìm nước đi tối ưu bằng cách tối đa hóa lợi ích cho người chơi trong khi tối thiểu hóa lợi ích cho đối thủ

Cách thức:

o Mỗi trạng thái có thể được phân tích để xác định giá trị của nó (thắng/thua)

o Thuật toán sẽ xem xét tất cả các khả năng và chọn nước đi dẫn đến trạng thái tốt nhất cho người chơi hiện tạ

6 Ví dụ minh họa

Trang 10

o Bốc 4 que → 13 que.

3 P1 cần điều chỉnh nước bốc tiếp theo để đưa P2 vào trạng thái thua, như bốc đủ để đưa số diêm còn lại về 12

2 Cách giải bài toán.

a Các bước giải quyết bài toán.

1 Xác định quy tắc của trò chơi

Số diêm ban đầu (N): Số lượng que diêm trên bàn (ví dụ:

18)

Số diêm tối đa có thể bốc (M): Số que diêm mà mỗi

người có thể bốc trong một lượt (ví dụ: tối đa 4 que)

2 Phân tích trạng thái thắng/thua

2.1 Xác định trạng thái thua

 Các trạng thái thua sẽ là: 1,2,3,4,5,61, 2, 3, 4, 5, 61,2,3,4,5,6 Nếu bạn ở trong trạng thái này và đối thủ chơi tốt, bạn sẽ không thể thắng

2.2 Xác định trạng thái thắng

 Các trạng thái thắng sẽ là: 7,8,9,10,11,12, 7, 8, 9, 10, 11,

12, 7,8,9,10,11,12, Từ những trạng thái này, bạn có thể bốc que diêm để đưa đối thủ vào trạng thái thua

3 Lập kế hoạch nước đi

Chiến lược

 Bắt đầu với số diêm ban đầu NNN Bạn muốn bốc sao cho

số diêm còn lại sau lượt của bạn là một trong các số thua

 Nếu bạn là người chơi đầu tiên và N=18N = 18N=18:

o Bốc 1 que → Còn lại 17 que cho đối thủ

 Dù đối thủ bốc bao nhiêu (1-4 que), bạn có thể luôn điều chỉnh lượt của mình để giữ cho họ ở trạng thái thua

4 Sử dụng thuật toán Minimax (tùy chọn)

Nếu bạn muốn tự động hóa quyết định nước đi, bạn có thể triển khai thuật toán Minimax để tìm ra nước đi tối ưu:

Trang 11

b Cài đặt thuật toán Minimax

1 Định nghĩa hàm Minimax:

o Hàm sẽ kiểm tra các nước đi khả thi và đánh giá giá trị của từng trạng thái

2 Quy trình:

o Nếu số diêm còn lại là 0: Trả về trạng thái thua

o Nếu lượt của người chơi là 1 (tối đa hóa), tìm nước đi tốt nhất

o Nếu lượt của người chơi là 2 (tối thiểu hóa), tìm nước

đi tồi tệ nhất

3 Giao diện chương trình.

a Biểu diễn lời giải thuật toán bằng ngôn ngữ C++.

#include <iostream>

#include <algorithm>

#include <limits.h>

using namespace std;

// Hàm Minimax để đánh giá giá trị của từng trạng thái

int minimax(int n, int turn, int m) {

// Nếu không còn diêm, người chơi hiện tại thua

if (n == 0) {

return (turn == 1) ? -1 : 1;

}

if (turn == 1) { // Lượt của P1 (tối đa hóa)

int max_value = INT_MIN;

for (int k = 1; k <= min(m, n); ++k) {

int value = minimax(n - k, 2, m);

max_value = max(max_value, value);

}

return max_value;

} else { // Lượt của P2 (tối thiểu hóa)

Trang 12

// Hàm tìm nước đi tốt nhất cho người chơi 1

int best_move(int n, int m) {

int best_value = INT_MIN;

int best_k = 0;

for (int k = 1; k <= min(m, n); ++k) {

int move_value = minimax(n - k, 2, m);

if (move_value > best_value) {

best_value = move_value;

best_k = k;

}

}

return best_k;

}

int main() {

int N = 18; // Số diêm ban đầu

int M = 4; // Số diêm tối đa có thể bốc

int move = best_move(N, M);

cout << "Nên bốc " << move << " que diêm." << endl;

return 0;

}

b Giải thích chương trình:

Chương trình trên sử dụng thuật toán Minimax để xác định nước

đi tốt nhất trong trò chơi bốc diêm với 18 que diêm Dưới đây là phần giải thích chi tiết về từng phần của chương trình:

Hàm minimax

 Tham số của hàm:

n: Số que diêm hiện tại

turn: Lượt chơi (1 cho người chơi 1, 2 cho người chơi 2)

Trang 13

m: Số que diêm tối đa có thể bốc.

 Điều kiện dừng:

Nếu không còn que diêm (n == 0), người chơi hiện tại thua Nếu là lượt của P1 (1), trả về -1 (thua), nếu là P2 (2), trả về 1 (thắng)

 Luật chơi:

Nếu là lượt của P1 (tối đa hóa):

Khởi tạo max_value là giá trị tối thiểu có thể

Lặp qua tất cả các nước đi khả thi (1 đến m hoặc n)

Gọi đệ quy hàm minimax với số que diêm còn lại

Cập nhật max_value với giá trị tốt nhất tìm được

Nếu là lượt của P2 (tối thiểu hóa):

Khởi tạo min_value là giá trị tối đa có thể

Lặp tương tự như trên, nhưng tìm giá trị nhỏ nhất

Hàm tìm nước đi tốt nhất

 Hàm này tìm nước đi tốt nhất cho người chơi 1

 best_value khởi tạo là giá trị tối thiểu

 Lặp qua tất cả các nước đi khả thi từ 1 đến m

 Gọi hàm minimax cho mỗi nước đi và cập nhật best_value và best_k (nước đi tốt nhất)

Hàm main

Trang 14

PHỤ LỤC

-Tìm hiểu về các giải thuật, thuật toán có thể áp dụng cho bài toán

-Vận dụng các cơ sở tri thức đã tiếp thu qua môn học lập

trình(Ngôn ngữ C++) để viết chương trình

Trang 15

TÀI LIỆU THAM KHẢO

https://viblo.asia/p/thuat-toan-minimax-ai-trong-game-APqzeaVVzVe

https://websitehcm.com/thuat-toan-mini-max-trong-tri-tue-nhan-tao/

https://www.iostream.co/article/giai-thuat-tim-kiem-minimax-s1EVnH

Ngày đăng: 06/12/2024, 12:55

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w