Алгоритмическое дифференцирование OpenCascade
В журнале Optimization Methods & Software была опубликована статья «Algorithmic differentiation of the Open CASCADE Technology CAD kernel and its coupling with an adjoint CFD solver». Авторы этой публикации — участники проекта IODA, посвященного параметрической оптимизации, интегрированной в CAD-системы. В центре внимания статьи и всей работы авторов находится проблема сопряженной оптимизации (adjoint optimization), состоящая в том, чтобы найти оптимальную форму цифрового изделия в терминах переменных проектирования существующей параметрической модели.
Мы уже писали об одном из способов подключения эффективных методов оптимизации (использующих градиент целевой функции) через посредство дифференцирования геометрических ядер. В этом контексте использование OpenCascade выглядит особенно привлекательным, поскольку взятие точных производных требует модификации исходных кодов ядра, а коммерческие библиотеки свои коды не распространяют. В указанной статье можно прочитать подробнее как о самом принципе, так и о некоторых нюансах дифференцирования OpenCascade. К сожалению, само ядро, оснащенное точными производными, скачать пока невозможно, поскольку оно не прошло индустриальной сертификации, а правила лицензирования этого (вообще-то нового) продукта еще не определены. Однако сам эксперимент, заявленный в публикации, вполне воспроизводим, особенно в той его части, что не касается гидродинамического расчета.
Сказав все это, добавлю немного общих слов по поводу параметрических моделей и библиотек моделирования как таковых. Типичное геометрическое ядро (ACIS, Parasolid, OpenCascade) предоставляет функциональность для создания параметрических моделей S[a], где a — вектор параметров (переменных проектирования), а S — сама геометрическая модель. Задача оптимизации формы изделия состоит в поиске такого набора a*, что результирующая модель S[a*] оказывается наиболее эффективной с точки зрения некоторого критерия J(S[a]). Таким критерием может быть прочность, потеря давления в компрессоре, тяга двигателя и что угодно еще. Перед нами классическая задача оптимизации на многомерном пространстве переменных проектирования. Заметим здесь следующее:
- Весь этот разговор имеет смысл только в рамках параметрического проектирования. Без параметрики (скажем, в системах прямого моделирования) мы не имеем выделенного набора переменных проектирования, любое изменение которых заведомо не нарушает замысла проектировщика (design intent).
- Размерность пространства поиска обычно чрезвыйчайно высока. Как отмечают (T. Robinson et al. Optimizing parameterized CAD geometries using sensitivities based on adjoint functions. 2012) задача оптимизации в общем случае неразрешима для произвольного числа переменных проектирования. Нужны эффективные методы, не зависящие критическим образом от размерности пространства поиска.
Система геометрического моделирования, возвращающая в качестве результата не только параметрическую модель, но и ее градиент (а в идеале и производные высших порядков) — это очень интересно. В такой системе мы понимаем не только статику формы, но и ее отзывчивость по отношению к переменным проектирования (design sensitives), что открывает новые возможности для оптимизации. В то же время, создание такой системы — задача нетривиальная. Желательно обеспечить выполнение следующих требований при разработке подобных геометрических ядер:
- Возможность переключения между основной (primal) и продифференцированной версиями во избежание низкой производительности и лишнего расхода памяти в случаях, когда оптимизация не требуется.
- Надежность, обеспеченная наличием нерегрессионных тестов на производные.
Такая система — будущее параметрической оптимизации.