Tải bản đầy đủ (.pdf) (8 trang)

Thuật toán alphabeta prunning trên Java

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 (462.08 KB, 8 trang )

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 HOC̣
TRÍ TUỆ NHÂN TẠO
Đề tài: Chương trình trò chơi cờ tướng sử
dụng giải thuật α-β
Giảng viên: Nguyên Nhật Quang
Nhóm sinh viên thưc hiện:̣
Họ tên
1.Nguyễn Thúc Huynh
2.Đào Nam Tiến
3.Nguyễn Đức Long
4.Nguyễn Đình Duy

MSSV
20131840
20133924
20132374
20130601
Hà Nội

Lớp
CNTT 2.02
CNTT 2.04
CNTT 2.01
CNTT 2.02

Ngày 20 tháng 11 năm 2015



LỜI MỞ ĐẦU
Trí tuệ nhân tạo( Artifical Intelligence viết tắt là AI) là một ngành khoa học phát
triển rất mạnh mẽ, có nhiều ứng dụng thực tiễn trong đời sống. Hiện nay với sự phát
triển cùng với độ thông minh của máy tính ngày càng có những ảnh hưởng rất lớn đến
cuộc sống ngày nay, cũng như sự phát triển của nhân loại. Có rất nhiều mảng được nhắc
đến trong sự thông minh của máy tính, và một trong số đó là sự phát triển của game đối
kháng, điển hình như game cờ tướng.
Cờ tướng là một trò chơi bắt nguồn từ Trung Quốc, thể loại game trí tuệ dành cho
hai người.
Mong muốn được hiểu sâu thêm về game cờ tướng, nhóm chúng em quyết định
xây dựng game cờ tướng với trí tuệ nhân tạo. Do khả năng lập trình, kĩ năng xây dựng
thiết kế phần mềm cũng như mới tiếp xúc với môn trí tuệ nhân tạo, chúng em còn khá
nhiều hạn chế, rất mong nhận được sự góp ý của thầy để nhóm có thể hoàn thiện tốt hơn.


MỤC LỤC
I.
II.
III.
IV.
V.
VI.

Giới thiệu và mô tả bài toán thực tế
Phương pháp giải quyết bài toán
Phương pháp tư liệu sử dụng từ bên ngoài
Khó khăn gặp phải
Cách giải quyết
Đánh giá, định hướng phát triển



NỘI DUNG
I. Giới thiệu và mô tả bài toán thực tế
Game cờ tướng là game đối kháng giữa hai người chơi. Trong một ván cờ, hai
người lần lượt thay nhau đánh một quân cờ trên bàn cờ phù hợp với luật chơi, người
thắng cuộc là người chiếu được tướng của đối phương.
Bài toán được đặt ra là cần xây dựng một chương trình để máy tính có thể tự động
đánh các nước cờ, thi đấu với con người, trong khoảng thời gian vừa đủ.
Yêu cầu cần đạt được trong chương trình
 Xây dựng được giao diện đồ họa người dùng dễ sử dụng, có bàn cờ và các
quân cờ cho người chơi và máy tính.
 Máy tính tự động sinh ra các nước cờ khi đến lượt và được đảm bảo đúng luật
bằng cách xây dựng điểm cho các quân cờ, máy tính sẽ đánh nước đi có giá trị
lớn nhất để đảm bảo cho máy có thể thắng người chơi, quan trọng là không để
người chơi mất thời gian chờ đợi.
 Chương trình sẽ tự động thoát khi ván cờ kết thúc hoặc người chơi đóng
chương trình.
II.

Phương pháp giải quyết bài toán

Xây dựng một không gian trạng thái. Nút gốc biểu diễn trạng thái bắt đầu, với mỗi
nước đi sẽ biến đổi trạng thái hiện tại thành một trạng thái mới. Các trạng thái bàn cờ
khác nhau được biểu diễn thành một cây trò chơi, chương trình sẽ tìm nước đi tốt
nhất.
Chương trình sẽ được tính trước một độ sâu nào đó của cây trò chơi, các trạng thái
trên mức đó được đánh giá theo một hàm heristic. Chương trình sử dụng giải thuật
cắt tỉa α-β. Ý tưởng của việc cắt tỉa α-β nhằm giảm bớt trạng thái không gian tìm
kiếm, thay vì tìm kiếm toàn bộ không gian với độ sâu nhất định. Giá trị α liên quan

đến các nút MAX và có khuynh hướng không bao giờ giảm, còn giá trị β lại liên quan
đến các nút MIN và có khuynh hướng không bao giờ tăng.
Luật cắt tỉa dựa trên giá trị của α,β:
- Quá trình tìm kiếm có thể kết thúc bên dưới nút MIN nào đó có giá trị β ≤ α
của một nút cha MAX bất kì nào đó.
- Quá trình tìm kiếm có thể kết thúc bên dưới nút MAX nào đó có giá trị α ≤ β
của một nút cha MIN bất kì nào đó.


Giải thuật giúp ta cắt bớt nhánh trên cây trò chơi, tăng hiệu quả tìm kiếm, giảm
thời gian tìm kiếm.
Phương pháp giải quyết bài toán chi tiết:
1. Biểu diễn các quân cờ
Mỗi quân cờ được xây dựng một lớp riêng, có giá trị riêng cho từng quân cờ,
xác định luật trên từng quân cờ ( theo luật chơi cờ tướng), các hàm đánh giá nước
đi, kiểm tra nước đi phù hợp với luật.
2. Xây dựng hàm lượng giá đánh giá thế cờ
Hàm lượng giá được đánh giá dựa trên giá trị gán cho quân cờ đã được đánh giá
(dựa theo tài liệu tham khảo).
Tướng

Xe

Pháo

Tịnh



Sỹ


Tốt

6000

600

285

122

270

118

30

Giá trị vị trí các quân:
Pháo:

Xe:

int[][]{

int[][]{

{6, 4, 0, -10, -12, -10, 0, 4, 6},

{14, 14, 12, 18, 16, 18, 12, 14, 14},


{2, 2, 0, -4, -14, -4, 0, 2, 2},

{16, 20, 18, 24, 26, 24, 18, 20, 16},

{2, 2, 0, -10, -8, -10, 0, 2, 2},

{12, 12, 12, 18, 18, 18, 12, 12, 12},

{0, 0, -2, 4, 10, 4, -2, 0, 0},

{12, 18, 16, 22, 22, 22, 16, 18, 12},

{0, 0, 0, 2, 8, 2, 0, 0, 0},

{12, 14, 12, 18, 18, 18, 12, 14, 12},

{-2, 0, 4, 2, 6, 2, 4, 0, -2},

{12, 16, 14, 20, 20, 20, 14, 16, 12},

{0, 0, 0, 2, 4, 2, 0, 0, 0},

{6, 10, 8, 14, 14, 14, 8, 10, 6},

{4, 0, 8, 6, 10, 6, 8, 0, 4},

{4, 8, 6, 14, 12, 14, 6, 8, 4},

{0, 2, 4, 6, 6, 6, 4, 2, 0},


{8, 4, 8, 16, 8, 16, 8, 4, 8},

{0, 0, 2, 6, 6, 6, 2, 0, 0}};

{-2, 10, 6, 14, 12, 14, 6, 10, -2}};


Mã:

Tốt:

int[][]{

Int[][]{

{4, 8, 16, 12, 4, 12, 16, 8, 4},

{0, 3, 6, 9, 12, 9, 6, 3, 0},

{4, 10, 28, 16, 8, 16, 28, 10, 4},

{18, 36, 56, 80, 120, 80, 56, 36, 18},

{12, 14, 16, 20, 18, 20, 16, 14, 12},

{14, 26, 42, 60, 80, 60, 42, 26, 14},

{8, 24, 18, 24, 20, 24, 18, 24, 8},

{10, 20, 30, 34, 40, 34, 30, 20, 10},


{6, 16, 14, 18, 16, 18, 14, 16, 6},

{6, 12, 18, 18, 20, 18, 18, 12, 6},

{4, 12, 16, 14, 12, 14, 16, 12, 4},

{2, 0, 8, 0, 8, 0, 8, 0, 2},

{2, 6, 8, 6, 10, 6, 8, 6, 2},

{0, 0, -2, 0, 4, 0, -2, 0, 0},

{4, 2, 8, 8, 4, 8, 8, 2, 4},

{0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 2, 4, 4, -2, 4, 4, 2, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, -4, 0, 0, 0, 0, 0, -4, 0}};

{0, 0, 0, 0, 0, 0, 0, 0, 0}};

3. Giải thuật tìm kiếm cắt tỉa α –β
Giải thuật tìm kiếm có đối thủ bằng cách tối ưu các nước đi tiếp theo của đối
thủ.
Loại bỏ nhánh không có khả năng tạo ra được đi tối ưu.
Bài toán cờ tướng: có trạng thái bàn cờ hai bên khi bắt đầu chơi, các toán tử

nước đi hợp lệ, trạng thái kết thúc khi một trong hai bên mất tướng.

III. Phương pháp tư liệu sử dụng từ bên ngoài
Các thư viện chuẩn do java cung cấp.
Tư liệu tham khảo trên mạng của Chiun Lin Lim, và một số nguồn khác
( /> /> />IV.

Khó khăn gặp phải
Máy còn thực hiện khá chậm, chưa đạt độ thông minh cần thiết.
Chương trình sử dụng nhiều bộ nhớ.
Sử dụng hàm lượng giá chưa tốt dẫn đến đánh giá của máy vẫn chưa cao.
Thuật toán cắt tỉa có độ sâu thấp tối đa(<=4).


V.

Cách giải quyết
Sử dụng danh sách liên kết đơn để lưu trữ giữ liệu, tránh dùng nhiều bộ nhớ
như mảng.
Tăng tốc độ chương trình bằng cách giá trị ước lượng của thế cờ ngay tại lúc
thay đổi sang thế cờ khác mà không phải tính tất cả tại lúc so sánh.

VI.

Đánh giá, định hướng phát triển
Đánh giá:
 Ưu điểm:
 Hoàn toàn có thể chơi với người chơi và không gặp lỗi
 Có thể chơi thắng người trung bình
 Nhược điểm

 Độ sâu cắt tỉa chưa bằng các chương trình hiện hành
 Cấu trúc dữ liệu chưa tối ưu
 Hàm ước lượng trạng thái còn cơ bản
 Kết quả chương trình
Độ sâu

Thời gian(ms)

Bộ nhớ(MB)

1

5

30

2

16

33,4

3

54

90

4


2041

142

Định hướng phát triển:
 Tối ưu hàm lượng giá
 Các thế cờ cuối tăng độ quan trọng
 Sử dụng tính toán song song cho việc cắt tỉa
 Tìm cách lưu trữ trạng thái bàn cờ khác nhờ trị số và giá trị
 Sử dụng cơ sở dữ liệu để lưu trữ các thế cờ tiếp theo




×