Имитационная модель системы поликлинического обслуживания
В качестве примера имитационной модели выбрана ситуация в поликлинике, когда регистраторы обслуживают клиентов, записывая их к врачу. Время прибытия и время обслуживания каждого клиента. Использование языка программирования C++. Пример работы программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | отчет по практике |
Язык | русский |
Дата добавления | 13.12.2022 |
Размер файла | 459,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Министерство науки и высшего образования Российской Федерации
ФГБОУ ВО «Ивановский государственный университет»
Институт математики, информационных технологий и естественных наук
Кафедра информационных технологий и прикладной математики
ОТЧЕТ
по производственной практике, научно-исследовательской
(НОЦ Промышленных Информационных технологий)
Студент 3 курса бакалавриата,
очной формы обучения
Ратанов Г.С.
Научный руководитель,
доцент, канд. экон. наук
Степович-Цветкова Г.С.
Руководитель практики
Жафярова Ф.С.
Иваново, 2022
Рабочий план-график прохождения
Производственной практики, научно-исследовательской работы
Студента_3 курса бакалавриата, института МИТ иЕН:
Ратанова Георгия Сергеевича
Образовательная программа: 02.03.02
Фундаментальная информатика и информационные технологии
№ п/п |
Сроки |
Разделы (этапы) практики |
Виды учебной работы, задания по разделам (этапам) практики |
|
1 |
07.02.22- 21.02.22 |
Подготовительный этап |
Сбор необходимой информации о возможностях имитационного моделирования в области поликлинического обслуживания. Установка необходимо ПО. |
|
2 |
22.02.22- 15.04.22 |
Прохождение практики |
Изучение современных методов и средств имитационного моделирования. Анализ полученной информации. |
|
3 |
20.05.22-04.06.22 |
Подготовка и защита отчёта по практике |
Формирование умений и навыков выполнения работы по анализу предметной области и формализации полученных результатов. |
Научный руководитель,
канд.экон.наук, доцент ______________ Г.С. Степович-Цветкова
Руководитель практики от
НОЦ Промышленных Информационных технологий __ Ф.С. Жафярова
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
Высшего образования
«Ивановский Государственный Университет»
(ФГБОУ ВО «Ивановский Государственный Университет»)
Кафедра информационных технологий и прикладной математики
Задание
по производственной практике, научно-исследовательской
Студенту института МИТиЕН 3 курса бакалавриата очной формы
обучения Ратанову Георгию Сергеевичу
1. Студент направляется для прохождения производственной практики, научно-исследовательской на предприятие: НОЦ Промышленных Информационных технологий.
Срок прохождения практики с «07» февраля 2022г. по «04» июня 2022 г.
Тема отчета: «Применение методов имитационного моделирования для создания модели системы поликлинического обслуживания».
2. Срок сдачи студентом законченного отчета по производственной практике, научно-исследовательской работе «30 июня 2022 года»
3. Исходные данные для прохождения практики: методические указания по выполнению производственной практики, научно-исследовательской для бакалавров по направлению 02.03.02 Фундаментальная информатика и информационные технологии; Федеральные законы, Постановления и другие нормативные документы, регламентирующие использование имитационных моделей в системе поликлинического обслуживания; материалы сайтов ПО, используемого для расчета, анализа и прогнозирования среднего времени обслуживания.
4. Краткое содержание вопросов, подлежащих проработке на практике: сбор и анализ исходных данных для написания отчета по производственной практике, научно-исследовательской работе в соответствии с комплексным заданием.
Дата выдачи задания: «04» февраля 2022 г.
Содержание
Введение
1. Имитационная модель системы поликлинического обслуживания
2. Реализация проекта
Заключение
Список литературы
Введение
В качестве примера имитационной модели, я взял ситуацию в поликлинике, когда регистраторы обслуживают клиентов, записывая их к врачу. В свою очередь, у каждого клиента есть свое время прибытия и время обслуживания, что влияет на состояние очереди и время простоя регистратора. При чем пользователь может самостоятельно задать параметры модели, такие как, интервалы между клиентами, время обслуживания клиентов, а также кол-во регистраторов и клиентов.
Целью данной научной работы является создание имитационной модели, используя современные методы моделирования и запрограммировать её, используя язык программирования C++.
Задачи научной работы:
- программа должна сымитировать работу регистраторов клиники.
- в ходе выполнения запрашивать у пользователя информацию о кол-ве регистраторов, кол-ве посетителей, минимальном и максимальном интервале между посетителями, минимальном и максимальном времени обслуживания.
- на выходе, программа должна выводить в окне три таблицы с полной информацией о модели:
1) В первой таблице (Время прибытия и время обслуживания каждого клиента) отображается номер клиента, его момент прибытия и время обслуживания.
2) Вторая таблица (Ручное моделирование работы поликлиники) содержит информацию о клиенте, а именно, какой регистратор его обслуживает, начало и конец обслуживания, время ожидания в очереди, время пребывания в поликлинике и время простоя регистратора.
3) В третьей таблице (Описание имитации работы регистратора) содержится информация о работе регистратора: время события, номер клиента, тип события(приход/уход), длина очереди в этот момент, число клиентов в поликлинике, состояние регистратора(занят/свободен) и время простоя регистратора.
1. Имитационная модель системы поликлинического обслуживания
В качестве примера имитационной модели рассмотрим пример на обслуживание регистратором клиентов в поликлинике. Клиенты приходят в клинику. Ждут, когда их обслужат, если регистратор занят. Регистратор обслуживает клиентов. Потом клиенты уходят из поликлиники. В тот момент, когда регистратор занят, клиенты пришедшие в поликлинику ждут, когда их обслужат, в одной очереди. Для того чтобы упростить работу системе можно заранее ввести время прибытия и ожидания клиента. Главная цель данной системы состоит в том, чтобы определить самые важные показатели, такие как:
· процент времени, когда регистратор свободен
· среднее время обслуживания клиента
Таблица 1. Время прибытия и время обслуживания каждого клиента
Номер клиента |
Момент прибытия, (мин ) |
Время обслуживания, (мин ) |
|
1 |
3,2 |
3,8 |
|
2 |
10,9 |
3,5 |
|
3 |
13,2 |
4,2 |
|
4 |
14,8 |
3,1 |
|
5 |
17,7 |
2,4 |
|
6 |
19,8 |
4,3 |
|
7 |
21,5 |
2,7 |
|
8 |
26,3 |
2,1 |
|
9 |
32,1 |
2,5 |
|
10 |
36,6 |
3,4 |
В таблице 2 приводятся итоги имитации с учетом входных данных таблицы 1. В начальный момент времени предполагается, что регистратор свободен так как клиентов нет. А первый клиент прибывает в поликлинику в момент времени, равный 3,2 минуты.
Из таблицы №1 были позаимствованы первый и второй столбцы во вторую таблицу. От того, покинул ли предыдущий клиент поликлинику зависит время начала обслуживания последующего клиента. Из времен прибытия данного клиента и ухода предыдущего выбирается время, значение которого наибольшее, и это значение времени присваивается к началу обслуживания. Время ухода клиента вычисляется как сумма значений времени начала обслуживания и само время обслуживания клиента, и записывается в четвертый столбец.
Таблица 2. Ручное моделирование работы поликлиники
Номер клиента |
Момент прибытия (мин) |
Момент начала обслуживания, (мин) |
Момент ухода, (мин) |
Время ожидания в очереди, (мин ) |
Время пребывания в поликлинике, (мин) |
|
1 |
3,2 |
3,2 |
7 |
0 |
3,8 |
|
2 |
10,9 |
10,9 |
14,4 |
0 |
3,5 |
|
3 |
13,2 |
14,4 |
18,6 |
1,2 |
5,4 |
|
4 |
14,8 |
18,6 |
21,7 |
3,8 |
6,9 |
|
5 |
17,7 |
21,7 |
24,1 |
4,0 |
6,4 |
|
6 |
19,8 |
24,1 |
28,4 |
4,3 |
8,6 |
|
7 |
21,5 |
28,4 |
31,1 |
6,9 |
9,6 |
|
8 |
26,3 |
31,1 |
33,2 |
4,8 |
6,9 |
|
9 |
32,1 |
33,2 |
35,7 |
1,1 |
3,6 |
|
10 |
36,6 |
36,6 |
40,0 |
0 |
3,4 |
В таблице №1 хоть и представлена итоговая информация о посетителях, однако такую информацию, как данных о регистраторе и о длине очереди к регистратору, она в себе не несет. Поэтому, чтобы получить данную информацию, нужно изучить действия, связанные с обстановкой. От состояния системы в момент наступления события зависит логика при обработке событий прихода и ухода. В зависимости от состояния регистратора, при событии прихода клиента, ситуация развивается дальше. Если регистратор свободен, он начинает обслуживать клиента, а статус “занят” активируется. В этот же момент идет планирование такого события как “уход” этого посетителя в момент времени, который равен текущему времени + время его обслуживания. В момент времени, когда регистратор уже занят, обслуживание клиента не происходит, а сам он встает в очередь. Поэтому длина этой очереди увеличивается на одного человека. Обработка такого события как “уход” посетителя зависит от параметра, в который записывается какой длины очередь. Когда в очереди есть посетитель, регистратор остается в статусе “занят”. А длина очереди уменьшается на одного человека. В тоже время, для первого человека в очереди планируется событие выход из очереди. А когда очередь становится пустой, у регистратора активизируется состояние “свободен”.
Таблица 3. Описание имитации работы регистратора
Время события, мин |
Номер клиента |
Тип события |
Длина очереди |
Число клиентов |
Состояние регистратора |
Время простоя регистратора, мин |
|
0 |
- |
Начало |
0 |
0 |
Свободен |
- |
|
3,2 |
1 |
Приход |
0 |
1 |
Занят |
3,2 |
|
7,0 |
1 |
Уход |
0 |
0 |
Свободен |
0 |
|
10,9 |
2 |
Приход |
0 |
1 |
Занят |
3,9 |
|
13,2 |
3 |
Приход |
1 |
2 |
Занят |
0 |
|
14,4 |
2 |
Уход |
0 |
1 |
Занят |
0 |
|
14,8 |
4 |
Приход |
1 |
2 |
Занят |
0 |
|
17,7 |
5 |
Приход |
2 |
3 |
Занят |
0 |
|
18,6 |
3 |
Уход |
1 |
2 |
Занят |
0 |
|
19,8 |
6 |
Приход |
2 |
3 |
Занят |
0 |
|
21,5 |
7 |
Приход |
3 |
4 |
Занят |
0 |
|
21,7 |
4 |
Уход |
2 |
3 |
Занят |
0 |
|
24,1 |
5 |
Уход |
1 |
2 |
Занят |
0 |
|
26,3 |
8 |
Приход |
2 |
3 |
Занят |
0 |
|
28,4 |
6 |
Уход |
1 |
2 |
Занят |
0 |
|
31,3 |
7 |
Уход |
0 |
1 |
Занят |
0 |
|
32,1 |
9 |
Приход |
1 |
2 |
Занят |
0 |
|
33,2 |
8 |
Уход |
0 |
1 |
Занят |
0 |
|
35,7 |
9 |
Уход |
0 |
0 |
Свободен |
0 |
|
36,6 |
10 |
Приход |
0 |
1 |
Занят |
0,9 |
|
40,0 |
10 |
Уход |
0 |
0 |
Свободен |
0 |
Информация о состоянии регистратора и числе посетителей в поликлинике представлена в таблице №3, которая описана выше. Вся информация представлена в хронологическом порядке.
Рисунок 1. Изменение состояния очереди
Изменение значений числа посетителей с течением времени в 40 минут можно увидеть на графике выше. Результатами имитации можно записать следующее: за первые 40 минут работы в поликлинике средним значением одновременно находящихся пациентов равна 1,625, а 20% времени регистратор был свободен.
Ведение записи событий помогает строить данные событий прихода и ухода в хронологическом порядке. События для последующей обработки. Это должно осуществляться при помощи занесения моментов наступления следующего события прихода и следующего события ухода. Сравнение этих моментов помогает в определении выбора одного из событий для дальнейшей обработки.
2. Реализация проекта
В качестве примера имитационной модели, я возьму ситуацию в поликлинике, когда регистраторы обслуживают клиентов, записывая их к врачу. В свою очередь, у каждого клиента свое время прибытия и время обслуживания, что влияет на состояние очереди и время простоя регистратора. При чем пользователь может самостоятельно задать параметры модели, такие как, интервалы между клиентами, время обслуживания клиентов, а также кол-во регистраторов и клиентов.
Для реализации этой задачи, я буду использовать язык программирования C++.
Код программы:
#include <iostream>
#include <iomanip>
using namespace std;
typedef struct Visitor_s {
int time_arrival;
int time_service_begin;
int time_service_end;
int time_service;
int registration_ID;
}Visitor_s;
typedef struct Registration_s {
int service_end;
}Registration_s;
typedef struct Event_s {
int visitor_ID;
int type;
int time;
}Event_s;
int comp(const void* e1, const void* e2)
{
int t1 = ((Event_s*)e1)->time;
int t2 = ((Event_s*)e2)->time;
return (t1 - t2);
}
int main() {
setlocale(LC_ALL, "Russian");
srand(time(0));
int registrations = 4;
int visitors = 20;
int min_interval = 0, max_interval = 7;
int min_service = 7, max_service = 10;
std::cout << "Введите кол-во регистраций: "; cin >> registrations;
std::cout << "Введите кол-во посетителей: "; cin >> visitors;
std::cout << "Введите минимальный интервал между посетителями: "; cin >> min_interval;
std::cout << "Введите максимальный интервал между посетителями: "; cin >> max_interval;
std::cout << "Введите минимальное время обслуживания: "; cin >> min_service;
std::cout << "Введите максимальное время обслуживания: "; cin >> max_service;
Registration_s* registration_a = new Registration_s[registrations];
for (int i = 0; i < registrations; i++) registration_a[i].service_end = 0;
Visitor_s* visitor_a = new Visitor_s[visitors];
for (int i = 0; i < visitors; i++) visitor_a[i] = Visitor_s{ 0,0 };
int time_last_visitor = 0;
std::cout << endl << "Таблица #1" << endl;
std::cout << setw(9) << " # " << setw(10) << " Момент " << setw(14) << " Время " << endl;
std::cout << setw(9) << "Клиента" << setw(10) << "прибытия" << setw(14) << "обслуживания" << endl;
for (int i = 0; i < visitors; i++) {
visitor_a[i].time_arrival = time_last_visitor;
time_last_visitor += rand() % (max_interval - min_interval) + min_interval;
visitor_a[i].time_service = rand() % (max_service - min_service) + min_service;
std::cout << setw(9) << i+1 << setw(10) << visitor_a[i].time_arrival << setw(14) << visitor_a[i].time_service << endl;
}
int registration_ID = 0, service_end_min = INT_MAX;
std::cout << endl << "Таблица #2" << endl;
std::cout << setw(9) << " # " << setw(13) << " # " << setw(14) << " Начало " << setw(14) << " Конец " << setw(10) << " Время " << setw(12) << " Время " << setw(15) << "Время простоя" << endl;
std::cout << setw(9) << "Клиента" << setw(13) << "Регистрации" << setw(14) << "обслуживания" << setw(14) << "обслуживания" << setw(10) << "ожидания" << setw(12) << "пребывания" << setw(15) << " регистрации " << endl;
for (int i = 0; i < visitors; i++) {
service_end_min = INT_MAX;
for (int j = 0; j < registrations; j++) {
if (registration_a[j].service_end < service_end_min) {
registration_ID = j; service_end_min = registration_a[j].service_end;
}
}
visitor_a[i].registration_ID = registration_ID;
visitor_a[i].time_service_begin = max(service_end_min, visitor_a[i].time_arrival);
visitor_a[i].time_service_end = visitor_a[i].time_service_begin + visitor_a[i].time_service;
registration_a[registration_ID].service_end = visitor_a[i].time_service_end;
std::cout << setw(9) << i + 1 << setw(13) << visitor_a[i].registration_ID << setw(14) << visitor_a[i].time_service_begin << setw(14) << visitor_a[i].time_service_end
<< setw(10) << visitor_a[i].time_service_begin - visitor_a[i].time_arrival << setw(12) << visitor_a[i].time_service_end - visitor_a[i].time_arrival << setw(15) << max(0, visitor_a[i].time_service_begin - service_end_min) << endl;
}
Event_s* event_a = new Event_s[visitors * 2];
for (int i = 0; i < visitors; i++) {
event_a[i].type = 1;
event_a[i].time = visitor_a[i].time_arrival;
event_a[i].visitor_ID = i;
event_a[i + visitors].type = 2;
event_a[i + visitors].time = visitor_a[i].time_service_end;
event_a[i + visitors].visitor_ID = i;
}
qsort(event_a, visitors * 2, sizeof(Event_s), comp);
int queue = 0;
std::cout << endl << "Таблица #3" << endl;
cout << setw(9) << " Время " << setw(9) << " # " << setw(9) << " Тип " << setw(9) << " Длина " << setw(10) << " Число " << setw(14) << " Состояние " << setw(15) << "Время простоя" << endl;
cout << setw(9) << "события" << setw(9) << "клиента" << setw(9) << "события" << setw(9) << "очереди" << setw(10) << "клиентов" << setw(14) << "регистраций" << setw(15) << " регистраций " << endl;
for (int i = 0; i < visitors*2; i++) {
if (event_a[i].type == 1) queue++;
else queue--;
cout << setw(9) << event_a[i].time << setw(9) << event_a[i].visitor_ID << setw(9);
if (event_a[i].type == 1)
cout << "Приход";
else
cout << "Уход";
cout << setw(9) << max(0, queue - 1) << setw(10) << queue << setw(14);
if(queue == 0)
cout << "Свободен";
else
cout << "Занят";
cout << setw(15);
if (queue == 0 && i > 0)
cout << event_a[i].time - event_a[i - 1].time;
else
cout << 0;
cout << endl;
}
delete[] visitor_a;
delete[] registration_a;
delete[] event_a;
system("pause");
return 0;
}
Пример работы программы:
Заключение
В данной научной работе мною была запрограммирована имитационная модель поликлинического обслуживания. Программа имитирует работу регистраторов в поликлинике. На основе таблиц, которые выводятся в конце выполнения работы программы, если примерно известно сколько будет посетителей, с каким интервалом они будут прибывать и сколько примерно времени будет обслуживаться каждый посетитель, можно понять сколько регистратур нужно держать открытыми чтобы не возникало очереди и не было простоев регистраторов.
Список литературы
1. Варжапетян А.Г. Имитационное моделирование на GPSS/H. - М.: Вузовская книга, 2004.
2. Карпов Ю.Г. Имитационное моделирование систем. Введение в моделирование с AnyLogic 5.- СПб.: БХВ - Петербург, 2005.
3. Лоу А., Кельтон В. Имитационное моделирование. Классика CS - 3-е издание / Аверилл М.Лоу, В.Дэвид Кельтон. - СПб.: Питер, Издательская группа ВНV. 2004.
4. Лычкина Н.Н. Имитационные модели в процедурах и системах поддержки принятия стратегических решений на предприятия - ГУУ - ВШЭ, «Бизнес-информатика», № 1, М.,2007 г.
Размещено на Allbest.ru
Подобные документы
Создание математической модели системы массового обслуживания на примере банка. Разработка имитационной модели на языке программирования С++. Блок-схема программы, перевод модели на язык программирования. Верификация и валидация имитационной модели.
курсовая работа [630,5 K], добавлен 01.06.2015Определение назначения и описание функций имитационных моделей стохастических процессов систем массового обслуживания. Разработка модели описанной системы в виде Q-схемы и программы на языке GPSS и C#. Основные показатели работы имитационной модели.
курсовая работа [487,4 K], добавлен 18.12.2014Общая характеристика системы массового обслуживания, исходные данные для ее создания. Особенности построения алгоритма имитационной модели задачи о поступлении заявок (клиентов) в канал (парикмахерскую). Описание функционирования математической модели.
курсовая работа [154,1 K], добавлен 19.05.2011Практические навыки системного исследования реальной динамической сложной системы на основе построения ее имитационной модели. Автоматизация работы по расчету эффективности системы массового обслуживания с понятным интерфейсом. Выбор алгоритма решения.
курсовая работа [1,0 M], добавлен 18.08.2009Построение имитационной модели и метод решения задач, при использовании которого исследуемая система заменяется более простым объектом, описывающим реальную систему. Имитационная модель компьютерной программы, её значение при решении моделируемых задач.
курсовая работа [343,1 K], добавлен 04.06.2012Построение имитационной модели системы массового обслуживания, список и содержание ее активностей. Блок-схема алгоритма моделирования и текст процедуры. Моделирование случайных независимых величин и процессов. Оптимизация системы массового обслуживания.
курсовая работа [4,0 M], добавлен 28.05.2013Построение имитационной модели системы массового обслуживания в среде Borland Delphi 7.0 с учетом того, что параметры модели – детерминированные величины. Моделирование случайных независимых величин и процессов. Оптимизация системы массового обслуживания.
курсовая работа [1,4 M], добавлен 28.05.2013Оптимальное время для обслуживания пользователей как основная цель работы компьютерного зала библиотеки. Построение модели деятельности подписного отдела с помощью средства имитационного моделирования AnyLogic. Описание процессов и построение сценария.
курсовая работа [1,9 M], добавлен 19.06.2015Имитационное моделирование деятельности "Центра обслуживания абонентов". Диаграммы потоков данных. Выявление вариантов использования. Моделирование видов деятельности и взаимодействий. Проектирование пользовательского интерфейса и архитектуры приложения.
дипломная работа [1,3 M], добавлен 24.10.2010Терминологическая база для построения модели, имитирующей работу маршрутных микроавтобусов. Обоснование выбора программного средства. Алгоритм работы имитационной модели, особенности ее функционирования. Анализ результатов работы имитационной модели.
курсовая работа [1,1 M], добавлен 29.04.2014