Я иногда не получаю сходимости по моей проблеме. Моя проблема настроена как проблема Dymos. Я использую IPOPT в качестве оптимизатора. Если я запускаю проблему только один раз, я могу проверить IPOPT.out на наличие конвергентной строки, и это нормально.
Я часто хочу запустить анализ параметров, где я варьирую граничные условия и варианты задач. Для этого я использую Ray https://www.ray.io/, библиотеку Python для запуска параллельных процессов. Я отключаю все файловые операции ввода-вывода, которые могу для этого, так как в противном случае несколько процессов мешают друг другу записывать в файл.
Однако тогда трудно узнать, не сошелся ли конкретный процесс/случай. По этой причине было бы полезно, если бы функция run_problem() возвращала информацию о сходимости. Кажется, это не так, поэтому есть ли способ получить информацию о конвергенции каким-либо другим способом, который не требует чтения файла?
Я понимаю, что существует целая система драйверов DOE, настроенная для OpenMDAO. Однако кривая обучения выглядела довольно крутой. Я получил параллельную обработку, работающую с Рэем, за считанные часы, и она работает довольно хорошо, за исключением одной проблемы.
prob.driver.fail
должно быть False
, если оптимизация прошла успешно, и его не нужно читать из файла. Однако, учитывая различные уровни успеха оптимизаторов, это может быть не совсем точным. Например, solved to acceptable tolerance
против optimal solution found
немного сложно отразить в простом логическом выводе, и нам, вероятно, следует найти лучший способ сообщить об успехе оптимизатора.
Спасибо, Роб, я попробую. Найденное оптимальное решение — это действительно единственный результат, которого я хочу в любом случае.
Я размещу задачу на github Dymos, чтобы вернуть информацию об оптимизаторе из run_problem. Вероятно, нам следует более подробно остановиться на том, что мы возвращаем из
prob.run_driver
на стороне OpenMDAO.