Ограничение не выполнено

Я использую openMDAO версии 1.7.1, ScipyOptimizer, SLSQP, fd, step_size 1.0e-4.

Я масштабировал проектные переменные до [0, 1] и получил конвергентные результаты с проектными переменными в пределах их диапазонов. Однако одно ограничение по-прежнему не выполняется. Я установил ограничение для параметра равным [0, 1,5], но конечный результат, например, 1,73. Я попробовал два разных предела ошибки сходимости, 0,01 и 0,001, но это ограничение не было удовлетворено.

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

Любая обратная связь приветствуется.


person Henry Ran    schedule 06.09.2016    source источник


Ответы (2)


Сообщает ли оптимизатор в своих выходных данных (установите для параметра «disp» значение «True» в параметрах), что ограничение нарушено и оптимизация не удалась? Если да, то оптимизатор по какой-то причине не смог решить проблему. Это может быть ошибка в расчетах для компонента модели, или это может быть просто проблема, которая не корректно поставлена ​​для этого оптимизатора. Чтобы понять больше, нужно увидеть проблему.

С оптимизатором градиента, таким как SLSQP, иногда проблема заключается в ошибке в вычислении производной. Есть несколько инструментов, которые вы можете использовать, чтобы помочь найти ошибки в производных компонентах:

prob.check_partial_derivatives()

Это перебирает все компоненты вашей модели и сравнивает аналитические производные с конечной разницей.

prob.check_total_derivatives()

Это вычисляет полные производные всех целей и ограничений относительно проектных переменных и сравнивает их с конечной разницей полной модели.

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

person Kenneth Moore    schedule 06.09.2016
comment
Привет Кеннет, спасибо за комментарии и предложения. Я не устанавливал «disp» в True, и сейчас я повторно запускаю коды с True и, надеюсь, получу результаты через несколько дней. Однако я видел, что оптимизация остановилась с этой информацией: положительная производная по направлению для линейного поиска (режим выхода 8), итераций: 8, оценок функций: 13, оценок градиента: 4, оптимизация завершена. Является ли режим выхода 8 признаком сбоя? Спасибо. - person Henry Ran; 06.09.2016
comment
Это определенно ошибка оптимизации. В общем, некуда было идти. Если вы предоставляете аналитические производные в своих компонентах, то в производных может быть ошибка, и вы можете найти ее с помощью функций, о которых я упоминал выше. Кроме того, может возникнуть проблема с масштабированием, если у вас есть проектные переменные с величинами, различающимися с большим запасом, и вы хотите, чтобы они были уменьшены до одного порядка величины. То же самое относится и к вашим ограничениям. - person Kenneth Moore; 08.09.2016

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

person relf    schedule 07.09.2016
comment
Да, SLSQP вообще немного слабый оптимизатор. SNOPT в 10000 раз лучше, но это не открытый исходный код. Однако мы обычно используем SNOPT практически для любого приложения sqp. - person Justin Gray; 07.09.2016