Pull to refresh

Comments 12

Спасибо, отличная статья! То что Вы реализуете попадает в разряд Sequential Design of Computer Experiments. Помимо разных численных оптимизаторов, возможно, было бы интересно потестировать методы оптимизации на основе суррогатных (reduced order) моделей и их предсказаний, используя разные acquisition functions (балансируя exploration и exploitation), типа Expected Improvement и Probability of Improvement, ну и всякие адаптивные методы (типа Epsilon-greedy). Разумеется, сразу появляется дополнительная сложность выбора алгоритма машиного обучения для суррогатной модели, зато повышается универсальность.

Спасибо! Сравнить с оптимизацией на основе ROM тоже хочу. Еще есть идея поставить ROM для глобального поиска и SLSQP для локального поиска с выдачей точек в ROM для уточнения.

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

  • Известно, насколько хорошо ваша сплайн-поверхность аппроксимирует реальный характер обтекания крыла (ожидаемое значение целевой функции vs расчитанное по итогам симуляции)

  • Полученную точку можно использовать для уточнения сплайн-интерполяции.

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

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

Ну у вас же крыло описывается каким-то набором параметров: радиус носка, выпуклость, толщина профиля, и так далее. Параметров вы можете сделать сколько угодно - хоть, например, верхнюю и нижнюю огибающую профиля делайте из сплайнов и позволяйте эти точки независимо шевелить. Совокупность всех этих параметров образует пространство модели. Из конкретной точки (придав значения каждому параметру) - вы можете однозначно сформировать физическую (3д) модель крыла. Эту модель крыла вы подвергаете виртуальной продувке, получаете первую точку, где в пространстве координат модели поставлено в соответствие значение целевой функции. Дальше делаете то же самое в другой точке (не слишком далеко от первой) - получаете вторую точку, потом третью, четвертую... Так у вас накпливаются данные для того чтобы начать строить многомерный сплайн который в пространстве модели аппроксимирует пока еще неизвестную функцию. Вы начинаете использовать градиенты с этого сплайна для того чтобы определять, в каком направлении вы хотите поменять параметры модели (какие области пространства параметров вы хотите исследовать). Со временем, вам надо делать все меньше расчетов, поскольку для большого количества конфигураций крыла у вас будут достаточно хорошие предсказания полученные сплайн-интерполяцией в пространстве мат. модели.

То, что вы описываете, это как раз построение суррогатной модели (или Reduced Order Modeling) по результатам расчетов. Условный следующий этап развития этой задачи. Только для того, чтобы такие суррогатные модели стали работоспособны на 12-мерном пространстве точек там должно быть ~100-1000, что уже выбивается за бюджет инженерного применения. Как я уже написал выше, есть идея попробовать такой подход в гибридном режиме. Локальный градиентный оптимизатор условно исследует пространство в локальном минимумах, суррогатная модель используется для постановки начальной точки градиентного оптимизатора и построения общей поверхности отклика.

Ну, тут уже крутитесь как хотите: закон сохранения никто не отменял. Либо у вас уже есть какие-то точки из прошлого опыта - вы же не первое крыло в истории человечества проектируете: можно закинуть в пространство модели характеристики уже существующих крыльев. Если же данных нет (а данные - новая нефть, сам по телевизору слышал!) - то платите временем расчетов. В конце концов, если уж народ с удовольствием тратит гигаватты на майнинг монеток на графических картах, то организовать распределенную виртуальную аэродинамическую трубу - дело техники и относительно небольших денег. Плюс какое-то количество данных вы можете намайнить дешевле (например, продувая модели крыльев с бесконечным удлинением в 2d, а не в 3d). Понятно, что это даст вам точки не совсем там где вы хотите - но зато первоначальный сплайн у вас будет, а дальше вы будете заниматься виртуальными продувками только в тех областях, которые потенциально представляют интерес с точки зрения нахождения достаточно хорошего оптимума... Вообще, задачи многомерной оптимизации - жутко интересная вещь. Особенно, когда за них еще и платят. :-)

... в общем - мой совет в этой части: сразу занимайтесь построением Reduced Order Model, как вы это называете. 90% успеха в многомерной оптимизации лежит тут. И желательно строить базу данных насчитанных точек так, чтобы вы могли ее потом использовать при следующей аэродинамической задаче. Потому что ваша насчитанная база точек - это ваше будущее рыночное преимущество. Вы всегда сможете решить задачу оптимизации быстрее и/или лучше тех, у кого пока этой базы еще нет.

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

Если мы говорим про технологию вообще - тем более важно иметь хорошее пространство модели, в которое можно было бы втиснуть максимальное количество практических применений. А уж что оптимизировать: теплопереносы в литейной форме, профили крыла, или какие-нибудь гигагерцовые резонаторы на керамике - дело десятое. Физика, к счастью, одинакова для всех процессов с точностью до констант пропорциональности (пока не начинаются квантовые эффекты или элементы теории хаоса). Любая конкретная технология оптимизации должна опираться на сколько-то исследованное (с наличием исторических или предыдущих расчетных данных) модельное пространство.

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

Совет-гуглите слово manifold и как его использовать при оптимизации. Сильно помогает (я использую Google Ceres). Я не гуру и могу ошибаться, но пока я не видел gradient based фреймворков, которые используют многообразия. Простейший пример с оптимизацией кватернионов тензорфлоу и торч не поддерживают (.

Зы

Мы коллеги) Будете на чайке - пообщаемся)

Не слышал про такие подходы, поизучаю. Спасибо!

Sign up to leave a comment.