You are on page 1of 30

TRƯỜNG ĐẠI HỌC KIẾN TRÚC HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN


-----***-----

ĐỒ ÁN MÔN HỌC TRÍ TUỆ NHÂN TẠO

ĐỀ TÀI:
NGHIÊN CỨU VÀ XÂY DỰNG TRÒ CHƠI
XẾP HÌNH DỰA TRÊN THUẬT TOÁN LEO
ĐỒI TỐT NHẤT

Nhóm sinh viên thực hiện:


Nguyễn Mai Phương (Nhóm trưởng)
Phạm Ngọc Lộc
Vũ Hải Nam
Đặng Minh Quân
Giảng viên hướng dẫn: ThS. Nguyễn Thị Huệ

Hà Nội, tháng 10 năm 2023


TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

MỤC LỤC

LỜI MỞ ĐẦU................................................................................................................4
DANH MỤC BẢNG BIỂU...........................................................................................5
DANH MỤC CÁC TỪ VIẾT TẮT..............................................................................6
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT............................................................................7
1.1. Tổng quan trí tuệ nhân tạo..........................................................................7
1.1.1. Khái niệm....................................................................................................7
1.1.2. Ứng dụng của trí tuệ nhân tạo vào thực tế.................................................8
1.1.3. Hạn chế của trí tuệ nhân tạo.....................................................................10
1.2. Giới thiệu tổng quan đề tài........................................................................10
1.2.1. Giới thiệu về bài toán...................................................................................10
1.2.2. Nguyên tắc....................................................................................................11
1.3. Công nghệ áp dụng vào đề tài...................................................................12
1.3.1. Ngôn ngữ python..........................................................................................12
1.3.2. Thư viện pygame...........................................................................................12
CHƯƠNG 2: XÂY DỰNG TRÒ CHƠI XẾP HÌNH DỰA TRÊN THUẬT TOÁN
LEO ĐỒI TỐT NHẤT................................................................................................13
2.1. Giới thiệu về thuật toán leo đồi....................................................................13
2.1.1. Giới thiệu về thuật toán leo đồi....................................................................13
2.1.2. Giới thiệu về thuật toán leo đồi tốt nhất.......................................................13
2.1.3. Đặc điểm của thuật toán leo đồi...................................................................14
2.2. Áp dụng thuật toán leo đồi tốt nhất vào bài toán.......................................14
2.2.1. Đánh giá trạng thái đầu...............................................................................14
2.2.2.Tìm hàng xóm của trạng thái ban đầu...........................................................15
2.2.3. Lựa chọn hàng xóm tốt nhất.........................................................................16
2.2.4. Kiểm tra trạng thái mới................................................................................16
CHƯƠNG 3: XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG..................................18
3.1. Các bước thực hiện........................................................................................18
3.1.1.Tạo khung, tiêu đề và các biến liên quan......................................................18
3.1.2. Khởi tạo game mới.......................................................................................18
3.1.3. Vẽ giao diện..................................................................................................19
3.1.4. Tạo hàm kiểm tra số giá trị đúng so với đích...............................................21
3.1.5. Khởi tạo thuật toán.......................................................................................22

2
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

3.2 Sản phẩm.........................................................................................................25


KẾT LUẬN..................................................................................................................27
TÀI LIỆU THAM KHẢO..........................................................................................28

3
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

LỜI MỞ ĐẦU
Công nghệ AI (Artificial Intelligence) hiện đang là công nghệ được quan
tâm phát triển và ứng dụng bậc nhất hiện nay, được ứng dụng trong nhiều lĩnh
vực như nhận dạng khuôn mặt, xử lý giọng nói, kỹ thuật ước tính đám đông …
đến các hệ thống an ninh, bảo mật, hay hệ thống pháp luật, chính phủ.

Theo dòng chảy của cuộc cách mạng 4.0, trí tuệ nhân tạo ngày càng được
phổ biến và ứng dụng rộng rãi trong mọi lĩnh vực của cuộc sống, mặc dù được
John McCarthy – nhà khoa học máy tính người Mỹ đề cập lần đầu tiên vào
những năm 1950 nhưng đến ngày nay thuật ngữ trí tuệ nhân tạo mới thực sự
được biết đến rộng rãi và được các “ông lớn” của làng công nghệ chạy đua phát
triển.

AI là công nghệ sử dụng đến kỹ thuật số có khả năng thực hiện những nhiệm
vụ mà bình thường phải cần tới trí thông minh của con người, được xem là phổ
biến nhất. Đặc trưng của công nghệ AI là năng lực “tự học” của máy tính, do đó
có thể tự phán đoán, phân tích trước các dữ liệu mới mà không cần sự hỗ trợ của
con người, đồng thời có khả năng xử lý dữ liệu với số lượng rất lớn và tốc độ
cao. Hiện mỗi ngày trên toàn cầu có khoảng 2,2 tỷ Gb dữ liệu mới (tương đương
165.000 tỷ trang tài liệu) được tạo ra và được các công ty, như Google, Twitter,
Facebook, Amazon, Baidu, Weibo, Tencent hay Alibaba thu thập để tạo thành
“dữ liệu lớn” (big data). Trí tuệ nhân tạo là một lĩnh vực liên quan đến chuyên
ngành khoa học máy tính và công nghệ thông tin, bản chất của trí tuệ nhân tạo
vẫn do con người làm ra, họ xây dựng các thuật toán, lập trình bằng các công cụ
phần mềm công nghệ thông tin, giúp các máy tính có thể tự động xử lý các hành
vi thông minh như con người.

4
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

DANH MỤC BẢNG BIỂU


STT Hình ảnh Tên Trang
1 3.1.1.1. Tạo khung và tiêu đề 16
2 3.1.1.2. Các thiết lập cài đặt chương trình 16
3 3.1.2. Hàm new 18
4 3.1.3.1. Hàm draw 18
5 3.1.3.2. Hàm draw_grid và hàm draw_tile 19
6 3.1.3.3. Class Tile 19
7 3.1.3.4. Class Button 20
8 3.1.4. Hàm evualate_board 20
9 3.1.5.1. Mã code khởi tạo thuật toán 21
10 3.1.5.2. Mã code thuật toán 22
11 3.1.6.1. Hàm run 23
12 3.2.6.2. hàm update 23
13 3.1.6.3. Hàm event 23
14 3.2.1 Giao diện ban đầu khi chạy code 24
15 3.2.2 Giao diện khi đã áp dụng thuật toán leo đồi 25
16 3.3.3 Hình ảnh khi thuật toán đã lựa chọn ra 25
trạng thái tốt nhất và in ra terminal

5
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

DANH MỤC CÁC TỪ VIẾT TẮT


STT Chữ viết tắt Diễn giải

1 AI Trí tuệ nhân tạo (Artificial Intelligence)

2 CV Thị giác máy tính (Computer Vision)

3 SDL Simple DirectMedia Layer

4 Obj Đối tượng (Object)

6
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Tổng quan trí tuệ nhân tạo
1.1.1. Khái niệm
- Khái niệm của trí tuệ nhân tạo là một vấn đề phức tạp và có nhiều cách
tiếp cận khác nhau. Mặc dù đã được hình thành và phát triển từ năm 1943
nhưng cho đến hiện tại vẫn chưa đi đến một khái niệm thống nhất. Tuy nhiên,
AI được hiểu đơn giản là một lĩnh vực của khoa học máy tính, nhằm mô phỏng
lại các khả năng của trí thông minh con người cho các máy móc, đặc biệt là hệ
thống máy tính . AI có thể được phân loại theo nhiều tiêu chí, như mức độ phức
tạp, mức độ lấy cảm hứng từ con người, mức độ tự nhận thức và mục tiêu cụ
thể. AI có thể bao gồm các ứng dụng như nhận dạng giọng nói, học máy
(machine learning), xử lý ngôn ngữ tự nhiên, trí tuệ cảm xúc, trí tuệ thị giác và
robot. AI có thể giúp cải thiện chất lượng của các hoạt động trong nhiều lĩnh
vực như y tế, kinh doanh và an ninh.
- Có 4 quan điểm về AI
+ Suy nghĩ như người
Là khả năng của trí tuệ nhân tạo để xử lý thông tin và đưa ra
quyết định dựa trên kinh nghiệm được tích lũy và điều này giống
như suy nghĩ con người.
+ Suy nghĩ hợp lý
Xây dựng những hệ thống có khả năng lập luận dựa trên việc
sử dụng các hệ thống hình thức như logic. Dựa trên một số cơ sở
như sử dụng logic biểu diễn bài toán và giải quyết bằng suy diễn
logic của một số triết gia Hy Lạp cổ đại.
+ Hành động như người
Là tạo ra một hệ thống có hành vi, hành động như con người,
đặc biệt trong những hoạt động có liên quan tới trí tuệ.
Turing test: là một bài kiểm tra khả năng trí tuệ của máy tính.
Nếu hệ thống vượt qua được phép thử thì được coi là có trí tuệ.
Để qua được phép thử, hệ thống cần có những khả ănng sau:
 Xử lý ngôn ngữ tự nhiên: để có thể phân tích, hiểu câu hỏi và trả lời trên
một ngôn ngữ nhất định
 Biểu diễn tri thức: lưu giữ tri thức và thông tin
 Suy diễn: sử dụng tri thức để trả lời câu hỏi
 Học máy: để thích nghi với hoàn cảnh và học những mẫu câu hỏi
+ Hành động hợp lý
7
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Có thể dựa trên việc suy nghĩ hợp lý hoặc không. Một số
trường hợp để quyết định một hành động như nào thì cần suy nghĩ
hợp lý để đưa ra kết quả tốt nhất. Nhưng trong một số trường hợp
như hành động phản xạ, thì không đòi hỏi suy diễn phức tạp,
nhưng lại cho kết quả tốt hơn

1.1.2. Ứng dụng của trí tuệ nhân tạo vào thực tế
Trí tuệ nhân tạo (AI) đã và đang được ứng dụng rộng rãi trong nhiều lĩnh
vực khác nhau trong đời sống, từ các lĩnh vực truyền thống như sản xuất, kinh
doanh, y tế, giáo dục, đến các lĩnh vực mới nổi như nghệ thuật, giải trí , an ninh.
Một số ví dụ về các ứng dụng của AI vào thực tế:

- Trong sản xuất: AI được sử dụng để tự động hóa các quy trình sản xuất,
cải thiện hiệu quả và giảm thiểu sai sót. Ví dụ, AI có thể được sử dụng để điều
khiển robot, giám sát chất lượng sản phẩm và dự đoán nhu cầu của khách hàng.

- Hệ thống tối ưu hóa kinh doanh: AI được sử dụng để giúp các doanh
nghiệp phân tích dữ liệu, đưa ra các quyết định kinh doanh và tối ưu hóa các
chiến dịch marketing, dự báo xu hướng thị trường, nhu cầu khách hàng, và hiệu
quả hoạt động. AI cũng có thể đề xuất các chiến lược kinh doanh, quản lý
nguồn lực và tăng cường khả năng cạnh tranh cảu doanh nghiệp. Ví dụ, AI có
thể được sử dụng để phân tích dữ liệu bán hàng, dự đoán xu hướng thị trường
và cá nhân hóa trải nghiệm khách hàng.

- Hệ thống chẩn đoán y khoa: AI được sử dụng để giúp các bác sĩ chẩn
đoán bệnh lý dựa trên các dữ liệu lâm sàng, hình ảnh y khoa, hoặc các triệu
chứng của bệnh nhân. AI cũng có thể để xuất các phương pháp điều trị mới và
cải thiện chất lượng cuộc sống của bệnh nhân. Ví dụ, AI có thể được sử dụng để
phân tích hình ảnh y tế, phát triển các loại thuốc mới và hỗ trợ bệnh nhân trong
quá trình phục hồi.

- Hệ thống hỗ trợ giáo dục: AI được sử dụng để cung cấp các nội dung
giáo dục cá nhân hóa cho từng học sinh, dựa trên mức độ kiến thức, sở thích và

8
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

mục tiêu học tập của họ, đồng thời đánh giá học sinh và phản hồi kết quả học
tập của học sinh, cũng như khuyến khích học sinh học tập. Ví dụ, AI có thể
được sử dụng để tạo ra các bài tập và bài kiểm tra phù hợp với trình độ của từng
học sinh, cung cấp phản hồi tức thì và hỗ trợ học sinh trong việc hiểu các khái
niệm khó.

- Hệ thống giải trí: AI được sử dụng để tạo ra các trò chơi video, chatbot
và các nội dung giải trí khác. Ví dụ, AI có thể được sử dụng để tạo ra các nhân
vật trò chơi video có tính cách và hành vi phức tạp, phát triển các chatbot có thể
trò chuyện như con người và tạo ra các bộ phim và chương trình truyền hình có
cốt truyện hấp dẫn.

- Hệ thống sáng tạo nghệ thuật: AI có thể sử dụng các kỹ thuật học máy để
tạo ra các tác phẩm nghệ thuật mới, dựa trên các mẫu nghệ thuật đã có hoặc
theo yêu cầu của người dùng. AI có thể tạo ra các tác phẩm âm nhạc, văn học,
hoặc hội họa với phong cách và tính sáng tạo cao.

- Hệ thống bảo mật an ninh: AI có thể giúp phát hiện và ngăn chặn các
cuộc tấn công mạng, xâm nhập dữ liệu, hoặc gian lận thanh toán. AI cũng có
thể nhận diện và xác minh danh tính của người dùng, hoặc theo dõi và phân loại
các hoạt động bất thường hoặc nguy hiểm.

Một số chương trình được áp dụng công nghệ AI trong thực tế:
- Google Bard: là một chatbot trí tuệ nhân tạo (AI) tổng hợp đàm thoại
được phát triển bởi Google. Bard ra đời nhằm đáp ứng trực tiếp sự phát triển
của ChatGPT của OpeAI và được phát hành vào tháng 3 năm 2023 với các tác
vụ như: trả lời các câu hỏi một cách toàn diện và đầy đủ thông tin, tạo các định
dạng văn bản sáng tạo khác nhau, dịch ngôn ngữ và viết các nội dung sáng tạo.

- Tesla Autopilot: là một hệ thống lái xe tự động được sử dụng trong các ô
tô Tesla. Tesla Autopilot sử dụng AI để điều khiển xe và tránh các chướng ngại
vật.

9
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

- CV-enabled locker: là một loại tủ đựng đồ sử dụng công nghệ thị giác
máy tính (CV) để tự động hóa quá trình gửi và nhận đồ, được sử dụng trong
các trung tâm thương mại, các sân bay. Các tủ được trang bị camera để nhận
dạng người dùng và đồ đạc. Khi người dùng đến tủ, camera sẽ nhận dạng họ và
mở tủ, người dùng có thể đặt đồ đạc của họ vào tủ. Khi người dùng muốn lấy
đồ họ chỉ cần để camera nhận dạng khuôn mặt và tủ sẽ mở ra.

AI vẫn đang trong giai đoạn phát triển, nhưng đã có những tiến bộ đáng kể
trong những năm gần đây. Với sự phát triển của công nghệ, AI có tiềm năng tác
động sâu sắc đến nhiều lĩnh vực của đời sống.

1.1.3. Hạn chế của trí tuệ nhân tạo


Không thể hiểu được thế giới theo cách giống như con người: AI thường
được đào tạo trên dữ liệu lớn, nhưng dữ liệu này có thể không phản ánh đầy đủ
thế giới thực. Điều này có thể dẫn đến các hệ thống AI mắc sai lầm hoặc đưa ra
quyết định không chính xác.
Không thể suy nghĩ sáng tạo: AI thường được sử dụng để thực hiện các
nhiệm vụ theo hướng dẫn, nhưng nó thường không thể suy nghĩ sáng tạo hoặc
đưa ra các giải pháp mới. Điều này có thể hạn chế ứng dụng của AI trong các
lĩnh vực như nghệ thuật, khoa học và kỹ thuật.
Không thể hiểu cảm xúc: AI không thể hiểu hoặc phản ứng với cảm xúc của
con người. Điều này có thể dẫn đến các hệ thống AI không thể tương tác hiệu
quả với con người.
Có thể bị sai lệch: AI có thể bị sai lệch bởi dữ liệu đào tạo của nó. Điều này
có thể dẫn đến các hệ thống AI có thành kiến hoặc đưa ra quyết định không
công bằng.
Có thể bị tấn công: AI có thể bị tấn công bởi các hacker hoặc kẻ thù. Điều
này có thể dẫn đến các hệ thống AI bị xâm nhập hoặc bị sử dụng cho các mục
đích xấu.
1.2. Giới thiệu tổng quan đề tài
1.2.1. Giới thiệu về bài toán
Bài toán 8- Puzzle là một bài toán quen thuộc với những người bắt đầu tiếp cận
với môn Trí tuệ nhân tạo. Bài toán có nhiều phiên bản khác nhau dựa theo số ô, như 8-
puzzle, 15-puzzle,…

Bài toán đơn giản là trò chơi xếp hình trượt gồm 8 ô vuông trong khung 3x3. Các
ô được sắp xếp ngẫu nhiên, trong đó có 1 ô trống để người chơi tự dịch chuyển. Mục
tiêu là sắp xếp các ô từ 1 đến 8 và để lại ô trống ở cuối, người chơi chỉ có thể đi bằng
cách trượt các khối theo chiều dọc hoặc ngang không được đi chéo để ghép thành 1
hình hoàn chỉnh như hình dưới:

10
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Trong quá trình giải bài toán, ở mỗi bước, ta mặc định chỉ có ô trống là di chuyển,
như vậy, tối đa ô trống có thể có 4 cách di chuyển (lên, xuống, trái, phải)

Mô tả về bài toán:

- Trạng thái ban đầu và trạng thái đích: Bất kỳ trạng thái nào cũng có thể
là trạng thái ban đầu và trạng thái đích .
- Hành động: Di chuyển ô trống sang trái, phải, lên, xuống.
- Mô hình chuyển tiếp: Cho một trạng thái và hành động, nó trả về trạng
thái mới nếu hành động hợp lệ.

Trạng thái ban đầu Trạng thái đích

1.2.2. Nguyên tắc

Người chơi chỉ có thể di chuyển ô số bên cạnh ô trống lên, xuống, sang trái, sang
phải
11
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Mục tiêu: sắp xếp lại các ô trống trong thứ tự đúng từ 1 đến 8.

Bài toán “8 – Puzzle” thách thức người chơi trong việc tìm ra một chuỗi di chuyển
hợp lý để giải quyết trạng thái ban đầu thành trạng thái đích.

1.3. Công nghệ áp dụng vào đề tài

1.3.1. Ngôn ngữ python


- Ngôn ngữ lập trình python
Python là một ngôn ngữ lập trình bậc cao, mã nguồn mở, được thiết kế
để dễ đọc và sử dụng. Python được phát triển bởi Guido van Rossum vào
năm 1991 và được phát hành cùng năm.
Là ngôn ngữ lập trình tổng quát có thể sử dụng cho nhiều mục đích
khác nhau như là: Web apps, Data Science, Machine Learning,...
- Python vô cùng phổ biến bởi những lí do sau:
+ Có cú pháp đơn giản
+ Linh hoạt cho nhiều tác vụ
+ Phù hợp cho người mới
+ Kho lưu trữ các module và thư viện lớn
+ Cộng đồng lớn mạnh

Python là một ngôn ngữ lập trình mạnh mẽ và linh hoạt, phù hợp với nhiều
mục đích khác nhau. Vậy nên chúng em lựa chọn ngôn ngữ áp dụng vào đề tài
nhằm thực hiện bài toán 8-puzzle

1.3.2. Thư viện pygame


 Thư viện pygame
Pygame là một thư viện lập trình cho Python dùng để tạo các ứng dụng đồ
họa 2D và 3D, như trò chơi điện tử, phim hoạt hình, trình chiếu hoặc các sản
phẩm nghệ thuật. Py game cung cấp các chức năng cơ bản để xử lý hình ảnh,
âm thanh, cũng như các tính năng nâng cao như đồ họa pixel, hiệu ứng âm
thanh, vật lý và trí tuệ nhân tạo. Được xây dựng trên nền tảng SDL, Pygame
cung cấp các công cụ và chức năng để tạo ra các ứng dụng đa phương tiện, đặc
biệt là trò chơi.
Pygame sử dụng thư viện SDL để cho phép phát triển trò chơi trong thời
gian thực mà không cần cơ chế bậc thấp của ngôn ngữ lập trình C và các dẫn
xuất của nó.

12
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Pygame là một thư viện dễ sử dụng, phù hợp cho cả lập trình viên mới bắt
đầu và lập trình viên có kinh nghiệm.

CHƯƠNG 2: XÂY DỰNG TRÒ CHƠI XẾP HÌNH DỰA TRÊN


THUẬT TOÁN LEO ĐỒI TỐT NHẤT

2.1. Giới thiệu về thuật toán leo đồi


2.1.1. Giới thiệu về thuật toán leo đồi
Leo đồi là tên chung để chỉ một họ các thuật toán có nguyên lý giống nhau.
Thuật toán thực hiện bằng cách tạo ra hàng xóm cho trạng thái hiện thời và di
chuyển sang hàng xóm có hàm mục tiêu tốt hơn. Thuật toán dừng lại khi đạt tới
một đỉnh của đồ thị hàm mục tiêu, tương ứng với trạng thái không có hàng xóm
nào tốt hơn. Đỉnh này cũng có thể là đỉnh cao nhất, hoặc cũng có thể là những
đỉnh thấp hơn. Thuật toán leo đồi không lưu lại những trạng thái đã qua, đồng
thời không nhìn xa hơn hàng xóm của trạng thái hiện thời. Thuật toán leo đồi
còn được gọi là thuật toán tìm kiếm cục bộ tham lam do tại mỗi thời điểm thuật
toán này chỉ xét một trạng thái láng giềng tốt nhất mà không quan tâm tới tương
lai xa hơn.

Có nhiều phiên bản khác nhau của thuật toán leo đồi. Một trong số những
phiên bản đó là thuật toán leo đồi tốt nhất (best improvement hill climbing) .
Thuật toán này lựa chọn trong số hàng xóm hiện thời có hàm mục tiêu tốt nhất.
Nếu hàng xóm đó tốt hơn trạng thái hiện thời thì chuyển sang hàng xóm đó.
Ngược lại thì kết thúc và trả về trạng thái hiện thời.

Leo đồi ngẫu nhiên (stochastic hill climbing) cũng là một phiên bản khác
của leo đồi. Phiên bản này không tìm ra hàng xóm tốt nhất mà lựa chọn ngẫu
nhiên một hàng xóm. Nếu hàng xóm tốt hơn trạng thái hiện thời thì hàng xóm
đó sẽ làm trạng thái hiện tại. Nhưng nếu hàng xóm được chọn không tốt bằng
trạng thái ban đầu thì thuật toán sẽ chọn lại ngẫu nhiên một hàng xóm khác và
so sánh tiếp.

2.1.2. Giới thiệu về thuật toán leo đồi tốt nhất


Thuật toán leo đồi tốt nhất là thuật toán tìm kiếm cục bộ được sử dụng để giải
quyết các bài tối ưu hóa. Thuật toán này hoạt động bằng cách bắt đầu từ trạng thái ban
đầu và sau đó liên tục di chuyển đến một trạng thái kế tiếp có giá trị cao hơn. Thuật
toán dừng lại khi được một trạng thái đích hoặc không thể cải thiện thêm giá trị.
Mô tả thuật toán leo đồi tốt nhất:

13
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Bước 1: Là bước khởi tạo, trong đó ta chọn ngẫu nhiên trạng thái xuất phát.

Bước 2: Sinh ra các láng giềng của trạng thái hiện thời.

Bước 3: Thuật toán kiểm tra các láng giềng, nếu không có láng giềng nào tốt hơn
thuật trạng thái hiện thời (tất cả láng giềng có giá trị hàm mục tiêu Obj không lớn hơn
Obj của trạng thái hiện thời) thì kết thúc và trả về trạng thái hiện thời là kết quả.

Bước 4: Trong trường hợp ngược lại, thuật toán chọn láng giềng có giá trị hàm
mục tiêu Obj lớn nhất và chuyển sang trạng thái đó

Bước 5: lặp lại từ bước 2.

Mã giả của thuật toán

Đầu vào: bài toán tối ưu tổ hợp

Đầu ra: trạng thái với hàm mục tiêu lớn nhất (hoặc cực đại địa phương)

1. Chọn ngẫu nhiên trạng thái x

2. Gọi Y là tập các trạng thái hàng xóm của x

3. Nếu ∀yi ∈ Y: Obj (yi) < Obj (x)

Kết thúc và trả lại x là kết quả

4. x ← yi , trong đó i = argmaxi (Obj (yi))

5. lặp lại bước 2

2.1.3. Đặc điểm của thuật toán leo đồi


Ưu điểm:
- Đơn giản, dễ lập trình do không cần sử dụng các cấu trúc
dữ liệu để biểu diễn nút, nhớ tập biên.
- Ít tốn bộ nhớ do không phải lưu lại các trạng thái. Vì tại
mỗi thời điểm, thuật toán chỉ lưu lại trạng thái hiện thời và một
trạng thái láng giềng.

Nhược điểm:

14
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

- Giải thuật leo đồi tìm lời giải của bài toán có thể thất bại
khi gặp trạng thái cực trị địa phương, các trạng thái đơn điệu ngang.
Do không sử dụng quay lui nên:
+ Khi không tìm được trạng thái nào tốt hơn để đi
mà trạng thái hiện tại chưa phải đích thì không thể tìm ra
được kết quả mặc dù kết quả là hiện hữu
+ Có thể tìm đường đi dài hơn nên không được tối
ưu

Khi thiết kế thuật toán, việc lựa chọn chuyển động rất quan trọng. Nếu có
quá nhiều chuyển động, thì từ trạng thái hiện thời có thể sinh ra nhiều láng
giềng vì vậy sẽ tốn rất nhiều thời gian. Còn nếu quá ít chuyển động thì dễ bị cực
trị địa phương.

2.2. Áp dụng thuật toán leo đồi tốt nhất vào bài toán
2.2.1. Đánh giá trạng thái đầu
Đánh giá trạng thái ban đầu, nếu nó là trạng thái mục tiêu thì trả về và dừng lại,
ngược lại thiết lập lại trạng thái bắt đầu như trạng thái hiện tại.

1 2 1 2 3

4 5 3 4 5 6

7 8 6 7 8

Trạng thái ban đầu Trạng thái đích


2.2.2.Tìm hàng xóm của trạng thái ban đầu

15
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

1 2

h=4 4 5 3

7 8 6

1 2 1 5 2 1 2

4 5 3 4 3 4 5 3

7 8 6 7 8 6 7 8 6

h=4 h=5 h=6

2.2.3. Lựa chọn hàng xóm tốt nhất


Chọn và áp dụng hàng xóm có trạng thái hợp tốt nhất và tốt hơn trạng thái hiện
tại.

16
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

1 2

h=6 4 5 3

7 8 6

1 2 1 2 3

4 5 3 4 5

7 8 6 7 8 6

h=4 h=7

2.2.4. Kiểm tra trạng thái mới


Kiểm tra trạng thái mới, nếu nó là trạng thái mục tiêu, thì trả về thành công và
thoát. Ngược lại, nếu nó tốt hơn trạng thái hiện tại, thì gán trạng thái mới làm trạng
thái hiện tại.Ngược lại, nếu không có trạng thái hiện tại nào tốt hơn thì quay lại bước
2.

1 2 3

4 5 17

7 8 6
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

h=7

1 2 1 2 3 1 2 3

4 5 3 4 5 4 5 6

7 8 6 7 8 6 7 8

h=7 h=6 h=8

Trả về trạng thái đích.

1 2 3

4 5 6

7 8

18
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

CHƯƠNG 3: XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG


3.1. Các bước thực hiện
3.1.1.Tạo khung, tiêu đề và các biến liên quan

Hình 3.1.1.1. Tạo khung và tiêu đề


Tạo class tên là game với hàm khởi tạo những giá trị như là chạy dòng lệnh
pygame.__init__(self) để sử dụng các hàm ở trong thư viện pygame:

- Khởi tạo screen với chiều dài và chiều rộng đã thiết lập
- Đặt tên tiêu đề cho chương trình
- Khởi tạo biến previous_choice_hill_climbing để lưu lựa chọn vừa thực hiện
trong bảng 3x3
- Khởi tạo biến start_Algorithm để khởi động và ngắt hoạt động của thuật toán

Hình 3.1.1.2
Các thiết lập cài đặt của chương trình
3.1.2. Khởi tạo game mới

19
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hình 3.1.2. Hàm new


Khởi tạo biến all_sprites là khung chứa các giá trị image con trong bảng 3x3
Khởi tạo giá trị ban đầu theo ý người dùng với biến tile_grid
Khởi tạo giá trị ban đích với biến tile_grid_completed
Với hàm draw_tile(self.tile_grid) nó hoạt động dựa trên các chỉ số trong biến
tile_grid để vẽ lên các ô trong bảng với các ô có chỉ số từ 1-8 sẽ có màu trắng còn chỉ
số 0 thì sẽ có cùng màu với background.

Ta khởi tạo list button để chứa các button mà ta vẽ lên giao diện với 2 button mà ta
thêm trong chương trình này là “Reset” trả lại bảng với giá trị ban đầu, “Algorithmn”
dùng thuật toán leo đồi để trả bảng đúng với giá trị đích

3.1.3. Vẽ giao diện

Hình 3.1.3.1. hàm draw


Hàm draw thực hiện các hoạt động gồm :
- Tô màu xanh cho background của chương trình với dòng code
self.screen.fill(BLUE)
- Với all_sprites chứa các image con trong bảng ta dùng nó gọi lại tới hàm
draw sẵn có trong biến để vẽ màu và các chỉ số từng ô trong bảng
- Gọi hàm draw_grid để vẽ các đường thẳng chia bảng ra thành 3 x 3 ô
- Với danh sách các nút trong button_list ta sử dụng hàm draw để vẽ lên
màn hình
20
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

- Khi thực hiện các bước trên ta cần dùng pygame.display.flip() để cập
nhật các thay đổi và hoạt động trên để in lên màn hình

Hình 3.1.3.2. Hàm draw_grid và hàm draw_tile

Hình 3.1.3.3. Class Tile

21
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hàm draw_grid: Ta dùng hai vòng lặp for ứng với mỗi dòng và cột
- Với vòng lặp for của dòng ta chạy từ giá trị -1 đến (kích cỡ của game*độ dài
của ô -1) với mỗi bước di chuyển bằng với giá trị của độ dài ô . Mỗi vòng lặp
dùng hàm về đường của thư viện pygame vẽ đường thẳng
- Vòng lặp for của cột cũng tương tự
Hàm draw_tile: Nhận bảng với các chỉ số làm tham số, dùng hai vòng lặp for
chồng nhau để lấy chỉ số của dòng và cột trong bảng để đưa vào class tile vẽ các image
với các giá trị của chỉ số khác 0 thì sẽ tô màu trắng và đánh số trong image đó còn
bằng không thì sẽ cho image bằng màu với background

Hình 3.1.3.4. Class Button


Class này nhận tham số chiều dài; chiều rộng; tọa độ x,y ; màu; màu chữ. Với hàm
draw vẽ button dùng các hàm trong pygame vẽ lên màn hình còn với hàm click để xác
định chuột có nhấn đúng trong khoảng tọa độ của button hay không

3.1.4. Tạo hàm kiểm tra số giá trị đúng so với đích

Hình 3.1.4. Hàm evualate_board

22
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hàm này giúp kiểm tra bảng của chúng ta có bao nhiêu vị trí đúng so với đích
bằng cách dùng hai vòng for truy cập chỉ số dòng và cột so sánh từng phần tử đích với
bảng hiện tại

3.1.5. Khởi tạo thuật toán

Hình 3.1.5.1. Mã code khởi tạo thuật toán


Hàm này áp dụng thuật toán leo đồi tốt nhất để giải quyết bài toán xếp hình 8 ô
giới hạn vòng lặp để tìm kết quả là 1000 vòng

Đầu tiên lưu lại số vị trí đúng của bảng hiện tại thông qua hàm evaluate_board nếu
số vị trí đúng bằng 9 thì thoát khỏi vòng lặp và in bảng đã được giải quyết nếu không
ta tiếp tục lưu số vị trí đúng vào biến mới và tạo ra danh sách chưa có khả năng di
chuyển của ô trống trong bảng hiện tại

Tiếp đó ta dùng hai vòng lặp for để tìm ra vị trí ô trống sau đó tiếp tục kiểm tra về
phía bên phải của ô trống xem có ô nào không nếu có thì ta thêm khả năng ô trống có
thể đi về phía bên phải vào danh sách tương tự bới vế trái, trên, dưới. Khi độ dài danh
sách khả năng di chuyển ta thoát khỏi vòng lặp dòng và cột

23
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hình 3.1.5.2. Mã code thuật toán


Tiếp đến ta kiểm tra xem trạng thái trước của bảng đã di chuyển theo hướng nào,
nếu ở trên ta xét danh sách khả năng di chuyển của bảng có với hướng di chuyển sang
phải thì hướng ngược lại sẽ bị xóa khỏi danh sách để trạng thái trước không bị lặp.
Tương tự với di chuyển lên và xuống

Sau đó ta sẽ kiểm tra các khả năng di chuyển của ô trống trong danh sách. Nếu di
chuyển sang phải ta đổi vị trí ô trống và bên phải cho nhau và xét bảng vừa thay đổi có
số ô đúng có hơn với bảng trước hay không nếu đúng thì lưu hướng di chuyển vừa
xong vào biến, nếu sai thì đổi lại vị trí như ban đầu tiếp tục với các trường hợp còn lại

3.1.6. Khởi tạo các hàm logic

24
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hình 3.1.6.1. Hàm run


Hàm run sẽ chạy cho tới khi nhận được hàm thoát chương trình

Hình 3.2.6.2. hàm update


Hàm update cũng tương tự như hàm run

Hình 3.1.6.3. Hàm event


Hàm event nhận các sự kiện khi ta click chuột vào tọa độ nhất định từ đó thực hiện
các hàm ta đã để trong chương trình

25
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

3.2 Sản phẩm


Giao diện ban đầu khi chạy chương trình gồm 9 ô được đánh số từ 1 đến 8 xếp
không theo trật tự và 1 ô để trống. Hai nút Reset và Algorithmn để đặt lại và chạy
thuật toán

Hình 3.2.1. Giao diện ban đầu khi chạy code

26
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

Hình 3.2.2. Giao diện khi đã áp dụng thuật toán leo đồi
Sau khi chạy thuật toán, chương trình sẽ in ra terminal trạng thái tốt nhất mà thuật
toán đã chọn

Hình 3.2.3.
Hình ảnh khi thuật toán đã lựa chọn ra trạng thái tốt nhất và in ra terminal
27
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

KẾT LUẬN
Trí tuệ nhân tạo, không chỉ là một lĩnh vực nghiên cứu nổi bật mà còn là nguồn
động viên mạnh mẽ cho sự phát triển của xã hội hiện đại. Kết luận của chúng ta có thể
bắt đầu bằng việc nhìn nhận về những thành tựu đáng kinh ngạc mà trí tuệ nhân tạo đã
mang lại. Từ việc cải thiện hiệu suất công nghiệp đến sự tiện lợi trong cuộc sống hàng
ngày, chúng ta không thể phủ nhận vai trò quan trọng của AI trong việc tạo ra những
thay đổi tích cực.

Tuy nhiên, điều quan trọng là chúng ta cũng phải đối mặt với những thách thức và
rủi ro mà AI đưa ra. Từ vấn đề về an ninh thông tin đến lo ngại về thất nghiệp do tự
động hóa, cần có sự cân nhắc và quản lý thông minh để đảm bảo rằng sức mạnh của trí
tuệ nhân tạo được sử dụng một cách tích cực và bền vững.

Trong tương lai, sự phát triển của trí tuệ nhân tạo sẽ tiếp tục, và vai trò của nó có
thể mở rộng ra nhiều lĩnh vực mới. Quan trọng nhất, chúng ta cần xem xét và xây
dựng các khía cạnh đạo đức, pháp lý và xã hội để đảm bảo rằng trí tuệ nhân tạo phục
vụ lợi ích chung và không gây hậu quả tiêu cực.

28
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

TÀI LIỆU THAM KHẢO

[1] Nhập môn trí tuệ nhân tạo, PGS TS Từ Minh Phương, nhà xuất bản thông tin và
truyền thông, 2014.
[2] Giải thuật leo đồi, https://thanhthao94blog.wordpress.com/2016/08/07/giai-thuat-
leo-doi-hill-climbing/
[3] Pygame, https://www.pygame.org/wiki/tutorials
[4] Python, https://www.pythontutorial.net/getting-started/
[5] Thuật toán leo đồi trong trí tuệ nhân tạo, Hill Climbing Algorithm trong trí tuệ
nhân tạo - w3seo (websitehcm.com)

29
TRÍ TUỆ NHÂN TẠO – 21CN3 – NHÓM 10

STT Họ và tên Nội dung Phần trăm hoàn thành


1 Nguyễn Mai Phương 1.1.1; 1.1.2; 2.1.2; 3.1.1; 30%
3.2
2 Phạm Ngọc Lộc 1.3; 2.2; 3.1.5; 3.1.6 30%
3 Đặng Minh Quân 1.1.3; 1.2.1; 2.1.1; 3.1.3 20%
4 Vũ Hải Nam 1.2.2; 2.1.3; 3.1.2; 3.1.4 20%
BẢNG PHÂN CÔNG CÔNG VIỆC

30

You might also like