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

tiểu luận tiểu luận môn học cấu trúc dữ liệu và giải thuật đề tài mô phỏng hoạt động thang máy

22 0 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 đề Mô phỏng hoạt động thang máy
Tác giả Nguyễn Ngọc Thiện, Nguyễn Trọng Hưởng, Nguyễn Minh Khoa, Võ Lê Khánh Linh, Ngô Chánh Phong, Nguyễn Minh Nhựt
Người hướng dẫn TS. Huỳnh Văn Đức
Trường học Đại học Kinh tế TP.HCM
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Tiểu luận
Năm xuất bản 2024
Thành phố TP.HCM
Định dạng
Số trang 22
Dung lượng 2,05 MB

Nội dung

Chúng ta sẽ bắt đầu với việc hiểu rõ cấu trúc dữ liệu cơ bản như danh sách kề, hàng đợi… và xem xét cách chúng có thể được sử dụng để lưu trữ thông tin về trạng thái của các thang máy và

Trang 1

BỘ GIÁO DỤC & ĐÀO TẠO ĐẠI HỌC KINH TẾ TP.HCM

KINH DOANH 

TIỂU LUẬN MÔN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Đề tài: MÔ PHỎNG HOẠT ĐỘNG THANG MÁY

Giảng viên hướng dẫn: TS Huỳnh Văn Đức Lớp: 24D1INF50900701 Sáng – thứ 6

Trang 2

Lời cảm ơn

Chúng em hy vọng những dòng này đến được với thầy Đức trong tình trạng khỏe mạnh nhất Khi học kỳ sắp kết thúc, chúng em muốn dành một khoảnh khắc để bày tỏ lòng biết ơn sâu sắc đến sự tận tâm về kiến thức chuyên sâu của thầy trong việc dạy môn Cấu trúc dữ liệu và giải thuật

Suốt thời gian học, sự hiểu biết và sự hỗ trợ của thầy đã là nguồn động viên lớn lao cho chúng

em Những bài giảng đầy sáng tạo cùng với những ví dụ thực tế đã giúp chúng em hiểu sâu hơn về các kiểu cấu trúc dữ liệu, các thuật toán phổ biến để ứng dụng vào thực tế sau này Qua môn học này, không chỉ kiến thức chuyên ngành của chúng em được mở rộng mà còn những kỹ năng tự học và làm việc nhóm cũng được rèn luyện Chúng em rất biết ơn thầy đã chia sẻ kiến thức và kinh nghiệm của mình một cách hết lòng

Một lần nữa, chúng em xin chân thành cảm ơn thầy và hy vọng sẽ có cơ hội được học tập và làm việc cùng với thầy trong tương lai

Trang 3

M C L C Ụ Ụ

I Giới thiệu đề tài 4

II Bài toán 4

III Thuật toán 4

IV Chọn cấu trúc dữ liệu 5

V Cách giải được thiết kế 5

1 Khởi tạo: 5

2 Xử lý yêu cầu gọi thang máy: 6

3 Di chuyển thang máy: 6

4 Lặp lại: 7

VI Ví dụ và quá trình thay đổi của biến 7

Ví dụ 1: 7

Ví dụ 2: 11

VII Biểu đồ lớp 22

VIII Tính năng đang thử nghiệm 22

THAM KHẢO 22

Trang 4

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

Trong thế kỷ 21, việc nghiên cứu và tối ưu hóa hệ thống thang máy không chỉ là một thách thức về kỹ thuật mà còn là một yếu tố quyết định đối với sự tiện lợi và an toàn của cuộc sống

đô thị Tiểu luận này nhằm tìm hiểu và phân tích cách các cấu trúc dữ liệu và giải thuật có thể được áp dụng để cải thiện hiệu suất và tính ổn định của các hệ thống thang máy

Chúng ta sẽ bắt đầu với việc hiểu rõ cấu trúc dữ liệu cơ bản như danh sách kề, hàng đợi… và xem xét cách chúng có thể được sử dụng để lưu trữ thông tin về trạng thái của các thang máy

và các yêu cầu di chuyển Qua đó, chúng ta sẽ khám phá các thuật toán tìm kiếm và sắp xếp

có thể được áp dụng để tối ưu hóa việc điều khiển các thang máy và giảm thiểu thời gian chờ đợi và mức độ quá tải

Hy vọng rằng, thông qua việc kết hợp giữa lý thuyết cấu trúc dữ liệu và giải thuật với thực tiễn của ngành công nghiệp thang máy, tiểu luận này sẽ cung cấp cái nhìn sâu sắc và đa chiều

về cách tiếp cận và giải quyết các vấn đề trong lĩnh vực này

II Bài toán

Một tòa nhà đang xây gồm có 6 tầng, những nhà thi công đang muốn bắt tay vào xây dựng một hệ thống thang máy để phục vụ cho việc di chuyển của tòa nhà Nhưng họ vẫn đang phân vân về việc chọn một hệ thống phù hợp tích hợp vào thang máy sao cho hệ thống tối ưu và công bằng nhất

III Thuật toán

- Bài toán thang máy sẽ gồm các bước:

1 Thang máy sẽ luôn kiểm tra xem có nút tầng nào được nhấn hay chưa, cùng với đó là hướng

di chuyển của thang máy sẽ phụ thuộc vào tầng được chọn bởi người đi Cụ thể nếu vị trí của thang máy bé hơn hoặc bằng tầng cao nhất của danh sách tầng đi xuống thì thang máy đi xuống, nếu không thì thang máy đi lên

2 Hai bước tiếp theo sẽ hoạt động theo hai thuật toán sắp xếp và thuật toán SCAN đại diện cho việc lưu trữ dữ liệu hay còn gọi là tầng mà người dùng chọn và cách để thang máy đi đến các tầng:

Với việc lưu trữ các tầng mà người dùng chọn

 Bước 1: lưu trữ các dữ liệu tầng mà người dùng chọn

 Bước 2: sử dụng thuật toán sắp xếp để sắp xếp dữ liệu các tầng mà người dùng chọn.Vd: Khi người dùng nhập vào các tầng theo thứ tự 1, 5, 3, 2 thì dữ liệu này sẽ được sắp xếp lại thành 1, 2, 3, 5

Với cách thức để thang máy đi đến các tầng:

 Bước 1: thang máy sẽ kiểm tra dữ liệu của danh sách các tầng đi lên cũng như danh sách các tầng đi xuống Cùng với đó thang máy sẽ kiểm tra đồng thời vị trí của nó để xác định được hướng di chuyển phải thực hiện VD: khi danh sách các tầng đi lên và thang máy cũng đang đi lên thì tiếp tục đi lên và sử dụng dữ liệu trong danh sách Nếu không thỏa một trong hai điều kiện thì thang máy sẽ không thực hiện hoạt động di chuyển lên và qua kiểm tra danh sách các tầng đi xuống

 Bước 2: khi đã kiểm tra dữ liệu và trị trí xong thang máy sẽ lấy dữ liệu ra khỏi bộ lưu trữ

và thực hiện di chuyển đến tầng được chọn Dữ liệu tầng đó lúc này sẽ được xóa bỏ khỏi

bộ nhớ

Too long to read on your phone? Save

to read later on your computer

Save to a Studylist

Trang 5

LƯU Ý: Với giải thuật này thang máy sẽ duyệt tất cả tầng mà không bỏ sót trường hợp nào ví

dụ khi đi lên thì thang máy sẽ đi cho đến tầng cao nhất và khi đi xuống thì thang máy sẽ đi xuống tầng thấp nhất, bên cạnh đó phải duyệt tất cả tầng trong lúc hoạlà t động

IV Chọn cấu trúc dữ liệu

- Các cấu trúc dữ liệu được chọn trong bài:

List là cấu trúc dữ liệu giúp lưu trữ và quản lý một danh sách các đối tượng theo kiểu mảng (truy cập các phần tử bên trong thông qua chỉ số index) Trong bài này được sử dụng để lưu trữ danh sách các tầng cần di chuyển đến, tùy thuộc vào hướng di chuyển

Queue là một cấu trúc dữ liệu dùng để chứa các đối tượng làm việc theo cơ chế FIFO (viết tắt từ tiếng Anh: First In First Out), nghĩa là "vào trước ra trước" trong bài này được sử dụng

để lưu trữ các nút nhấn được nhập vào thang máy

Dictionary là một cấu trúc dữ liệu lưu trữ dữ liệu dưới dạng cặp Key - Value Key đại diện cho 1 khoá giống như chỉ số phần tử của mảng và Value chính là giá trị tương ứng của khoá

đó Ta sẽ sử dụng Key để truy cập đến Value tương ứng Dễ hiểu hơn thì key giống như địa chỉ của một giá trị Trong bài này được sử dụng để lưu trữ thông tin về hướng di chuyển của thang máy và tầng của mỗi nút nhấn

V Cách giải được thiết kế

1. Khởi tạo:

Tạo một Dictionary để lưu trữ thông tin về trạng thái thang máy:

 Position: Tầng hiện tại của thang máy (khởi tạo là 1)

 Direction: Hướng di chuyển của thang máy

Tạo một Queue rỗng để lưu trữ các yêu cầu gọi thang máy

Tạo một biến tạm Decision để quyết định hướng di chuyển của tầng trong Queue

Trang 6

Tạo hai List UP và DOWN rỗng để lưu trữ các tầng đang chờ xử lý.

2. Xử lý yêu cầu gọi thang máy:

Khi có yêu cầu gọi thang máy từ tầng Fn:

Thêm yêu cầu vào Queue

Nếu thang máy đang rảnh (không có yêu cầu nào đang được xử lý):

Lấy yêu cầu đầu tiên từ Queue

Quyết định hướng di chuyển của tầng vừa yêu cầu trong Decision

Cập nhật Position và Directioncủa thang máy dựa trên yêu cầu

Thêm tầng yêu cầu vào List dựa theo Decision

Di chuyển thang máy đến tầng được yêu cầu và xóa yêu cầu khỏi Queue

Xóa yêu cầu khỏi List sau khi hoàn thành

Nếu thang máy đang bận:

Lấy yêu cầu đầu tiên từ Queue và xóa khỏi Queue sau khi lấy

Quyết định hướng di chuyển của tầng vừa yêu cầu trong Decision

Kiểm tra Position và Directioncủa thang máy dựa trên yêu cầu

Thêm tầng yêu cầu vào List dựa theo Decision

Chờ đến khi thang máy xử lý xong các yêu cầu trước đó

Di chuyển thang máy đến tầng được yêu cầu và xóa yêu cầu khỏi Queue

Xóa khỏi List sau khi hoàn thành

3. Di chuyển thang máy:

Nếu thang máy đang di chuyển, kiểm tra xem đã đến tầng được yêu cầu hay chưa Nếu đã đến tầng được yêu cầu:

Xóa yêu cầu khỏi List

Kiểm tra xem còn yêu cầu nào trong List hay không

Nếu còn yêu cầu, cập nhật Position và Direction của thang máy dựa trên yêu cầu tiếp theo Nếu không còn yêu cầu, thang máy trở về trạng thái rảnh

Trang 7

Nếu chưa đến tầng được yêu cầu, tiếp tục di chuyển thang máy theo hướng đã xác định

4. Lặp lại:

Lặp lại các bước 2 và 3 cho đến khi không còn yêu cầu gọi thang máy nào

VI Ví dụ và quá trình thay đổi của biến

Ví dụ 1:

Giả sử có một người đang ở tầng 2 muốn lên tầng 4

Cách giải Bước 1:

Nhận yêu cầu 1: Gọi thang máy từ tầng 2 đi lên

Kiểm tra List UP

Thang máy di chuyển lên tầng 2

Cập nhật Position của thang máy là 1

Cập nhật Direction của thang máy là up

Queue: []

Trang 8

List UP: [2]

Bước 3:

Thang máy lên đến tầng 2

Cập nhật Position của thang máy là 2

Cập nhật Direction của thang máy là up

Hoàn thành yêu cầu 1 (Gọi thang máy từ tầng 2 đi lên) Xóa tầng 2 ra khỏi List UP

List UP: []

Bước 4:

Nhận phản hồi yêu cầu 1 từ bên trong thang máy: lên tầng 4 Queue: [4]

Trang 9

Thang máy đang ở tầng 2, rảnh Dictionary:

Kiểm tra List UP

Thang máy di chuyển lên tầng 4.Cập nhật Position của thang máy là 2, 3.Cập nhật Direction của thang máy là up.Queue: []

Trang 10

List UP: [4]

Bước 6:

Thang máy lên đến tầng 4

Cập nhật Position của thang máy là 4.Cập nhật Direction của thang máy là up.Hoàn thành phản hồi yêu cầu 1(lên tầng 4) Xóa tầng 4 ra khỏi List UP

Trang 11

Thang máy đã di chuyển người từ tầng 2 lên tầng 4 thành công

Ví dụ 2:

Giả sử có các yêu cầu và phản hồi yêu cầu trong các khoảng thời gian:

1 Trong thời gian t1 có một người đang ở tầng 3 muốn lên tầng 6

2 Trong thời gian t2 có một người ở tầng 6 muốn đi xuống tầng 1 và một người ở tầng 5 muốn đi xuống tầng 2

3 Trong thời gian t3 có một người ở tầng 4 muốn lên tầng 5

4 Trong thời gian t5 có một người ở tầng 4 muốn xuống tầng 1

Cách giải Bước 1:

Nhận yêu cầu 1: Gọi thang máy từ tầng 3 đi lên

Kiểm tra List UP

Thang máy di chuyển lên tầng 3

Cập nhật Position của thang máy là 1

Cập nhật Direction của thang máy là up

Queue: []

List UP: [3]

Nhận yêu cầu 2: Gọi thang máy từ tầng 5 đi xuống và tầng 6 đi xuống

Queue: [6 5]

Kiểm tra trạng thái thang máy: đang ở tầng 1, đi lên, đang bận

Lấy tầng 5 từ trong Queue ra xử lý đưa vào List giải quyết sau

Trang 12

Decision: down

List Down: [5]

Xóa tầng 5 ra khỏi Queue

Bước 3:

Thang máy tiếp tục di chuyển lên tầng 3

Cập nhật Position của thang máy là 2

Cập nhật Direction của thang máy là up

List Down: [5 6]

Trang 13

Xóa tầng 6 ra khỏi Queue

Bước 4:

Thang máy tiếp tục di chuyển lên tầng 3

Cập nhật Position của thang máy là 2

Cập nhật Direction của thang máy là up

List UP: [3 4]

Xóa tầng 4 ra khỏi Queue

Trang 14

Bước 5:

Thang máy lên đến tầng 3

Cập nhật Position của thang máy là 3

Cập nhật Direction của thang máy là up

Hoàn thành yêu cầu 1(Gọi thang máy từ tầng 3 đi lên), xóa tầng 3 ra khỏi List UP Queue: []

List UP: [4]

List DOWN: [5 6]

+ Nhận phản hồi yêu cầu 1 từ bên trong thang máy: lên tầng 6

+ Sau đó nhận thêm yêu cầu 4: Gọi thang máy từ tầng 4 đi xuống

Queue: [4 6]

Kiểm tra trạng thái thang máy: đang ở tầng 3, đi lên, đang bận

Lấy tầng 6 từ trong Queue ra xử lý đưa vào List giải quyết sau

Decision: up

List UP: [4 6]

Xóa tầng 6 ra khỏi Queue

Trang 15

Bước 6:

Kiểm tra List UP

Thang máy di chuyển lên tầng 4

Cập nhật Position của thang máy là 3

Cập nhật Direction của thang máy là up

Kiểm tra trạng thái thang máy: đang ở tầng 3, đi lên, đang bận

Lấy tầng 4 từ trong Queue ra xử lý đưa vào List giải quyết sau

Decision: down

List DOWN: [4 5 6]

Xóa tầng 4 ra khỏi Queue

Bước 7:

Thang máy lên đến tầng 4

Cập nhật Position của thang máy là 4

Cập nhật Direction của thang máy là up

Hoàn thành yêu cầu 3(Gọi thang máy từ tầng 4 đi lên), xóa tầng 4 ra khỏi List UP Queue: []

List UP: [6]

List DOWN: [4 5 6]

+ Nhận phản hồi yêu cầu 3 từ bên trong thang máy: lên tầng 5

Queue: [5]

Kiểm tra trạng thái thang máy: đang ở tầng 4, đi lên, đang bận

Lấy tầng 5 từ trong Queue ra xử lý đưa vào List giải quyết sau

Decision: up

Trang 16

List UP: [5 6]

Xóa tầng 5 ra khỏi Queue

Bước 8:

Kiểm tra List UP

Thang máy di chuyển lên tầng 5

Cập nhật Position của thang máy là 4

Cập nhật Direction của thang máy là up

Queue: []

List UP: [5 6]

List DOWN: [4 5 6]

Thang máy lên đến tầng 5

Cập nhật Position của thang máy là 5

Cập nhật Direction của thang máy là up

Hoàn thành phản hồi từ yêu cầu 3(lên tầng 5), xóa tầng 5 ra khỏi List UP Queue: []

List UP: [6]

Trang 17

List DOWN: [4 5 6]

Bước 9:

Kiểm tra List UP

Thang máy di chuyển lên tầng 6

Cập nhật Position của thang máy là 5

Cập nhật Direction của thang máy là up

Queue: []

List UP: [6]

List DOWN: [4 5 6]

Thang máy lên đến tầng 6

Cập nhật Position của thang máy là 6

Cập nhật Direction của thang máy là up

Hoàn thành phản hồi từ yêu cầu 1lên tầng 6), xóa tầng 6 ra khỏi List UP Queue: []

List UP: []

List DOWN: [4 5 6]

Trang 18

Bước 10:

Thang máy đổi chiều di chuyển xuống

Cập nhật Position của thang máy là 6

Cập nhật Direction của thang máy là down

Kiểm tra trạng thái thang máy: đang ở tầng 6, đi xuống, đang bận

Lấy tầng 1 từ trong Queue ra xử lý đưa vào List giải quyết sau

Decision: down

List DOWN: [1 4 5]

Xóa tầng 1 ra khỏi Queue

Bước 11:

Kiểm tra List DOWN

Thang máy di chuyển xuống tầng 5

Cập nhật Position của thang máy là 6

Cập nhật Direction của thang máy là down

Queue: []

List UP: []

List DOWN: [1 4 5]

Thang máy xuống đến tầng 5

Cập nhật Position của thang máy là 5

Cập nhật Direction của thang máy là down

Hoàn thành yêu cầu 2(Gọi từ tầng 5 đi xuống), xóa tầng 5 ra khỏi List DOWN Queue: []

Trang 19

List DOWN: [1 2 4]

Xóa tầng 2 ra khỏi Queue

Bước 13:

Kiểm tra List DOWN

Thang máy di chuyển xuống tầng 4

Cập nhật Position của thang máy là 5

Trang 20

Cập nhật Direction của thang máy là down.

Queue: []

List UP: []

List DOWN: [1 2 4]

Thang máy xuống đến tầng 4

Cập nhật Position của thang máy là 4

Cập nhật Direction của thang máy là down

Hoàn thành yêu cầu 4(Gọi từ tầng 4 đi xuống), xóa tầng 4 ra khỏi List DOWN Queue: []

List UP: []

List DOWN: [1 2]

Nhận phản hồi yêu cầu 4 từ bên trong thang máy: xuống tầng 1

Queue: [1]

Kiểm tra trạng thái thang máy: đang ở tầng 4, đi xuống, đang bận

Lấy tầng 1 từ trong Queue ra xử lý đưa vào List giải quyết sau

Decision: down

List DOWN: [1 2]

Xóa tầng 1 ra khỏi Queue

Bước 14:

Kiểm tra List DOWN

Thang máy di chuyển xuống tầng 2

Cập nhật Position của thang máy là 3

Cập nhật Direction của thang máy là down

Queue: []

List UP: []

List DOWN: [1 2]

Thang máy xuống đến tầng 2

Cập nhật Position của thang máy là 2

Cập nhật Direction của thang máy là down

Hoàn thành phản hồi của yêu cầu 2(xuống tầng 2), xóa tầng 2 ra khỏi List DOWN

Trang 21

Queue: []

List UP: []

List DOWN: [1]

Bước 15:

Kiểm tra List DOWN

Thang máy di chuyển xuống tầng 1 Cập nhật Position của thang máy là 2.Cập nhật Direction của thang máy là down.Queue: []

List UP: []

List DOWN: [1]

Thang máy xuống đến tầng 1

Cập nhật Position của thang máy là 1.Cập nhật Direction của thang máy là down.Hoàn thành phản hồi yêu cầu 2(xuống tầng 1) Hoàn thành phản hồi yêu cầu 4(xuống tầng 1) Hoàn thành phản hồi yêu cầu 5(xuống tầng 1) Xóa tầng 1 ra khỏi List DOWN

Queue: []

List UP: []

List DOWN: []

Trang 22

Bước 16:

Kiểm tra không còn yêu cầu nào khác

Thang máy trở về trạng thái rảnh

Kết quả:

Thang máy đã di chuyển người từ tầng 3 lên tầng 6 thành công

Thang máy đã di chuyển người từ tầng 6 xuống tầng 1 thành công

Thang máy đã di chuyển người từ tầng 5 xuống tầng 2 thành công

Thang máy đã di chuyển người từ tầng 4 lên tầng 5 thành công

Thang máy đã di chuyển người từ tầng 4 xuống tầng 1 thành công

VII Biểu đồ lớp

 Cụ thể code sẽ nằm trong source

VIII Tính năng đang thử nghiệm

Cho người dùng nhập từ bàn phím để bảo đảm tính tự nhiên hơn

THAM KHẢO

Các thuật toán về thang máy: https://en.wikipedia.org/wiki/Elevator_algorithm

Thuật toán SCAN: https://www.geeksforgeeks.org/scan-elevator-disk-schedulingalgorithms/

Ngày đăng: 20/06/2024, 16:50

w