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

Обзор

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

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

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

Типичными триггерами событий являются:

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

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

Примечание

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

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

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

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

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

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

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

Триггер может содержать ключевое слово 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 может быть пикомол/литр вместо моля/литр.

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

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

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

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

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

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

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

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

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

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

Похожие темы