AnyLogic предоставляет пользователям специальный элемент — Расписание, с помощью которого вы можете задать цикличность, согласно которой значение какой-то величины изменяется с ходом времени.
Часто этот объект используется для задания:
- Расписания работы (доступности) ресурсов в объекте ResourcePool.
- Времен создания или же цикличности изменения интенсивности создания агентов в объекте Source.
- Времен создания или же цикличности изменения интенсивности появления пешеходов в объекте PedSource.
Кроме того, вы можете просто задать расписание и не используя его в объектах библиотек AnyLogic, работать с ним программно, узнавая значение задаваемой расписанием величины в любые моменты времени с помощью соответствующих функций.
Расписание может работать в одном из двух режимов: задание интервалов времени или задание моментов времени.
Первый режим (интервалы) обычно используется для задания того, как значение какой-то величины непрерывно меняется во времени (обычно — с определенной цикличностью). В данном случае в любой момент времени задаваемая расписанием величина будет иметь какое-то значение. С помощью интервалов задаются и расписания работы смен рабочих, и изменение интенсивности создания агентов или пешеходов, и многое другое.
Второй (моменты времени) используется тогда, когда задается последовательность ключевых моментов, которым соответствуют заданные для них значения (или выполняются заданные действия, см. абзац ниже). Пример — расписание прибытия поездов: в моменты прибытия в пешеходной модели железнодорожного вокзала на перроне появляется заданное расписанием количество пассажиров.
Кроме того, вы можете связать с ключевыми моментами расписания (как с моментами, так и с временами смены интервалов) действия, введя любой нужный вам код в секции Действие расписания. Действие будет исполняться в эти ключевые моменты, позволяя пользователям тем самым использовать расписание в том числе и как совершенный элемент для планирования неограниченного количества событий в заданные моменты времени (возможно, привязанные к календарным датам и временам).
Расписание может задавать изменение значения одного из трех типов:
- Логическое (тип да/нет) — это может быть, например, статус доступности какого-то ресурса.
- Целое значение — например, количество рабочих в смене; количество агентов или пешеходов, поступающих в систему в заданные моменты времени.
- Вещественное значение — например, среднечасовая интенсивность появления агентов или пешеходов.
- Интенсивность — расписание задает временной паттерн для интенсивности прибытия агентов или пешеходов (когда в блоке Source / PedSource выбрана опция Прибывают согласно: Расписанию интенсивностей). Укажите значения интенсивности в таблице, которая появляется в свойствах расписания при выборе этой опции, и выберите единицы измерения в параметре Единица измерения (в секунду, в минуту, и т.д.)
Элемент поддерживает три различных представления расписания:
- Неделя — Используйте это представление, если расписание имеет недельную цикличность, например, если вам нужно задать недельный график работы служащих: с понедельника по пятницу с 09:00 до 18:00, с перерывом на обед с 13:00 до 14:00.
- Дни/Недели — Режим Дни/Недели обычно используется для задания расписаний, которые задаются как календарные времена и даты, но имеют цикличность, отличную от недельной. Например, с его помощью можно задать расписание работы смены «два рабочих дня через два выходных» (цикл такого расписания — четыре дня). Еще один пример — изменение интенсивности появления пешеходов в течение дня (цикл — день).
- Другая (нет привязки к календарю) — В этом представлении нет привязки к календарным датам и времени. Интервалы (или моменты времени) расписания задаются просто как количество выбранных единиц времени (это могут быть миллисекунды, секунды, минуты, часы, дни, недели) от момента старта модели. Данный режим удобен, например, для задания режима работы (периодов функционирования, проведения планового ТО, выхода из строя и т.д.) различных устройств. Расписание задается в этом представлении в том случае, если важны только длительности интервалов, а не их календарное время.
В целом расписание задается похожим образом во всех трех представлениях: вы выбираете тип значения, которое будет определяться этим расписанием (да/нет, целое или вещественное), а затем задаете интервалы времени (или просто моменты времени, в зависимости от выбранного режима) и указываете, какое значение будет соответствовать каждому такому интервалу/моменту. Задав завершенный цикл таких интервалов, вы можете указать, через какое время он должен будет повториться.
Но поскольку задание расписания в разных представлениях все же несколько отличается, то мы решили описать каждый такой случай отдельно, попутно рассмотрев сразу несколько разных способов применения расписаний:
Задание расписания работы банковского отделения (длительность — Неделя)
Задание расписания рабочей смены «два через два» (длительность — 4 дня, режим Дни/Недели)
Задание расписание проведения ТО устройства (длительность — Другая, нет привязки к календарю)
- Основные
-
Имя — Имя расписания. Используется для идентификации элемента и для ссылки на него из свойств объектов, кода и т.п.
Отображать имя — Если опция выбрана, то имя расписания будет отображаться в графическом редакторе.
Исключить — Если опция выбрана, то расписание будет исключено из модели.
Видимость — Если опция выбрана, то значок расписания будет отображаться на презентации во время выполнения модели.
- Данные
-
Тип — Тип задаваемого расписанием значения: логическое (да/нет), целое или вещественное.
Расписание задает — Здесь вы можете выбрать режим расписания - задает ли оно Интервалы (Начало, Конец), или же дискретные Моменты времени.
Режим Интервалы (Начало, Конец) обычно используется для задания того, как значение какой-то величины непрерывно меняется во времени (обычно - с определенной цикличностью). В данном случае в любой момент времени задаваемая расписанием величина будет иметь какое-то значение.
Режим Моменты времени используется тогда, когда задается последовательность ключевых моментов, которым соответствуют заданные для них значения (или выполняются заданные действия).Длительность — Здесь вы выбираете тип длительности расписания: Неделя, Дни/Недели или Другая (нет привязки к календарю). В зависимости от выбранного типа длительности будет меняться и способ задания интервалов расписания в приведенной ниже таблице.
Неделя — Используйте это представление, если расписание имеет недельную цикличность, например, если вам нужно задать недельный график работы.
Дни/Недели — Используйте это представление для задания расписаний, которые задаются как календарные времена и даты, но имеют цикличность, отличную от недельной — определенное количество дней или недель.
Другая (нет привязки к календарю) — В этом представлении нет привязки к календарным датам и времени. Интервалы (или моменты времени) расписания задаются просто как количество выбранных единиц времени от момента старта модели. Расписание задается в этом представлении в том случае, если важны только длительности интервалов, а не их календарное время.
В расположенном ниже поле Повторять каждые вы должны будете выбрать единицы модельного времени (это могут быть миллисекунды, секунды, минуты, часы, дни, недели), в которых будет задано расписание (и длительность этого расписания).Значение по умолчанию — [Виден, если выбрана опция Расписание задает: Интервалы (Начало, Конец)] Значение, которое будет приниматься по умолчанию для не заданных в данном расписании интервалов времени.
Повторять каждые — [Виден, если выбрана Длительность: Дни/Недели или Другая (нет привязки к календарю)] Здесь вы можете задать длительность (цикличность) расписания — выбрать, через сколько единиц времени расписание должно будет повториться.
Привязать к — [Виден, если выбрана Длительность Дни/Недели или Другая (нет привязки к календарю)] Если вы хотите, чтобы при старте модели расписание начинало применяться не с начального, а с какого-то другого момента, то здесь вы можете задать значение модельного времени, которому будет соответствовать момент начала расписания. Обратите внимание, что расписание при этом будет применяться все так же со стартом модели, но уже с другого момента. Это свойство полезно, например, для задания времени первого выхода смены рабочих на работу (в случае задания расписаний для нескольких смен рабочих).
Неделя начинается с — [Виден, если выбрана Длительность: Дни/Недели и в опции Повторять каждые выбраны недели] Здесь вы можете явно задать, какой день недели является первым днем для задаваемого расписания. Эта опция имеет смысл только тогда, когда длительность расписания составляет несколько недель. Дело в том, что в одних странах (например, России) первым днем недели считается понедельник, а в некоторых других (например, США) — воскресенье. Поэтому если вы зададите расписание с длительностью в несколько недель с учетом того, что первый день недели — понедельник, и потом перешлете модель в страну, где первым днем считается воскресенье, то расписание будет интерпретироваться не так, как это нужно. Поэтому если ожидается использование вашей модели в других странах, рекомендуется явно задавать, какой день недели является первым днем для задаваемого расписания.
Загружается из базы данных — [Виден, если выбрана Длительность Дни/Недели или Другая (нет привязки к календарю)] Позволяет загрузить данные из существующей базы данных AnyLogic, если опция отмечена.
Таблица — здесь необходимо указать существующую базу данных AnyLogic.
Условия выборки — здесь необходимо указать условие, определяющее значение, которое будет выбрано из указанного столбца таблицы. Вы можете добавить , дублировать , удалить и определить порядок условий ( , ).
Начальный столбец — определяет начальный столбец базы данных.
Конечный столбец — определяет конечный столбец базы данных.
Столбец значений — определяет столбец значений базы данных. - Действие
-
В этом поле вы можете ввести Java код, который будет выполняться в ключевые моменты расписания (времена смены интервалов, либо заданные моменты времени, в зависимости от выбранного режима). Возможность задания таких действий позволяет использовать расписание в том числе и как совершенный элемент для планирования неограниченного количества событий в заданные моменты времени (возможно, привязанные к календарным датам и временам).
- Исключения
-
На этой странице вы можете задать исключения в расписании - интервалы времени, в которые задаваемая расписанием величина должна иметь значения, отличные от предписываемых расписанием.
- Предв. просмотр
-
На этой странице вы можете просмотреть, как будет выглядеть заданное вами расписание, возможно, в наиболее удобном и привычном для восприятия виде, принятом в электронных ежедневниках и органайзерах:
- Специфические
-
Единицы измерения (сист. динамика) — Если опция выбрана, то вы можете задать единицы измерения для возвращаемого расписанием значения.
В некоторых странах производится переход на зимнее и летнее время — в определенные дни года часы переводятся на час (или несколько) назад и вперед соответственно. Причем как даты, так и количество часов, на которое переводятся часы, в разных странах — разные (даты также меняются от года к году).
AnyLogic автоматически учитывает такие переходы в расписаниях. При этом информация о датах переходов в данной стране берется из свойств операционной системы (учитывается Текущее расположение пользователя).
- Если расписание ссылается на календарные даты (длительность Неделя или Дни/Недели), и, например, согласно вашему расписанию ресурс работает в ночную смену, с 00:00 до 08:00, то в день перехода на зимнее время он будет фактически работать вместо восьми часов — девять, и аналогично при переходе на летнее — всего семь, но все так же будет продолжать работать по расписанию 00:00-08:00.
- А теперь рассмотрим схожее расписание, заданное без привязки к календарю. В этом случае заданные в таблице интервалы будут всегда иметь четко заданную длительность. Если модель с таким расписанием стартует со времени 00:00 какого-то дня, то в ночь перехода на летнее время ресурс будет работать все те же восемь часов, но после этого его рабочее время сместится с 00:00-08:00 на 01:00-09:00, и вернется к первоначальному только при обратном переводе стрелок часов.
-
Как мы можем улучшить эту статью?
-