surrogateopt
,具体问题具体分析这个示例展示了如何在基于问题的方法中使用代理优化最小化多维函数。最小化的函数,multirosenbrock (x)
,出现在这个例子到此结束.的multirosenbrock
函数只有一个局部最小值0
在点(1, 1,…,1)
.该函数被设计为具有挑战性的求解器最小化。
请注意:的代码multirosenbrock
控件中提供了Helper函数这个例子到此结束.确保代码包含在脚本的末尾或路径上的文件中。
创建一个4-D优化变量x
.的multirosenbrock
函数期望变量是行向量,因此指定x
作为一个4元素的行向量。
x = optimvar (“x”1、4);
的surrogateopt
求解器要求所有问题变量的有限界。指定-3的下界和3的上界。当指定标量边界时,它们适用于所有问题变量。
x.LowerBound = 3;x.UpperBound = 3;
使用multirosenbrock
作为目标函数,将函数转换为一个优化表达式fcn2optimexpr
.
有趣= fcn2optimexpr (@multirosenbrock x);
用目标函数创建一个优化问题multirosenbrock
.
概率= optimproblem (“客观”、有趣的);
解决问题,指定surrogateopt
解算器。
rng默认的%的再现性[溶胶,fval] =解决(概率,“规划求解”,“surrogateopt”)
使用surrogateopt解决问题。
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
索尔=结构体字段:X: [0.0900 0.0120 0.1300 0.0136]
fval = 1.5877
返回的解不是很好,因为目标函数值不是很接近0
.尝试通过运行来改进解决方案surrogateopt
更多的评估。使用前面的解决方案作为起点。
选择= optimoptions (“surrogateopt”,“MaxFunctionEvaluations”, 1000);[sol2, fval2] =解决(概率,溶胶,“规划求解”,“surrogateopt”,“选项”选项)
使用surrogateopt解决问题。
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
sol2 =结构体字段:X: [0.8613 0.7429 0.7247 0.5220]
fval2 = 0.0961
这一次,求解器得到一个好的解。
此代码创建multirosenbrock
helper函数。
函数F = multirosenbrock (x)%该函数是Rosenbrock的多维泛化%的功能。假设x是一个矩阵,它以向量化的方式运行%,其中的行是个体。版权所有:The MathWorks, Inc.N =大小(x, 2);%假设x是一个行向量或二维矩阵如果国防部(N, 2)如果N是奇数,则为%错误(“输入行必须有偶数个元素”)结束优势= 1:2:n - 1;均等的= 2:2:N;F = 0(大小(x));F(:,几率)= 1 - x(:,几率);F(:,均等的)= 10 * (x(:,均等的)- x(:,几率)。^ 2);F = (F . ^ 2, 2)总和;结束