Thuật Tốn Tìm Kiếm Mù Blind Search...73.2 Mô tả trạng thái của bài tốn...8PHẦN IV: CHƯƠNG TRÌNH GIẢI QUYẾT BÀI TỐN...10PHẦN V: TỔNG KẾT...14 Trang 5 LỜI MỞ ĐẦUAI - Artificial Intelligen
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GTVT KHOA CÔNG NGHỆ THÔNG TIN
-o0o -BÁO CÁO HỌC PHẦN TRÍ TUỆ NHÂN TẠO
ĐỀ TÀI: TRÒ CHƠI ĐOÁN SỐ
Nhóm sinh viên thực hiện:
HÀ NỘI 2023
BẢNG PHÂN CÔNG
1 Hoàng Minh Công
(Nhóm trưởng)
Tìm hiểu bài, phân chia công việc cho nhóm, code demo 100%
Trang 22 Đào Cẩm Tú Tìm kiếm tài liệu, làm word, hỗ trợ
nhóm trưởng làm code 100%
3 Mùng Chí Bảo Tìm hiểu thuật toán, làm powerpoint,
hỗ trợ nhóm trưởng làm code 100%
4 Đặng Nhật Anh Tìm hiểu các khải niệm, thuyết trình,
hỗ trợ nhóm trường làm code 100%
Trang 3MỤC LỤ
C
LỜI MỞ ĐẦU 1
PHẦN I: PHÂN TÍCH BÀI TOÁN 2
1.1 Yêu cầu bài toán 2
1.2 Phân tích yêu cầu bài toán 2
PHẦN II: KHÁI NIỆM KHÔNG GIAN TRẠNG THÁI 4
2.1 Đặt vấn đề 4
2.2 Mô tả trạng thái 4
2.3 Toán tử chuyển trạng thái 4
2.4 Không gian trạng thái của bài toán 5
2.5 Biểu diễn không gian trạng thái dưới dạng đồ thị 5
PHẦN III: THUẬT TOÁN VÀ BIỂU DIỄN TRẠNG THÁI CỦA BÀI TOÁN 7
3.1 Thuật Toán Tìm Kiếm Mù Blind Search 7
3.2 Mô tả trạng thái của bài toán 8
PHẦN IV: CHƯƠNG TRÌNH GIẢI QUYẾT BÀI TOÁN 10
PHẦN V: TỔNG KẾT 14
KẾT LUẬN 15
Trang 5LỜI MỞ ĐẦU
AI - Artificial Intelligence hay Trí tuệ nhân tạo là một ngành thuộc lĩnh vực khoa học máy tính, hoạt động dựa trên cơ chế mô phỏng suy nghĩ, nhận thức của con người và đưa vào bộ não của các thiết bị, hệ thống Có thể nói, các AI không chỉ đơn thuần là một phần mềm máy tính có tính logic mà chúng còn chứa đựng cả trí tuệ của con người Chúng biết suy nghĩ, lập luận để giải quyết các vấn đề khác nhau theo từng tình huống, cũng có thể giao tiếp với con người
AI được ứng dụng trong rất nhiều hoạt động và lĩnh vực khác nhau Đối với hoạt động nghiên cứu cơ bản, AI giúp giải phương trình vi phân, tính toán mô phỏng quá trình tương tác ở mức lượng tử, mô phỏng tái tạo thành công lỗ hổng đen, tối ưu hoá gen, xác định cấu trúc hoá học, … Đối với hoạt động nghiên cứu ứng dụng, AI hỗ trợ bác sĩ chẩn đoán bệnh, phân tích hình ảnh y khoa, xem xét tác động chính sách, giúp dự báo trước các rủi ro và mối nguy hại tiềm ẩn,…
Để có thể hiểu rõ hơn về lĩnh vực khoa học công nghệ nói chung và công nghệ Trí tuệ nhân tạo nói riêng, nhóm em lựa chọn ứng dụng trí tuệ nhân tạo vào giải bài
toán “Trò chơi đoán số”.
Trang 6PHẦN I: PHÂN TÍCH BÀI TOÁN 1.1 Yêu cầu bài toán
Tên bài toán: Trò chơi đoán số
Cậu bé nghĩ ra 1 số (Gọi là S) gồm bỗn chữ số (không nhất thiết khác nhau) trong sáu chữ số từu 1 đến 6 Để tìm số đó máy lần lượt đưa ra các số dự đoán (gọi là M), mỗi số gồm 4 chữ số không nhất thiết khác nhau Với mỗi lần dự đoán, máy nhận được 2 câu trả lời của cậ bé cho 2 câu hỏi sau
+ Có bao nhiêu chữ số trong M là chữ số trong S nhưng vị trí xuất hiện của mỗi chữ số đó là sai?
+ Có bao nhiêu chữ số trong M là chữ số trong S và đồng thời vị trí xuất hiện của mỗi chữ số đều đúng?
Yêu cầu: Hãy hiện lên màn hình các số máy dự đoán và nói mỗi số đó nhận 2 câu
trả lời từ bàn phím của cậu bé cho đến khi được số đúng như cậu bé nghĩ (Số lần
dự đoán không quá 6 lần)
1.2 Phân tích yêu cầu bài toán
Ví dụ:
Cậu bé nghĩ ra 1 số (Gọi là S) gồm bỗn chữ số: 5436 (số Máy cần tìm)
Hiện lên màn hình:
Số máy dự đoán: 1234
Máy Nhận được 2 câu trả lời:
Đúng số - Đúng vị trí: 1
Đúng số - Sai vị trí: 1
Số máy dự đoán: 2156
Máy Nhận được 2 câu trả lời:
Đúng số - Đúng vị trí: 1
Đúng số - Sai vị trí: 1
Trang 7Số máy dự đoán: 1416
Máy Nhận được 2 câu trả lời:
Đúng số - Đúng vị trí: 2
Đúng số - Sai vị trí: 0
Số máy dự đoán: 5436
Máy Nhận được 2 câu trả lời:
Đúng số - Đúng vị trí: 4
Đúng số - Sai vị trí: 0
Thông báo máy chọn đúng số (Đúng số - Đúng vị trí: 4)
Trang 8PHẦN II: KHÁI NIỆM KHÔNG GIAN TRẠNG THÁI 2.1 Đặt vấn đề
Khi giải quyết bài toán bằng phương pháp tìm kiếm, trước hết ta phải xác định không gian tìm kiếm bao gồm tất cả các đối tượng trên đó thực hiện việc tìm kiếm Một phương pháp biểu diễn vấn đề phù hợp là sử dụng các khái niệm trạng thái (state) và toán tử (operator)
Phương pháp giải quyết vấn đề dựa trên khái niệm trạng thái và toán tử được gọi
là cách tiếp cận giải quyết vấn đề nhờ không gian trạng thái
2.2 Mô tả trạng thái
Giải bài toán trong không gian trạng thái, trước hết phải xác định dạng mô tả trạng thái bài toán sao cho bài toán trở nên đơn giản hơn, phù hợp bản chất vật lý của bài toán (Có thể sử dụng các xâu ký hiệu, véctơ, mảng hai chiều, cây, danh sách) Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban đầu và tình trạng cuối của bài toán gọi là trạng thái đầu và trạng thái cuối
2.3 Toán tử chuyển trạng thái
Toán tử chuyển trạng thái thực chất là các phép biến đổi đưa từ trạng thái này sang trạng thái khác Có hai cách dùng để biểu diễn các toán tử:
- Biểu diễn như một hàm xác định trên tập các trạng thái và nhận giá trị cũng trong tập này
- Biểu diễn dưới dạng các quy tắc sản xuất S? A có nghĩa là nếu có trạng thái S thì có thể đưa đến trạng thái A
Ví dụ Bài toán đong nước.
Các thao tác sử dụng để chuyển trạng thái này sang trạng thái khác gồm:
Đổ đầy một bình, đổ hết nước trong một bình ra ngoài, đổ nước từ bình này sang bình khác Như vậy, nếu trạng thái đang xét là (x, y) thì các trạng thái kế tiếp có thể chuyển đến sẽ là:
Trang 9(m, y)
(x, n)
(0, y)
(x, 0)
(x, y) (0, x+ y) nếu x+y < = n (x+y -n, n) nếu x+y > n
(x+ y,0) nếu x+y < = m
(m, x+y-m) nếu x+y > m
2.4 Không gian trạng thái của bài toán
Không gian trạng thái là tập tất cả các trạng thái có thể có và tập các toán tử của bài toán
Không gian trạng thái là một bộ bốn, Ký hiệu: K= (T, S, G, F) Trong đó,
T: tập tất cả các trạng thái có thể có của bài toán
S: trạng thái đầu
G: tập các trạng thái đích
F: tập các toán tử
Ví dụ 1: Không gian trạng thái của bài toán đong nước là bộ bốn T, S, G, F xác
đinh như sau:
T = {(x, y) / 0 <= x <= m; 0 <= y <= n}
S = (0,0)
G = {(x, k) hoặc (k, y) / 0 <= x <= m; 0 <= y <= n}
F = Tập các thao tác đong đầy, đổ ra hoặc đổ sang bình khác thực hiện trên một bình
2.5 Biểu diễn không gian trạng thái dưới dạng đồ thị
Các khái niệm
Đồ thị G = (V, E) trong đó V: tập đỉnh, E: tập cung (EV*V)
Trang 10Chú ý
- G là đồ thị vô hướng thì (i, j) là một cạnh cũng như là (j, i) (tức là:(i, j) I E thì (j, i) I E)
- Nếu G là đồ thị có hướng thì cung (i, j) hoàn toàn khác với cung (j, i)
Trang 11PHẦN III: THUẬT TOÁN VÀ BIỂU DIỄN
TRẠNG THÁI CỦA BÀI TOÁN
Bài toán: trò chơi đoán số
Đầu vào: số tự nhiên có 4 chữ số 9*10*10*10 = 9000 trạng thái
Đích: số tự nhiên có 4 chữ số trong đoạn từ 1 đến 6 6*6*6*6 = 1296 trạng thái
Nhóm chúng em quyết định lựa chọn phương pháp tìm kiếm mù Blind Search
3.1 Thuật Toán Tìm Kiếm Mù Blind Search
Khái niệm: Một tìm kiếm mù (hay còn gọi là tìm kiếm không hiểu rõ) là một tìm kiếm mà không có thông tin về phạm vi của nó Điều duy nhất mà tìm kiếm mù có thể làm là phân biệt trạng thái không mục tiêu với trạng thái mục tiêu
Hãy xem xét bản đồ đơn giản sau của Romania
Giả sử bạn hiện đang ở Arad và chúng tôi muốn đến Bucharest Nếu chúng ta tạo
ra một cây tìm kiếm, cấp 1 sẽ có ba trạng thái; Zerind, Sibiu và Timisoara Một tìm kiếm mù sẽ không có ưu tiên về việc nó sẽ khám phá nút nào trước (sau này chúng ta
Trang 12sẽ thấy rằng chúng ta có thể phát triển các chiến lược tìm kiếm kết hợp một số thông tin tình báo)
Bạn có thể thắc mắc tại sao chúng ta nên sử dụng tìm kiếm mù, khi chúng ta có thể sử dụng tìm kiếm với một số trí thông minh được tích hợp sẵn Câu trả lời đơn giản
là có thể không có bất kỳ thông tin nào mà chúng tôi có thể sử dụng Chúng tôi có thể chỉ đang tìm kiếm một câu trả lời và sẽ không biết rằng chúng tôi đã tìm thấy nó cho đến khi chúng tôi nhìn thấy nó
Nhưng cũng rất hữu ích khi nghiên cứu những tìm kiếm không được thông tin này vì chúng tạo cơ sở cho một số tìm kiếm thông minh mà chúng ta sẽ xem xét sau này
Các tìm kiếm mù mà chúng ta sắp xem xét chỉ khác nhau về thứ tự mà chúng ta
mở rộng các nút, nhưng như chúng ta sẽ thấy, điều này có thể có tác động đáng kể đến việc tìm kiếm hoạt động tốt như thế nào
3.2 Mô tả trạng thái của bài toán
Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban đầu và tình trạng cuối của bài toán gọi là trạng thái đầu và trạng thái cuối
Ví dụ 1: (Trò chơi đoán số - Bulls and Cows)
- Gọi x là số chữ số trong M là chữ số trong S và đồng thời vị trí xuất hiện của mỗi chữ số đều đúng
- Gọi y là số số trong M là chữ số trong S nhưng vị trí xuất hiện của mỗi chữ số
đó là sai
Như vậy bộ có thứ tự (x | y) có thể xem là trạng thái của bài toán Với cách mô tả như vậy, các trạng thái đặc biệt của bài toán sẽ là:
* Xét trường hợp: Các số không trùng nhau
+ T là tập các đỉnh như hình dưới
+ S Trạng thái ban đầu là (x | y) với x + y ≥ 2 và (x | y) ≠ (3 | 1)
+ G Trạng thái cuối là (4 | 0)
Trang 13+ F: Random
abcd 1 2 3 4 5 6 ≠ (0,0) (1,0) (0,1) (3,1) mnpq 1 3 6 4
Trang 14PHẦN IV: CHƯƠNG TRÌNH GIẢI QUYẾT BÀI TOÁN Chương trình gồm 2 file
File1: bullandcow.java
package trochoidoanso;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import static trochoidoanso.test.ran;
public class TroChoiDoanSo {
public static void main(String[] args) {
ArrayList<String> list = generateArray();
int steps = 0;
Scanner reader = new Scanner(System.in);
String AIguess = "";
System.out.println("Bulls and cows là một trò chơi giải mã trong đó bạn nghĩ đến
số có 4 chữ số và máy tính cố gắng đoán nó");
System.out.println("Bulls: Số đúng và đúng vị trí \nCows: Số đúng nhưng sai vị trí \n");
System.out.println("===========================================
======================\n");
System.out.println("Xin chào! Tôi là máy tính!\nBây giờ tôi sẽ nghĩ 1 con số ");
while (true) {
steps++;
System.out.println(" -*** -");
AIguess = list.get(ran.nextInt(list.size()));
System.out.println("Số còn lại là: " + list.size() + " số");
if(list.size() < 100){
System.out.println(list);
}
System.out.println("Số tôi đoán là: " + AIguess);
Trang 15System.out.print("Số số đúng và đúng vị trí(Bulls): ");
int numberOfBulls = reader.nextInt();
System.out.print("Số số đúng nhưng sai vị trí(Cows): ");
int numberOfCows = reader.nextInt();
try{
removeWrongNums(new BcCount(numberOfBulls, numberOfCows), AIguess, list);
}catch(Exception e){
System.err.println(e);
}
if (numberOfBulls == 4) {
System.out.println("Tôi đã đoán với " + steps + " lần đoán");
break;
}
if(steps > 6){
System.out.println("Máy đã đoán quá 6 lần!");
}
}
reader.close();
}
public static ArrayList<String> generateArray(){
ArrayList<String> lst = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= 6; j++) {
for (int k = 1; k <= 6; k++) {
for (int l = 1; l <= 6; l++) {
lst.add(String.valueOf(i)+String.valueOf(j)+String.valueOf(k) +String.valueOf(l));
}
}
}
}
return lst;
}
Trang 16
public static void removeWrongNums(BcCount guessBcCount, String guess, ArrayList<String> list) {
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String str = iter.next();
if (calcBullandCowCount(guess, str).equals(guessBcCount) == false) { iter.remove();
}
}
}
public static BcCount calcBullandCowCount(String guess, String candidate) { BcCount bcCount = new BcCount(0, 0);
for (int i = 0; i < candidate.length(); i++) {
if (guess.charAt(i) == candidate.charAt(i)) {
bcCount.bullCount++;
} else if (guess.contains(String.valueOf(candidate.charAt(i)))) {
bcCount.cowCount++;
}
}
return bcCount;
}
}
Trang 17File2: BcCount.java
package bullandcow;
public class BcCount {
public int bullCount = 0;
public int cowCount = 0;
public BcCount(int b, int c) {
bullCount = b;
cowCount = c;
}
public String toString() {
return bullCount + " " + cowCount;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BcCount other = (BcCount) obj;
if (bullCount != other.bullCount)
return false;
if (cowCount != other.cowCount)
return false;
return true;
}
}
Trang 18PHẦN V: TỔNG KẾT
- Đặt vấn đề:
Khi giải quyết bài toán bằng phương pháp tìm kiếm, trước hết ta phải xác định không gian tìm kiếm bao gồm tất cả các đối tượng trên đó thực hiện việc tìm kiếm Phương pháp giải quyết vấn đề dựa trên khái niệm trạng thái và toán tử được gọi là cách tiếp cận giải quyết vấn đề nhờ không gian trạng thái
- Mô tả trạng thái:
Giải bài toán trong không gian trạng thái, trước hết phải xác định dạng mô tả trạng thái bài toán sao cho bài toán trở nên đơn giản hơn, phù hợp bản chất vật lý của bài toán (Có thể sử dụng các xâu ký hiệu, véctơ, mảng hai chiều, cây, danh sách)
Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban đầu và tình trạng cuối của bài toán gọi là trạng thái đầu và trạng thái cuối
- Toán tử chuyển trạng thái:
Toán tử chuyển trạng thái thực chất là các phép biến đổi đưa từ trạng thái này sang trạng thái khác
- Không gian trạng thái của bài toán:
Không gian trạng thái là tập tất cả các trạng thái có thể có và tập các toán tử của bài toán
- Mô tả trạng thái của bài toán:
Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban đầu và tình trạng cuối của bài toán gọi là trạng thái đầu và trạng thái cuối
Trang 19KẾT LUẬN
Có thể nói, Trí tuệ nhân tạo (AI - Artificial Intelligence) xuất hiện đã đem đến bước tiến lớn trong ngành công nghệ phầm mềm Dù vẫn còn tồn tại những hạn chế nhưng không thể phủ định được những lợi ích mà AI mang lại trong mọi lĩnh vực cuộc sống, đặc biệt là trong các ngành y học, ngành công nghiệp nặng, tài chính ngân hàng, giao thông vận tải, giáo dục, hay trong việc phát triển các trò chơi giải trí trên máy tính, ti vi,…
Thông qua quá trình tìm tòi nghiên cứu và thực hiện đề tài “Trò chơi đoán số”, chúng em đã nắm vững được kiến thức về các khái niệm không gian trạng thái, các toán tử, đồ thị và các thuật toán, phương pháp tìm kiếm nói chung hay thuật toán tìm kiếm mù (Blind Search) nói riêng Đồng thời, hiểu rõ hơn về cách ứng dụng của ngành Trí tuệ nhân tạo (AI - Artificial Intelligence) trong việc tạo ra trò chơi giải trí cơ bản
Do kiến thức và vốn hiểu biết còn hạn chế nên trong quá trình phân tích và thực hiện đề tài “Trò chơi đoán số” vẫn còn tồn tại những sai sót, nhóm em rất mong nhận được sự góp ý cũng như chỉ bảo từ quý thầy, cô để có thể hoàn thành bài tập lớn một cách tốt nhất Chúng em xin chân thành cảm ơn!