在基于问题的优化中自动差异化的影响
使用自动差异时,基于问题的解决
功能通常需要更少的功能评估,并且可以更稳健地运行。
默认,解决
如果适用,使用自动分化来评估目标和非线性约束功能的梯度。自动差异化适用于以优化变量的操作表示的函数,而无需使用FCN2OPTIMEXPR
功能。看优化工具箱中的自动差异化和将非线性函数转换为优化表达式。
最小化问题
考虑最小化以下目标函数的问题:
创建代表这些变量和目标函数表达式的优化问题。
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;
最小化受非线性约束的约束 。
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
总之,优化自动分化的主要影响是降低功能评估的数量。