1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài tập lớn trí tuệ nhân tạo đề tài tìm đường ngắn nhất

20 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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

Nội dung

Trang 1

BO GIAO DUC VA DAO TAO

TRUONG DAI HOC DAI NAM

ĐẠI NAM UNIVERSITY

BÀI TẬP LỚN

TÊN HỌC PHẦN: TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: Tìm đường ngắn nhất

Giáo viên hướng dẫn: TS BÙI HẢI PHONG

Sinh viên thực hiện:

Stt Ma sv Ho va tén Lớp 1 1571020173 Hồng Cơng Minh | CNTT 15-05 2 1571020280 Nguyễn Văn CNTT 15-05 Thuận 3 1571020104 Lại Việt Hoàng CNTT 15-05 4 1571020053 Lê Mạnh Đạt CNTT 15-05 5 1571020043 Lé Minh Duong CNTT 15-05

Ha Noi, nam 2022

Trang 2

BO GIAO DUC VA DAO TAO TRUONG DAI HOC DAI NAM

ĐẠI NAM

UNTVWVER SI TY

BAI TAP LON

Trang 3

Ha Noi, nam 2022

Trang 4

Loi Cam On

Đầu tiên, em xin gửi lời cảm ơn đến Ban Giám hiệu trường Đại học

Đại Nam đã tạo cho em môi trường tốt để em có thể học tập và tiếp thu được những kiến thức quý báu trong những năm qua Em xin gửi lời cảm ơn sâu sắc đến Thầy giáo Bùi Hải Phong đã nhiệt tình hướng dẫn, định hướng, hỗ trợ em trong suốt quá trình thực hiện luận văn, giúp đỡ em tiếp cận với cách tư duy, giải quyết và trình bày một vấn đề cần nghiên cứu Những điều này đã giúp em khắc phục được những hạn chế của bản thân và những khó khăn để hoàn thành luận văn thành công, đúng thời hạn

Từ lâu con người đã có suy nghĩ muốn tạo ra một cỗ máy có thể tự

suy nghĩ và hành động Chính vì thế, trí tuệ nhân tạo (AI) trở thành một

một lĩnh vực mới trong thời đại công nghệ thông tin ngày nay Các ngành nghề trong xã hội đang có xu hướng xử dụng AI để khiến máy móc thông minh hơn Trong giải trí, trong y tế, hay cả trong giáo dục, rất nhiều robot thông minh được tạo ra có thể thay thế con người dạy học, giúp đỡ người

già, thực hiện các công đoạn trong cơng nghiệp, VÌ những ứng dụng hữu

ích của nó, nhóm em chọn đề tài “Tìm đường ngắn nhất'' dựa trên các thuật toán cơ bản hay dùng trong trí tuệ nhân tạo Mong muốn thông qua game này, em sẽ có những cái nhìn cụ thể về đề tài AI, từ đó mở rộng để nghiên cứu và phát triển thêm

Mặc dù em đã cố gắng hoàn thành luận văn bằng tất cả sự nỗ lực và khả năng của mình, nhưng chắc chắn vẫn còn nhiều hạn chế và thiếu sót Em mong nhận được sự cảm thông và góp ý quý giá từ các thầy cô và các

Trang 5

Muc luc LOT CAM OD I OE nnn i eeeer ies 3 Phần I: Tổng QUAN ccccccccccccccccceccccessseseesscseeeeeeeeeeeseceseeeuesesesesssseeeeeeenegs 5 ái 1 ng .ằằ ằ a ắa 5 2 Lý do chọn đề tài SH HT HH Ha 5 3 Mục tiêu và đối tượng phạm vi nghiên cCứu -.‹ccccccccccs: 6

Phần II: Phân tích bài toán tt nền nền ng ghe no 7

1 Yêu cầu bài tOán ii nh nh Tnhh HH tk ra 7

2 Phân tích yêu CầU cuc TH nn TT nh n nào 7

3 Phương pháp giải QUYẾT nh ngn ng ko 7

4 Phân tích và lựa chọn thuật toán cuc nh nhe nhe 7

Tổng quan thuật toán DijkSfra 0221111 1nn nghe nghe 8

1 Ví dụ về thuật toán ccnnnH HH nnn ng nen ngu 8 2 Đoạn giả mã cho thuật toán ccccnnnn nh nh nho 12 Phần III: Cài đặt chương trÌnh cv 1c n kg nho 13 1 Tạo không gian ‹ con n ng T ng TT HH TK rro 13 2 Tạo các chướng ngoại VẬT nh n nhe 13 3 Sử dụng thuật toán cuc ng nh Tnhh Heo 14 4 Cách vượt qua chướng ngoại VẬT cho 16 Phần IV: Kết quả chương trÌnh tt 1n n1 nnn nghe 17 ôn na 17

"»"‹ä 17

Trang 6

Phần I: Tổng quan

1 Lý thuyết

1 Khái niệm trí tuệ nhân tạo - Trí tuệ nhân tạo là trí thông minh của máy do con người tạo ra Ngay từ khi chiếc máy tính điện tử đầu tiên ra đời, các nhà khoa học máy tính đã hướng đến phát hiển hệ

thống máy tính (gồm cả phần cứng và phần mềm) sao cho nó có khả

năng thông minh như loài người 2 Ứng dụng của trí tuệ nhân tạo

- Ứng dụng trong sản xuất Trí tuệ nhân tạo còn được ứng dụng để xây dựng những quy trình sản xuất tối ưu hơn Công nghệ AI còn có khả năng phân tích cao, làm cơ sở định hướng cho khả năng ra quyết định trong sản xuất

- Ứng dụng trong y tế Ứng dụng tiêu biểu của trí tuệ nhân tạo trong lĩnh vực y tế đó chính là máy bay thiết bị bay không cần người lái được sử dụng trong những trường hợp cứu hộ khẩn cấp Thiết bị bay không người lái có thể đạt được tốc độ nhanh hơn xe chuyên dụng đến 40% và cực kì thích hợp để sử dụng ở những nơi có địa hình hiểm trở

Trang 7

2 Ly do chon dé tai

Tìm đường đi ngắn nhất là một trong những yêu cầu rất phổ

biến trong cuộc sống, đặc biệt là trong giới học sinh, sinh viên Đây cũng là một trò chơi mà em rất thích, chính vì vậy chúng em đã chọn đề tài “Tìm đường ngắn nhất cho môn Trí tuệ nhân tạo Trong quá trình hoàn thành đề tài này, chúng em đã tìm hiểu được các thuật toán đã được học trong môn Trí tuệ nhân tạo như thuật toán tìm kiếm đường ởi Dijkstra, giải thuật Dijkstra, cũng như kỹ năng lập trình ngôn ngữ C

3 Mục tiêu và đối tượng phạm vi nghiên cứu

- Mục tiêu: Tìm hiểu định nghĩa, ứng dụng của trí tuệ nhân tạo Tìm hiểu cấu trúc, các thuật toán và cách hoạt động của AI

Ý nghĩa khoa học và thực tiễn - Ý nghĩa khoa học: Tìm hiểu về các

thuật toán được sử dụng trong môn học trí tuệ nhân tạo Có được nền tảng để mở rộng phạm vi nghiên cứu ở những mặt ứng dụng khác của trí tuệ nhân tạo - Thực tiễn: Tìm đường ngắn nhất phục vụ việc đi lại và nâng cao khả năng lập trình

Trang 8

Phần II: Phân tích bài toán

1 Yêu cầu bài toán / ;

Xây dựng giao diện có kích thước tùy ý, có điểm đầu và điểm cuối

để thực hiện quá trình tìm đường đi từ điểm đầu đến điểm cuối Trong quá trình tìm đường có các chướng ngại vật ngăn cảm, yêu cầu tìm đường đi tránh các ngoại vật và ngắn nhất để đi đến điểm cuối Chắc chăn phải tìm được 1 con đường thì đạt yêu cầu bài toán

2 Phân tích yêu cầu ;

Mơ phỏng mơi trường ngồi đời thật thực hiện yêu cầu tìm đường di ngắn nhất giúp khách hàng có thể đến nơi nhanh nhất trong khoảng thời gian ngắn nhất

3 Phương pháp giải quyết ;

Xuất phát từ điểm đích ban đầu, sau đó thực hiện quá trình tìm kiếm

xung quanh, nếu phát hiện chướng ngoại vật thì sẽ chuyển hướng tìm kiếm con đường khác

Sau khi tìm kiếm phát hiện điểm cuối thì tạo ra con đường không có chướng ngoại vật và ngắn nhất

4 Phân tích và lựa chọn thuật toán ;

Thuật toán Dijkstra cho phép tìm đường đi ngắn nhất từ một đỉnh s

đến các đỉnh còn lại của đồ thị và chiều dài (trọng số) tương ứng _

Phương pháp của thuật toán là xác định tuần tự đỉnh có chiều dài đến s theo thứ tự tăng dần Thuật toán được xây dựng trên cơ sở gán cho mỗi đỉnh các nhãn tạm thời

Ý tưởng cơ bản của thuật toán như sau:

Bước 1: Từ đỉnh gốc, khởi tạo khoảng cách tới chính nó là 00, khởi tạo

khoảng cách nhỏ nhất ban đầu tới các đỉnh khác là +œ+œ Ta được

danh sách các khoảng cách tới các đỉnh

Bước 2: Chọn đỉnh a có khoảng cách nhỏ nhất trong danh sách này và ghi

nhận Các lần sau sẽ không xét tới đỉnh này nữa

Bước 3: Lần lượt xét các đỉnh ké b của đỉnh a Nếu khoảng cách từ đỉnh

gốc tới đỉnh b nhỏ hơn khoảng cách hiện tại đang được ghi nhận thì cập nhật giá trị và đỉnh kể a vào khoảng cách hiện tại của b

Bước 4: Sau khi xét tất cả đỉnh kể b của đỉnh a Lúc này ta được danh sách

khoảng cách tới các điểm đã được cập nhật Quay lại Bước 2 với danh sách

Trang 9

Tổng quan thuật toán Dijkstra

Graph (đồ thị): Đồ thị là một cấu trúc dữ liệu phi tuyến tính được định nghĩa là G = (V, E), trong V là tập hợp hữu hạn các đỉnh (node), E là tập hợp hữu hạn các cạnh, cạnh là một đường nối giữa hai node với nhau

Weighted graph (đồ thị có trọng số): Tương tự như đồ thị ở trên, chỉ khác là mỗi cạnh sẽ được gán thêm một trọng số Kiểu như cùng một khoảng cách đi từ A đến B, nhưng đi đường đẹp thì nhanh hơn, đường làng nhiều ổ gà thì chậm hơn

Connected graph (đồ thị liên thông): Một đồ thị được gọi là liên thông (connected) nếu có đường đi giữa mọi cặp đỉnh phân biệt của đồ thị Ngược lại, đồ thị này được gọi là không liên thông

Spamning tree (cây khung): một spanning tree của đồ thị G là cây con

của đồ thị G, chứa tất cả các đỉnh của G Nói cách khác, cây bao trùm

Trang 13

2 Doan gia ma cho thuat toan

Chúng ta cần duy trì khoảng cách đường đi của mỗi đỉnh Chúng ta

có thể lưu trữ nó trong một mảng có kích thước v, trong đó v là số đỉnh Chúng ta cũng muốn có thể đi được con đường ngắn nhất, không chỉ biết độ dài của con đường ngắn nhất Đối với điều này,

chúng ta sẽ ánh xạ mỗi đỉnh với đỉnh được cập nhật lần cuối cùng độ dài đường đi của nó

Sau khi thuật toán kết thúc, chúng ta có thể quay ngược lại từ đỉnh đích đến đỉnh nguồn để tìm đường đi Một hàng đợi ưu tiên nhỏ nhất có thể được sử dụng để nhận đỉnh có khoảng cách đường đi nhỏ nhất một cách hiệu quả

Hàm dijkstra với tham số đầu vào là (G, S)

Sử dụng vòng lặp for cho mỗi đỉnh V trong G

Gán khoảng cach[V] < gia tri vô cực

Gán phần trước[V] giá trị NULL

Nếu V != S, thực hiện thêm V vào trong hàng đợi ưu tiên Q Gán khoảng cách[S] 0

Trong khi Q không rỗng

Gán U c Giá trị MIN được lấy từ Q

Vòng lặp for với mỗi nút chưa được duyệt V của U

Gán khoảng cách tạm thời khoảng cách[U] + trọng số cạnh(U, V) Nếu khoảng cách tạm thời < khoảng cách[V]

Gán khoảng cách[V] Khoảng cách tạm thời Gán phần trước[V] U

Trả về mảng khoảng cách[], mảng thành phần trước[] Độ phức tạp của thuật toán Dijkstra

Độ phức tạp về thời gian: O(ElogV) Trong đó, E là số cạnh và V là số đỉnh Độ phức tạp về không gian: O(V)

Các ứng dụng của thuật toán Dijkstra Được sử dụng để tìm con đường đi ngắn nhất Được sử dụng trong các ứng dụng mạng xã hội

Được ứng dụng trong mạng điện thoại

Được ứng dụng để tìm các vị trí trong bản đồ

Trang 15

Phan III: Cài đặt chương trình

1 Tạo không gian

int ind[map_size_rows][map_size_cols] = {

{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}

};

2 Tạo các chướng ngoại vật

char map[map_size_rows][map_size cols] = {

{1,1,1,1,1, 1,1, 1,1, 1},

Trang 17

e=s _len-1;

for (i = 0; i< s_len; i++) {

stops[i].h = sqrt(pow(stops[e].row - stops[i].row, 2) + pow(stops[e].col - stops[i].col, 2)); } for (i = 1; i < map_size_rows - 1; i++) { for (j = 1; | < map_size_cols - 1; j++) { if (indLi}[j] >= 0) { for(k=i-1;k<=i+1;k++){ for(I=j-1;l<=j+1;l++){

if ((k == i) and (| == j)) {

continue;

}

if (ind[k][!] >= 0) { ++r_len;

routes = (struct route *)realloc(routes, r_len * sizeof(struct route));

int t = r_len - 1;

routes[t].x = ind[i][j]; routes[t].y = ind[k][I];

routes[t].d = sqrt(pow(stops[routes[t].y].row - stops[routes[t].x].row, 2) + pow(stops[routes[t].y].col -

stops[routes[t].x].col, 2));

Trang 18

++stops[routes[t].x].n_len; stops[routes[t].x].n =

(int*)realloc(stops[routes[t].x].n, stops[routes[t].x].n_ len * sizeof(int)); stops[routes[t].x].n[stops[routes[t].x].n_len - 1] = t; } 4 Cách vượt qua chướng ngoại vật while (o_len and not found) { min = DBL_MAX; for (i = 0; i < o_len; i++) { if (stops[open[i]].f < min) { current = open[i]; min = stops[openL[i]] f;

if (current == e) { found = 1;

++p_len;

Trang 19

while (stops[current].from >= 0) { current = stops[current].from; ++p_len;

path = (int*)realloc(path, p_len * sizeof(int)); path[p_len - 1] = current;

Phan IV: Két qua chuong trinh

Ï Xxxxxx.Ö

Màn

1 2 3

H

5 6 7 8 8 8 8 8 rs}

Trang 20

2 Két luan

Qua quá trình học môn trí tuệ nhân tạo và qua việc thực hiện đề tài nay, chúng em đã hiểu thêm hơn về việc ứng dụng trí tuệ nhân tạo trong

việc giải quyết các vấn đề trong thực tế Tìm đường ngắn nhất là một

ứng dụng rất tốt thuật toán Tuy nhiên do hạn chế về mặt thời gian nên

nhóm em chưa thể tối ưu được thuật toán, hàm tính điểm cũng chưa

thật sự được tốt như mong đợi, cũng như trong quá trình thực hiện

không thể tránh khỏi sai sót Chúng em rất mong nhận được sự góp ý

Ngày đăng: 18/07/2024, 16:19

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

TÀI LIỆU LIÊN QUAN