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

Функции для работы с расписанием

Вы можете работать с расписанием программно с помощью соответствующих функций класса Schedule.

Демо-модель: Schedule Created Programmatically Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Получение значений расписания

Получение значения - getValue()
Функция Описание
<ValueType> getValue() Возвращает значение, соответствующее текущей модельной дате.
<ValueType> getValue(double time) Возвращает значение, соответствующее заданному модельному времени (time).
<ValueType> getValue(double time, TimeUnits units) Возвращает значение, соответствующее заданному модельному времени (time). Момент времени задается как количество определенных единиц времени (минуты, часы и т.д.). Например, getValue(9, TIME_UNIT_HOUR) возвращает значение расписания для модельного времени: 9 часов.

time - количество единиц времени
units - одна из констант единиц модельного времени (TIME_UNIT_MINUTE, TIME_UNIT_HOUR, и т.д.)
<ValueType> getValue(Date date) Возвращает значение, соответствующее заданной модельной дате (date).
Получение таймаута до следующего ключевого момента времени - getTimeoutToNextValue()
Функция Описание
double getTimeoutToNextValue() Возвращает таймаут (в единицах модельного времени) от текущего момента времени до следующего ключевого события расписания.
double getTimeoutToNextValue(double time) Возвращает таймаут (в единицах модельного времени) от заданного момента времени time до следующего ключевого события расписания.
double getTimeoutToNextValue(Date date) Возвращает таймаут (в единицах модельного времени) от заданной даты date до следующего ключевого события расписания.
Получение времени следующего ключевого момента - getTimeOfNextValue()
Функция Описание
double getTimeOfNextValue() Возвращает время следующего за текущим временем ключевого момента расписания.
double getTimeOfNextValue(double time) Возвращает время следующего за заданным моментом времени time ключевого момента расписания.
double getTimeOfNextValue(Date date) Возвращает время следующего за заданной датой date ключевого момента расписания.
Получение даты следующего ключевого момента - getDateOfNextValue()
Функция Описание
Date getDateOfNextValue() Возвращает дату следующего за текущим временем ключевого момента расписания.
Date getDateOfNextValue(double time) Возвращает дату следующего за заданным моментом времени time ключевого момента расписания.
Date getDateOfNextValue(Date date) Возвращает дату следующего за заданной датой date ключевого момента расписания.
Получение следующего значения - getNextValue()
Функция Описание
<ValueType> getNextValue() Возвращает значение, соответствующее следующему за текущим временем ключевому моменту расписания.
<ValueType> getNextValue(double time) Возвращает значение, соответствующее следующему за заданным моментом времени time ключевому моменту расписания.
<ValueType> getNextValue(double time, TimeUnits units) Возвращает значение, соответствующее следующему за за заданным моментом времени time ключевому моменту расписания. Момент времени задается как количество определенных единиц времени (минуты. часы и т.д.). Например, getValue(9, HOUR) возвращает значение расписания для модельного времени: 9 часов.

time - количество единиц времени
units - одна из констант единиц модельного времени (TIME_UNIT_MINUTE, TIME_UNIT_HOUR, и т.д.)
<ValueType> getNextValue(Date date) Возвращает значение, соответствующее следующему за заданной датой date ключевому моменту расписания.
Получение единиц модельного времени расписания - getTimeUnits()
Функция Описание
long getTimeUnits() Возвращает единицы модельного времени расписания (одну из констант единиц модельного времени (TIME_UNIT_MINUTE, TIME_UNIT_HOUR, и т.д.)).

Создание и инициализация расписания программно при старте модели

Создание пустого расписания (не содержащего каких-либо данных) с помощью простого конструктора
Функция Описание
new Schedule() Создает новое расписание, не содержащее данных. Вы можете указать тип значения, который будет использоваться расписанием:
new Schedule<Boolean>() - логическое расписание, тип "да/нет"
new Schedule<Integer>() - целое значение
new Schedule<Double>() - вещественное значение
new ScheduleWithUnits(units) Создает новое расписание типа Интенсивность с заданными единицами измерения интенсивности.

startWeek - неделя начала интервала
Добавление интервалов - addInterval()
В зависимости от создаваемого вами расписания, используйте аргумент value в следующих функциях, чтобы передать значение соответствующего типа. Например, при создании расписания "да/нет", передавайте значение типа boolean, чтобы указать, какой интервал вы задаете. Для интервала "да" передавайте значение true, для интервала "нет" - значение false.
Функция Описание
void addInterval(int startWeek, int startDayOfWeek, int startHour, int startMinute, int startSecond, int endWeek, int endDayOfWeek, int endHour, int endMinute, int endSecond, V value) Добавляет к данному расписанию заданный временной интервал.

startWeek - неделя, соответствующая началу интервала
startDayOfWeek - день недели, соответствующий началу интервала
startHour - час, соответствующий началу интервала
startMinute - минута, соответствующая началу интервала
startSecond - секунда, соответствующая началу интервала
endWeek - неделя, соответствующая окончанию интервала
endDayOfWeek - день недели, соответствующий окончанию интервала
endHour - час, соответствующий окончанию интервала
endMinute - минута, соответствующая окончанию интервала
endSecond - секунда, соответствующая окончанию интервала
value - значение, определяемое расписанием, в заданном интервале
void addInterval(int startDay, int startHour, int startMinute, int startSecond, int endDay, int endHour, int endMinute, int endSecond, V value) Добавляет к данному расписанию заданный временной интервал.

startDay - день, соответствующий началу интервала
startHour - час, соответствующий началу интервала
startMinute - минута, соответствующая началу интервала
startSecond - секунда, соответствующая началу интервала
endDay - день, соответствующий окончанию интервала
endHour - час, соответствующий окончанию интервала
endMinute - минута, соответствующая окончанию интервала
endSecond - секунда, соответствующая окончанию интервала
value - значение, определяемое расписанием, в заданном интервале
void addInterval(int startHour, int startMinute, int startSecond, int endHour, int endMinute, int endSecond, V value) Добавляет к данному расписанию заданный временной интервал.

startHour - час, соответствующий началу интервала
startMinute - минута, соответствующая началу интервала
startSecond - секунда, соответствующая началу интервала
endHour - час, соответствующий окончанию интервала
endMinute - минута, соответствующая окончанию интервала
endSecond - секунда, соответствующая окончанию интервала
value - значение, определяемое расписанием, в заданном интервале
void addInterval(int startHour, int startMinute, int startSecond, int endHour, int endMinute, int endSecond, V value, int[] weekDays) Добавляет к данному расписанию заданный временной интервал.

startHour - час, соответствующий началу интервала
startMinute - минута, соответствующая началу интервала
startSecond - секунда, соответствующая началу интервала
endHour - час, соответствующий окончанию интервала
endMinute - минута, соответствующая окончанию интервала
endSecond - секунда, соответствующая окончанию интервала
value - значение, определяемое расписанием, в заданном интервале
weekDays - массив дней недели для создания интервалов
void addInterval(long start, long end, V value) Добавляет к данному расписанию заданный временной интервал.

start - время начала интервала, в миллисекундах, от момента старта модели
end - время окончания интервала, в миллисекундах, от момента старта модели
value - значение, определяемое расписанием, в заданном интервале
Добавление ключевых моментов времени - addMoment()
В зависимости от создаваемого вами расписания, используйте аргумент value в следующих функциях, чтобы передать значение соответствующего типа.
Функция Описание
void addMoment(int week, int dayOfWeek, int hour, int minute, int second, V value) Добавляет к данному расписанию заданный ключевой момент времени.

week - неделя, соответствующая ключевому моменту времени
dayOfWeek - день недели, соответствующий ключевому моменту времени
hour - час, соответствующий ключевому моменту времени
minute - минута, соответствующая ключевому моменту времени
second - секунда, соответствующая ключевому моменту времени
value - значение, определяемое расписанием, в ключевой момент времени
void addMoment(int day, int hour, int minute, int second, V value) Добавляет к данному расписанию заданный ключевой момент времени.

day - день, соответствующий ключевому моменту времени
hour - час, соответствующий ключевому моменту времени
minute - минута, соответствующая ключевому моменту времени
second - секунда, соответствующая ключевому моменту времени
value - значение, определяемое расписанием, в ключевой момент времени
void addMoment(int hour, int minute, int second, V value) Добавляет к данному расписанию заданный ключевой момент времени.

hour - час, соответствующий ключевому моменту времени
minute - минута, соответствующая ключевому моменту времени
second - секунда, соответствующая ключевому моменту времени
value - значение, определяемое расписанием, в ключевой момент времени
void addMoment(int hour, int minute, int second, V value, int[] weekDays) Добавляет к данному расписанию заданный ключевой момент времени.

hour - час, соответствующий ключевому моменту времени
minute - минута, соответствующая ключевому моменту времени
second - секунда, соответствующая ключевому моменту времени
value - значение, определяемое расписанием, в ключевой момент времени
weekDays - массив дней недели для создания моментов
void addMoment(long time, V value) Добавляет к данному расписанию заданный ключевой момент времени.

time - время ключевого момента, в миллисекундах, от момента старта модели
value - значение, определяемое расписанием, в ключевой момент времени
Добавление исключений - addException()
В зависимости от создаваемого вами расписания, используйте аргумент value в следующей функции, чтобы передать значение соответствующего типа.
Функция Описание
void addException(int startYear, int startMonth, int startDay, int startHour, int startMinute, int startSecond, int endYear, int endMonth, int endDay, int endHour, int endMinute, int endSecond, V value, boolean annually) Задает особые интервалы времени, в которые задаваемая расписанием величина должна иметь значения, отличные от предписываемых расписанием.

startYear — год начала интервала
startMonth — месяц начала интервала
startDay — день начала интервала
startHour — час начала интервала
startMinute — минута начала интервала
startSecond — секунда начала интервала
endYear — год окончания интервала
endMonth — месяц окончания интервала
endDay — день окончания интервала
endHour — час окончания интервала
endMinute — минута окончания интервала
endSecond — секунда окончания интервала
value — значение величины, определяемой расписанием, в течение интервала
annually — если параметр равен true, исключение должно происходить ежегодно в выбранную дату / время. Если параметр равен false, исключение должно произойти только в выбранный год.
Задание времени начала расписания - setSnapTo()
Функция Описание
void setSnapTo(int year, int month, int day, int hour, int minute, int second) Задает время начала расписания.

year - год начала расписания
month - месяц начала расписания
day - день начала расписания
hour - час начала расписания
minute - минута начала расписания
second - секунда начала расписания
void setSnapTo(long snapTo) Задает время начала расписания.

snapTo - абсолютная дата (если calendarType==true) или количество миллисекунд, начиная от нулевого модельного времени
Задание типа календаря - setCalendarType()
Функция Описание
void setCalendarType(boolean calendarType) Задает тип календаря.

calendarType - если параметр равен true, то расписание работает с календарными датами. Например, если вы зададите ежедневный интервал 8:00-17:00, то эти времена будут соблюдаться даже в случае перехода на зимнее или летнее время. Если этот параметр равен false, то 1 день будет всегда равен 24*60*60 секунд, что удобно при моделировании физических устройств, функционирующих без привязки к календарным временам.
Задание значения по умолчанию - setDefaultValue()
Функция Описание
void setDefaultValue(V defaultValue) Задает значение по умолчанию, которое будет использоваться расписанием для тех интервалов времени, которые не будут покрыты этим расписанием.

defaultValue - значение, используемое для тех интервалов времени, которые не покрыты этим расписанием
Задание первого дня недели - setFirstDayOfWeek()
Функция Описание
void setFirstDayOfWeek(int firstDayOfWeek) Задает первый день недели.

firstDayOfWeek - первый день недели, этот параметр используется, если calendarType == true и timeUnit == TIME_UNIT_WEEK
Задание объединения интервалов - setGlueIntervals()
Функция Описание
void setGlueIntervals(boolean glueIntervals) Указывает, будут ли объединены интервалы с одним и тем же значением.

glueIntervals - если параметр равен true, то накладывающиеся друг на друга интервалы с одним и тем же значением будут объединены, т.е. два интервала "День 1 18:00-24:00 значение=5" и "День 2 00:00-02:00 значение=5" будут обрабатываться как один интервал "День 1 18:00 - День 2 02:00 значение=5".
Задание цикличности расписания - setPeriod()
Функция Описание
void setPeriod(int period) Задает период повторения цикличности, заданной в расписании.

period - период повторения цикличности, заданной в расписании, в единицах времени, которые задаются с помощью функции setTimeUnit(). В качестве значения всегда применяется указанное значение - если calendarType равен false или скорректированное в момент перевода времени на зимнее или летнее время - если true.
Задание режима многопоточности - setThreadMode()
Функция Описание
void setSingleThreadMode(boolean singleThreadMode) Задает режим многопоточности.

singleThreadMode - этот параметр задает, будет ли расписание работать в одном потоке или же будет использоваться несколькими параллельно выполняющимися потоками. Обычно в качестве значения этого параметра задается true,если расписание задано в классе агента или в эксперименте, не позволяющем параллельное выполнение итераций (например, в простом эксперименте). Если расписание задано в эксперименте, позволяющем параллельное выполнение итераций (оптимизационном эксперименте или эксперименте варьирования параметров), в качестве значения задается false.
Задание единиц модельного времени расписания - setTimeUnits()
Функция Описание
void setTimeUnits(long timeUnits) Задает единицы модельного времени расписания.

timeUnits - единицы модельного времени расписания, одна из констант единиц модельного времени (TIME_UNIT_DAY, TIME_UNIT_WEEK). В режиме календаря в качестве единиц модельного времени поддерживаются только дни и недели.
Создание и инициализация расписания с помощью единственного конструктора - не рекомендуется
Функция Описание
new Schedule<ValueType>(Utilities owner, boolean calendarType, int firstDayOfWeek, long period, long timeUnits, Long snapTo, <ValueType> defaultValue, long[] starts, long[] ends, Object[] values, boolean glueIntervals, boolean[] exceptionsAnnually, boolean singleThreadMode) Пример:

Schedule<Integer> NursePlan = new Schedule<Integer>(this, true, MONDAY, 1L * TIME_UNIT_DAY, TIME_UNIT_DAY, null, 0, varNursePlanTime, null, varNursePlanNumber, false, null, true );

owner - "владелец" расписания - класс агента или эксперимент, в котором находится расписание.

calendarType - если параметр равен true, то расписание работает с календарными датами. Например, если вы зададите ежедневный интервал 8:00-17:00, то эти времена будут соблюдаться даже в случае перехода на зимнее или летнее время.

Если этот параметр равен false, то 1 день будет всегда равен 24*60*60 секунд, что удобно при моделировании физических устройств, функционирующих без привязки к календарным временам.

firstDayOfWeek - первый день недели, этот параметр используется, если calendarType == true и timeUnit == TIME_UNIT_WEEK

period - период повторения цикличности, заданной в расписании, измеренный в миллисекундах. Миллисекунды применяются - если calendarType равен false или допускаются - если true, при этом 1000*60*60*24 миллисекунд означают один день независимо от перевода времени на зимнее или летнее время.

timeUnits - единицы времени расписания, одна из констант единиц модельного времени (TIME_UNIT_MINUTE, TIME_UNIT_HOUR, и т.д.)

snapTo - абсолютная дата (если calendarType==true) или количество миллисекунд, начиная от нулевого модельного времени (если calendarType==false), указывающие на момент времени, к которому следует привязать расписание (в свойствах расписания аналогичный параметр задается в свойстве Привязать к). Этот момент клонируется в обе стороны по временной оси, через периоды повторения расписания. Параметр может быть равен null - в этом случае расписание будет привязано к дате, соответствующей нулевому модельному времени.

defaultValue - значение по умолчанию, которое будет использоваться расписанием для тех интервалов времени, которые не будут покрыты этим расписанием.

starts - массив начальных времен интервалов, измеренных в миллисекундах от начала периода. Миллисекунды применяются - если calendarType равен false или допускаются - если true, при этом 1000*60*60*24 миллисекунд означают один день независимо от перевода времени на зимнее или летнее время. Этот массив может также содержать начальные времена исключительных периодов (см. описание параметра exceptionsAnnually).

ends - массив конечных времен интервалов, описание см. выше у параметра starts.

values - массив значений интервалов.

glueIntervals - если параметр равен true, то накладывающиеся друг на друга интервалы с одним и тем же значением будут объединены, т.е. два интервала "День 1 18:00-24:00 значение=5" и "День 2 00:00-02:00 значение=5" будут обрабатываться как один интервал "День 1 18:00 - День 2 02:00 значение=5".

exceptionsAnnually - массив флагов для исключений (true означает ежегодное исключение, false - единожды случающееся), может быть пустым. Число исключений равно длине массива exceptionsAnnually. Данные об исключениях считываются из массивов starts, ends и values. Эти данные хранятся в конце этих массивов. Обратите внимание, что в случае исключений массивы starts и ends содержат абсолютные даты в виде чисел в формате long (см. Date.getTime()).

singleThreadMode - этот параметр задает, будет ли расписание работать в одном потоке или же будет использоваться несколькими параллельно выполняющимися потоками. Обычно в качестве значения этого параметра задается true, если расписание задано в классе агента или в эксперименте, не позволяющем параллельное выполнение итераций (например, в простом эксперименте). Иначе задается значение false.
Как мы можем улучшить эту статью?