AnyLogic
Развернуть
Размер шрифта

Задание недельного расписания

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

Пусть отделение работает с понедельника по субботу с девяти часов утра до восьми вечера, с перерывом на обед с двух часов дня до трех; воскресенье — нерабочий день.

Задайте расписание с недельной длительностью

  1. Перетащите элемент Расписание  из палитры Агент на диаграмму типа агентов.

  2. Перейдите в панель Свойства.
  3. Задайте имя расписания в поле Имя. По этому имени вы будете ссылаться на это расписание в свойствах объекта(ов) или программно из кода вашей модели.
  4. Перейдите в секцию Данные и выберите тип значения, задаваемого этим расписанием: да/нет, целое или вещественное. Поскольку нам нужно задать лишь изменение статуса (доступен или недоступен) управляемого этим расписанием ресурса (банковские служащие), то оставьте в строке Тип значения выбранной опцию да/нет.
  5. Поскольку мы хотим задавать значения не для каких-то отдельно взятых моментов, а для интервалов времени, оставьте в секции Расписание задает выбранной опцию Интервалы (Начало, Конец).
  6. Выберите подходящий для вашей задачи режим задания расписания, основываясь на длительности этого расписания — Неделя, Дни/Недели или Другая (нет привязки к календарю) и задайте расписание в выбранном вами режиме. Поскольку наше расписание имеет недельную длительность, то и задавать его будет удобнее в режиме Неделя.
  7. В поле Значение по умолчанию вы можете задать значение, которое будет использоваться расписанием для тех интервалов времени, которые не будут покрыты этим расписанием. Оставьте в качестве значения по умолчанию значение нет:

  8. Задайте интервалы работы в расположенной ниже таблице. В нашем случае можно выделить два интервала — дообеденное время с девяти утра до двух часов дня и послеобеденное время работы — с трех до восьми. Каждый интервал задается в отдельной строке таблицы. Добавьте новую строку, щелкнув по кнопке справа от таблицы.

  9. Вы увидите, что по умолчанию в только что добавленной строке уже будут выбраны будние дни — в ячейках с понедельника по пятницу будут стоять галочки. Эти галочки означают, что заданный в этой строке интервал будет применен именно к этим, выбранным, дням. Поскольку мы задаем этот интервал для всех дней недели, кроме воскресенья, то нужно будет добавить в список дней еще и субботу. Чтобы поменять статус для какого-то дня недели, нужно сделать щелчок мышью в соответствующей ячейке строки (в нашем случае — в ячейке Сб).

  10. Теперь нужно задать для этих дней интервал рабочего времени, соответствующий дообеденному времени работы. Выберите 09:00 в ячейке Начало и 14:00 в ячейке Конец этой строки. В качестве значения оставьте статус да, поскольку нам нужно, чтобы в заданный интервал времени управляемый этим расписанием ресурс был доступен.

    Обратите внимание, что если вы не выберете в строке ни одного дня, то вы не сможете добавить в таблицу новую строку.
  11. Теперь давайте зададим послеобеденное время работы для этих же дней. Для этого мы добавим в таблицу еще одну строку (при этом вы увидите, что в новой строке будут выбраны те же дни, что и в предыдущей, то есть, снова добавлять к списку субботу уже не понадобится) и зададим в качестве начала и конца этого нового интервала значения 15:00 и 20:00.

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

Обратите внимание, что здесь мы задали только те интервалы времени, в которые служащие будут работать. Необходимости отдельно задавать интервал, соответствующий обеденному перерыву, нет, поскольку мы выбрали значение нет в качестве значения по умолчанию, и именно это значение будет использоваться расписанием в интервале с двух часов дня до трех, поскольку это время явно не указано в таблице интервалов.

Теперь, когда мы закончили создание расписания, вы можете посмотреть на странице свойств расписания Предв. просмотр, как выглядит заданное вами расписание. Таким образом вы можете, например, проверить, не были ли случайно допущены ошибки при задании расписания, и соответствует ли получившаяся картина ожидаемой. Более подробно предварительный просмотр расписания описан здесь.

Значение порядка следования интервалов в таблице

Обратите внимание, что если несколько интервалов относится к одному и тому же времени, то заданный ниже интервал будет переопределять интервалы, заданные в таблице выше.

  • К примеру, мы могли бы задать расписание из приведенного примера по-другому — вначале задав весь интервал рабочего времени, а уже потом задав интервал, соответствующий уходу служащих на обеденный перерыв:

    Поскольку здесь интервал 14:00 - 15:00 задан после интервала 09:00 - 20:00, то он будет его переопределять, в итоге получится нужная нам картина (ее можно посмотреть на странице свойств расписания Предв. просмотр):

  • А вот если бы интервалы были заданы в следующем порядке (см. рисунок ниже), то они бы задавали совершенно другое расписание:

Напоследок мы можем дать совет: если вы боитесь ошибиться с тем, в каком порядке следует задавать интервалы, то пользуйтесь подходом, который мы и использовали при задании расписания в этом примере, когда все интервалы задаются явно, в их естественной последовательности (09:00 - 14:00, 15:00 - 20:00).

При необходимости вы можете удалять заданные интервалы и перемещать их по таблице вверх и вниз (при этом вы должны будете сами следить за тем, чтобы заданное в таблице расписание было целостным). Это можно сделать, предварительно выделив нужную вам строку в таблице и затем воспользовавшись расположенными справа от таблицы кнопками соответственно.

Задание праздников

Если ваше расписание имеет привязку к календарным датам (имеет длительность Неделя или Дни/Недели), то вы также можете задавать исключения — особые интервалы времени, в которые задаваемая расписанием величина должна иметь значения, отличные от предписываемых расписанием.

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

Задайте праздники

  1. Выделите расписание и перейдите в секцию свойств Исключения.
  2. Поскольку в праздники магазин будет работать не по какому-то особому (укороченный день и т.п.) расписанию, а просто не будет работать целый день, то мы можем выбрать опцию Весь день, и вместо задания времен начала и конца исключительного интервала просто указать те дни, когда магазин работать не будет. Давайте зададим, например, праздники 1, 2 и 3 января, 23 февраля, 8 марта и 9 мая.
  3. Задание исключений производится аналогично заданию самого расписания: добавляйте новые строки в таблицу щелчком по кнопке и выбирайте нужный вам день в столбце День с помощью элемента выбора даты. Поскольку эти праздники будут праздноваться в одни и те же дни из года в год, то оставьте выбранным флажок в столбце Ежегодно. В качестве значения логично будет выбрать нет.

Более подробно задание исключений в расписании описано здесь.

Применение расписания в объекте ResourcePool

Если вы задаете расписание работы (доступности) ресурсов, то вы должны соответствующим образом изменить свойства объекта ResourcePool, задающего эти ресурсы. Для этого:

  1. Выделите нужный вам объект ResourcePool и перейдите в панель Свойства.
  2. Выберите из выпадающего списка Количество задано опцию Расписанием доступности.
  3. Введите имя ранее созданного расписания в расположенном ниже поле Расписание доступности или выберите требуемое расписание из выпадающего списка (при вводе имени вы можете пользоваться Мастером подстановки кода).
  4. Теперь задаваемые этим объектом ресурсы будут работать согласно созданному нами расписанию.

Если количество работающих (доступных) ресурсов может меняться (тип значения расписания не да/нет, а целое), то в таком случае нужно будет выбрать из выпадающего списка Количество задано опцию Расписанием, и все так же ввести имя расписания в расположенном ниже поле Расписание.

Как мы можем улучшить эту статью?