主要内容

优化工具箱™的输出功能

什么是输出功能?

对于某些问题,您可能希望从每一次迭代优化算法的输出。例如,您可能希望找到点,该算法计算的序列并绘制这些点。要做到这一点,创建一个输出函数的优化功能在每次迭代调用。看输出功能和绘图功能语法有关详细信息和语法。

此示例使用输出功能基于解算器的方法。对于基于问题的方法,请参阅基于问题的优化输出功能

通常,采用的输出函数的解算器可以采取非线性函数作为输入。您可以确定哪些求解器可以通过查找功能参考页选项部分使用输出功能。

使用输出功能

此示例显示如何使用输出函数监视fmincon解决受约束非线性优化问题的解决方法。在每个结束时fmincon迭代,输出功能执行以下操作:

  • 绘制当前点。

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

此外,要使历史可用fmincon功能,执行嵌套函数内部优化的呼叫fmincon并返回输出函数变量。有关传递信息的方法的详细信息,请参阅通过额外的参数。这runfmincon在辅助函数此示例的结尾包含嵌套函数调用。

目标和约束函数

问题是最小化函数

F X = exp. 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实现目标函数。这函数嵌套runfmincon实现约束函数。

呼叫求解

要获得问题的解决方案,请参阅历史fmincon迭代,调用runfmincon功能。

[XSOL,FVAL,历史,SearchDir] = runfmincon;
最大线搜索定向一阶Iter项目F-计数F(X)约束步长衍生物最优步骤0 3 1.8394 0.5不可行起始点1 6 1.85127 -0.09197 1 0.109 0.778 2 9 0.300167 9.33 1 -0.117 0.313海森改性两次3 12 0.529835 0.92091 0.12 0.232 4 16 0.186965 -1.517 0.5 -0.224 0.13 5 19 0.0729085 0.3313 1 -0.121 0.054 6 22 0.0353323 -0.03303 1 -0.0542 0.0271 7 25 0.0235566 0.003184 1 -0.0271 0.00587 8 28 0.0235504 9.035e-08 1 -0.0146 8.51e-07主动不等式(到内options.ConstraintTolerance = 1E-06):降低上部ineqlin ineqnonlin 1 2

图包含轴对象。具有由fmincon计算的标题序列的轴对象包含18个类型的类型线,文本。

当地最低发现满足的约束。优化完成,因为目标函数非递减的可行方向,以最优的公差值的范围内,并且约束约束公差值内满意。

输出函数创建了由评估点的情节fmincon。每个点由其迭代号标记。最佳点发生在第八次迭代。序列中的最后两个点是如此接近它们重叠。

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

DISP(历史)
X:[9x2双] FVAL:[9X1双]

FVAL在现场历史包含对应于点序列的目标函数值fmincon单位计算。

DISP(历史记录)
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.0.0346 -0.5241-0.0061 -0.0003 0.0003

辅助函数

下面的代码创建的runfmincon函数,包含的outfun.输出功能,objfun目标函数,非线性约束函数作为嵌套函数。

功能[xsol,FVAL,历史,searchdir] = runfmincon%与outfun设置共享变量历史.x = [];历史.Fval = [];searchDir = [];%调用优化x0 = [-1 1];选项= Optimoptions(@Fmincon,'OutputFcn'@ outfun,......'展示''ITER''算法''active-set');[xsol,fval] = fmincon(@ objfun,x0,[],[],[],[],[],@ conun,选项);功能停止= outfun(x,优化值,状态)stop = false;转变状态案件'在里面'抓住案件'ITER'%连接当前点和目标函数%价值的历史。x必须是一个行向量。history.fval = [history.fval;optimValues.fval];history.x = [history.x;X];%连接具有当前搜索方向%searchdir。searchdir = [searchdir;......optimValues.searchdirection'];积(X(1),X(2),'o');%标注点与迭代次数和添加标题。%添加0.15至x(1)至单独的标签从标绘“O”。文字(x(1)+。15,x(2),......num2str(OptimValues.Iltation));标题('由fmincon计算的点序列');案件'完毕'抓住离开除此以外结尾结尾功能f = objfun(x)f = exp(x(1))*(4 * x(1)^ 2 + 2 * x(2)^ 2 + 4 * x(1)* x(2)+......2 * X(2)+ 1);结尾功能[c,ceq] = confun(x)%非线性不等式约束C = [1.5 + X(1)* X(2) - ×(1) -  X(2);-x(1)* X(2) -  10];%非线性等式约束CEQ = [];结尾结尾

相关话题