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

Bài Tập Lớn Nhập Môn Trí Tuệ Nhân Tạo Đề Tài Phần Mềm Tìm Đường Đi Trên Bản Đồ.pdf

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 (1.09 MB, 14 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ──────── * ───────

<b> BÀI TẬP LỚN</b>

MƠN: NHẬP MƠN TRÍ TUỆ NHÂN TẠO

<b>Đề tài: Phần mềm tìm đường đi trên bản đồ</b>

1 Lương Hồi Nam 20210623 Bùi Thế Phong 20215445 Đinh Trí Khoa 20215403 Nguyễn Long Nhật 20215440 Phan Hoàng Nam 20215434

<b> </b>

<i><b>Hà Nội, tháng 12 năm 2023</b></i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Mục lục

Mục lục...2

Mục lục hình ảnh...3

1. Mơ tả bài tốn:...4

2. Biểu diễn bài tốn:...4

3. Phương pháp tìm kiếm:...8

4. Công cụ thực hiện:...12

5. Kết quả:...12

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Mục lục hình ảnh

Hình 1 Mơ phỏng các trạng thái trên bản đồ...5

Hình 2 Đường đi trước khi cải tiến thuật tốn...10

Hình 3 Đường đi sau khi cải tiến thuật tốn...10

Hình 4 Minh họa kết quả bài tốn - 1...11

Hình 5 Minh họa kết quả bài tốn - 2...12

Hình 6 Minh họa kết quả bài toán – 3...12

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

1. Mơ tả bài tốn:

- Xét một mảnh bản đồ của phường Hàng Bồ, quận Hoàn Kiếm, Hà Nội. Bài tốnu cầu tìm đường đi giữa 2 điểm A và B bất kỳ và biểu diễn đường đi đó trên bảnđồ.

Biểu diễn các trạng thái này trên mảnh bản đồ:

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Việc xác định trạng thái bài tốn như vậy sẽ đảm bảo đường đi tìm được luônthỏa mãn ràng buộc: “Chỉ được phép đi trên các tuyến đường, khơng được phép đixun qua các cơng trình”.

- Tập các hành động:

(21.033773176965717, 105.84793937443122) -> (21.033731516947956,105.84724726031048)

(21.033773176965717, 105.84793937443122) -> (21.034285582343745,105.84803436032504)

(21.033773176965717, 105.84793937443122) -> (21.033934999862513,105.84989536671564)

(21.033731516947956, 105.84724726031048) -> (21.033718239526593,105.84698253583295)

(21.033731516947956, 105.84724726031048) -> (21.034364668684873,105.84737844419348)

(21.033731516947956, 105.84724726031048) -> (21.033773176965717,105.84793937443122)

(21.033718239526593, 105.84698253583295) -> (21.033731516947956,105.84724726031048)

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

(21.033718239526593, 105.84698253583295) -> (21.03429206772195,105.8470029349314)

(21.03429206772195, 105.8470029349314) -> (21.034419745253814,105.84700829934943)

(21.03429206772195, 105.8470029349314) -> (21.033718239526593,105.84698253583295)

(21.034419745253814, 105.84700829934943) -> (21.03429206772195,105.8470029349314)

(21.034419745253814, 105.84700829934943) -> (21.034364668684873,105.84737844419348)

(21.034419745253814, 105.84700829934943) -> (21.03556502437502,105.84705347036028)

(21.034364668684873, 105.84737844419348) -> (21.034285582343745,105.84803436032504)

(21.034364668684873, 105.84737844419348) -> (21.035003286596158,105.84750294453012)

(21.034364668684873, 105.84737844419348) -> (21.034419745253814,105.84700829934943)

(21.034364668684873, 105.84737844419348) -> (21.033731516947956,105.84724726031048)

(21.034285582343745, 105.84803436032504) -> (21.033773176965717,105.84793937443122)

(21.034285582343745, 105.84803436032504) -> (21.034364668684873,105.84737844419348)

(21.034285582343745, 105.84803436032504) -> (21.03488562345316,105.84815472132074)

(21.03488562345316, 105.84815472132074) -> (21.035003286596158,105.84750294453012)

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

(21.03488562345316, 105.84815472132074) -> (21.035407306267413,105.84823364232683)

(21.03488562345316, 105.84815472132074) -> (21.034285582343745,105.84803436032504)

(21.035003286596158, 105.84750294453012) -> (21.035504941306097,105.84757381890917)

(21.035003286596158, 105.84750294453012) -> (21.03488562345316,105.84815472132074)

(21.035003286596158, 105.84750294453012) -> (21.034364668684873,105.84737844419348)

(21.035610086660785, 105.84646070216799) -> (21.03556502437502,105.84705347036028)

(21.03556502437502, 105.84705347036028) -> (21.035610086660785,105.84646070216799)

(21.03556502437502, 105.84705347036028) -> (21.036265991722,105.84706688140535)

(21.03556502437502, 105.84705347036028) -> (21.035504941306097,105.84757381890917)

(21.03556502437502, 105.84705347036028) -> (21.034419745253814,105.84700829934943)

(21.035504941306097, 105.84757381890917) -> (21.035407306267413,105.84823364232683)

(21.035504941306097, 105.84757381890917) -> (21.036213419285374,105.847724022614)

(21.035504941306097, 105.84757381890917) -> (21.03556502437502,105.84705347036028)

(21.035504941306097, 105.84757381890917) -> (21.035003286596158,105.84750294453012)

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

(21.035407306267413, 105.84823364232683) -> (21.036165853731504,105.84839189265871)

(21.035407306267413, 105.84823364232683) -> (21.035504941306097,105.84757381890917)

(21.035407306267413, 105.84823364232683) -> (21.03488562345316,105.84815472132074)

(21.036165853731504, 105.84839189265871) -> (21.036213419285374,105.847724022614)

(21.036165853731504, 105.84839189265871) -> (21.035407306267413,105.84823364232683)

(21.036213419285374, 105.847724022614) -> (21.036265991722,105.84706688140535)

(21.036213419285374, 105.847724022614) -> (21.035504941306097,105.84757381890917)

(21.036213419285374, 105.847724022614) -> (21.036165853731504,105.84839189265871)

(21.036265991722, 105.84706688140535) -> (21.036213419285374,105.847724022614)

(21.036265991722, 105.84706688140535) -> (21.03556502437502,105.84705347036028)

(21.033934999862513, 105.84989536671564) -> (21.033773176965717,105.84793937443122)

Các hành động này tương ứng với việc di chuyển từ 1 giao lộ đến 1 trong cácgiao lộ liền kề

3. Phương pháp tìm kiếm:

Đầu vào bài tốn: Người dùng click vào 2 điểm trên bản đồ.Đầu ra bài toán: Đường đi giữa 2 điểm đó

Phương pháp tìm kiếm:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Bước 1: Xác định trạng thái đầu, trạng thái đích.- Xác định trạng thái đầu:

+ Kiểm tra tất cả các cặp giao lộ kề nhau, chọn các cặp giao lộ mà điểm xuấtphát nằm trên đoạn đường giới hạn bởi cặp giao lộ này.

+ Trạng thái đầu sẽ là giao lộ gần nhất với điểm xuất phát trong các cặp giaolộ tìm được.

+ Nếu khơng tìm được cặp giao lộ thỏa mãn yêu cầu trên thì trạng thái đầu sẽlà giao lộ gần nhất đối với điểm xuất phát

+ Mơ tả chi tiết thuật tốn:

o Lưu trữ và cập nhật liên tục 2 tập hợp Open và Close, trong đó Open lưucác trạng thái sẽ được xét, còn Close lưu các trạng thái đã được xét đến rồivà sẽ không được xét lại. Tập Open được khởi tạo với trạng thái đầu n , tập<small>0</small>

Close được khởi tạo rỗng.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

o Lưu trữ 1 mảng d[n] là tổng khoảng cách đường đi thực tế từ trạng thái đầuđến trạng thái n, 1 mảng trace[n] là trạng thái ngay liền trước trạng thái ntrong đường đi cuối cùng tìm được. Khởi tạo d[n ] = 0, cịn lại thì bằng inf.<small>0</small>

o Định nghĩa 1 hàm distance(n, n*) là khoảng cách giữa 2 trạng thái n và n*.o Khi tập Open vẫn cịn chứa ít nhất 1 trạng thái, thực hiện liên tục các công

việc sau:

Chọn trạng thái n có hàm đánh giá f(n) nhỏ nhất trong tập Open.Xét các hành động từ trạng thái n sang 1 trạng thái n*, nếu n* khơngthuộc Close thì đưa n* vào Open.

Cập nhật d[n*] = min(d[n*], d[n] + distance(n, n*)) và trace[n*] = nnếu d[n*] có sự thay đổi.

Đưa n ra khỏi Open và đưa n vào Close

Nếu tập Open hoặc Close đã chứa trạng thái đích thì kết thúc tìmkiếm

o Dựa vào mảng trace[] đã được tính tốn, ta có thể tìm được 1 đường đi từtrạng thái đầu đến trạng thái đích. Thêm điểm xuất phát và điểm kết thúc dongười dùng chọn vào đầu và cuối đường đi tìm được, ta đã có được 1đường đi hoàn chỉnh giữa 2 điểm và đảm bảo việc khơng đi xun qua bấtcứ cơng trình nào.

Bước 3: Cải tiến thuật tốn:

- Tình huống: Giả sử A, B lần lượt là 2 điểm được người dùng lựa chọn. Gọi n là<small>0</small>

trạng thái đầu, n là trạng thái tiếp theo,…. Đường đi tìm được sẽ có dạng:<small>1 </small>

A -> n -> n -> …. -> n -> n -> B<small>01k-1k</small>

Nếu A nằm trên đoạn đường nối giữa n và n , thì đường đi tìm được sẽ vi<small>0 1</small>

phạm ràng buộc: “Không được phép đi trên cùng một tuyến đường nhiều hơn 1lần”

- Hình ảnh minh họa cho trường hợp trên:

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

- Giải pháp:

+ Kiểm tra xem A có nằm giữa n và n không, bằng cách so sánh tổng<small>0 1</small>

khoảng cách từ A đến n và khoảng cách từ A đến n , với khoảng cách từ n và n .<small>0 10 1</small>

Nếu 2 giá trị này xấp xỉ bằng nhau thì A nằm giữa n và n và ta cần phải loại bỏ n<small>0 10</small>

khỏi đường đi.

+ Tương tự, ta cũng cần thực hiện cải tiến trên với các trạng thái cuối: n<small>k-1</small>, n<small>k</small>

và điểm kết thúc B. Nếu B nằm giữa n và n thì ta cần loại bỏ n khỏi đường đi.<small>k-1kk </small>

- Hình ảnh đường đi tìm được sau khi cải tiến thuật toán:

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Như vậy, sau khi thực hiện cải tiến, đường đi tìm được giữa A và B đã chắcchắn thỏa mãn tất cả các rang buộc. Lưu ý rằng ta không cần kiểm tra đường đigiữa các trạng thái trung gian từ n đến n nhờ vào tính tối ưu của thuật tốn A*.<small>1k-1 </small>

o Tạo 1 marker với mỗi vị trí mà người sử dụng click lên bản đồ. Vị trí xuấtphát được đánh dấu màu đỏ, vị trí kết thúc được đánh dấu màu xanho Mô phỏng đường đi trên bản đồ bằng cách tạo đường thẳng nối các điểm

trên đường đi với nhau. Khi người dùng di chuột vào đường đi, có thể hiểnthị độ dài của đường đi đó (độ dài đường đi được tính tốn trước).

5. Kết quả:

- Hình ảnh minh họa kết quả bài tốn:

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>Hình 5 Minh họa kết quả bài tốn - 2</small>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

- Địa chỉ trang web: Link github:

</div>

×