Этот пример показывает, как решить задачу оптимизации, которая включает целочисленные переменные. Начиная с R2019b, surrogateopt
принимает целочисленные ограничения. В этом примере найдите точку x
который минимизирует multirosenbrock
функция над целочисленными аргументами в диапазоне от -3 до 6 в десяти размерностях. The multirosenbrock
функция является плохо масштабированной функцией, которую трудно оптимизировать. Его минимальное значение 0, которое достигается в точке [1,1,...,1]
.
rng(1,'twister') % For reproducibility nvar = 10; % Any even number lb = -3*ones(1,nvar); ub = 6*ones(1,nvar); fun = @multirosenbrock; intcon = 1:nvar; % All integer variables [sol,fval] = surrogateopt(fun,lb,ub,intcon)
surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
sol = 1×10
1 1 1 1 1 1 1 1 1 1
fval = 0
В этом случае surrogateopt
не находит правильное решение.