Методы для работы с расписанием

Вы можете работать с расписанием программно с помощью соответствующих функций класса 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() - создает новое расписание, не содержащее данных.

Добавление интервалов - addInterval()

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 - день недели, соответствующий началу интервала
endWeek - неделя окончания интервала
endDayOfWeek - день недели, соответствующий окончанию интервала

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

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

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

Параметры:
weekDays - массив дней недели для создания интервалов

void addInterval(long start, long end, V value) - добавляет к данному расписанию заданный временной интервал.

Параметры:
start - время начала интервала, в миллисекундах, от момента старта модели
end - время окончания интервала, в миллисекундах, от момента старта модели

Добавление ключевых моментов времени - addMoment()

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 - день, соответствующий ключевому моменту времени

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

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

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

Параметры:
time - время ключевого момента, в миллисекундах, от момента старта модели
value - значение, определяемое расписанием, в ключевой момент времени

Добавление исключений - addException()

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) - задает время начала расписания.

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 - период повторения цикличности, в миллисекундах, заданной в расписании. В качестве значения всегда применяется указанное значение - если calendarType равен false или скорректированное в момент перевода времени на зимнее или летнее время - если true. При этом 1000*60*60*24 миллисекунд означает один день независимо от перевода времени на зимнее или летнее время.

Задание режима многопоточности - setThreadMode()

void setSingleThreadMode(boolean singleThreadMode) - Задает режим многопоточности.

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

Задание единиц модельного времени расписания - setTimeUnits()

void setTimeUnits(long timeUnits) - Задает единицы модельного времени расписания.

Параметры:
timeUnits - единицы модельного времени расписания, одна из констант единиц модельного времени (TIME_UNIT_DAY, TIME_UNIT_WEEK). В режиме календаря в качестве единиц модельного времени поддерживаются только дни и недели.

Cоздание и инициализация расписания с помощью единственного конструктора - не рекомендуется
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.

См. также

 Расписание

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

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

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

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

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