Обработка алгебраических / неявных циклов от Gekko

У меня есть конкретный вопрос относительно обработки алгебраических / неявных циклов Gekko.

Я буду приводить примеры из области химического машиностроения, потому что именно так я нашел проект и другие его библиотеки.

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

В прошлом я использовал другое платное программное обеспечение, и оно автоматически предлагало процедуру разрешения проблемы в зависимости от того, насколько решаема система (путем анализа зависимостей и создания автоматических алгебраических циклов).

Мой вопрос был бы таким:

Гекко делает это автоматически?

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

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

Заранее благодарим за ценную информацию.


person Enrique Garcia    schedule 29.10.2019    source источник


Ответы (1)


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

Метод 1. Промежуточные переменные

Промежуточные переменные полезны для уменьшения сложности модели. Во многих моделях временных переменных больше, чем обычных. Такое сокращение модели часто помогает решателю найти решение за счет уменьшения размера проблемы. Промежуточные переменные объявлены с m.Intermediates() в Python Gekko. Промежуточные переменные могут быть определены в одном разделе или в нескольких объявлениях по всей модели. Промежуточные переменные анализируются последовательно сверху вниз. Чтобы избежать непреднамеренной перезаписи, промежуточную переменную можно определить один раз. В случае промежуточных переменных порядок объявления имеет решающее значение. Если промежуточное значение используется перед определением, ошибка сообщает, что существует неинициализированное значение. Вот дополнительная информация о промежуточных продуктах с примером проблемы.

Метод 2. Треугольное разложение нижнего блока

Для больших проблем, связанных с инициализацией, есть режим, который активируется опцией m.options.COLDSTART=2. В этом режиме выполняется треугольная декомпозиция нижнего блока для автоматического определения независимых блоков, которые затем решаются независимо и последовательно.

Треугольник нижнего блока

Этот метод декомпозиции для инициализации обсуждается в докторской диссертации (глава 2) в Mostafa Safdarnejad или также в Safdarnejad, SM, Hedengren, JD, Lewis, NR, Haseltine, E., Стратегии инициализации для оптимизации динамических систем, компьютеров и химической инженерии, 2015, Vol. 78, стр. 39-50, DOI: 10.1016 / j.compchemeng.2015.04.016.

Метод 3. Автоматическое сокращение модели

Уменьшение модели требует больше времени на предварительную обработку, но может помочь значительно сократить время решателя. На m.options.REDUCE имеется дополнительная документация.

Общая стратегия инициализации

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

Блок-схема инициализации

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

person John Hedengren    schedule 30.10.2019
comment
Теперь я понимаю, что ваш любезный ответ направлен на оптимизацию. Теперь у меня есть способ найти оптимальное решение или выполнить регрессию. Что бы произошло в случае чистой симуляции DAE-системы? Например, ODEINT интегрирует обыкновенные дифференциальные уравнения, применяя метод РК. В случае DAE придется решать как переменные, зависящие от времени, так и неявные циклы. Это что-то математически сложное и глубокое, что может быть полезно другим пользователям. Спасибо еще раз. - person Enrique Garcia; 16.11.2019
comment
Гекко решает связанный дифференциал вместе с алгебраическими уравнениями, потому что дифференциальные уравнения преобразуются в алгебраические уравнения с ортогональной коллокацией на конечных элементах. Как только дифференциальные уравнения представляют собой алгебраические уравнения, все они решаются вместе с помощью решателя нелинейного программирования или смешанного целочисленного нелинейного программирования (если у вас есть целочисленные переменные). Дополнительная информация находится здесь: apmonitor.com/do/index.php/Main/OrthogonalCollocation - person John Hedengren; 17.11.2019
comment
Понятно. Это умный способ отработать алгебраические циклы при выполнении интеграции. Могу я спросить вас, каковы плюсы и минусы Gekko (ортогональное сопоставление) по сравнению с интеграцией с CasADi (решатель IDAS). Насколько мне известно, оба они, кажется, обрабатывают неявные циклы. Gekko допускает простой ввод уравнений, в то время как CasADI, похоже, требует написания сложного синтаксиса. CasADI потребуется дополнительный оптимизатор (например, IPOPT). Спасибо еще раз! - person Enrique Garcia; 19.11.2019
comment
CasADi - тоже хороший пакет. Вот некоторые из последних событий, которые Джоэл обсуждал о CasADi на веб-семинаре APMonitor: youtu.be/DvicSVRhVxQ Вот 18 демонстрационных приложений с Gekko: apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization Оба пакета хороши и предоставляют многие из одинаковых функций. - person John Hedengren; 19.11.2019
comment
Понятно. Думаю, я бы предпочел гибкость и автоматическую обработку неявных циклов. Итак, я выберу APM, поскольку у Гекко, похоже, есть только ODE. Эта цепочка была действительно проницательной. Спасибо. - person Enrique Garcia; 21.11.2019
comment
Gekko должен уметь делать все, что делает APM Python, но вы можете использовать и то, и другое. - person John Hedengren; 21.11.2019
comment
Согласно следующей ссылке, IMODES 1,2 и 3 Gekko моделируют только системы ODE: gekko. readthedocs.io/en/latest/imode.html Я бы предпочел реализовать уравнения, а не делать их явными. См. Ссылку: apmonitor.com/wiki/index.php/Main/UsersGroup Я не уверен, что использую правильную терминологию. Может быть, с этими двумя ссылками я мог бы быть более точным. Спасибо заранее за ваше время. Энрике Гарсиа-Франко - person Enrique Garcia; 24.11.2019
comment
Документация неверна для IMODES = 1-3. Поддерживаются DAE любого индекса. Я обновил документацию: gekko.readthedocs.io/en/latest/imode.html Спасибо, что указали на это. - person John Hedengren; 24.11.2019