Я выполняю задачу нелинейной оптимизации в OpenMDAO, оптимальное решение которой мне известно (я просто хочу проверить решение). Я использую SLSQP
конфигурацию драйвера ScipyOptimizer
от openmdao.api
.
У меня есть 3 проектных переменных A, B и C, их соответствующие проектные пространства (от Amin до Amax для A и т. д.) и одна целевая функция Z. Как Я сказал, что знаю оптимальные значения для всех трех переменных проекта (назовем их Asol, Bsol и Csol), которые дают минимальное значение Z (назовем его Zsol).
Когда я запускаю эту задачу, я получаю значение Z больше, чем Zsol, что означает, что это не оптимальное решение. Когда я назначаю Csol переменной C и запускаю задачу только с A и B в качестве переменных проекта, я получаю значение Z, которое намного ближе к Zsol и которое на самом деле меньше, чем то, что я получил ранее (в сценарии с 3 переменными проекта).
Почему я наблюдаю такое поведение? Разве ScipyOptimizer
не должен дать одно и то же решение в обоих случаях?
РЕДАКТИРОВАТЬ: добавление кода..
from openmdao.api import IndepVarComp, Group, Problem
from openmdao.api import ScipyOptimizer
class RootGroup(Group):
def __init__(self):
super(RootGroup, self).__init__()
self.add('desvar_f', IndepVarComp('f', 0.08))
self.add('desvar_twc', IndepVarComp('tool_wear_compensation', 0.06))
self.add('desvar_V', IndepVarComp('V', 32.0))
# Some more config (adding components, connections etc.)
class TurningProblem_singlepart(Problem):
def __init__(self):
super(TurningProblem_singlepart, self).__init__()
self.root = RootGroup()
self.driver = ScipyOptimizer()
self.driver.options['optimizer'] = 'SLSQP'
self.driver.add_desvar('desvar_f.f', lower=0.08, upper=0.28)
self.driver.add_desvar('desvar_twc.tool_wear_compensation', lower=0.0, upper=0.5)
self.driver.add_desvar('desvar_V.V', lower=32.0, upper=70.0)
self.driver.add_objective('Inverse_inst.comp_output')
# Other config
Этот код дает мне неправильный результат. Когда я удаляю desvar_twc
из обоих классов и присваиваю ему оптимальное значение (из решения, которое у меня есть), я получаю довольно правильный результат, то есть ответ для целевой функции, который меньше, чем в предыдущем сценарии.
ScipyOptimizer
— это оболочка вокругscipy.optimize.minimize
, которая выполняет локальную оптимизацию. - person user2357112 supports Monica   schedule 20.04.2016desvar_twc
значением, которое выше, чем в решении, но это дало мне тот же (неправильный) результат. Как видно из кода, я инициализировалdesvar_twc
значением 0,06, а оптимальное решение — 0,05. Но выполнение этой задачи дает мне значение 0,00; хотя значение целевой функции выше при 0,00, чем при 0,05. - person Amogh Kulkarni   schedule 20.04.2016