Навигация:  МОДУЛЬ "КОЕЧНЫЙ ФОНД" > РАЗМЕЩЕНИЕ ПАЦИЕНТОВ В САНАТОРИИ > Автоматическое бронирование >

Приложение 1. Алгоритм поиска свободных мест/номеров

Предыдущая страницаВернуться в начало главыСледующая страница

·Система последовательно перебирает все номера/места, удовлетворяющие заданным критериям поиска.

·Для каждого места (в случае с номером последовательно перебираются все места номера) система должна создать список непрерывных дырок.

Дырка – это интервал, возможно ограниченный спереди и/или сзади бронями, который полностью или частично находится в интервале предполагаемого периода заезда.

Остаток – это интервал/интервалы, оставшиеся после бронирования места внутри дырки.

·Исключаются дырки с длиной, меньшей, чем заданное количество дней проживания.

Для каждой найденной дырки система должна найти наиболее оптимальные варианты заезда, т.е. найти варианты с максимальным весом.

Вес варианта определяется как сумма весов следующих критериев:

a)Остаток от дырки (слева и справа) должен полностью заполняться одним из типовых периодов (с учетом дней недели). В этом случае вес периода остатка = весу типового периода. Если количество свободных дней больше параметра Максимальный типовой период или ни один из типовых периодов не подходит, то вес периода остатка =0. В этом случае будет работать только вес типового дня недели.

b)Остаток от дырки должен начинаться и заканчиваться типовым днем недели. Соответственно вес типового дня остатка = вес типового дня недели начала и окончания остатка/2. Если в меню Услуги / Параметры, вкладка Койкофонд (рис.17) не заданы веса для типовых дней заезда, то они считаются равными нулю.

c)Общий вес остатка = вес периода + вес типового дня остатка. В случае если остаток = 0 дней (бронь прижата к другой брони), то вес такого остатка = максимально возможный вес типового периода + максимально возможный вес типового дня + 1. Максимально возможный вес типового периода = 10, максимально возможный вес типового дня = 10.

d)Общий вес варианта = сумма весов остатков (левый + правый) / 2.

e)В том случае, если слева и справа остатков нет, то вес такого варианта будет максимальным (дырка полностью заполняется бронью).

f)Рассчитывается вес варианта в процентах (процент округляется до целого):
100*вес варианта / максимальный вес.

Алгоритм перебора вариантов для дырки:

a)Система перебирает все дни из периода предполагаемого заезда и для каждого дня рассчитывает вес варианта.

b)Результаты функции поиска вариантов для отдельных мест запоминаются в двумерный массив (таблицу).

c)Затем система отбирает из полученных вариантов те, которые имеют максимальные веса, и добавляет их в результирующий список, отсортированный по весам вариантов.

В результате система предоставляет пользователю список из N наиболее оптимальных вариантов.

Рассмотрим работу описанного выше алгоритма на конкретном примере. Пусть требуется подобрать для пациента одноместный номер повышенной комфортности (люкс). Сделать это можно так: открываем меню Койкофонд/Автоматическое бронирование, в окне фильтра задаём необходимые параметры и нажимаем применить (рис. 7.5).

 Рисунок 7.5. Окно фильтра


Рисунок 7.5. Окно фильтра

272

Допустим, заезд предполагается в интервале с 30 ноября по 16 декабря, сроком на 2 дня. Задаём это в параметрах автоматического бронирования и нажимаем кнопку Перестроить список вариантов в левом верхнем углу окна (рис. 7.6).

В результате программа выдаёт некоторый набор вариантов расселения.

 Рисунок 7.6. Окно автоматического бронирования


Рисунок 7.6. Окно автоматического бронирования

Проанализируем, почему выбраны именно эти варианты, а также по какой причине одни из них имеют больший вес, чем другие. Для этого открываем меню Койкофонд / Планировщик, в окне фильтра задаём необходимые параметры (рис. 7.7).

 Рисунок 7.7. Параметры фильтра для планировщика


Рисунок 7.7. Параметры фильтра для планировщика

После нажатия кнопки Применить открывается окно планировщика (рис. 7.8).

 Рисунок 7.8. Окно планировщика


Рисунок 7.8. Окно планировщика

В промежутке с 30 ноября по 16 декабря в этих номерах уже есть несколько броней. Именно из тех свободных интервалов, что мы видим на рис. 7.8, программа формирует список непрерывных дырок, причём каждая дырка имеет длину не менее чем срок заезда (2 дня). Очевидно, что таких дырок четыре: первая дырка в комнате “102-тер” во временном интервале с 1 по 2 декабря, вторая дырка в интервале с 7 по 8 декабря, третья дырка в интервале с 14 по 16 декабря и дырка в комнате “204-кард” во временном интервале с 1 по 16 декабря. Первая дырка ограничена с левой стороны началом периода заезда, а с правой стороны бронью, вторая дырка ограничена с обеих сторон бронями, третья дырка ограничена с левой стороны бронью, а с правой стороны окончанием периода предполагаемого заезда. Последняя (четвёртая) дырка ограничена с левой стороны бронью, а с правой стороны окончанием периода предполагаемого заезда.

Наибольший вес (100) при автоматическом бронировании программа отдала такому варианту: дата заезда 7.12.2008, дата выезда 8.12.2008. Забронируем этот вариант и снова перейдём в окно планировщика (рис. 7.9).

 Рисунок 7.9. Окно планировщика после бронирования


Рисунок 7.9. Окно планировщика после бронирования

Последовательно пройдёмся по всем пунктам определения веса этого варианта:

a)Остаток от дырки (слева и справа) должен полностью заполняться одним из типовых периодов (с учетом дней недели). В этом случае вес периода остатка = весу типового периода. Если количество свободных дней больше параметра Максимальный типовой период или ни один из типовых периодов не подходит, то вес периода остатка = 0. В этом случае будет работать только вес типового дня недели.

У нас нет ни одного типового периода, поэтому вес обоих периодов остатков равен нулю.

b)Вес типового дня остатка = вес типового дня недели начала и окончания остатка/2.

Так как в нашем случае не заданы веса для типовых дней заезда, то они считаются равными нулю. И, поэтому, вес типового дня остатка слева = весу типового дня остатка справа = 0.

c)Общий вес остатка = вес периода + вес типового дня остатка. В случае, если остаток = 0 дней (бронь прижата к другой брони), то вес такого остатка = максимально-возможный вес типового периода + максимально-возможный вес типового дня + 1.

Общий вес остатка слева = 10+10+1 = 21.

Общий вес остатка справа = 10+10+1 = 21.

d)Общий вес варианта = сумма весов остатков (левый + правый) / 2 = (21+21) / 2 = 21.

e)Вес варианта в процентах = 100*21 / 21 = 100.

Следующие три предложенных варианта имеют одинаковый вес (50), так как они все прижаты с одной стороны к другой брони и поэтому равнозначны.