Я пытаюсь оптимизировать распределение потока в резервуаре так, чтобы распределение скорости и температуры по любому поперечному сечению было относительно равномерным. Есть много параметров, которые я могу настроить для максимальной однородности поперечного сечения, таких как количество впускных труб, их положение, ориентация и направление. Я знаю, что могу создать несколько различных геометрий и проверить каждую по отдельности, но это очень много времени. Я хотел бы иметь возможность написать программу, которая может итеративно тестировать несколько случаев одновременно (параллельно) и адаптивно выбирать новый набор геометрий для тестирования на основе предыдущих результатов. Как я могу лучше всего это сделать?
optimization
Пол
источник
источник
Ответы:
То, что вы хотите сделать, это оптимизация формы с использованием градиентных методов. По сути, это означает, что вам нужно рассчитать градиент целевой функции относительно параметров вашей модели.
Для небольшого количества параметров вы можете использовать FD, но для большого количества параметров вам нужно изучить сопряженные методы. Если вы используете коммерческий код или код другого лица, который не может решить сопряженные уравнения, тогда FD - ваш единственный вариант.
Посмотрите основные книги по оптимизации формы.
Изменить: Для структурных проблем FE вы можете проверить книгу Чой и Ким I и II
источник
Если вы правильно параметризовали свою часть построения геометрии, это проблема оптимизации черного ящика со смешанными дискретными и непрерывными параметрами.
DAKOTA http://dakota.sandia.gov/ и NOMAD http://www.gerad.ca/NOMAD/Project/Home.html - это два полезных пакета, которые позволяют автоматически выбирать наилучший выбор параметров. (DAKOTA имеет лучшую поддержку приложений, но NOMAD, вероятно, имеет лучшие оптимизаторы.)
Чтобы изменить геометрию, введите дискретный или непрерывный параметр для каждого элемента управления, с помощью которого вы хотите влиять на геометрию, и автоматизируйте построение геометрии из набора элементов управления. Обратите внимание, что методы без производных довольно медленны в больших измерениях, поэтому держите количество параметров достаточно небольшим.
После завершения исследования пространства с помощью одного из вышеуказанных пакетов вы можете уточнить анализ, выполнив более точную оптимизацию, в которой фиксированы все дискретные параметры и все непрерывные параметры, для которых вы не можете получить аналитическую производную. Но вы можете увеличить количество параметров непрерывной формы, относительно которых вы можете вычислять аналитические производные, поскольку оптимизатор на основе градиента (такой как IPOPT https://projects.coin-or.org/Ipopt ) может эффективно решать гораздо большие проблемы ,
Если вы не знаете, как получить производную, но зависимость гладкая, вы можете рассмотреть возможность использования программы автоматического дифференцирования или кодирования вашей непрерывной задачи в AMPL, и в этом случае интерфейс решателя позаботится о производных.
Основы оптимизации формы см., Например, Haftka, RT и Grandhi, RV, оптимизация конструктивной формы - обзор, Компьютерные методы в прикладной механике и технике 57 (1986), 91-106. (Доверяйте описанию о моделировании; но не используйте рекомендованные ими решатели, так как с тех пор технология оптимизации значительно улучшилась.)
источник
Что касается параметризации геометрии, о которой идет речь (как указал Джефф, нетривиальной), то я могу искренне рекомендовать Бренду Калфан - Универсальный метод представления параметрической геометрии, J. Aircraft, Vol.45, No.1,2008 .
Описанный подход применим в аэродинамической оптимизации самолетов.
источник
Существует также сопутствующая оптимизация пространства, которая кажется намного быстрее, чем стандартная параметрическая оптимизация в CFD. В последнее время он значительно увеличился в сообществе CFD в целом и особенно в OpenFOAM. В настоящее время мы организуем семинар по OpenFOAM, и мы получили много абстрактных материалов по этому методу. Если вам интересно, проверьте это , для другой информации, просто гуглите "оптимизация формы смежного пространства в CFD".
Дополнительная информация:
Если бы вы могли использовать OpenFOAM, есть библиотека на основе Python, которая используется именно для таких целей, для манипулирования большим количеством дел и изменения их параметров, называемой PyFoam . Для простой геометрии вы можете определить меш как простой blockMesh и выполнять итерации по своему усмотрению . Для простого случая это вопрос написания нескольких циклов в Python. Вот как будет выглядеть скрипт, если вы измените скорость входного граничного условия. Простые изменения геометрии сетки были бы еще несколькими строками кода ...
источник
Вам потребуется:
Следующие функции имеют решающее значение для инструмента CFD:
Поэтому я могу порекомендовать следующее программное обеспечение:
Библиотека расширенного моделирования, которая предлагает
Высокая производительность:
Высокая гибкость и дружелюбие:
Генерация и манипулирование геометрическими примитивами .
источник