Имитационная модель системы поликлинического обслуживания

В качестве примера имитационной модели выбрана ситуация в поликлинике, когда регистраторы обслуживают клиентов, записывая их к врачу. Время прибытия и время обслуживания каждого клиента. Использование языка программирования 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.