主要内容

在基于问题的优化中自动差异化的影响

使用自动差异时,基于问题的解决功能通常需要更少的功能评估,并且可以更稳健地运行。

默认,解决如果适用,使用自动分化来评​​估目标和非线性约束功能的梯度。自动差异化适用于以优化变量的操作表示的函数,而无需使用FCN2OPTIMEXPR功能。看优化工具箱中的自动差异化将非线性函数转换为优化表达式

最小化问题

考虑最小化以下目标函数的问题:

F n 1 = 1 0 0 (( X 2 - X 1 2 2 + (( 1 - X 1 2 F n 2 = 经验 (( - (( X 一世 - y 一世 2 经验 (( - 经验 (( - y 1 s e C H (( y 2 o b j e C t 一世 v e = F n 1 - F n 2

创建代表这些变量和目标函数表达式的优化问题。

prob = optimproblem;x = optimvar('X',2);y = optimvar('y',2);fun1 = 100*(x(2)-x(1)^2)^2 +(1 -x(1))^2;fun2 = exp(-sum(((x-y)。^2))*exp(-exp(-y(1)))*sech(y(2));prob.Objective = fun1 -fun2;

最小化受非线性约束的约束 X 1 2 + X 2 2 + y 1 2 + y 2 2 4

prob.constraints.cons = sum(x。^2 + y。^2)<= 4;

解决问题并检查解决方案过程

从初始点开始解决问题。

init.x = [-1; 2];init.y = [1; -1];[Xproblem,Fvalproblem,Exitflagproblem,outpove问题] = solve(prob,init);
使用Fmincon解决问题。当地最低限度发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。
disp(fvalproblem)
-0.5500
disp(输出问题。
77
disp(输出问题。
46

输出结构表明解决呼叫Fmincon,需要77个功能评估和46次迭代来解决该问题。解决方案的目标函数值为fvalproblem = -0.55

解决问题而没有自动差异

要确定自动分化的效率提高,请设置解决名称值对参数代替使用有限差梯度。

[xfd,fvalfd,exitflagfd,outputfd] = solve(prob,init,...“客观性”,,,,“有限差异”,,,,“约束”,,,,“有限差异”);
使用Fmincon解决问题。当地最低限度发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。
disp(fvalfd)
-0.5500
disp(outputfd.funccount)
264
disp(outputfd.Iterations)
46

使用有限差梯度近似原因解决与77相比,进行269个功能评估。迭代次数几乎相同,与解决方案上报告的目标函数值一样。最终解决方案点相同以显示精度。

disp([xproblem.x,xproblem.y])
0.8671 1.0433 0.7505 0.5140
disp([xfd.x,xfd.y])
0.8671 1.0433 0.7505 0.5140

总之,优化自动分化的主要影响是降低功能评估的数量。

也可以看看

相关话题