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 0.4334 0.1786 0.7177 0.5263
fval = 0.4218
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.3840 1.9253 1.1837 1.4091 0.9075 0.8123 1.3796 1.8995 1.4982 2.2355
fval = 0.6209
exitflag = 0