Как связать якобианскую строку и столбец SNOPT обратно с целью/ограничением и переменной OpenMDAO

Я занимаюсь отладкой проблемы в OpenMDAO. В качестве оптимизатора я использую SNOPT. С помощью SNOPT вы можете выполнить проверку деривативов по вашей проблеме с помощью опции «Проверить уровень = 2». Насколько я понимаю, это проверит частные производные вашей проблемы с конечной разницей. Результаты будут распечатаны в SNOPT_print.out.

В этой распечатке заголовки

"Столбец" "x(j)" "dx(j)" "Номер элемента." «Строка» «Производная» «Приблизительная разница»

появляться.

Теперь SNOPT считает, что с одним из моих производных что-то не так. Текст «плохо?»

появляется рядом со столбцом «Приблизительная разница». Извините, я не копирую напрямую вывод, но в данный момент у меня нет к нему доступа.

Я хотел бы знать карту номеров столбцов и строк в моей проблеме OpenMDAO, чтобы увидеться, смогу ли я выяснить, в чем дело. Это определенно похоже на смену знака, поскольку производная, предоставленная SNOPT, и аппроксимация конечной разницы равна, но с коэффициентом -1.

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

Я надеюсь, что смогу провести дополнительную проверку и выяснить, на что именно жалуется SNOPT. Есть ли способ опросить OpenMDAO или pyoptsparse, чтобы это выяснить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы предложил использовать check_totals. Это, по крайней мере, подскажет вам, какая комбинация проектной переменной/ответа вызывает проблему, и вы сможете сузить ее оттуда.

Спасибо, Брет, я смог это воспроизвести. Оказывается, номер столбца SNOPT совпадает с номером проектной переменной распечатки pyoptsparse,

Mark Garnett 23.02.2024 04:52

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

Mark Garnett 23.02.2024 05:44

Отвечая на мой собственный вопрос о выводе проверки производных SNOPT: номер столбца соответствует проектной переменной, как и следовало ожидать от якобиана, а номер соответствует индексу распечатки pyoptsparse.

Цели Имя индекса Значение 0 traj.phase0.states:x -2.500000E-01

Переменные (c – непрерывные, i – целые, d – дискретные) Имя индекса Тип Значение нижней границы Состояние верхней границы 0 traj.phase0.states:v_0 c -1.000000E+21 1.183503E-02 1.000000E+21
1 traj.phase0.states:v_1 c -1.000000E+21 2.816497E-02 1.000000E+21
2 traj.phase0.states:v_2 c -1.000000E+21 3.333333E-02 1.000000E+21
3 traj.phase0.states:v_3 c -1.000000E+21 3.333333E-02 1.000000E+21
4 traj.phase0.states:v_4 c -1.000000E+21 4.516837E-02 1.000000E+21

Номер строки соответствует распечатке ограничений pyoptsparse, хотя номер строки SNOPT отличается на единицу от распечатки pyoptsparse, поскольку я предполагаю, что первая строка якобиана SNOPT является целью

Ограничения (i — неравенство, e — равенство) Название индекса Тип Нижнее значение Верхнее состояние Множитель Лагранжа (Н/Д) 0 traj.phase0.collocation_constraint.defects:v e 0.000000E+00 -7.401487E-18 0.000000E+00 9.00000E+100 1 traj.phase0.collocation_constraint.defects:ve 0.000000E+00 -1.850372E-18 0.000000E+00 9.00000E+100

Другие вопросы по теме