主要内容

输出函数优化工具箱

一个输出函数是什么?

对于一些问题,您可能希望输出每个迭代的优化算法。例如,您可能想要找到的序列点算法计算这些点和情节。为此,创建一个输出函数,它在每个迭代优化函数调用。看到输出函数和情节函数的语法对细节和语法。

下面的例子使用了solver-based方法输出功能。具体问题具体分析的方法,请参阅输出函数,具体问题具体分析优化

一般来说,雇佣一个输出函数可以采取的解决非线性函数作为输入。解决你可以确定哪些可以使用一个选项部分的输出函数通过函数引用页面。

使用一个输出函数

这个例子展示了如何使用一个输出函数来监控fmincon解决方案过程求解约束非线性优化问题。在每个fmincon迭代,输出函数如下:

  • 当前点阴谋。

  • 存储当前点和其对应的目标函数值在一个变量命名历史,当前的搜索方向存储在一个变量命名searchdir。点的搜索方向是一个向量的方向从当前点到下一个。

此外,可用的历史之外的fmincon函数,执行优化在一个嵌套的函数调用fmincon和返回的输出函数变量。关于这种传递信息的方法的更多信息,看一下传递额外的参数。的runfmincon辅助函数在这个例子包含嵌套的函数调用。

目标和约束函数

问题是最小化函数

f ( x ) = 经验值 ( x 1 ) ( 4 x 1 2 + 2 x 2 2 + 4 x 1 x 2 + 2 x 2 + 1 )

非线性不等式约束

x 1 + x 2 - - - - - - x 1 x 2 3 / 2 x 1 x 2 - - - - - - 1 0

objfun函数嵌套runfmincon实现了目标函数。的confun函数嵌套runfmincon实现约束功能。

电话解决

得到解决问题的办法,看的历史fmincon迭代,调用runfmincon函数。

[xsol, fval,历史,searchdir] = runfmincon;
马克斯线搜索方向一阶Iter F-count f (x)约束steplength导数最优过程0 3 1.8394 - 0.5不可行的起点1 6 1.85127 -0.09197 1 0.313 -0.117 0.109 0.300167 - 9.33 0.778 - 2 9 1黑森修改两次3 12 0.529835 0.9209 1 0.12 0.186965 -1.517 0.5 -0.224 0.13 0.232 - 4 16 5 19 0.0729085 0.3313 1 6月22日-0.121 - 0.054 0.0353323 - -0.03303 -0.0542 - 0.0271 7 25 28 0.0235504 9.035 0.0235566 -0.0271 - 0.00587 0.003184 - 1 8 e-08 1 -0.0146 8.51 e-07活动不平等(在选项。ConstraintTolerance = 1 e-06):低上层ineqlin ineqnonlin 1 2

图包含一个坐标轴对象。坐标轴对象标题序列分计算fmincon包含18行类型的对象,文本。一个或多个行显示的值只使用标记

局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。

的输出函数创建一个情节点评价fmincon。每个点的标记是迭代数。发生在第八迭代最优点。序列中的最后两个点是如此密切,它们重叠。

输出历史是一个结构,包含两个字段。

disp(历史)
x: [9 x2双]fval: [9 x1双)

fval历史包含目标函数值对应的序列点fmincon计算。

disp (history.fval)
1.8394 1.8513 0.3002 0.5298 0.1870 0.0729 0.0353 0.0236 0.0236

这些相同的值显示在迭代输出的列标题f (x)

x领域的历史包含的点序列fmincon计算。

disp (history.x)
-1.0000 1.0000 -1.3679 1.2500 -5.5708 3.4699 -4.8000 2.2752 -6.7054 1.2618 -8.0679 1.0186 -9.0230 1.0532 -9.5471 1.0471 -9.5474 1.0474

searchdir输出包含搜索方向fmincon在每一个迭代。搜索方向的向量指向点计算在当前迭代点在下一次迭代计算。

disp (searchdir)
-0.3679 0.2500 -4.2029 2.2199 0.7708 -1.1947 -3.8108 -2.0268 -1.3625 -0.2432 -0.9552 0.0346 -0.5241 -0.0061 -0.0003 0.0003

辅助函数

下面的代码创建runfmincon函数,它包含了outfun输出函数,objfun目标函数,confun非线性约束函数嵌套函数。

函数[xsol, fval,历史,searchdir] = runfmincon%与outfun建立共享变量历史。x = [];历史。fval=[]; searchdir = [];%调用优化x0 = [1];选择= optimoptions (@fmincon,“OutputFcn”@outfun,“显示”,“通路”,“算法”,“激活集”);[xsol, fval] = fmincon (@objfun, x0, []、[] [], [], [], [], @confun,选项);函数停止= outfun (x, optimValues状态)停止= false;开关状态情况下“init”持有情况下“通路”%连接当前点和目标函数%与历史价值。必须一个行向量x。历史。fval=[history.fval; optimValues.fval]; history.x = [history.x; x];%连接当前的搜索方向% searchdir。searchdir = [searchdir;optimValues.searchdirection ');情节(x (1), (2),“o”);%标签点与迭代数量和添加标题。%添加酒精含量x(1)分离标签从策划“o”。文本(x(1) +酒精含量,(2),num2str (optimValues.iteration));标题(‘序列’fmincon点计算的);情况下“完成”持有否则结束结束函数f = objfun f (x) = exp (x (1)) * (4 * x (1) ^ 2 + 2 * (2) ^ 2 + 4 * x (1) * (2) +2 * x (2) + 1);结束函数测查[c] = confun (x)%非线性不等式约束c = (1.5 + x (1) * (2) - x (1) - (2);x - x (1) * (2) - 10);%非线性等式约束测查= [];结束结束

相关的话题