修复 surrogateopt
中的变量
此示例说明如何通过从优化中删除某些控制变量来修复它们的值。尽管修复值的最简单方法是设置相等的下界,但某些求解器不允许相等的边界。然而,surrogateopt
在尝试优化之前通过从问题中内部删除固定变量来很好地处理相等的边界。
multirosenbrock
函数接受任意偶数个控制变量。在点 [1,1,...,1,1]
处达到其最小值 0。将十个变量的下界设置为 -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.1502 1.3170 0.0437 -0.0025
fval = 0.9426
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.3874 1.9276 1.4301 2.0454 1.3518 1.8288 1.3938 1.9430 1.4427 2.0821
fval = 0.8109
exitflag = 0