OpenMDAO: существует ли оптимальная величина каждой проектной переменной или целевой функции для поиска в проектном пространстве? - PullRequest
0 голосов
/ 09 марта 2020

Я использую оптимизатор SLSQP. Я помню, как читал где-то, что существует оптимальная величина целевой функции или проектной переменной (или, может быть, соотношение между ними?) Для поиска в проектном пространстве. Например, если моя целевая функция на порядок больше, кажется, что скачок в проектном пространстве тоже на порядок больше.

Если этот скачок слишком мал, это может ограничить объем пространства проектирования, которое он ищет, или может потребоваться целое время, чтобы достичь определенной точки. Однако слишком большие прыжки тоже не годятся.

Любая помощь будет оценена. Дайте мне знать, если что-то неясно. Спасибо!

1 Ответ

9 голосов
/ 10 марта 2020

Не думаю, что мы можем говорить об оптимальной величине масштабирования. Масштабирование - это всего лишь хороший способ преобразовать формулировку вашей проблемы во что-то, что легче решить. Обычно рекомендуется масштабировать проектные переменные, ограничения и цели для улучшения конвергенции вашего оптимизатора. Масштабирование цели и ограничения имеет смысл, потому что все они появляются в матрице Якоби. Обычно масштабирование с начальными значениями является хорошим предположением. Это проблематично c, если ваше начальное значение близко к нулю, в этом случае выбор другого разумного значения или предельного значения данного количества также работает. Для расчетных переменных масштабирование для получения 0 и 1 для нижних и верхних границ также распространено. Хорошо, если все находится в пределах порядка 1. Некоторые алгоритмы оптимизации и нелинейные решатели также используют значение цели, чтобы угадать шаг поиска строки. Если это не близко к порядку 1, поиск строки может занять больше шагов, чтобы сходиться (если это так).

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

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

Реализация в OpenMAO:

Вы можете легко масштабировать свои переменные в OpenMDAO, либо масштабируя величину (scaler), смещая значение (adder) или установка двух опорных значений, которые масштабируют его до 0 или 1 (ref и ref0). Документы Scaler, Adder, ref, ref0 (включая приоритет, если вы используете более одного): http://openmdao.org/twodocs/versions/3.0.0/features/core_features/adding_desvars_objs_consts/index.html

Вы также можете масштабировать все другие переменные в OpenMDAO для улучшения поведения решателей. Подробнее о масштабировании переменных в OpenMDAO: http://openmdao.org/twodocs/versions/3.0.0/theory_manual/scaling.html

...