罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

自动微分优化工具箱™

这一列是由艾伦•韦斯写作家优化工具箱文档。把它拿走,艾伦。

嗨,各位。你可能知道解决的优化问题,这就意味着找到一个函数最小化,更容易当你有函数的梯度。这是容易理解的:梯度点上山,所以如果你旅行在相反的方向,你通常达到最低。优化工具箱算法是基于比这更复杂的算法,然而,这些更复杂的算法也受益于一个梯度。

你怎么给解算器以及一个梯度函数?直到最近,你不得不计算梯度作为一个单独的输出,所有的疼痛和可能带来的误差。然而,随着R2020b,具体问题具体分析的方法使用自动微分梯度一般非线性优化问题的计算问题。我将解释这些词是什么意思。简而言之,只要你由基本功能,如多项式函数,三角函数,指数函数,优化工具箱的梯度计算,并使用自动功能,没有力气。

“一般非线性”短语意味着适用于自动分化问题fminconfminunc解决,一般限制或无约束极小化,而不是线性规划或最小二乘或其他问题类型,调用其他专门的解决者。

自动分化,也称为广告,是一种象征性的导数,将一个函数转换成代码,计算在特定点的函数值和导数值。这个过程是透明的;您不需要编写任何特殊代码使用广告。实际上,稍后您将看到,您必须指定一些名称-值对为了不解决使用广告。

内容

具体问题具体分析优化

具体问题具体分析的方法来优化你的问题写的优化变量和表达式。例如,测试函数最小化$ {\ rm乐趣}(x, y) = 100 (x ^ 2) ^ 2 + (1 - x) ^ 2单位圆内美元x ^ 2 + y ^ 2 \勒1美元,您首先创建优化变量。

x = optimvar (“x”);y = optimvar (“y”);

然后使用这些变量创建优化表达式。

有趣= 100 * (y - x ^ 2) ^ 2 + (1 - x) ^ 2;unitdisk = x ^ 2 + y ^ 2 < = 1;

创建一个与这些表达式在适当的问题领域的优化问题。

概率= optimproblem (“客观”有趣的,“约束”,unitdisk);

通过调用解决问题解决,从x = 0, y = 0。

x0。x = 0;x0。y = 0;索尔=解决(x0概率)
使用fmincon解决问题。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。索尔=结构体字段:x: 0.7864 y: 0.6177

解决函数调用fmincon来解决这个问题。事实上,解决使用广告速度解决方案的过程。让我们更详细地检查解决方案过程中看到这个行动。但首先,图1 +目标函数的对数单位圆盘上,画一个红色圆圈的解决方案。

(R, TH) = ndgrid (linspace (0, 1100), linspace(0, 2 *π,200));(X, Y) = pol2cart (TH, R);冲浪(X, Y,日志(1 + 100 * (Y - X ^ 2)。^ 2 + (1 - X) ^ 2),“EdgeColor”,“没有”)colorbar视图(0,90)轴平等的持有plot3 (sol.x sol.y 1,“罗”,“MarkerSize”,10)

自动分化的影响

更详细地检查解决方案过程,再次解决问题,这次要求更多解决输出。检查和功能评估的迭代次数,解算器。

[溶胶,fval exitflag、输出]=解决(概率,x0);流(“fmincon接受% g迭代和% g函数评估。\ n”,output.iterations output.funcCount)
使用fmincon解决问题。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。fmincon接受24迭代和34函数评估。

输出结构表明,解算器接受24迭代和34函数。再次运行问题,这次执行解算器不使用广告。

[sol2, fval2 exitflag2 output2] =解决(x0,概率“ObjectiveDerivative”,“有限差分”,“ConstraintDerivative”,“有限差分”);流(“fmincon接受% g迭代和% g函数评估。\ n”,output2.iterations output2.funcCount)([1 - 2],[输出。funcCount output2.funcCount),的r -,[1 - 2],[输出。funcCount output2.funcCount),“罗”)ylabel (函数计算的)xlim ([0.8 - 2.2]) ylim(90[0])传说(的函数计算(低是更好的),“位置”,“西北”甘氨胆酸)ax =;斧子。XTick = [1, 2];斧子。XTickLabel = {“广告”,没有广告的};
使用fmincon解决问题。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。fmincon 24迭代和84功能评估。

这次的解决需要84计数函数,不是34。这种差异的原因是自动分化。

的解决方金宝搏官方网站案几乎是相同的或没有广告:

流(不同的标准解决方案是% g。\ n”、规范([sol.x,索尔。y] - [sol2.x sol2.y]))
解决差异的标准是1.80128 e-09。

自动微分法是什么?

广告类似于象征性的分化:每个函数本质上是有区别的象征性地,结果变成了MATLAB代码运行计算衍生品。看到生成的代码的一个方法是使用prob2struct函数。让我们试试概率

问题= prob2struct(概率);problem.objective
ans与价值= function_handle: @generatedObjective

prob2struct创建一个函数文件命名generatedObjective.m。这个函数包含一个自动生成的梯度。视图函数文件的内容。

函数(obj,研究生)= generatedObjective(数据源)% generatedObjective计算目标函数值和梯度%% OBJ = generatedObjective(数据源)计算客观价值% OBJ的数据源。%% (OBJ,研究生)= generatedObjective(数据源)另外计算%的目标在当前点梯度值的毕业生。%%自动生成在06 - 10月- 2020 09:01:35 prob2struct% %变量指标。xidx = 1;yidx = 2;% % solver-based变量映射到具体问题具体分析。x =数据源(xidx);y =数据源(yidx);% %计算目标函数。__arg1 = (y - x ^ 2);最长= 100;长度= __arg1。^ 2;arg4 = (1 - x);obj =((最长。*长度)+ arg4。^ 2);% %计算目标梯度。如果nargout > 1 arg5 = 1;arg6 = 0 ([1]);arg6 (xidx:) = (- (arg5。* 2。* (arg4 (:)))) + ((- ((arg5。*最长(:))。* 2 * (__arg1 (:)))) * 2。* (x (:)));arg6 (yidx:) = ((arg5。*最长(:))。* 2。* (__arg1 (:)));研究生= arg6 (:);结束结束

虽然这个代码可能不清楚,你可以比较广告梯度计算符号表达式,它们是相同的:

美元\微分算符({\ rm乐趣})= [-400 (x ^ 2) x - 2 (1 - x); \ 200 (x ^ 2)]美元

的方式解决prob2struct优化表达式转换成代码是微积分学生学习本质上相同的方式,将一个表达式的每个部分和应用规则的区别。的细节计算梯度解释的过程自动分化背景描述了“转发”和“落后”的过程所使用的大多数广告软件。目前,优化工具箱只使用“落后”的广告。

使用这些规则的区别,软件必须有分化规则每个函数的目标或约束功能。支持的运营商列表包括多项金宝app式、三角函数和指数函数以及它们的倒数,连同乘法和加法及其逆。看到金宝app支持操作优化变量和表达式

自动分化有什么好处?

广告降低函数评估解决需要的数量。没有广告,解决非线性估计梯度通过有限的差异,如美元(f (x + \δe_1) - f (x)) / \三角洲,在e_1美元美元是单位向量(1 0,0)。解算器的评估n有限的默认这种形式的差异,n是变量的数量问题。问题与大量的变量,这一过程需要大量的评价函数。

广告和支持功能,解决不需金宝app要采取有限差分的步骤,所以导数估计过程需要更少的功能评估和更准确。

这并不是说,广告总是速度解算器。对于复杂的表情,评估自动衍生品可以比评估有限差异更耗时。一般来说,广告是速度比有限的差异问题大量的变量时,稀疏。广告时慢的问题几乎没有变量和复杂的功能。

不支持的操作呢?金宝app

到目前为止,我已经讨论了自动分化支持操作。金宝app如果你有一个黑盒功能,而在MATLAB底层代码不?或者如果你只是有一个函数,它不支持具体问题具体分析优化,如贝塞尔函数?金宝app为了等功能的具体问题具体分析的方法,你将函数转换为一个优化表达式使用fcn2optimexpr函数。例如,使用besselj函数,

fun2 = fcn2optimexpr (@ (x, y) besselj (1, x ^ 2 + y ^ 2), x, y);

fcn2optimexpr允许您使用不支持的操作的具体问题具体分析金宝app的方法。然而,fcn2optimexpr不支持广告。金宝app所以,当你使用fcn2optimexpr,解决由此产生的问题用有限差分估计目标或非线性约束函数的梯度。有关更多信息,请参见提供衍生品运用工作流

目前,广告不支持高阶导数。金宝app换句话说,你不能为第二次或第三次导数自动生成代码。你只得到一阶衍生品(梯度)。

最终的想法

广告有助于增加速度和可靠性在解决优化问题,是由完全支持的功能。金宝app然而,在某些情况下,它不会增加速度,目前广告并不是用于非线性最小二乘或equation-solving问题。

在我看来,广告的最有用的特性是,它使用在具体问题具体分析优化是完全透明的。从R2020b开始,广告自动适用,没有力气。让我们知道如果你觉得它有用在解决优化问题发表你的评论在这里




发表与MATLAB®R2020b


  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。