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

Đề cương Đồ án thuật toán Đề tài cho một mê cung(maze) tim Đường Đi cho mê cung

27 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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 3,48 MB

Nội dung

Ưu điểm s* Tính phố biến : C++ là một trong những ngôn ngữ lập trình phô biến trên thé giới.. Phân tích bài toán Bài toán được mô tả trong không gian trạng thái với các đặc điểm sau: -

Trang 2

Mục lục

0000/9)160815991.0100000 2200707 U ddadaAaa 7

Ea na 7

1.3 Cơ sở lý luận của vấn đề nghiên cứu - Sàn 0 2221211112111 gu 7

1.4 Mục tiêu đề tài - TH HH nh 1n n1 101111 101 11 gen ta 8

IS 0) 08)0.400) :0WŒớaidđidiaiaiiŸ 8

CHƯƠNG II TÔNG QUAN VỀ CÁC NGÔN NGỮ H01 n1 11 ryg 9

I Tìm hiển về ngôn ngữ C++ S THHnHnn 12112 1121221211110 rraa 9

II.Tông quan về ngôn ngữ PHP S2 TH H211 1212212222121 4212 tre 10

1 Khai mid gạiiiaiaiaiiiiảảảẳảỶ 10

CHƯƠNG III PHÁT BIÊU VẺ BÀI TOÁN s22 21221 21221212 rde 11

1 Bài toán tim durong di tromg mé Cun c1 HH S119 11111111 111111 HH xà 11

1 Yêu cầu bài toán 5 2221121122112 02112112 2211212212112 raa I1

VÌ) 8.0 ì8).0r iaẳẳaiảẳadảadaả 11 K6 v1.0) 0.008.) 8n 12

FK 0g hỉaađaadađađiaaddddaadaảaảảảảảyÝŸỶ 16

II Thiết kế giải phap va cai data occ ccecese ces tessessessressesseesstesressetretiressisssetisiestiitsereteseed 18

1 Cài đặt cấu trite trang thai ccc csccesseesseessesseverssetsressresevettetiittiiseessesareseeteee 18

2 Cài đặt hàm tính Heurisfic trong giải thuật Á* HH Hy yg 18

3 Cài đặt hàm kiểm tra trạng thái - 5 SE 1221222121821 re ra 19

Trang 3

lẴN(./ TL in 20 5.2 Hành động di chujyỄn xuỐng : à HH HH2 HH ng uàu 5.3 Hành động di chuyển qua phải : HH HH HH ru run 5.4 Hành động di chuyỂn qua trải: HH HH H2 reue 21

6 Cài đặt hàm gọi các hành động - nnn HH H101 0111 11 t1 nhàn ro 22 7 Cài đặt hàm cấu trúc để xây dựng cây tìm kiếm trạng thái 5s sen 22

8 Cài đặt cấu trúc danh sách 5 TH 1221 811221212241 2g 22

9, Cài đặt hàm tìm kiếm trạng thái 5 CT2 212121212121 ung 24

Trang 4

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

Giảng viên luưởng dân

Trang 5

NHAN XET CUA GIANG VIEN PHAN BIEN

Tp Đà Nang, ngay thang nim 2022

Giảng viên phản biện

Trang 6

LỜI CÁM ƠN

Đề có thể hoàn thành đề tài đồ án này và có được kiến thức như ngày hôm nay, đầu tiên

em xin gửi lời cảm ơn đến Ban Giám Hiệu nhà trường Cùng toàn thể thầy cô Khoa Tin Học — Trường Đại Học Sư Phạm Đà Nẵng đã tận tình giảng dạy, truyền đạt kiến thức cũng như những kinh nghiệm quý báu cho em trong suốt quá trình học tập tại trường Đặc biệt em xin chân thành cảm ơn Thầy Đoàn Duy Bình đã tận tình hướng dẫn và quan tâm, động viên chúng em trong quá trình thực hiện đề tài Em cũng bày tỏ lòng biết ơn

đến những bạn bè đã động viên và tạo mọi điều kiện giúp em trong quá trình học tập

Trong quá trình nỗ lực đề hoàn thành đồ án cá nhân em cũng đã tìm hiểu nhiều tài liệu và nhờ những anh chị khóa trên khoa Tin và thầy cô để hoàn thành tốt nhiệm vụ của mình

Em xin chân thành cảm ơn những sự giúp đỡ chân thành Mặc dù em đã cố gắng hoàn thành tốt đề tài nhưng cũng không thê tránh khỏi những sai sót nhất định, rất mong được

sự thông cảm và chia sẻ cùng quý thầy cô và bạn bè

Em xin gửi lời chúc sức khỏe và thành đạt tới tất cả quý thầy cô cùng các bạn ạ

Trang 7

CHUONG I: CO SO Li THUYET 1.1 Giới thiệu đề tài

Cho I mê cung, thể hiện bằng 1 ma trận mền, mỗi vị trí biéu diễn bởi số I là tường

của mê cung, không thé đi vào, vi trí biểu điển bởi số 0 là đường di, co thể đi được, số

2 là điểm khởi đầu , số 3 là điểm cuối Hãy tìm đường đi từ vị trí bắt đầu đến vị trí kết

- Mê cung chỉ có l đường vào và l đường ra duy nhất

- Đề tài có thê đước ứng dụng làm các mê cung trong công viên, xây dựng khu vưi choi,

1.3 Cơ sở lý luận của vấn đề nghiên cứu

-Năm 1951, Claude Shannon đã chế tạo ra con chuột máy biết tìm biết tim đường đi

trong mê cung Những bài toán liên quan đến mê cung như tránh ngô cụt, tìm đường vào hoặc đường đi nhanh nhất, đi đến mọi nhánh của mê cung, mỗi nhánh đi đúng hai lần và mỗi lần theo một chiều khác nhau là những bài toàn có ứng dụng quan trọng

cho một ngành toán học trẻ tuổi: ngành điều khiến học

- Theo căn cứ trên, việc tìm đường đi cho mê cung không còn quá mới mẻ, đồng thời

nó cũng hoàn toàn phù hợp với thực tiễn và pháp lí xã hội Tuy nhiên, chúng tôi ủng

hộ và đề cao tính tư duy và sáng tạo và mục đích nghiên cứu của sinh viên nhiều hơn cho quá trình nghiên cứu đề tài lần này

Trang 8

e - Xây dựng bài toán bằng ngôn ngữ lập trình C/C++

e - Xây dựng giao diện đồ họa bằng ngôn ngữ JavaScript & PHP

Trang 9

CHƯƠNG II TỎNG QUAN VỀ CÁC NGÔN NGỮ

I Tìm hiểu về ngôn ngữ C++

1 Khái niệm

- Ngôn ngữ lập trình C+-+ là một ngôn ngữ lập trình hướng đối tượng(OOP — Object- oriented programming) duge phat trién bởi Bjarne Stroustrup C++ là ngôn ngữ lập trình được phát triển trên nên tảng của ngôn ngữ lập trình C Do đó, C++ có song song

cả 2 phong cách(style) lập trình hướng cấu trúc giống C và có thêm phong cách hướng đối tượng Trong nhiều trường hợp, C++ sử dụng kết hợp cả 2 style trên Do đó, nó

được xem là một ngôn ngữ “la1 tạo”

- Ngôn ngữ C++ là một ngôn ngữ lập trình cấp trung Bởi vì nó có các tính chất của cả ngôn ngữ lập trình bậc thấp(Pascal, C ) và ngôn ngữ lập trình bậc cao(C#, Java, Python )

- Ngôn ngữ lập trình C++(C plus plus) có đuôi mở rộng là cpp

2 Ưu điểm

s* Tính phố biến : C++ là một trong những ngôn ngữ lập trình phô biến trên thé giới

s Tính thực thi nhanh: Nếu bạn rành C++ thì bạn có thẻ lập trình nhanh Một trong

những mục tiêu của C++ là khả năng thực thi Và nêu bạn cần thêm các tính năng cho chương trình, C++ cho phép bạn dùng ngôn ngữ Assembly (Hợp ngữ) — Ngôn ngữ lập trình bậc thấp nhất — đề giao tiếp trực tiếp với phần cứng của máy tính s* Thư viện đầy đủ: Có rất nhiều tài nguyên cho người lập trình bằng C++, bao gồm

cả đồ hoạ API, 2D, 3D, vật lý các thiết bị âm thanh hỗ trợ giúp cho lập trình viên

dễ dang thực thị

s* Đa mô hình: C++ cho phép bạn lập trình theo cấu trúc tuyến tính, hướng chức năng, hướng đối tượng đa đạng tuỳ theo yêu cầu của người lập trình

Trang 10

II.Tổng quan về ngôn ngữ PHP

1 Khái niệm PHP

- PHP la chit viet tắt của ngôn ngữ PHP là từ viết tắt của Personal Home Page (hiện nay là Hypertext Preprocessor) Thuật ngữ này chỉ chuỗi ngôn ngữ kịch bản hay mã lệnh, phù hợp đề phát triển cho các ứng dụng nằm trên máy chủ

Khi viết phần mềm bằng ngôn ngữ PHP, chuỗi lệnh sẽ được xử lý trên server dé tir

đó sinh ra mã HTML trên chient Và dựa vào đó, các ứng dụng trên website của bạn sẽ

hoạt động một cách dễ đàng

2.Ưu điểm

PHP là một trong những ngôn ngữ lập trình phô biến nhất vì những lợi ích mà nó đem lại Về cơ bản, có 4 ưu điểm chính:

-_ Tính đơn giản và linh động: PHP sử đụng mã nguồn mở nên việc cài đặt và sử dụng

nó rất dễ đàng Ngôn ngữ này phù hợp với cả những người hoàn toàn mới với nghé lập trình viên Bạn chỉ cần học chăm chỉ trong 3 — 6 tháng đề thuần thục nó

-_ Cộng đồng hỗ trợ lớn: PHP là một ngôn ngữ phố biến nên các diễn đàn, đội nhóm chuyên sâu của PHP thuộc hàng ngũ đầu của ngành Bên cạnh đó, thị trường tuyên dụng cho công việc này cũng chưa bao giờ giảm nhiệt

-_ Cơ sở đữ liệu đa dạng: PHP cho phép kết nối với hầu hết các loại cơ sở đữ liệu như MySQL, mSQL, MS-SQL, SQLite, PostgreSQL, v.v Nho vay, ban sẽ không bị giới

hạn và có thê chọn cơ sở dữ liệu tối ưu nhất cho ung dung cua minh

- Thu vién phong phu: Nhiéu sach huéng dan va cac tài liệu tham kháo có sẵn, cung cap các kiên thức hữu ích cho các lập trình viên mới làm quen dân

10

Trang 11

CHƯƠNG III PHAT BIEU VE BAI TOAN

I Bai toan tìm đường đi trong mê cung

Cho | mé cung, thê hiện bang | ma tran m*n, m6i vi tri biéu dién bdi so | là tường

của mê cung, không thể đi vào, vị trí biểu điễn bởi số 0 là đường đi, có thé đi được, số

2 là điểm khởi đầu , số 3 là điểm cuối Hãy tìm đường đi từ vị trí bắt đầu đến vị trí kết

Trạng thái mục tiêu Trạng thái đích

2 Phân tích bài toán

Bài toán được mô tả trong không gian trạng thái với các đặc điểm sau:

- Trang thai ban đầu : ma trận biểu diễn bằng mảng 2 chiều với kích thước m”*n, các ô mang giá trị l biểu điễn cho bức tường trong mê cung, giá tri 0 biểu diễn đường đi trong mê cung Đánh dấu ô bắt đầu có giá trị 2, ô đích đến có giá trị 3, và đường đi từ ô bắt đầu đến đích sẽ mang giá trị là 4

- Cac thao tác/ hành động để tạo ra các trạng thái mới, dì chuyên hướng đi lên

trên, xuống dưới, qua trái, qua phải và đánh dầu là đoạn đường đi

- Trang thai bắt đầu: Khởi tạo ma trận mê cung, co 6 bắt đầu và ô đích đến

- Trang thái đích: Đường đi từ ô bắt đầu đến ô đích

Việc tìm giải pháp cho bài toàn là tìm đường đi từ ô bắt đầu đến ô đích

11

Trang 12

3.Các chức năng trong bài toán

3.1 Di chuyển lên trên :

Di chuyén lên trên Nghĩa là từ vị trí bắt đầu chọn hướng di chuyên lên trên và

gán giá trị cho ô đó để đánh đấu hướng đi chuyên Trong trường hợp nếu ở trên

là tường ( 6 mang giá trị 1 ) thi không thê đi chuyển được

Ví dụ với ví trị như hình bên dưới sau khi thực hiện hành động :

12

Trang 13

Ví dụ với ví trị như hình bên dưới sau khi thực hiện hành động :

Trạng thái sau khi thực hiện hành

Trạng thái chưa thực hiện hành động động

Với các vị trí như hình thì không đi chuyên xuống đưới được nữa

3.3 Di chuyển qua trải:

Di chuyên qua trái Nghĩa là từ vị trí bắt đầu chọn hướng đi chuyên qua trái và gán giá trị cho ô đó để dánh đấu hướng di chuyên Trong trường hợp nếu ở bên trái là tường ( ô mang giá tri | ) thi không thể đi chuyên được

Ví dụ với ví trị như hình bên dưới sau khi thực hiện hành động :

13

Trang 15

Với các vị trí như hình thì không đi chuyên qua phải được nữa

4.Giải thuật A*

4.1 Giới thiệu về thuật toán A*

- Thuật toán A* được mô tả lần đầu vào năm 1968 bởi Peter Hart, Nils Nilsson, và

Bertram Raphael Trong bài báo của họ, thuật toán được gọi là thuật toán A; khi sử dụng thuật toán này với một đánh giá heuristic thích hợp sẽ thu được hoạt động tối ưu,

đo đó mà có tên A*

- Năm 1964, Nils Nilsson phát minh ra một phương pháp tiếp cận dựa trên khám pha

đề tăng tốc độ của thuật toán Dijkstra Thuật toán này được gọi là A1 Năm 1967

Bertram Raphael da cai thiện đáng kê thuật toán này, nhưng không thê hiền thị tối ưu Ông gọi thuật toán này là A2 Sau đó, trong năm 1968 Peter E Hart đã giới thiệu một

đối số chứng minh A2 là tối ưu khi sử dụng thuật toán này với một đánh giá heuristic

thích hợp sẽ thu được hoạt động tối ưu Chứng minh của ông về thuật toán cũng bao

gồm một phân cho thay rang các thuật toán A2 mới là thuật toán tốt nhất có thê được

đưa ra các điều kiện Do đó ông đặt tên cho thuật toán mới là A *(A sao, A-star)

4.2 Ưu điểm

-_ Thuật toán tìm kiếm A * là thuật toán tốt nhất so với các thuật toán tìm kiếm khác

-_ Thuật toán tìm kiếm A * là tối ưu và hoàn chỉnh

- Thuật toán này có thê giải quyết các vấn đề rất phức tap

4.3 Nhược điểm

- Nó không phải lúc nào cũng tạo ra đường đi ngắn nhất vì nó chủ yếu dựa trên heuristics và tính gần đúng

15

Trang 16

- Thuật toán tìm kiếm A * có một số vấn đề phức tạp

-_ Hạn chế chính của A * là yêu cầu bộ nhớ vì nó giữ tất cả các nút được tạo trong bộ nhớ, vì vậy nó không thực tế cho các vấn đề quy mô lớn khác nhau

4.4 Giải thuật

Giải thuật A* là trường hợp đặc biét Best first search (viéc cập nhật lại

đường đi dựa trên giá trị h(n) thay vì dựa trên gia tri f(n) tổng quát)

f(n) = g(n) + h(n)

hí(n) phụ thuộc vào trạng thái n nên f(n) chi thay doi khi g(n) thay doi hay

nói cách khác khi ta tìm được một duong di mdi đến n tốt hơn đường đi cũ

=> cập nhật lại g khi đường đi mới tốt hơn)

Mỗi trạng thái n tùy ý sẽ gồm 4 yếu tổ (gín), h(n), Ấn), cha(n)) với cha(n) là

nút cha của nút đang xét n

16

Trang 17

II Thiết kế giải pháp và cài đặt

1 Cài đặt cầu trúc trạng thái

Sử đụng một số cầu trúc sau để biêu diễn trạng thái:

© Maze[m][n] : Đề lưu mê cung với kích thước m*n trong đó m là số dòng

, n là số cột

® sfart position row, sfart position col : lưu tọa độ ô bắt đầu di chuyên

® end position row, end position col: luu toa d6 6 dich

* position row, position col: lưu tọa độ các ô di chuyên

int start_position_row, start_position_col;

int end_position_row, end_position_col;

int position_row, position_col;

: State;

2 Cai dat ham tinh Heuristic trong giai thuat A*

Ham tinh Heuristic trong bai toan mé cung dựa việc tính khoảng cách d,

khoảng cách từ ô hiện hành đến 6 dich

Khi đó d được tính theo công thức sau:

Trang 18

3 Cài đặt hàm kiểm tra trạng thái

Tìm được mục tiêu đích đến khi khoảng cách d = 0

int checkgoal(State state){

return Heuristic(state) == 0;

}

4 Cai dat ham so sanh hai trang thai

So sánh 2 trang thái có giống nhau hay không

int comparestate(State statel, State state2){

int Up(State state, State *result)

Di chuyên lên trên và gán giá trị cho ô đó

đề đánh dấu hướng di chuyên (Trong trường hợp nếu ở trên là tường - ô mang giá tri 1)

int Down(State state, State *result)

Di chuyên xuông dưới và gán gia tri cho 6

đó đề đánh dấu hướng di chuyên (Trong trường hợp nếu ở trên là tường - ô mang giá tri 1)

int Right(State state, State *result)

Di chuyên qua phải và gán giá trị cho ô đó

đề đánh dấu hướng di chuyên (Trong trường hợp nếu ở trên là tường - ô mang giá tri 1)

int Left(State state, State *result) Di chuyên qua trái và gán giá trị cho ô đó

đề đánh dấu hướng di chuyên (Trong trường hợp nếu ở trên là tường - ô mang giá tri 1)

5.1 Hành động di chuyển lên trên :

18

Ngày đăng: 10/12/2024, 10:04

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

TÀI LIỆU LIÊN QUAN

w