Tải bản đầy đủ (.docx) (40 trang)

Chuyên đề ngành Tìm hiểu về hàng đợi và mô phỏng

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 (2.47 MB, 40 trang )

TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

Môn Học: Chuyên Đề Ngành
Nhóm 4 : Tìm hiểu về ứng dụng của hàng đợi (Queue) trong thực tế
và cài đặt mô phỏng.
Giảng viên hướng dẫn:ThS Lê Hữu Dũng
Sinh viên thực hiện: Hoàng Tuấn Anh 16A05
Nguyễn Văn Bảo 17A05
Nguyễn Khắc Dương 16A05
Đinh Trung Hiếu 16A5

Chuyên Ngành: Công Nghệ Thông Tin
Hà Nội, 2019


MỤC LỤC


I.

. KẾ HOẠCH THỰC HIỆN VÀ PHÂN CÔNG CÔNG VIỆC

1.1 Kế Hoạch thực hiện và phân công

II. MÔ TẢ BÀI TOÁN
2.1 Tóm tắt đề cương


Đề tài : Tìm hiểu về ứng dụng của hàng đợi (queue) trong thực tế và cài
đặt mô phỏng





Gồm những phần:


+

Mô tả đề tài đánh giá các đề tài liên quan, xác định đối tượng và phân
chia công việc

+

Thu thập dữ liệu, mô phỏng ứng dụng của hàng đợi trong thực tế và
hình ảnh minh họa

+

Các ứng dụng khác được phát triển dựa trên hàng đợi ngày nay, ưu
điểm của các ứng dụng đó

2.2 Giới thiệu đề tài
-

Lý thuyết hàng đợi
+

Hàng đợi (tiếng Anh: 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 hàng đợi, các đối tượng có thể được thêm vào hàng đợi bất kỳ
lúc nào, nhưng chỉ có đối tượng thêm vào đầu tiên mới được phép
lấy ra khỏi hàng đợi. Thao tác thêm vào và lấy một đối tượng ra khỏi
hàng đợi được gọi lần lượt là "enqueue" và "dequeue". Việc thêm
một đối tượng luôn diễn ra ở cuối hàng đợi và một phần tử luôn
được lấy ra từ đầu hàng đợi.

+

Cấu trúc dữ liệu hàng đợi có thể định nghĩa như sau: Hàng đợi là một
cấu trúc dữ liệu trừu tượng (ADT) tuyến tính. Tương tự như ngăn xếp,
hàng đợi hỗ trợ các thao tác:

-

Các cách cài đặt hàng đợi
+

Cài đặt bằng mảng
Các thao tác:
- Khởi tạo hàng đợi(Initialize Queue)
- Kiểm tra xem hàng đợi có rỗng không? (Check if a queue is empty)
- Kiểm tra xem hàng đợi có đầy không? (Check if a queue is full)
- Đưa thêm một phần tử vào hàng đợi


- Xóa một phần tử khỏi hàng đợi

Nhược điểm:
- Qua mỗi lần xóa (deQ): phần sử dụng được của mảng sẽ giảm đi (do
front tăng lên).
Cách khắc phục:
- Sử dụng mảng vòng (Circular Array).
- Khởi tạo hàng đợi(Initialize Queue)
- Kiểm tra xem hàng đợi có rỗng không? (Check if a queue is empty)
- Kiểm tra xem hàng đợi có đầy không? (Check if a queue is full)
- Đưa thêm một phần tử vào hàng đợi
- Xóa một phần tử khỏi hàng đợi
Nhược điểm:
- Mặc dù phương pháp sử dụng mảng vòng có thể tận dùng toàn bộ
các mảng đã được cấp pháp ban đầu nhưng khi mảng đầy thì không
thể thêm phần tử vào hàng được nữa. Cách khắc phục:
- Sử dụng Danh sách liên kết.
2. Cài hàng đợi sử dụng Danh Sách Liên Kết: (Implementation Queue
using List Point)
- Khởi tạo hàng đợi(Initialize Queue)
- Kiểm tra xem hàng đợi có rỗng không? (Check if a queue is empty)
- Kiểm tra hàng đợi có đầy không (ở đây không có hàm này vì danh
sách liên kết làm sao đầy được ^^!)
- Đưa thêm một phần tử vào hàng đợi
- Xóa một phần tử khỏi hàng đợi
Ưu điểm: - khắc phục được tình trạng đầy của việc sử dụng mảng để
cài đặt queue.
-

Một số mô hình hàng đợi



+

Hệ thống một kênh phục vụ M/M/1


Là hàng đợi đơn giản nhất với một số đặc điểm



Không giới hạn kích thước dòng vào



Không giới hạn kích thước hàng đợi



Có duy nhất một kênh phục vụ



Áp dụng quy tắc phục vụ FIFO



Tốc độ phục vụ không phụ thuộc trạng thái, mà được đặc trưng bởi
số khách hàng trong hệ thống, Số khách hàng đến trung bình trong
một đơn vị thời gian, Số khách hàng được phục vụ trong một đơn
vị thời gian, Số lượng khách hàng lưu trú trong hệ thống (lượng
khách đang chờ đợi + đang được phục vụ), Thời gian trung bình

khách hàng trong hệ thống (thời gian chờ đợi + thời gian phục vụ),
Số khách hàng trung bình trong hàng đợi, Thời gian chờ đợi trung
bình trong hàng đợi, Xác suất không có khách hàng trong hệ thống
(hệ thống nhàn rỗi)

+

Hệ thống đa kênh phục vụ M/M/c


Hàng đợi M/M/c được mô tả như sau: Mô hình hàng đợi với 2
hoặc nhiều quầy phục vụ, khách hàng đến một hàng đợi và tiến
đến quầy phục vụ đầu tiên trống. Đây là mô hình áp dụng nhiều tại
các ngân hàng hoặc các hệ thống tổng đài hỗ trợ.



Tốc độ phục vụ phụ thuộc vào số kênh phục vụ, số khách hàng đến
trung bình trong một đơn vị thời gian, số khách hàng được phục vụ


trong một đơn vị thời gian ở mỗi kênh, xác uất hệ thống không có
khách hàng

+

Hệ thống hàng đợi có thời gian phục vụ chính xác M/D/1


Hàng đợi có thời gian phục vụ chính xác thay vì phân phối mũ. Khi

khách hàng yêu cầu dịch vụ quá trình phục vụ theo một vòng đời
được định sẵn



Độ dài trung bình của hàng đợi



Thời gian đợi trung bình



Số khách hàng trung bình trong hệ thống



Thời gian đợi trung bình trong hệ thống


+

Hệ thống hàng đợi giới hạn kích thước M/M/c/K


Là hệ thống đa kênh và chỉ có tối đa K khách hàng được phép lưu
trú trong hệ thống, Hàng gồm c kênh phục vụ, Nguyên tắc phục vụ


FCFS, Không giới hạn kích thước dòng vào, Giới hạn kích thước

khách hàng trong hàng đợi


Hiệu suất phụ thuộc chiều dài hàng đợi trung bình, xác suất có k
khách hàng và 0 khách hàng trong hệ thống



Tổng quan về hàng đợi : Lý thuyết về hệ thống hàng đợi là lý thuyết được
nghiên cứu rộng rãi từ thế kỉ 20 và được ứng dụng trong nhiều lĩnh vực
như bưu chính viễn thông, hàng không, đường sắt, kiểm soát lưu lượng
giao thông, đánh giá hiệu năng hệ thống máy tính, y tế và chăm sóc sức
khỏe, kinh doanh mua bán…



Trong nhiều hệ thống phục vụ, khách hàng phải dùng chung tài nguyên,
phải chờ để được phục vụ và đôi khi bị từ chối phục vụ. Lý thuyết hệ thống


hàng đợi giúp các định và tìm các phương án tối ưu để hệ thống phục vụ
tốt nhất và lợi nhuận cao nhất.


Hàng đợi là loại cấu trúc dữ liêu có tính chất ‘vào trước, ra trước” (First-in,
First-out / FIFO). Nó giống như trường hợp hàng đợi ngoài thực tế khi ta
mua hàng, người nào xếp hàng vào hàng đợi trước thì sẽ được phục vụ
trước và ra khỏi hàng đợi trước.

2.3 Ưu nhược điểm của hàng đợi





Ưu điểm của hàng đợi
+

Giúp phân chia công việc xử lý một cách hợp lý công bằng

+

Nhanh trong việc thêm và xóa dữ liệu

Nhược điểm của hàng đợi
+

Hàng đợi không dễ tìm kiếm và xóa

2.4 Nội dung đề tài và dự định đạt được
-

Về phần lý thuyết


Hiểu về các định nghĩa , lý thuyết về hàng đợi, cách cài đặt hàng đợi



Các kỹ thuật trong hàng đợi enqueue, dequeue, isEmpty, Front




Giới thiệu các mô hình hàng đợi khác: hàng đợi một kênh phục vụ
(M/M/1), hàng đợi đa kênh phục vụ(M/M/c), hàng đợi có thời gian
phục vụ chính xác (M/D/1)


-

Về phần ứng dụng




Ứng dụng tìm hiểu


Ứng dụng cho bài toán gọi điện tổng đài



Ứng dụng cho bài toán xếp hàng đợi phục vụ tại ngân hàng

Dự kiến kết quả đạt được


Hiểu được quy trình hoạt động




Mô phỏng ứng dụng trực quan


III . TÌM HIỂU CÁC ỨNG DỤNG CỦA HÀNG ĐỢI TRONG THỰC TẾ
3.1 Ứng dụng trong gọi điện tổng đài

Bài toán thực tế:

+


Trong điều kiện cạnh tranh ngày càng gay gắt, mức sống của con người
tăng cao. Nhu cầu, đòi hỏi của khách hàng cũng trở nên cao cấp, khắt
khe hơn. Việc thoả mãn nhu cầu của khách hàng thông qua hoạt động
chăm sóc khách hàng ngày càng có vai trò quan trọng. Cho nên đầu tư
một hệ thống tổng đài chuyên nghiệp để tư vấn hỗ trợ khách hàng là


điều không thể thiếu. vấn đề đặt ra là làm thế nào vừa có thể chăm sóc,
đáp ứng nhu cầu khách hàng tốt nhất.
Cơ chế hoạt động của hàng đợi trong gọi điện tổng đài:

+


Khi có cuộc gọi vào nhóm, nếu tất cả điện thoại viên của nhóm đều bận,
cuộc gọi sẽ được xếp hàng trong hàng đợi. Khi có điện thoại viên rỗi,
cuộc gọi sẽ được chuyển đến điện thoại viên, mặc định các cuộc gọi vào
trước sẽ được trả lời trước. Queues rất hữu dụng khi số lượng cuộc gọi
vào nhiều hơn số người trực điện thoại, khi đó cuộc gọi đến sẽ được

nghe nhạc hoặc quảng cáo cho đến khi có điện thoại viên trả lời.

3.2 Ứng dụng trong xếp hàng tại ngân hàng

+

Bài toán thực tế




Cùng với sự phát triển của ngân hàng, con người không phải đưa tiền
tận tay hay gửi qua bưu điện như trước nữa, nhu cầu đến ngân hàng
của người dân tăng cao vì vậy để tránh việc hỗn loạn xảy ra tại ngân
hàng hiện nay các ngân hàng đều điều phối khách hàng đến vào hàng
đợi
Cơ chế hoạt động

+


Tùy thuộc vào yêu cầu phục vụ từ khách hàng mà các ngân hàng bố trí
số lượng quầy phục vụ. Đối với quầy thu ngân, hầu hết các ngân hàng
hiện nay áp dụng mô hình phục vụ đa kênh. Một thực trạng dễ thấy là,
những ngày thường khách đến ngân hàng phân tán, không tập trung tại
một thời điểm, lượng khách vào các ngày thường cũng ít hơn các ngày
lễ tết. Tại những giờ thấp điểm như vậy số lượng quầy thanh toán ít đi,
những ngày lễ tết các quầy phục vụ hết công suất thậm chí còn mở
thêm số lượng quầy




Hàng đợi tại ngân hàng hầu hết là hàng đợi không giới hạn kích thước.
Các dịch vụ được cung cấp cũng không phải là dịch vụ khẩn cấp vì vậy
hầu hết đều phục vụ theo nguyên tắc FCFS



Để khách hàng được xếp vào hàng đợi mỗi khách hàng đến sẽ được cấp
1 phiếu có chứa số thứ tự đợi phục vụ



Thời gian phục vụ khách hàng là khác nhau. Trong phục vụ có khách
hàng gửi tiền có khách hàng chuyển tiền, có khách hàng rút tiền vì yêu
cầu mỗi khách hàng khác nhau dẫn đến thời gian phục vụ cũng khác
nhau.

+

Cách chia ở đầu ra hàng đợi tại ngân hàng




Tại một số ngân hàng agribank khách hàng đến sẽ chọn dịch vụ tương
ứng với nhu cầu khách hàng, và mỗi dịch vụ khách hàng chọn sẽ được
cung cấp 1 phiếu đánh số tương ứng với dịch vụ đó. Khi bàn phục vụ
trống sẽ nhân viên sẽ gọi khách hàng tương ứng vào để phục vụ. Hàng
đợi trong ngân hàng lúc này sẽ là nhiều hàng đợi nhỏ



3.3 Demo ứng dụng
Ý tưởng thuật toán:

+


Quản lý việc xếp hàng tại ngân hàng là phương pháp quản lý theo hàng
đợi theo nguyên tắc FIFO, những khách hàng vào ngân hàng sẽ được
nhân viên phát phiếu có chứa số thứ tự khách hàng đến trước sẽ sẽ
được phục vụ trước lần lượt theo số thứ tự đã phát.
Các bước thực hiện:

+

B1: Nhập số khách hàng vào hệ thống
B2: Khởi tạo số khách hàng dựa vào số khách hàng đã nhập
B3: Khởi tạo hàng đợi chứa số khách hàng đã nhập
B4: Thêm khách hàng vào hàng đợi
B5: Đưa khách hàng vào đầu tiên để phục vụ
B6: Hiện thông báo khi không còn khách hàng


Giao diện
+

Khởi tạo số khách hàng



+

Thêm khách hàng vào hàng đợi

+

Phục vụ khách hàng theo hàng đợi

+

Hiện thông báo khi không còn khách hàng


Code mô phỏng
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Collections;
namespace mophongqueue
{
public partial class Form1 : Form



{
public Form1()
{
InitializeComponent();
}
Queue<PictureBox> KHXEPHANG;
private void KhoiTaoKhachHang()
{
int slkh;
int dx = 0;
slkh = Int32.Parse(txtslsv.Text);
Queue<PictureBox> DSKH = new Queue<PictureBox>(slkh);
DSKH.Clear();
for (int i=0; i < slkh; i++)
{
PictureBox pb = new PictureBox();
pb.Name = i + ToString();
pb.BackgroundImage
Image.FromFile(@"C:\Users\baong\Desktop\University\Chuyên
ngành\Mô phỏng\images.jpg");
pb.BackgroundImageLayout = ImageLayout.Stretch;
pb.Width = 50;
pb.Height = 60;
pb.Location = new Point(0,dx);
dx += 80;
panel1.Controls.Add(pb);
DSKH.Enqueue(pb);

=
đề



}
MessageBox.Show("Có "+DSKH.Count+" khách hàng đến");
int dx1 = 580;
KHXEPHANG = new Queue<PictureBox>(DSKH);
for (int i = 0; i < slkh; i++)
{
PictureBox pbrun;
pbrun = DSKH.Dequeue();
pbrun.Location = new Point(119, 9);
panel1.Controls.Add(pbrun);
pbrun.Location = new Point(dx1, 100);
panel1.Controls.Add(pbrun);
Thread.Sleep(1000);
dx1 -= 80;
}
}
private void Button1_Click(object sender, EventArgs e)
{
KhoiTaoKhachHang();
}

private void PictureBox1_Click(object sender, EventArgs e)
{
try
{
PictureBox gd;



gd = KHXEPHANG.Dequeue();
gd.Location = new Point(83, 343);
panel1.Controls.Add(gd);
Thread.Sleep(1500);
gd.Hide();
}
catch
{
MessageBox.Show("Không còn khách hàng nào");
}
}
private void PictureBox2_Click(object sender, EventArgs e)
{
try
{
PictureBox gd;
gd = KHXEPHANG.Dequeue();
gd.Location = new Point(307, 343);
panel1.Controls.Add(gd);
Thread.Sleep(1500);
gd.Hide();
}
catch
{
MessageBox.Show("Không còn khách hàng nào");
}


}
private void PictureBox3_Click(object sender, EventArgs e)

{
try
{
PictureBox gd;
gd = KHXEPHANG.Dequeue();
gd.Location = new Point(514,343);
panel1.Controls.Add(gd);
Thread.Sleep(1500);
gd.Hide();
}
catch
{
MessageBox.Show("Không còn khách hàng nào");
}
}
}
}
IV. ĐÁNH GIÁ ĐỀ TÀI LIÊN QUAN
4.1 Đề tài 1: Báo cáo bài tập lớn môn chuyên đề thực tập ngành - Tìm hiểu một
số ứng dụng của hàng đợi Queue và cài đặt mô phỏng
+ Thành viên :


Vũ Viết Hưng (16A2)



Nguyễn Trường Sơn (16A5)




+

Vương Tài Mẫn (15A6)

Đánh giá đề tài


Hình thức : Báo cáo gồm 25 trang



Nội dung : Hơi sơ sài do các mục chưa nói nhiều đến các ứng dụng
thực tế, nói tập trung sâu về lý thuyết và định nghĩa nhiều, nhiều
code trong báo cáo



Thiếu đánh giá các đề tài liên quan



Sai định dạng tài liệu tham khảo



Mô phỏng ứng dụng thực tế của hàng đợi chưa rõ ràng

4.2


Đề tài 2: Ứng dụng của hàng đợi

/>

+ Đánh giá đề tài


Hình thức : Báo cáo ngắn gồm 10 trang



Nội dung : Vẫn còn sơ sài



Thiếu đánh giá các đề tài liên quan



Chưa có mô phỏng ứng dụng thực tế



Mới chỉ giới thiệu qua về ứng dụng thực tế của hàng đợi chưa đi sâu

V.TRẢ LỜI CÂU HỎI

5.1
+


Câu hỏi ngày 24/10/2019

Nguyễn Hữu Hóa : Trong trường hợp có khách hàng hẹn trước thì khi
đến có được ưu tiên không hay vẫn phải tham gia hàng đợi ?

+

Trả lời :Hiện nay cơ chế của một số ngân hàng không có hẹn trước, đến
ngân hàng là phải xếp hàng, bên cạnh đó có ngân hàng Sacombank có
triển khai dịch vụ đặt hẹn online dành cho khách hàng có nhu cầu đến
giao dịch tại Ngân hàng. Để đặt hẹn, khách hàng truy cập vào website
Sacombank (www.sacombank.com.vn) hoặc ứng dụng mCard (tải miễn


phí trên App Store hoặc Google Play). Với dịch vụ này, khách hàng sẽ rút
ngắn được thời gian giao dịch vì được Sacombank ưu tiên phục vụ.
/>
+

Vi Thị Khánh Huyền : Kỹ thuật điều phối băng thông có tác dụng như thế
nào ?

+

Trả lời : câu hỏi về nội dung không có trong nhóm
+

Nguyễn Văn Đông : Cho mình hỏi về ứng dụng gọi điện tổng đài. giả sử có
2 cuộc gọi cùng một thời gian mà chỉ có 1 điện thoại viên rảnh máy thì cơ
chế của nó sẽ xử lý như thế nào ?



+

Trả lời : Nếu có 2 cuộc gọi cùng một thời gian mà chỉ có 1 điện thoại
viên rảnh máy thì các cuộc gọi đến sẽ được xếp vào hàng đợi cuộc gọi
nào đến trước thì sẽ được phục vụ trước

+

Nguyễn Đăng Đạt : Lượng khách hàng trong 1 ngày không được xử lý hết
thì hàng đợi còn lại sẽ như thế nào ?


×