1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo môn trí tuệ nhân tạo Đề tài Ứng dụng thuật toán a trong tìm Đường Đi trong thủ Đô hà nội

33 1 0
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

Thông tin cơ bản

Tiêu đề Ứng Dụng Thuật Toán A* Trong Tìm Đường Đi Trong Thủ Đô Hà Nội
Tác giả Trương Công Hiện, Nguyễn Việt Hoàng, Nguyễn Hùng Vĩ, Hà Nguyên Vũ, Vũ Đức Hải
Người hướng dẫn ThS Nguyễn Thị Huệ
Trường học Trường Đại Học Kiến Trúc Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo Cáo
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 33
Dung lượng 4,2 MB

Cấu trúc

  • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT (6)
    • 1.1 Tổng quan về trí tuệ nhân tạo (6)
      • 1.1.1 Khái niệm về trí tuệ nhân tạo (6)
      • 1.1.2 Phân loại (7)
      • 1.1.3 Lịch sử hình thành và phát triển (8)
      • 1.1.4 Những vấn đề chưa được giải quyết trong AI (9)
    • 1.2 Giới thiệu về đề tài (9)
    • 1.3 Các công nghệ được sử dụng (9)
      • 1.3.1 Giới thiệu ngôn ngữ lập trình Python (9)
      • 1.3.2 Các thư viện sử dụng trong đề tài (10)
      • 1.3.3 Giới thiệu hệ quản trị dữ liệu và Google Maps API (11)
      • 1.3.4 Các ngôn ngữ lập trình khác (13)
  • CHƯƠNG 2: ÁP DỤNG THUẬT TOÁN VÀO TÌM ĐƯỜNG ĐI NGẮN NHẤT (13)
    • 2.1 Giới thiệu các thuật toán chung (14)
      • 2.1.1 Tìm kiếm không có thông tin (14)
      • 2.1.2 Tìm kiếm có thông tin (15)
    • 2.2 Áp dụng thuật toán A* vào tìm đường đi ngắn nhất trong thủ đô Hà Nội. .17 (18)
      • 2.2.1 Ý tưởng xây dựng (18)
      • 2.2.2 Quy trình vận hành thuật toán A* để tìm đường đi (18)
  • CHƯƠNG 3: THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ (19)
    • 3.1 Quy trình thực nghiệm (19)
      • 3.1.1 Mô tả thực nghiệm (19)
      • 3.1.2 Thu thập dữ liệu (20)
      • 3.1.3 Xây dựng dữ liệu (21)
      • 3.1.4 Xử lý dữ liệu (22)
      • 3.1.5 Xây dựng các chức năng khác (23)
    • 3.2 Vận hành và đánh giá kết quả (28)
      • 3.2.1 Vận hành (28)
      • 3.2.2 Đánh giá thuật toán (29)
  • KẾT LUẬN (30)
  • TÀI LIỆU THAM KHẢO (33)

Nội dung

TRƯỜNG ĐẠI HỌC KIẾN TRÚC HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN──────── *** ─────── BÁO CÁO MÔN TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: ỨNG DỤNG THUẬT TOÁN A* TRONG TÌM ĐƯỜNG ĐI TRONG THỦ ĐÔ HÀ NỘI Giảng viên

CƠ SỞ LÝ THUYẾT

Tổng quan về trí tuệ nhân tạo

1.1.1 Khái niệm về trí tuệ nhân tạo

Trí tuệ nhân tạo (AI) là một lĩnh vực khoa học máy tính tạo ra hệ thống thực hiện nhiệm vụ đòi hỏi trí thông minh con người như học hỏi, suy luận và sáng tạo AI hiện rất phổ biến trong nhiều ứng dụng Tuy có nhiều định nghĩa khác nhau, AI vẫn hướng đến mô phỏng khả năng tư duy của con người.

Trí tuệ nhân tạo (AI) hướng đến việc tạo ra các thực thể thông minh, nhưng định nghĩa "thực thể thông minh" khó xác định, dẫn đến nhiều định nghĩa khác nhau về AI Ví dụ, so sánh Einstein và Messi cho thấy sự thông minh đa dạng Hiện nay, định nghĩa AI được chia thành bốn nhóm chính.

Hệ thống hành động (thông minh) như người

Trí tuệ nhân tạo (AI) hướng đến tạo ra hệ thống mô phỏng hành vi và hành động thông minh của con người, được đánh giá dựa trên khả năng xử lý ngôn ngữ tự nhiên (như phân tích, hiểu và trả lời câu hỏi bằng tiếng Anh), biểu diễn tri thức, khả năng suy diễn và học máy để thích ứng với môi trường khác nhau.

Hệ thống suy nghĩ (thông minh) như người

AI mô phỏng quá trình tư duy của con người bằng cách phân tích dữ liệu để tạo ra hệ thống nhận thức tương tự Khó khăn lớn nhất trong phát triển AI là sự linh hoạt và thay đổi bất ngờ của tư duy con người.

Hệ thống hành động một cách hợp lý

Hành vi con người chịu ảnh hưởng lớn từ tâm lý và cảm xúc, dẫn đến kết quả không nhất quán Vì vậy, cần xây dựng các hệ thống tự động hóa, đảm bảo hiệu quả mà không phụ thuộc vào yếu tố con người.

Hệ thống suy nghĩ hợp lý tập trung xây dựng tác tử hành động tối ưu, đạt kết quả tốt nhất dù yếu tố bất định Đây là cách tiếp cận tổng quát, bao hàm các phương pháp khác, có thể hoặc không dựa trên suy diễn, mô phỏng suy nghĩ người, và vượt qua bài kiểm tra Turing.

Hệ thống 1 và 3 tập trung vào hành động, đánh giá thành công dựa trên thước đo con người Ngược lại, hệ thống 2 và 4 dựa trên suy nghĩ và suy diễn, đánh giá dựa trên tính hợp lý của hệ thống.

Dựa theo khả năng của máy, AI phân thành 4 loại :

AI phản ứng chỉ có khả năng phản ứng với kích thích, thiếu khả năng học hỏi và ghi nhớ, tương tự phản xạ của động vật bậc thấp.

AI có khả năng học, ghi nhớ và vận dụng kinh nghiệm để đưa ra quyết định Khả năng học của AI rất nhanh nếu được cung cấp đủ dữ liệu trong một lĩnh vực cụ thể Machine Learning và Deep Learning là hai ví dụ thuộc loại AI này, tuy nhiên, AI vẫn có bộ nhớ hạn chế.

AI có tâm trí là loại trí tuệ nhân tạo có khả năng thấu hiểu cảm xúc và tâm trạng của người dùng, tương tác xã hội một cách tự nhiên Ví dụ, khi người dùng buồn, AI có thể nhận biết và phản hồi bằng các hành động an ủi.

Trí tuệ nhân tạo (AI) nhận thức, cấp độ cao nhất của AI, sở hữu khả năng nhận thức cảm xúc và trạng thái nội tại Thành tựu này sẽ tạo ra AI giống hệt con người, dẫn đến các tương tác phức tạp như tình yêu giữa các AI hoặc giữa AI và con người.

1.1.3 Lịch sử hình thành và phát triển

Từ ý tưởng máy móc suy nghĩ xuất hiện từ thời cổ đại, đến năm 1943, mô hình mạng nơ-ron nhân tạo đầu tiên ra đời (McCulloch và Pitts) Năm 1950, Alan Turing đề xuất bài kiểm tra Turing và khái niệm học máy Thuật ngữ "trí tuệ nhân tạo" (AI) chính thức được đặt ra tại hội nghị Dartmouth năm 1956, đánh dấu giai đoạn tiền khởi đầu (1943-1955) của AI.

Từ năm 1952 đến 1969, AI bước đầu phát triển với chương trình chơi cờ đam tự học của Samuel, ngôn ngữ lập trình Lisp của McCarthy, hệ thống GPS của Newell và Simon, cùng nghiên cứu về "microworlds" và hệ thống SAIN của Minsky, đặt nền móng cho những tiến bộ sau này.

Giai đoạn 1070-1980 chứng kiến sự trầm lắng của AI do giới hạn về khả năng xử lý các bài toán phức tạp và thiếu tri thức chuyên ngành Điều này dẫn đến cắt giảm kinh phí nghiên cứu từ các chính phủ lớn như Mỹ và Anh.

“mùa đông AI’ đầu tiên (1974 – 1980)

Giai đoạn 1969-1979 đánh dấu sự chuyển hướng của AI sang hệ thống dựa trên tri thức, tạo ra các hệ chuyên gia như DENDRAL (1967) và MYCIN (1974) Năm 1972, ngôn ngữ lập trình Prolog ra đời, hỗ trợ biểu diễn và suy luận tri thức bằng logic.

Giới thiệu về đề tài

Ứng dụng tìm đường ngắn nhất giữa hai điểm bất kỳ tại Hà Nội là giải pháp cần thiết trước thực trạng giao thông phức tạp của thủ đô Website này sử dụng thuật toán A* trên bản đồ để tính toán và gợi ý đường đi ngắn nhất, hỗ trợ người dùng hiệu quả trong việc di chuyển.

Các công nghệ được sử dụng

1.3.1 Giới thiệu ngôn ngữ lập trình Python

Python, ngôn ngữ lập trình bậc cao đa năng do Guido van Rossum tạo ra năm 1991, được ưa chuộng nhờ cú pháp đơn giản, khả năng tương thích đa nền tảng và thư viện phong phú Ứng dụng rộng rãi trong phát triển web, phần mềm và khoa học dữ liệu (bao gồm máy học) Tính dễ học và khả năng mở rộng khiến Python trở thành một trong những ngôn ngữ phổ biến nhất toàn cầu.

Cấu trúc đơn giản dễ dàng đọc và hiểu vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh

Mã nguồn mở, miễn phí

Là ngôn ngữ lập trình hướng đối tượng nên rất mạnh và mang lại nhiều lợi ích cho phát triển phần mềm.

Tích hợp thư viện tiêu chuẩn lớn, chứa dòng mã có thể tái sử dụng cho hầu hết mọi tác vụ.

Tương thích với nhiều nền tảng hỗ trợ lập trình, có thể sử dụng trên nhiều hệ điều hành khác nhau của máy tính.

Ngôn ngữ thông dịch cao cấp

Khả năng mở rộng và có thể nhúng

Tốc độ thực thi chậm

Hạn chế của nhà phát triển

Tiêu thụ bộ nhớ lớn

Không thích hợp cho nhà phát triển trò chơi và thiết bị di động

Phát hiện lỗi trong mã

Hạn chế thiết kế và khó kiểm tra

1.3.2 Các thư viện sử dụng trong đề tài

Python, với hệ thống thư viện đồ sộ, được tận dụng tối đa trong dự án thiết kế trang web của chúng tôi.

Thư viện SQLite3 tích hợp sẵn trong Python cho phép tương tác đơn giản và hiệu quả với cơ sở dữ liệu SQLite, hỗ trợ tạo, đọc, cập nhật và xóa dữ liệu thông qua mã Python.

Flask là một micro-framework Python mạnh mẽ, nhẹ và linh hoạt, lý tưởng cho các dự án web nhỏ và trung bình, đồng thời có khả năng mở rộng.

Flask: cung cấp lớp nền cho ứng dụng web.

Request: xử lý các yêu cầu giao thức HTTP như GET, POST, PUT, DELETE, từ phía người dùng trang web.

Jsonify chuyển đổi dữ liệu Python (dictionary, list, string, ) sang định dạng JSON, chuẩn giao tiếp phổ biến giữa client và server, đặc biệt trong API.

Flask sử dụng `render_template` với engine Jinja2 để kết hợp Python và HTML, tạo giao diện bằng cách truyền dữ liệu từ backend vào file HTML trong thư mục `templates`.

Route trong Flask định nghĩa các URL người dùng truy cập, mỗi URL liên kết với một hàm Python (view function) xử lý yêu cầu.

Google Maps API cung cấp các công cụ để tích hợp bản đồ Google vào ứng dụng, cho phép truy xuất dữ liệu như chỉ đường và thông tin địa điểm.

Bài viết này trình bày việc ứng dụng thư viện `heapq` của Python để xây dựng cấu trúc dữ liệu heap, một hàng đợi ưu tiên hiệu quả cho việc tìm nhanh giá trị lớn nhất/nhỏ nhất Tính năng này rất quan trọng trong thuật toán A*, được sử dụng trong đề tài nghiên cứu.

Thư viện `time` trong Python cung cấp các hàm để thao tác với thời gian, cho phép đo thời gian thực thi mã lệnh như `time.sleep()` và `time.time()`.

 datetime: là thư viện tíhc hợp trong Python để làm việc với ngày giờ Cung cấp các phương thức để thao tác với ngày tháng, thời gian.

1.3.3 Giới thiệu hệ quản trị dữ liệu và Google Maps API

SQLite là hệ quản trị cơ sở dữ liệu nhẹ, nhanh, đáng tin cậy, không cần máy chủ và hỗ trợ đầy đủ các tính năng SQL92, lý tưởng cho dự án vừa và nhỏ với nhu cầu truy cập đồng thời thấp.

Bài báo trình bày việc ứng dụng cơ sở dữ liệu SQLite để lưu trữ thông tin đường đi, bao gồm độ dài, thời gian di chuyển, phương thức di chuyển, thời gian tìm kiếm, và hỗ trợ chức năng sắp xếp, tìm kiếm dữ liệu.

Tiếp theo chính là Google Maps API:

API (Application Programming Interface) là giao diện lập trình ứng dụng đóng vai trò cầu nối giữa các hệ thống Ví dụ, nút "like" trên Facebook sử dụng API để truyền dữ liệu từ front-end đến back-end, cho phép lưu và xử lý thông tin RESTful API là một loại API phổ biến, tương tác thông qua HTTP.

Google Maps API của Google cung cấp các công cụ tích hợp bản đồ, địa điểm và tính năng liên quan vào ứng dụng/website Ứng dụng này được chọn làm cơ sở dữ liệu chính nhờ khả năng xử lý đa dạng tác vụ (hiển thị bản đồ, tìm kiếm địa điểm, chỉ đường) hiệu quả, tiết kiệm thời gian và công sức so với phương pháp thu thập dữ liệu thủ công.

Dễ sử dụng: Tài liệu chi tiết và công cộng hỗ trơ giúp việc tích hợp trở nên dễ dàng

Tính chính xác cao: Dữ liệu bản đồ và địa điểm được cập nhật thường xuyên, đảm bảo tính chính xác.

Tùy chỉnh linh hoạt: Có thể tùy chỉnh giao diện và các tính năng của bản dồ theo nhu cầu của ứng dụng.

Sử dụng API của Google có phí, mặc dù có gói miễn phí, nhưng chi phí có thể tăng cao nếu sử dụng nhiều API hoặc có lượng truy cập lớn.

ÁP DỤNG THUẬT TOÁN VÀO TÌM ĐƯỜNG ĐI NGẮN NHẤT

Giới thiệu các thuật toán chung

Bài viết này phân tích hai nhóm thuật toán tìm kiếm trong lĩnh vực trí tuệ nhân tạo: tìm kiếm không thông tin và tìm kiếm có thông tin, cung cấp cái nhìn tổng quan về các thuật toán hiệu quả cho các bài toán liên quan.

2.1.1 Tìm kiếm không có thông tin

Thuật toán tìm kiếm mù (Uninformed Search) không dùng thông tin bài toán ngoài vị trí trạng thái hiện tại và hành động khả thi Các thuật toán phổ biến gồm tìm kiếm chiều sâu (DFS), chiều rộng (BFS) và Dijkstra (UCS).

Thuật toán tìm kiếm theo chiều rộng (BFS) khám phá đồ thị hoặc cây theo từng lớp, ưu tiên các đỉnh ở mức độ sâu nhỏ hơn BFS sử dụng hàng đợi (FIFO) và mảng đánh dấu đỉnh đã duyệt để tránh lặp lại, tìm đường đi ngắn nhất.

Mô tả cách thức hoạt động của thuật toán :

1 Lấy một đỉnh bất kỳ trong đồ thị thêm vào cuối hàng đợi.

2 Lấy phần tử đầu tiên của hàng đợi và thêm nó vào danh sách đã duyệt.

3 Tạo một danh sach các đỉnh liền kề của đỉnh đang xét Thêm những đỉnh không có trong danh sách đã duyệt vào cuối hàng đợi

4 Tiếp tục lặp lại những bước 2 và 3 cho đến khi hàng đợi trống.

Thuật toán BFS cần được chạy trên mọi đỉnh đồ thị để đảm bảo duyệt hết tất cả các đỉnh, vì đồ thị có thể chứa các thành phần không liên thông.

Tính chất của thuật toán BFS:

Đầy đủ: BFS là thuật toán đầy đủ, nếu có lời giải là tìm được đường đi (nếu đích là hữu hạn)

Tối ưu: Có (Nếu giá thành của mọi bước đi là bằng nhau, thuật toán tìm lời giải nông nhất) Nếu không bằng nhau thì chưa chắc.

Ưu điểm: Tìm được đường đi ngắn nhất trong đồ thị không có giá thành

Nhược điểm: Tốn nhiều bộ nhớ khi khi lưu tất cả các nút O(b d+1 ) (trong đó: b là độ rẽ nhánh, d là chiều sâu của nút đích)

 Bộ nhớ và thời gian đều lớn, do vậy không chạy được các bài toán có kích thước lớn.

Thuật toán tìm kiếm theo chiều sâu (DFS) duyệt đồ thị hoặc cây bằng cách đi sâu vào từng nhánh đến hết khả năng trước khi quay lại DFS bắt đầu từ nút gốc (hoặc nút tùy ý trong đồ thị) và sử dụng phương pháp LIFO (Last-In, First-Out).

Mô tả cách thức hoạt động của thuật toán:

1 Bắt đầu bằng cách đặt bất kỳ đỉnh nào của đồ thị trên cùng của ngăn xếp.

2 Lấy đỉnh trên cùng của ngăn xếp và thêm nó vào danh sách đã truy cập.

3 Tạo danh sách các nút liền kề của đỉnh đó.Thềm các nút không có trong danh sách đã truy cập vào đầu ngăn xếp

4 Tiếp tục lặp bước 2 và 3 cho đến khi ngăn xếp trống.

Tính chất của thuật toán DFS :

Đầy đủ: Không, trong trường hợp không gian trạng thái có độ sâu vô hạn

Thuật toán tìm kiếm theo chiều sâu có thời gian chạy O(bm), rất lớn nếu độ sâu m của không gian trạng thái vượt quá độ sâu d của nút đích Tuy nhiên, nếu tồn tại nhiều lời giải, tìm kiếm theo chiều sâu có thể nhanh hơn tìm kiếm theo chiều rộng.

Bộ nhớ: O(b m ) tốt hơn nhiều so với chiều rộng.

2.1.2 Tìm kiếm có thông tin

Thuật toán tìm kiếm có thông tin (Informed Search) trong trí tuệ nhân tạo tận dụng hàm heuristic – hàm ước lượng khoảng cách đến trạng thái mục tiêu – để tối ưu quá trình tìm kiếm Các thuật toán tiêu biểu gồm tìm kiếm tham lam và A*.

Thuật toán tìm kiếm tham lam sử dụng hàm heuristic để ước lượng chi phí đường đi, ưu tiên mở rộng nút có chi phí đến đích nhỏ nhất tại mỗi bước, mà không xem xét toàn cục.

f(n) = h(n) (trong đó: h(n) là hàm heuristic ước lượng giá thành đường đi từng nút n tới đích)

Tính chất của tìm kiếm tham lam :

Đầy đủ: Không (vì trong trường hợp bài toán có vô số nút mà có hàm h(n) đủ nhỏ thì không tìm được đích → vòng lặp)

Thuật toán tối ưu hóa bị ảnh hưởng bởi hàm heuristic Hàm ước lượng quá cao so với thực tế sẽ gây ảnh hưởng đến quá trình tìm kiếm Do đó, tối ưu hóa không hiệu quả.

 O(b m ) với b là độ rẽ nhánh, m là độ sâu của không gian trạng thái.

 Nếu hàm ước lượng heuristic tốt, thuật oán có thể sẽ nhanh hơn rất nhiều.

 O( b m ) lưu tất cả các nút trong bộ nhớ.

 Nếu hàm heuristic tốt, số nút cần lưu giảm đi rất nhiều.

A* là thuật toán tìm kiếm có thông tin, tối ưu và hiệu quả, được sử dụng rộng rãi trong khoa học máy tính để tìm đường đi ngắn nhất trong đồ thị Khắc phục nhược điểm của tìm kiếm tham lam, A* dựa trên BFS và sử dụng hàm đánh giá f(n) để xác định thứ tự duyệt nút, đảm bảo tìm ra giải pháp tối ưu.

Phương pháp của bài toán là tìm nút n có f(n) = g(n) + h(n) nhỏ nhất để mở rộng:

g(n): giá thành đường đi từ điểm xuất phát tới nút n ∉

h(n): hàm heuristic ước lượng giá thành đường đi từng nút n tới đích

f(n): ước lượng giá thành đường đi từ điểm xuất phát, qua n, tới đích

Mô tả thuật toán tìm kiếm A*: Đầu vào: bài toán tìm kiếm, hàm heuristic h Đầu ra: đường tới nút đích

Khởi tạo: tập các nút biên (nút mở) O = S

1 Lấy nút n có f(n) là nhỏ nhất khỏi O

2 if n thuộc G return (Đường đi tới n)

 Thêm m vào O cùng với giá trị f(m) return không tìm được đường đi;

Xử lý các nút lặp: nếu nút có chi phí tốt hơn :

Đưa lại vào danh sách nếu đã mở rộng

Cập nhật lại nút cũ có giá thành kém hơn nếu đang trong tập biên

Ví dụ: Tìm đường đi từ S đến G

STT Nút được mở rộng Tập biên O

6 G Đích Đường đi : G ← C ← A ← S Giá thành : c = 7 Ưu và nhược điểm của thuật toán tìm kiếm A*: Ưu điểm:

Hiệu quả: A* thường rất nhanh và tìm đường đi ngắn nhất nhờ sử dụng thông tin heuristic.

Đảm bảo tối ưu: A* đảm bản tìm được đường ngắn nhất nếu hàm heuristic h(n) không vượt quá chi phí thực tế điểm hiện tại đến điểm đích.

Tiêu tốn bộ nhớ: A* có thể tiêu tốn nhiều bộ nhớ vì lưu trữ nhiều nút trong danh sách mở.

Hiệu quả thuật toán A* phụ thuộc hoàn toàn vào chất lượng hàm heuristic Hàm heuristic kém sẽ khiến A* hoạt động kém hiệu quả.

Áp dụng thuật toán A* vào tìm đường đi ngắn nhất trong thủ đô Hà Nội .17

Đề tài ứng dụng thuật toán A* tìm đường đi ngắn nhất trong thành phố Hà Nội, bằng cách mô hình hóa Hà Nội thành đồ thị: các giao lộ là node, các đoạn đường là cạnh.

Xây dựng mô hình dưới dạng đồ thị:

Đỉnh (Nodes): Mỗi giao lộ hoặc địa điểm quan trọng trong thành phố sẽ được biểu diễn dưới dạng một đỉnh trong đồ thị.

Cạnh là đoạn đường nối giữa hai giao lộ (đỉnh) Mỗi cạnh có trọng số thể hiện khoảng cách hoặc thời gian di chuyển giữa hai đỉnh đó.

Trọng số của cạnh: Trọng số có thể được tính toán dựa trên khoảng cách thực tế (sử dụng dữ liệu bản đồ)

Để ước lượng khoảng cách giữa hai giao lộ, hàm ước lượng h(n) có thể sử dụng khoảng cách Euclide hoặc kết hợp thông tin giao thông thực tế nhằm tăng độ chính xác.

Hàm heuristic h(n) ước lượng chi phí từ nút n đến đích Độ chính xác của h(n) quyết định độ chính xác thuật toán tìm đường Chúng tôi sử dụng khoảng cách Euclidean: h(n) = √((x_goal - x_n)² + (y_goal - y_n)²) để ước lượng h(n).

Trong đó: ( x goal , y goal ) là tọa độ của điểm đích.

(x n , y n ) là tọa độ của đỉnh hiện tại.

2.2.2 Quy trình vận hành thuật toán A* để tìm đường đi:

Thuật toán A* được áp dụng trên mô hình đồ thị thành phố Hà Nội để tìm đường đi ngắn nhất giữa hai điểm bất kỳ Quy trình chi tiết sẽ được trình bày cụ thể.

Tạo danh sách mở (open list) chứa điểm bắt đầu và danh sách đóng (closed list) rỗng.

Gán chi phí g(start)=0 và tính f(start)=g(start)+h(start) cho đỉnh bắt đầu, trong đó h (start) là ước lượng khoảng cách từ điểm bắt đầu đến đích.

2 Lặp lại cho đến khi tìm được đích hoặc danh sách rỗng:

Chọn đỉnh n có giá trị f (n) nhỏ nhất từ danh sách mở.

Nếu n là đích, kết thúc và trả về đường đi ngắn nhất.

Di chuyển n từ danh sách mở sang danh sách đóng (để đánh dấu rằng nó đã được khám phá)

3 Khám phá các đỉnh kề:

Thuật toán duyệt qua mỗi đỉnh kề `m` với đỉnh hiện tại `n` Nếu `m` đã được thăm, bỏ qua Tính `g(m) = g(n) + cost(n, m)`, `h(m)` (hàm heuristic), và tổng chi phí `f(m) = g(m) + h(m)`.

4 Cập nhật danh sách mở:

Nếu m chưa có trong danh sách mở, thêm nó vào danh sách mở với giá trị f (m).

Nếu đỉnh `m` đã nằm trong danh sách mở và giá trị `g(m)` tính toán được nhỏ hơn giá trị hiện có, cập nhật `g(m)`, `h(m)` và `f(m)` trong danh sách mở.

5 Lặp lại: Tiếp tục lặp lại quy trình cho đến khi đạt đến đích hoặc danh sách mở rộng.

6 Trả về kết quả: Khi thuật toán đạt đến đích, nó sẽ truy vết ngược từ đích về điểm xuất phát để xác định đường đi ngắn nhất.

THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ

Quy trình thực nghiệm

Hà Nội, nằm ở tọa độ 21.0278° vĩ độ Bắc và 105.8342° kinh độ Đông, là trung tâm kinh tế - chính trị của Việt Nam Vị trí địa lý tại phía Tây Bắc đồng bằng sông Hồng quyết định tầm quan trọng của hệ thống giao thông Hà Nội, bao gồm đường bộ (khoảng 16.132 km vào cuối năm 2013, con số này đang liên tục tăng), đường sắt, đường thủy và đường hàng không, đáp ứng nhu cầu đi lại và vận chuyển hàng hóa của cả nước.

Hà Nội đang đẩy mạnh phát triển giao thông đường bộ nhằm đáp ứng nhu cầu đi lại của người dân Bài viết này sẽ hỗ trợ người dùng tìm hiểu về các phương tiện và tuyến đường di chuyển hiệu quả tại Hà Nội.

Xác định thiết kế trang web:

Bài báo trình bày thiết kế website hoàn chỉnh sử dụng thuật toán A* để tìm đường ngắn nhất trên bản đồ Hà Nội Việc ứng dụng thuật toán này đòi hỏi lập trình web, bao gồm hai thành phần chính: Backend và Frontend.

Bài viết này trình bày việc xây dựng thuật toán A* bằng Python, sử dụng Google Maps API (qua API key) để lấy dữ liệu và SQLite để lưu trữ kết quả tìm kiếm đường đi ngắn nhất.

Phía Frontend, chúng tôi sử dụng HTML cho thiết kế và JavaScript để xây dựng chức năng, gửi yêu cầu đến Backend và tích hợp Google Maps API nhằm hiển thị bản đồ, địa điểm, khoảng cách và thời gian Dữ liệu từ Google Maps API là yếu tố then chốt.

Website sử dụng Google Maps API để thu thập dữ liệu chỉ đường chính xác và cập nhật, bao gồm tọa độ, khoảng cách, thời gian di chuyển dự kiến giữa các điểm Việc khởi tạo client Google Maps API thông qua API key là bước đầu tiên để truy xuất dữ liệu API hỗ trợ nhiều phương thức di chuyển khác nhau.

Tiếp theo là thu thập các dữ liệu cho việc tạo đồ thị:

Dữ liệu thu thập bao gồm:

Vị trí địa lý: Tọa độ kinh độ và vĩ độ của các node (điểm)

Khoảng cách: Khoảng cách giữa các điểm trung gian trên tuyến đường

Phương tiện: Phương thức để di chuyển từ điểm đầu đến điểm cuối

Lộ trình: Các bước cụ thể để di chuyển từ điểm xuất phát đến điểm đích

Google Maps API trả về dữ liệu định dạng JSON, dữ liệu này được dùng để xây dựng mô hình đồ thị, nền tảng cho thuật toán A*.

Trang web sử dụng dữ liệu Google Maps API để xây dựng đồ thị mạng lưới đường đi giữa các điểm.

Các node đại diện cho các điểm trên tuyến đường, được xác định bằng tọa độ địa lý.

Các cạnh trong đồ thị biểu diễn đoạn đường giữa hai nút (node) liền kề, kèm theo thông tin chi phí (khoảng cách).

Ứng dụng phân tích dữ liệu chỉ đường từ API, tách điểm xuất phát, điểm đến và các bước trung gian để tạo đồ thị Đồ thị này được dùng cho thuật toán A*.

Thuật toán A* được sử dụng để tính toán lộ trình tối ưu trên đồ thị dữ liệu Hàm heuristic cần thiết cho thuật toán này được tính toán dựa trên công thức khoảng cách Euclidean.

Sau khi đã có hàm ước lượng heuristic, tiếp tục ta sẽ xây dựng hàm thuật toán A* để tìm đường đi ngắn nhất thông qua dữ liệu đồ thị.

Thuật toán A* tìm ra lộ trình tối ưu và các điểm trung gian trên đồ thị Lộ trình này được dùng để hiển thị quãng đường chi tiết cho người dùng.

Ngoài ra để tính tổng chiều dài quãng đường đã được tìm thấy nhờ thuật toán A*, chúng em đã sử dụng đoạn code sau:

3.1.5 Xây dựng các chức năng khác Để có thể lưu tất cả các chỉ đường cũng như thông tin đường đi, ta sử dụng dòng lệnh sau để kết nối với cở sở dữ liệu SQLite để lưu:

Dữ liệu chỉ đường được lưu trữ trong cơ sở dữ liệu và trả về định dạng JSON Việc xóa dữ liệu này được thực hiện thông qua hai phương pháp.

 Xóa tất cả các chỉ đường: Để lưu các thông tin dữ liệu vừa được tìm kiếm, chúng em đã thêm dòng lệnh sau:

Hàm lưu trữ ID, điểm khởi hành, điểm đến, chiều dài và thời gian dự kiến Ứng dụng sử dụng JavaScript và Google Maps API để người dùng tìm kiếm, xem kết quả, hiển thị bản đồ, đánh dấu điểm khởi hành/kết thúc và đường đi Bản đồ được khởi tạo tại trung tâm Hà Nội, hỗ trợ gợi ý địa điểm tự động.

Tiếp đó là đoạn code:

Vận hành và đánh giá kết quả

Sau khi cài đặt mã code, chương trình hoàn thành và được chạy thử nghiệm Quá trình demo minh họa cho thấy hiệu quả thiết kế và cài đặt.

Tìm đường từ Đại học Kiến trúc Hà Nội đến Hồ Hoàn Kiếm bằng ô tô hoặc đi bộ.

Sau đó chỉ cần nhấn Find, chương trình sẽ cho ra kết quả hiện trên màn hình:

Kết quả tìm kiếm hiển thị đường đi, thời gian và khoảng cách Thuật toán A* được sử dụng, thể hiện bằng các nút và đường nối màu đỏ trên bản đồ.

Bản đồ cho phép phóng to xem tên đường và các địa điểm khác Người dùng có thể trải nghiệm xem 360° 3D bằng cách click vào biểu tượng người màu vàng (góc dưới bên phải) Hơn nữa, giao diện hỗ trợ chuyển đổi giữa hai chế độ bản đồ: địa hình và vệ tinh.

Ngoài ra, ta còn nhận được bảng tổng hợp lịch sử tìm kiếm đường đi:

Ba thuật toán tìm kiếm được so sánh thời gian thực hiện bằng cách tìm đường từ Hà Đông đến Cầu Giấy Kết quả cho thấy sự khác biệt về hiệu suất giữa các thuật toán.

 Thuật toán tìm kiếm tham lam:

 Thuật toán tìm kiếm DFS:

Kết quả kiểm tra cho thấy thuật toán A* và DFS có thời gian chạy nhanh hơn thuật toán tìm kiếm tham lam Tuy nhiên, A* và tìm kiếm tham lam cho kết quả quãng đường giống nhau, khác với kết quả của DFS.

Ngày đăng: 25/11/2024, 10:36

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

TÀI LIỆU LIÊN QUAN

w