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

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

Пример модели: Schedule Created Programmatically

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

Получение значения - 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.


См. также

Расписание

Недельное расписание

Расписание с длительностью в несколько дней или недель

Расписание без привязки к календарю

Исключения в расписании

Предварительный просмотр расписания