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

Обзор

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

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

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

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

  • Определенное время симуляции — Указывает, что событие должно изменить суммы или значения разновидностей или параметров. Например, во время = 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 и пропусками, оценивающими второй оператор, если этот оператор является ложным.

(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 может быть picomole/liter вместо родинки/литр.

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

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 как его выход.

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

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

Как оценены События

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

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

ТриггерEventFcn
time >= 4A = 10

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

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

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

Примечание

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

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

Когда два или больше триггерных условия одновременно становятся верными, решатель выполняет события последовательно в порядке, в котором они перечислены в модели. Можно переупорядочить события с помощью 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, дают неточные результаты, когда следующие выражения не непрерывны и дифференцируемы:

  • Повторное правило присвоения

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

  • Правило скорости

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

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

Похожие темы