surrogateopt
В этом примере показано, как зафиксировать значения некоторых контрольных переменных путем удаления их из оптимизации. Несмотря на то, что самый легкий способ зафиксировать значения состоит в том, чтобы установить равные верхние и нижние границы, некоторые решатели не позволяют равные границы. Однако surrogateopt
указатели равняются границам хорошо путем внутреннего удаления фиксированных переменных из проблемы прежде, чем попытаться оптимизировать.
multirosenbrock
функция принимает любое четное число контрольных переменных. Его минимальное значение 0 достигнуто в точке [1,1,...,1,1]
. Установите нижние границы –1 и верхние границы 5 для десяти переменных, и затем установите первые шесть верхних и нижних границ, равных 1. Эта установка удаляет шесть переменных из проблемы, оставляя проблему с четырьмя переменными.
lb = -1*ones(1,10); ub = 5*ones(1,10); lb(1:6) = 1; ub(1:6) = 1;
Решите задачу.
fun = @multirosenbrock; rng default % For reproducibility [x,fval,exitflag] = surrogateopt(fun,lb,ub)
Surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
x = 1×10
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.8799 3.5329 1.0157 1.0314
fval = 0.7746
exitflag = 0
Решатель возвращает точку близко к глобальному минимуму. Заметьте, что решатель берет 500 функциональных оценок, который является значением по умолчанию для проблемы с 10 переменными. Решатель не изменяет это значение по умолчанию, даже когда вы фиксируете некоторые переменные.
Когда вы не фиксируете переменных, решатель не достигает точки около глобального минимума.
lb = -1*ones(1,10); ub = 5*ones(1,10); rng default % For reproducibility [x,fval,exitflag] = surrogateopt(fun,lb,ub)
Surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
x = 1×10
-1.0000 1.0018 0.2553 0.0617 -0.9298 0.8764 -0.7681 0.5990 -0.0838 0.0127
fval = 12.6064
exitflag = 0