exponenta event banner

События в моделях SimBiology

Обзор

В SimBiology событие является дискретным переходом в значении величины или выражения в модели. Этот дискретный переход происходит, когда настраиваемое условие становится верным. Условием может быть определенное время и/или не зависящее от времени условие. Такие условия определены в Event object.

Триггеры событий

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

Типичные триггеры событий:

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

  • В ответ на состояние или изменения в системе - изменение количеств/значений определенных видов/параметров в ответ на события, которые не привязаны к какому-либо конкретному времени. Например, когда виды A достигает суммы 30 молекулы, удвоенное значение константы скорости реакции k. Или когда температура достигнет 42 °C, ингибировать конкретную реакцию, устанавливая ее скорость реакции равной нулю.

Примечание

В настоящее время события не могут запускаться в момент времени = 0. Тем не менее, вы можете получить событие, чтобы произойти сразу после времени = 0 с помощью time > timeSmall как триггер события, где timeSmall может составлять крошечную долю секунды, например 1,0 пикосекунды.

Функции события

Событие имеет EventFcns свойство, указывающее, что происходит при запуске события. Функции события могут варьироваться от простых до сложных. Например, функция события может:

  • Изменение значений отсеков, видов или параметров.

  • Удвоить значение константы скорости реакции.

Указание триггеров событий

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

Триггер может содержать ключевое слово time и реляционные операторы для запуска события, которое происходит в определенное время во время моделирования. Например, time >= x. Для получения дополнительной информации см. Trigger собственность.

Используйте синтаксис MATLAB ® для записи выражений для триггеров событий. Обратите внимание, что выражение должно быть одной инструкцией MATLAB, которая возвращает логическое выражение. В конце выражения не требуется точка с запятой или запятая. MATLAB использует определенный приоритет оператора для вычисления выражений триггера. Уровни приоритета определяют порядок, в котором MATLAB вычисляет выражение. В пределах каждого уровня приоритета операторы имеют одинаковый приоритет и оцениваются слева направо. Дополнительные сведения об оценке реляционных и логических операторов см. в разделе Реляционные и логические операции.

Некоторые примеры триггеров:

Спусковой механизмОбъяснение
(time >= 5) && (speciesA < 1000)Выполните событие, если выполняется следующее условие:

Время больше или равно 5, и speciesA меньше 1000.

Совет

Использование && (вместо &) вычисляет первую часть выражения на наличие оператора true или false и пропускает оценку второго оператора, если этот оператор false.

(time >= 5) || (speciesA < 1000)Выполните событие, если выполняется следующее условие:

Время больше или равно 5, или если speciesA меньше 1000.

(s1 >= 10.0) || (time >= 250) && (s2 < 5.0E17)Выполните событие, если выполняется следующее условие:

Виды, s1 больше или равно 10.0 или, время больше или равно 250 и виды s2 меньше, чем 5.0E17.

Из-за приоритета оператора выражение обрабатывается так, как если бы оно было (s1 >=10.0) || ((time>= 250) && (s2<5.0E17)).

Таким образом, всегда целесообразно использовать круглые скобки для явного указания предполагаемого приоритета операторов.

((s1 >= 10.0) || (time >= 250)) && (s2 < 5.0E17)Выполните событие, если выполняется следующее условие:

Разновидности s1 больше или равно 10 или время больше или равно 250, и виды s2 меньше, чем 5.0E17.

((s1 >= 5000.0) && (time >= 250)) || (s2 < 5.0E17)Выполните событие, если выполняется следующее условие:

Разновидности s1 больше или равно 5000 и время больше или равно 250, или виды s2 меньше, чем 5.0E17.

Совет

Если UnitConversion , и у вашей модели есть какое-либо событие, следуйте рекомендации ниже.

Безразмерность любых параметров, используемых в событии Trigger если они еще не безразмерны. Например, предположим, что у вас есть триггер x > 1, где x - концентрация вида в моль/литр. Безразмерность x путем масштабирования (деления) с помощью константы, например x/x0 > 1где x0 - параметр, определенный как 1,0 моль/литр. Обратите внимание, что x не должен иметь ту же единицу измерения, что и константа x0, но должен быть совместим с ней по размерам. Например, единица x может быть пикомоль/литр вместо моль/литр.

Определение функций события

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

Используйте синтаксис MATLAB для определения выражений для функций событий. Выражение должно быть одной инструкцией назначения MATLAB, включающей =или массив ячеек таких операторов. В конце выражения не требуется точка с запятой или запятая.

Ниже приведены правила записи выражений для функций событий.

EventFcnОбъяснение
speciesA = speciesBПри выполнении события установите величину speciesA равно speciesB.
k = k/2При выполнении события уменьшите значение константы скорости вдвое. k.
{'speciesA = speciesB','k = k/2'}При выполнении события установите величину speciesA равно speciesBи уменьшить вдвое значение константы скорости k.
kC = my_func(A,B,kC)При выполнении события вызовите пользовательскую функцию. my_func(). Эта функция принимает три аргумента: первые два аргумента являются текущими количествами двух видов (A и B) во время моделирования и третий аргумент - текущее значение параметра, kC. Функция возвращает измененное значение kC в качестве выхода.

Решатели моделирования для моделей, содержащих события

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

Оценка событий

Рассмотрим пример простого события, в котором указано, что 4s, вы хотите назначить значение 10 к разновидностям A.

В time = 4 s триггер становится истинным, и событие выполняется. На предыдущем рисунке при условии, что 0 имеет значение false и 1 true, когда триггер становится истинным, количество видов A имеет значение 10. Теоретически, с совершенным решателем, событие будет выполняться точно на time = 4.00 s. На практике существует очень минутная задержка (например, можно заметить, что событие выполняется на time = 4.00001 s). Таким образом, необходимо указать, что триггер может стать истинным в или после 4s, что является time >= 4 s.

Спусковой механизмEventFcn
time >= 4A = 10

Точка, в которой триггер становится истинным, называется восходящей кромкой. События SimBiology ® выполняют EventFcn только на поднимающихся краях.

Триггер вычисляется на каждом шаге времени для проверки того, переходит ли условие, указанное в триггере, с значения false на значение true. Решатель обнаруживает и отслеживает падающие кромки, то есть когда триггер становится ложным, поэтому, если встречается другой передний фронт, событие выполняется повторно. Если триггер уже имеет значение true до начала моделирования, то событие не выполняется в начале моделирования. Событие не выполняется до тех пор, пока решатель не столкнется с передним фронтом. Очень редко решатель может пропустить передний край. Примером этого является случай, когда передний край следует очень быстро после заднего края, и размер шага приводит к пропуску решателем точки перехода.

Если триггер становится верным точно во время остановки моделирования, событие может выполняться или не выполняться. Если требуется выполнить событие, увеличьте время остановки.

Примечание

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

Оценка одновременных событий

Когда два или более условий запуска одновременно становятся истинными, решатель выполняет события последовательно в порядке, в котором они перечислены в модели. Можно переупорядочить события с помощью reorder способ. Например, рассмотрим этот случай.

Номер событияTriggerEventFcn
1SpeciesA >= 4SpeciesB = 10
2SpeciesC >= 15SpeciesB = 25

Решатель пытается найти передний край для этих событий в пределах определенного уровня допуска. Если это приводит к обоим событиям, происходящим одновременно, то значение SpeciesB после временного шага, на котором происходят эти два события, будет 25. Если изменить порядок событий на обратный, то значение SpeciesB после временного шага, на котором происходят эти два события, будет 10.

Рассмотрим пример включения функций событий, изменяющих компоненты модели зависимым образом. Например, функция события в событии 2 предусматривает, что SpeciesB принимает значение SpeciesC.

Номер событияTriggerEventFcn
1SpeciesA >= 4SpeciesC = 10
2time >= 15SpeciesB = SpeciesC

Событие 1 и событие 2 могут произойти одновременно.

  • Если событие 1 и событие 2 не происходят одновременно, то при запуске события 2 SpeciesB присваивается значение, которое SpeciesC имеет во время триггера события.

  • Если событие 1 и событие 2 происходят одновременно, решатель сначала выполняет событие 1, а затем - событие 2. В этом примере, если SpeciesC = 15 когда события инициируются, после выполнения событий, SpeciesC = 10 и SpeciesB = 10.

Оценка нескольких функций событий

Рассмотрим функцию события, в которой указывается, что значение компонента модели (SpeciesB) зависит от значения компонента модели (SpeciesA), но SpeciesA также изменяется функцией события.

TriggerEventFcn
time >= 4{'SpeciesA = 10, SpeciesB = SpeciesA'}

Решатель сохраняет значение SpeciesA на переднем крае и перед выполнением каких-либо функций события и использует это сохраненное значение для назначения SpeciesB его ценность. Так в этом примере, если SpeciesA = 15 в момент запуска события, после его выполнения, SpeciesA = 10 и SpeciesB = 15.

Когда одно событие инициирует другое событие

В следующем примере событие 1 включает выражение в функцию события, которое вызывает событие 2 (при условии, что SpeciesA имеет сумму менее 5 при выполнении события 1).

Номер событияTriggerEventFcn
1time >= 5{'SpeciesA = 10, SpeciesB = 5'}
2SpeciesA >= 5SpeciesC = SpeciesB

При запуске события 1 решатель оценивает и выполняет событие 1 с результатом, который SpeciesA = 10 и SpeciesB = 5. Теперь триггер для события 2 становится истинным, и решатель выполняет функцию события для события 2. Таким образом, SpeciesC = 5 в конце выполнения этого события.

Таким образом, можно иметь каскады событий произвольной длины, например, Событие 1 запускает Событие 2, которое, в свою очередь, запускает Событие 3 и так далее.

Циклические события

В некоторых ситуациях серия событий может вызвать каскад, который становится циклическим. После запуска циклического набора событий единственным способом остановить моделирование является нажатие клавиш Ctrl + C. Будут потеряны все данные, полученные в текущем моделировании. Вот пример циклических событий. В этом примере предполагается, чтоSpecies B <= 4 в начале цикла.

Номер событияTriggerEventFcn
1SpeciesA > 10{'SpeciesB = 5', 'SpeciesC = 1'}
2SpeciesB > 4{'SpeciesC = 10', 'SpeciesA = 1'}
3SpeciesC > 9{'SpeciesA = 15', 'SpeciesB = 1'}

Использование событий для устранения прерываний в выражениях правил и скорости реакции

Решатели, поставляемые с SimBiology, дают неточные результаты, когда следующие выражения не являются непрерывными и дифференцируемыми:

  • Правило повторного назначения

  • Алгебраическое правило

  • Правило тарифа

  • Скорость реакции

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

Связанные темы