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

Báo cáo đồ án minimax

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 (485.34 KB, 12 trang )

BÁO CÁO ĐỒ ÁN 1
Lê Văn Đạt-Nguyễn Bá Công
lớp HP: 1022470.1820.17.16
Đề tài: Phân tích và thiết kế giải thuật minimax

Điểm

Bảng phân chia nhiệm vụ

Nguyễn Bá Công
Lê Văn Đạt

Chữ ký sinh
viên

Phân công nhiệm vụ và đảm bảo tiến độ
của mỗi thành viên.

Tổng hợp và viết báo cáo hoàn chỉnh.

Lời cam đoan: Chúng tôi, gồm các sinh viên có chữ ký ở trên, cam đoan rằng
báo cáo này là do chúng tôi tự viết dựa trên các tài liệu tham khảo ghi rõ trong phần
III. Các số liệu thực nghiệm và mã nguồn chương trình nếu không chỉ dẫn nguồn
tham khảo đều do chúng tôi tự làm. Nếu vi phạm thì chúng tôi xin chịu trách nhiệm
và tuân theo xử lý của giáo viên hướng dẫn.

1


MỤC LỤC


I.

II.

III.
IV.

I.

GIỚI THIỆU THUẬT TOÁN MINIMAX ……………………………….………3
1. Thuật toán Minimax ………………………………………………3
2. Xét ví dụ Nim game……………………………………………3
3. Cài đặt thuật toán ………………………………………………….5
4. Độ phức tạp thuật toán…………………………………………..6
TRÒ CHƠI TIC TẮC TÒE…………………………………………………6
1. Giới thiệu trò chơi………………………………………………….6
2. Mục tiêu trò chơi…………………………………………………6
3. Hướng giải quyết………………………………………6
4. Thuật toán………………………………………………………9
5. Giới thiệu chương trình …………………………………………11
KẾT LUẬN..…….………………………………………………………………12
TÀI LIỆU THAM KHẢO……………………………………………12

GiỚI THIỆU THUẬT TOÁN MINIMAX
2


1) Thuật Toán Minimax
Minimax 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.
Thuật toán minimax phù hợp với những game đối kháng trong đó hai
người chơi luân phiên đánh như cờ vua, cờ tướng, cờ 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.
2) Xét ví dụ Nim Game
Nim game là trò chơi gồm có n (n >2 ) đồng xu. Ở mỗi bước đi, người
chơi chia các đồng xu này thành hai đống nhỏ có số lượng khác nhau. Người
thua sẽ là người không chia được các đồng xu theo yêu cầu của bài toán.
Ta đặt tên cho hai người chơi lần lượt là MIN và MAX. MAX luôn tìm
cách tối đa ưu thế của mình, và MIN tìm mọi cách để đưa MAX vào thế khó
khăn nhất ,mỗi mức trên sơ đồ ứng với một đấu thủ, chúng ta sẽ gán giá trị
nút lá là 1 nếu MAX thắng và là 0 nếu MIN thắng, biểu đồ của trò chơi Nim
được biểu diễn như hình sau :

3


MIN

1

MAX

5-1-1

MIN 0


MAX

MIN

6-1

1

4-2-1

1

4-1-1-1

0

MAX

5-2

1

1

0

f77 7

3-1-1-1-1


4-3

1

3-2-2

0

0

3-2-1-1

1

1

2-2-2-1

2-2-1-1-1

2-1-1-1-1-1

0

Ta truyền ngược các giá trị từ nút lá về gốc theo nguyên tắc:
 Nếu đỉnh ở mức MAX , gán giá trị cho đỉnh này bằng giá trị lớn nhất
trong các giá trị của đỉnh con của nó.
 Nếu đỉnh ở mức MIN , gán giá trị cho đỉnh này bằng giá trị nhỏ nhất
trong các giá trị của đỉnh con của nó.


3) Cài đặt thuật toán
4

3-3-1


Hàm tìm giá trị lớn nhất
Int MaxVal(u)
{
If (u là đỉnh kết thúc) MaxVal(u)=f(u);
else
MaxVal(u)=Max { MinVal(v)|v là đỉnh concủa u }
};
Hàm tìm giá trị nhỏ nhất
Int MinVal(u)
{
If (u là đỉnh kết thúc) MinVal(u)=f(u);
else
MinVal(u)=Min { MaxVal (v)|v là đỉnh con của u }
};
Hàm Minimax
Void Minimax(u,v) {
Val -∞;
For mỗi w là đỉnh con của u {
if( val <= MinVal(w))
{ val MinVal(w); v w }
}
}


4) Độ phức tạp thuật toán:
5


Thuật toán Minimax là thuật toán tìm kiếm theo chiều sâu. Về lý thuyết,
chiến lược Minimax cho phép tìm nước đi tối ưu cho AI. Tuy nhiên trong thực
tế, ta không có đủ thời gian để tính toán nước đi tối ưu này. Bởi vì thuật toán
tính toán trên toàn bộ cây trò chơi (xem xét tất cả các đỉnh của cây theo kiểu
vét cạn). Trong các trò chơi hay thì kích thước của cây trò chơi là cực lớn.
Chẳng hạn, trong cờ vua, chỉ tính đến độ sâu 40 thì cây trò chơi đã có đến
10120 đỉnh. Nếu cây có độ cao m và tại mỗi đỉnh có b nước đi thì độ phức tạp
về thời gian của thuật toán Minimax là O(bm ).
II.

TRÒ CHƠI TIC TAC TOE
1. Giới thiệu trò chơi
Trò chơi này được chơi bởi 2 đối thủ với 9 ô. Một trong 2 đối thủ sẽ đi trước
đánh O hoặc (X) vào 1 ô bất kỳ trên bàn cờ , đối thủ còn lại chọn 1 trong 8 ô còn
lại để đi. Hai đối thủ thay nhau đánh vào các ô trống cho đến khi có 1 đối thủ có 3
ô nằm trên 1 đường thẳng trước thì thắng. Nếu hết 9 ô cờ mà không có đối thủ nào
có 3 ô nằm trên 1 đường thắng thì ván cờ kết thúc với tỷ số hòa.

2. Mục tiêu trò chơi
Đến lượt chơi mỗi người cố gắng để tạo ra 3 quân cờ nằm trên 1 đường thẳng
để là người chiến thắng hoặc cố ngăn cản ngaười kia tạo được 3 quân cờ trên một
đường thắng.
3. Hướng giải quyết
Sử dụng thuật toán Minimax để tìm nước đi tốt nhất có lợi cho từng người chơi
Hai đối thủ trong 1 trò chơi được gọi là MIN và MAX .MAX là đại diện cho
đối thủ quyết dành thắng lợi hay cố gắng tối ưu hóa ưu thế của mình. Ngược lại

MIN là đối thủ cố gắng tối thiểu hóa điểm số của MAX. Ta giả thiết MIN cũng
dùng thông tin như MAX.
Khi áp dụng thủ tục Minnimax ta đánh dấu luân phiên từng mức trong không
gian tìm kiếm phù hợp với đối thủ có bước đi ở mức đó trong ví dụ trên MIN
được quyền đi trước, từng nút lá được gán giá trị 0 hay 1 tùy theo đó là thắng
cuộc với MIN hay MAX. Minimax sẽ truyền các giá trị này lên cao dẫn trên đồ
thị qua các nút cha mẹ kế tiếp nhau theo luật sau:

6


 Nếu trạng thái cha mẹ là nút MAX, gán cho nó giá trị tối đa của các con
cháu của nó
 Nếu thái cha mẹ là nút MIN, gán cho nó giá trị tối thiểu của con trạng
cháu của nó
Giá trị được gán cho từng trạng thái bằng cách đó sẽ chỉ rõ trạng thái tốt nhất
mà đối thủ này có thể đạttược . Các giá trị này sẽ được dùng để lựa chọn các
bước đi có thể có. Kết quả của việc áp dụng Minnimax vào đồ thị không gian
trạng thái đối với trò chơi Nim được thể hiện như hình trên. Vì tất cả các nước
đi đầu tiên có thể sảy ra cho MIN sẽ dần đến 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
như nào.

7


8


4. Thuật toán

class Oco
{
public const int Heigth = 65;
public const int weigth = 65;
private int _Dong;
private int _Cot;
private Point _Vitri;
private int _Sohuu;
public int Dong { get => _Dong; set => _Dong = value; }
public int Cot { get => _Cot; set => _Cot = value; }
public Point Vitri { get => _Vitri; set => _Vitri = value; }
public int Sohuu { get => _Sohuu; set => _Sohuu = value; }
public Oco(int dong,int cot,Point vitri,int sohuu)
{
this.Dong = dong;
this.Cot = cot;
this.Vitri = vitri;
this.Sohuu = sohuu;
}
public Oco()
{
}
}
class Banco
{
private int _Sodong;
private int _Socot;
public Banco(int sodong,int socot)
{
this.Sodong = sodong;

this.Socot = socot;
}
public int Sodong { get => _Sodong; set => _Sodong = value; }
public int Socot { get => _Socot; set => _Socot = value; }
public void Vebanco(Graphics g)
{
for(int i=0;i<=Socot;i++)
{
g.DrawLine(CaroChess.pen, i * Oco.weigth, 0, i * Oco.weigth, Sodong * Oco.Heigth);
}
for (int i = 0; i <= Sodong; i++)
{
g.DrawLine(CaroChess.pen, 0, i*Oco.Heigth, Socot*Oco.weigth,i*Oco.Heigth);
}
}
public void Vequanco(Graphics g, Point point, SolidBrush sb)
{

9


g.FillEllipse(sb, point.X+2, point.Y+2, Oco.weigth-4, Oco.Heigth-4);
}
}
namespace GameTicTacRoe
{
public partial class Form1 : Form
{
private CaroChess CaroChess;
private Graphics grs;

public Form1()
{
InitializeComponent();
CaroChess = new CaroChess();
CaroChess.Khoitaomangoco();
grs = pnlBanco.CreateGraphics();
}
private void PnlBanco_Paint(object sender, PaintEventArgs e)
{
CaroChess.VeBanCo(grs);
}
private void PnlBanco_MouseClick(object sender, MouseEventArgs e)
{
if (CaroChess.Danhco(e.X, e.Y, grs))
{
CaroChess.Danhco(e.X, e.Y, grs);
if (CaroChess.Wincheck(1) || CaroChess.Wincheck(2) || CaroChess.Hoa())
{
CaroChess.EndGame();
}
else
{
CaroChess.play(grs);
if (CaroChess.Wincheck(1) || CaroChess.Wincheck(2) || CaroChess.Hoa())
{
CaroChess.EndGame();
}
}
}
}

private void BtnNew_Click(object sender, EventArgs e)
{
grs.Clear(pnlBanco.BackColor);
CaroChess.luotdi = 1;
CaroChess.start(grs);
}
}
}

10


5. Giới thiệu chương trình
a) Giao diện chính của chương trình

b) Kết quả trò chơi

11


III.

KẾT LUẬN

Trong quá trình tìm hiểu để thực hiện đề tài này, nhóm em đã có cái nhìn
toàn diện hơn trong việc ứng dụng trí tuệ nhân tạo vào giải quyết vấn đề
trong thực tế. Cờ caro là một trò chơi ứng dụng tốt thuật toán minimax
.Tuy nhiên trong quá trinh thực thi chương trình không thể tránh khỏi
những sai sót và chưa thực sự tối ưu. Chúng em mong được sự góp ý của
thầy để có thể hoàn thiện hơn trong tương lai.

Chúng em xin chân thành cảm ơn!

IV.

TÀI LIỆU THAM KHẢO
1. Các bài viết về thuật toán minimax tại xemtailieu.com.
2. Minimax and applications (Dingzhu Du; P M Pardalos).

12



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×