主要内容

解决

解决优化问题或方程问题

描述

采用解决找到优化问题或等式问题的解决方案。

例子

索尔=解决(概率解决优化问题或等式问题概率

例子

索尔=解决(概率x0解决概率从点开始x0

例子

索尔=解决(___名称,值除了前面语法中的输入参数外,还使用一个或多个名称-值对参数修改解决方案流程。

索尔fval.) =解决(___还使用先前语法中的任何输入参数返回解决方案的目标函数值。

例子

索尔fval.exitflag输出λ) =解决(___还返回描述退出条件的退出标志,输出结构,包含关于求解过程的附加信息,对于非整数优化问题,采用拉格朗日乘子结构。

例子

全部收缩

解决优化问题定义的线性编程问题。

x = Optimvar(“x”);y = Optimvar(“y”);概率= optimproblem;prob.objective = -x  -  y / 3;prob.constraints.cons1 = x + y <= 2;prob.constraints.cons2 = x + y / 4 <= 1;prob.constraints.cons3 = x  -  y <= 2;prob.constraints.cons4 = x / 4 + y> = -1;prob.constraints.cons5 = x + y> = 1;prob.constraints.cons6 = -x + y <= 2;索尔=解决(问题)
使用linprog解决问题。找到最佳解决方案。
sol =结构体字段:X: 0.6667 y: 1.3333

找到最少的函数,包含在MATLAB®中 x 2 + y 2 ≤. 4 .为此,创建优化变量xy

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

创造一个优化问题作为目标函数。

概率= optimproblem (“客观的”山峰(x, y));

将约束作为不等式包含在优化变量中。

prob.constraints = x ^ 2 + y ^ 2 <= 4;

设置初始点为x到1和y到-1,解决问题。

x0。x=1;x0。y=-1;sol =解决(prob,x0)
使用Fmincon解决问题。发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol =结构体字段:X: 0.2283 y: -1.6255

不支万博1manbetx持的功能要求FCN2Optimexpr.

如果您的目标或非线性约束函数不完全由初等函数组成,则必须使用以下方法将函数转换为优化表达式FCN2Optimexpr..看到将非线性函数转换为优化表达式万博1manbetx支持优化变量和表达式的操作

要转换本示例:

convpeaks = fcn2optimexpr (@peaks, x, y);概率。目标= convpeaks;x0 sol2 =解决(问题)
使用Fmincon解决问题。发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol2 =结构体字段:X: 0.2283 y: -1.6255

The MathWorks, Inc.版权所有

比较有和没有初始可行点的整数规划问题的步骤数。该问题有8个整数变量和4个线性等式约束,并且所有变量都被限制为正。

概率= optimproblem;x = Optimvar(“x”8 1'indowbound',0,“类型”“整数”);

创建四个线性平等约束,并将其包含在问题中。

AEQ = [22 13 26 33 21 3 14 26 39 16 22 28 26 30 23 24 18 14 29 27 30 38 26 26 41 26 28 36 18 38 16 26];BEQ = [7872 10466 11322 12058];缺点= aeq * x == beq;prob.constraints.cons =缺点;

创建目标函数并在问题中包含它。

f = [2 10 13 17 7 5 7 3];prob.objective = f * x;

在不使用初始点的情况下解决问题,并检查显示屏以查看分支和绑定节点的数量。

[X1,FVAL1,EXITFLAG1,OUTPUT1] =求解(PROM);
使用intlinprog解决问题。LP:最佳目标值为1554.047531。切割生成:应用8个强大的CG切割。下限为1591.000000。分支机构和绑定:节点总数NUM INT整数相对探索的时间(S)解决方案FVAL间隙(%)10000 1.03 0  -   -  18027 1.71 1 2.906000E + 03 4.509804E + 01 21859 2.12 2.073000E + 03 2.270974CE + 01 23546 2.353 1.854000E + 03 1.180593E + 01 24121 2.41 3 1.854000E + 03 1.563342C + 03 1.563342C + 03 1.563342C + 00 24294 2.43 1.854000E + 03 0.000000E + 00找到最佳解决方案。intlinprog由于客观值在最佳值的差距容忍范围内,Options.AbsolutegAppolerance = 0(默认值)。INTCON变量在容差,选项中是整数.inteGertolerance = 1E-05(默认值)。

为了比较,用初始可行点来求解。

x0。x=[8 62 23 103 53 84 46 34]'; [x2,fval2,exitflag2,output2] = solve(prob,x0);
使用intlinprog解决问题。LP:最佳目标值为1554.047531。切割生成:应用8个强大的CG切割。下限为1591.000000。相对差距为59.20%。分支机构和绑定:节点总数NUM INT整数相对探索时间(S)解决方案FVAL间隙(%)3627 0.50 2 2.593968C + 01 5844 0.75 3 1.854000E + 03 1.180593C + 01 6204 0.79 3 1.854000E + 031.455526E + 00 6400 0.80 3 1.854000E + 03 0.000000E + 00优化解决方案。intlinprog由于客观值在最佳值的差距容忍范围内,Options.AbsolutegAppolerance = 0(默认值)。INTCON变量在容差,选项中是整数.inteGertolerance = 1E-05(默认值)。
流(在没有初始点的情况下,solve采取了%d的步骤。在初始点上,solve采取了%d步。,Output1.numnodes,Output2.numnodes)
没有初始点,解需要24294步。在初始点,求解需要6400步。

给出初始点并不总是改善问题。对于此问题,使用初始点可节省时间和计算步骤。但是,对于一些问题,初始点可能导致解决采取更多步骤。

解决这个问题

最小值 x - 3. x 1 - 2 x 2 - x 3. 年代 u b j e c t t o x 3. b n 一个 r y x 1 x 2 0 x 1 + x 2 + x 3. ≤. 7 4 x 1 + 2 x 2 + x 3. 1 2

不显示迭代显示。

x = Optimvar(“x”,2,1,'indowbound',0);x3 = Optimvar('x3'“类型”“整数”'indowbound',0,“UpperBound”1);概率= optimproblem;概率。目标= -3*x(1) - 2*x(2) - x3;prob.Constraints。con年代1=x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; options = optimoptions(“intlinprog”“显示”“关闭”);索尔=解决(概率,“选项”选项)
sol =结构体字段:x:[2x1双] x3:1

检查解决方案。

sol.x
ans =2×10 5.5000
sol.x3
ans = 1

解决使用intlinprog作为线性规划问题的求解器。

x = Optimvar(“x”);y = Optimvar(“y”);概率= optimproblem;prob.objective = -x  -  y / 3;prob.constraints.cons1 = x + y <= 2;prob.constraints.cons2 = x + y / 4 <= 1;prob.constraints.cons3 = x  -  y <= 2;prob.constraints.cons4 = x / 4 + y> = -1;prob.constraints.cons5 = x + y> = 1;prob.constraints.cons6 = -x + y <= 2;索尔=解决(概率,“规划求解”“intlinprog”
使用intlinprog解决问题。LP:最佳目标值为-1.111111。找到最优解。没有指定整数变量。intlinprog解决了线性问题。
sol =结构体字段:X: 0.6667 y: 1.3333

求解中描述的混合整数线性规划问题用非默认选项解决整数规划问题并检查所有的输出数据。

x = Optimvar(“x”,2,1,'indowbound',0);x3 = Optimvar('x3'“类型”“整数”'indowbound',0,“UpperBound”1);概率= optimproblem;概率。目标= -3*x(1) - 2*x(2) - x3;prob.Constraints。con年代1=x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; [sol,fval,exitflag,output] = solve(prob)
使用intlinprog解决问题。LP:最佳目标值为- 1200万。找到最优解。intlinprog在根节点停止,因为客观值在最佳值的间隙容忍度范围内,Options.absolutegAppolerance = 0(默认值)。INTCON变量在容差,选项中是整数.inteGertolerance = 1E-05(默认值)。
sol =结构体字段:x:[2x1双] x3:1
fval = -12
ExitFlag = OptimalAllyolution.
输出=结构体字段:relativegap: 0 absoltegap: 0 numfeaspoints: 1 numnodes: 0 construc违例:0消息:'优化解决方案找到....“解决者:“intlinprog”

对于一个没有任何整数约束的问题,你也可以得到一个非空的拉格朗日乘子结构作为第五个输出。

使用指定的索引变量创建并解决优化问题。问题是最大化的利润加权流量的水果到各个机场,受加权流量的约束。

rng (0)重复性的%p = optimproblem (“ObjectiveSense”'最大化');流= optimvar ('流动'......'苹果''橘子'“香蕉”'浆果'},{'纽约''bos'“宽松”},......'indowbound',0,“类型”“整数”);p.Objective = Sum(Sum(Rand(4,3)。*流量));p.constraints.nyc = rand(1,4)* flow(:,'纽约') < = 10;p.Constraints.BOS =兰德(1、4)*流(:,'bos') < = 12;p.Constraints.LAX =兰德(1、4)*流(:,“宽松”) < = 35;索尔=解决(p);
使用intlinprog解决问题。LP:最佳目标值为-1027.472366。启发式:发现1个解决方案使用ZI轮。上限为-1027.233133。相对间隙为0.00%。找到最优解。intlinprog在根节点停止,因为客观值在最佳值的间隙容忍度范围内,Options.absolutegAppolerance = 0(默认值)。INTCON变量在容差,选项中是整数.inteGertolerance = 1E-05(默认值)。

找到纽约和洛杉矶的橘子和浆果的最佳流动。

[IDXFRUIT,IDXAIRPORTS] = findIndex(流量,{'橘子''浆果'},{'纽约'“宽松”})
Idxfruit =.1×22 4
idxAirports =1×21 3.
Orangeberries = sol.flow(Idxfruit,Idxairports)
橙莓=2×20 980.0000 70.0000 0

此显示意味着没有橙子将会到纽约70个浆果纽约,980个橘子将会去l而浆果则不会l

列出以下最佳流程:

水果机场

----- ----------

浆果纽约

苹果BOS

橙子松懈

Idx = finddex (flow, {'浆果''苹果''橘子'},{'纽约''bos'“宽松”})
Idx =.1×3.4 5 10.
OptimalFlow = sol.flow(idx)
optimalFlow =1×3.70.0000 28.0000 980.0000

该显示器意味着70个浆果将会进入70个浆果纽约,28苹果将会去BOS980个橙子将会l

求解非线性方程组

经验值 - 经验值 - x 1 + x 2 x 2 1 + x 1 2 x 1 因为 x 2 + x 2 x 1 1 2

使用基于问题的方法,首先定义x作为两个元素优化变量。

x = Optimvar(“x”2);

创建第一个方程作为一个优化等式表达式。

eq1 = exp( - -( - ( - (x(1)+ x(2)))))== x(2)*(1 + x(1)^ 2);

类似地,将第二个方程创建为优化等式表达式。

eq2 = x(1)* cos(x(2))+ x(2)* sin(x(1))== 1/2;

创建一个方程问题,并将方程放入问题中。

概率= eqnproblem;prob.Equations。eq1 = eq1;prob.Equations。eq2 = eq2;

回顾问题。

展示(prob)
EquationProblem:解:x eq1: exp (exp (- x (x (1) + (2)))) = = (x (2) * (1 + x (1) ^ 2)) eq2: ((x(1)。* cos (x (2))) + (x(2)。* sin (x (1)))) = = 0.5

从要点出发解决问题[0,0].对于基于问题的方法,将初始点指定为结构,变量名称为结构的字段。对于此问题,只有一个变量,x

x0。x=[00]; [sol,fval,exitflag] = solve(prob,x0)
用fsolve解决问题。方程解决。Fsolve完成了,因为函数值的向量接近零(通过函数容差值测量),并且问题出现了规则(通过梯度测量)。
sol =结构体字段:x (2 x1双):
fval =结构体字段:e1: -2.4070e-07 e2: -3.8255e-08
exitflag = EquationSolved

查看解决方案点。

disp (sol.x)
0.3532 - 0.6061

不支万博1manbetx持的功能要求FCN2Optimexpr.

如果你的方程函数不是由初等函数组成的,你必须使用FCN2Optimexpr..对于现在的例子:

ls1 = fcn2optimexpr(@(x)exp( - -( - ( - (x(1)+ x(2))))),x);eq1 = ls1 == x(2)*(1 + x(1)^ 2);ls2 = fcn2optimexpr(@(x)x(1)* cos(x(2))+ x(2)* sin(x(1)),x);eq2 = ls2 == 1/2;

看到万博1manbetx支持优化变量和表达式的操作将非线性函数转换为优化表达式

输入参数

全部收缩

优化问题或等式问题,指定为OptimizationProblem对象或一个公式问题对象。通过使用OptimProblem.;通过使用eqnproblem

警告

基于问题的方法不支持目标函数、非线性等式或非线性不等式中的复值。万博1manbetx如果函数计算具有复值,即使是中间值,最终结果也可能是不正确的。

例子:概率= optimproblem;prob.objective = obj;prob.constraints.cons1 = cons1;

例子:概率= eqnproblem;概率。公式=方程式;

初始点,指定为字段名等于中的变量名的结构概率

有关示例使用x0对于命名索引变量,请参见用命名索引变量创建优化初始点

例子:如果概率有变量命名xyx0。x=[3.,2,17]; x0.y = [pi/3,2*pi/3]

数据类型:结构体

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字是参数名称和价值为对应值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:解决(概率,'选项',选择)

优化选项,指定为逗号分隔对,由“选项”和创建的对象optimoptions或选项结构,例如创建optimset

在内部,解决函数称相关的求解器称为详细“规划求解”参考参考。确保这件事选项与求解器兼容。例如,intlinprog不允许选项是一个结构,和lsqnonneg不允许选项为对象。

有关选项设置的建议,以改进intlinprog解决方案或解决方案的速度,见调整整数线性规划.为了linprog,默认值对偶单纯形的算法通常是内存高效和快速的。偶尔,linprog当较快解决大问题时算法选择是“内点”.有关用于改进非线性问题的解决方案的选项设置的建议,请参阅常用选项:调优和故障排除改善结果

例子:选择= optimoptions(“intlinprog”,“显示”,“没有一个”)

优化求解器,指定为逗号分隔对,由“规划求解”和列出的解决者的名称。为了优化问题,此表包含每个问题类型的可用求解器。

问题类型 默认的解算器 其他允许的求解器
线性目标,线性约束 linprog intlinprogQuadprog.fminconFminunc.Fminunc.不推荐,因为无约束线性规划是常数或无界的)
线性目标,线性和整数约束 intlinprog linprog(整数约束忽略)
二次目标,线性约束 Quadprog. fminconFminunc.(没有限制)
线性目标、可选线性约束、锥约束的形式范数(线性表达式)+常数<=线性表达式SQRT(平方和)+常数<=线性表达式 Coneprog. fmincon
最小化|| C * X-D || ^ 2受线性约束 Lsqlin.当目标是一个常数加上线性表达式的平方和时 Quadprog.lsqnonneg(忽略x> = 0以外的约束lsqnonneg),fminconFminunc.(没有限制)
最小化|| C * X - D || ^ 2受X> = 0 Lsqlin. Quadprog.lsqnonneg
最小化总和(e (i) ^ 2)。, 在哪里E(i)是一个优化表达式,受约束吗 lsqnonlin当目标具有给出的表格时编写基于问题的最小二乘的目标函数 lsqcurvefitfminconFminunc.(没有限制)
最小化一般非线性功能fx Fminunc. fmincon
最小化一般非线性功能fx),或使任何受非线性约束的函数最小 fmincon (没有任何)

笔记

如果你选择lsqcurvefit作为最小二乘问题的求解器,解决用途lsqnonlin.的lsqcurvefitlsqnonlin求解器是相同的解决

警告

对于最大化问题(概率。ObjectiveSense“最大限度”“最大化”),不要指定最小二乘求解器(以名称开头的求解器)LSQ.).如果你这样做,解决抛出错误,因为这些求解器不能最大化。

对于方程求解,此表包含每种问题类型的可用求解器。在表中,

  • 指示问题类型的默认解决程序。

  • Y表示可用的求解器。

  • N表示求解器不可用。

万博1manbetx支持求解方程

方程类型 Lsqlin. lsqnonneg fzero FSOLVE. lsqnonlin
线性 N Y(标量) Y Y
线性加界 Y N N Y
标量非线性 N N Y Y
非线性系统 N N N Y
非线性系统加边界 N N N N

例子:“intlinprog”

数据类型:char|细绳

表示使用自动微分(AD)对非线性目标函数,指定为逗号分隔对组成'目标'“汽车”(如果可能,请使用AD)'自动前进'(如果可能,使用前向广告),'自动反转'(如果可能的话,使用反向AD),或者有限差分的(不要使用广告)。选择包括汽车在目标函数得到支持的情况下,使底层求解器在求解问题时使用梯度信息,如万博1manbetx万博1manbetx支持优化变量和表达式的操作.例如,请参见自动微分在基于问题优化中的作用

求解器默认选择以下类型的AD:

  • 对于一般非线性目标函数,fmincon默认为目标函数反向AD。fmincon当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon默认为非线性约束函数转发广告。

  • 对于一般非线性目标函数,Fminunc.默认为反向AD。

  • 对于最小二乘目标函数,fminconFminunc.默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数

  • lsqnonlin当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin默认为反向AD。

  • FSOLVE.当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.默认为反向AD。

例子:有限差分的

数据类型:char|细绳

表示对非线性约束函数使用自动微分(AD),指定为逗号分隔对组成“ConstraintDerivative”“汽车”(如果可能,请使用AD)'自动前进'(如果可能,使用前向广告),'自动反转'(如果可能的话,使用反向AD),或者有限差分的(不要使用广告)。选择包括汽车导致底层求解器在解决问题时使用梯度信息,条件是支持约束函数,如所描述的万博1manbetx万博1manbetx支持优化变量和表达式的操作.例如,请参见自动微分在基于问题优化中的作用

求解器默认选择以下类型的AD:

  • 对于一般非线性目标函数,fmincon默认为目标函数反向AD。fmincon当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon默认为非线性约束函数转发广告。

  • 对于一般非线性目标函数,Fminunc.默认为反向AD。

  • 对于最小二乘目标函数,fminconFminunc.默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数

  • lsqnonlin当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin默认为反向AD。

  • FSOLVE.当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.默认为反向AD。

例子:有限差分的

数据类型:char|细绳

表示对非线性约束函数使用自动微分(AD),指定为逗号分隔对组成“EquationDerivative”“汽车”(如果可能,请使用AD)'自动前进'(如果可能,使用前向广告),'自动反转'(如果可能的话,使用反向AD),或者有限差分的(不要使用广告)。选择包括汽车使底层求解器在解决问题时使用梯度信息,只要方程函数是支持的,如中所述万博1manbetx万博1manbetx支持优化变量和表达式的操作.例如,请参见自动微分在基于问题优化中的作用

求解器默认选择以下类型的AD:

  • 对于一般非线性目标函数,fmincon默认为目标函数反向AD。fmincon当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon默认为非线性约束函数转发广告。

  • 对于一般非线性目标函数,Fminunc.默认为反向AD。

  • 对于最小二乘目标函数,fminconFminunc.默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数

  • lsqnonlin当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin默认为反向AD。

  • FSOLVE.当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.默认为反向AD。

例子:有限差分的

数据类型:char|细绳

输出参数

全部收缩

解决方案,作为一个结构返回。结构的字段是优化变量的名称。看到优越的

目标函数在解处的值,作为实数返回,或者,对于方程组,作为实向量返回。对于最小二乘问题,fval.是解决方案中残留的平方和。对于等式解决问题,fval.是解处的函数值,也就是方程的左边减去右边。

提示

如果你不去要求fval.对于优化问题,可以使用以下方法计算:

fval =评估(prob.Objective sol)

解析器停止的原因,作为枚举变量返回。您可以转换exitflag到它的数值等效使用双(ExitFlag),和它的字符串等效使用字符串(exitflag)

此表描述了出口标志intlinprog求解器。

退出标志intlinprog 数值上等于 意义
OptimalWithPoorFeasibility 3.

该解决方案对于相对而是可行的约束特许宽容,但就绝对宽容而言是行不通的。

IntegerFeasible 2 intlinprog过早停止,发现整数可行点。
OptimalSolution

1

求解器收敛到一个解x

索尔弗林岩

0

intlinprog超过下列其中一项公差:

  • LpMaxIterations.

  • maxNodes.

  • MaxTime

  • RootLPMaxIterations

看到公差和停止标准解决当它在根节点耗尽内存时也返回此退出标志。

outputfcnstop. -1 intlinprog被输出函数或绘图函数停止。
NoFeasiblePointFound

-2

找不到可行的点。

无限

-3

这个问题没有边界。

FeasibilityLost

-9

求解器损失了可行性。

Exitflags3.-9涉及具有很大侵犯性的万博 尤文图斯解决方案。这些通常由具有大条件数量的线性约束矩阵或具有大解决方案组件的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或者在变量上给出更紧的边界。

此表描述了出口标志linprog求解器。

退出标志linprog 数值上等于 意义
OptimalWithPoorFeasibility 3.

该解决方案对于相对而是可行的约束特许宽容,但就绝对宽容而言是行不通的。

OptimalSolution 1

求解器收敛到一个解x

索尔弗林岩 0

迭代的数量超过选项。MaxIterations

NoFeasiblePointFound -2

找不到可行的点。

无限 -3

这个问题没有边界。

Foundnan. -4

在执行算法期间遇到的值。

PrimalDualInfe.able. -5

原始和双重问题都是不可行的。

Directiontoosmall. -7

搜索方向太小。没有进一步的进展。

FeasibilityLost -9

求解器损失了可行性。

Exitflags3.-9涉及具有很大侵犯性的万博 尤文图斯解决方案。这些通常由具有大条件数量的线性约束矩阵或具有大解决方案组件的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或者在变量上给出更紧的边界。

此表描述了出口标志Lsqlin.求解器。

退出标志Lsqlin. 数值上等于 意义
FunctionChangeBelowTolerance 3.

残余的变化小于规定的公差选项。FunctionTolerance.(信任区域反光算法)

StepSizeBelowTolerance

2

步长小于选项。StepTolerance、约束满足。(内部点算法)

OptimalSolution 1

求解器收敛到一个解x

索尔弗林岩 0

迭代的数量超过选项。MaxIterations

NoFeasiblePointFound -2

为了优化问题,问题是不可行的。或,内部点算法,步长比选项。StepTolerance,但不满足约束。

对于方程问题,没有解。

IllConditioned -4

不良条件阻碍了进一步优化。

NoDescentDirectionFound -8

搜索方向太小。没有进一步的进展。(内部点算法)

此表描述了出口标志Quadprog.求解器。

退出标志Quadprog. 数值上等于 意义
LocalMinimumFound 4

发现本地最低限度;最小不是唯一的。

FunctionChangeBelowTolerance 3.

目标函数值的变化小于规定的公差选项。FunctionTolerance.(信任区域反光算法)

StepSizeBelowTolerance

2

步长小于选项。StepTolerance、约束满足。(内部点凸算法)

OptimalSolution 1

求解器收敛到一个解x

索尔弗林岩 0

迭代的数量超过选项。MaxIterations

NoFeasiblePointFound -2

这个问题不可行。或,内部点算法,步长比选项。StepTolerance,但不满足约束。

IllConditioned -4

不良条件阻碍了进一步优化。

nonconvex.

-6

发现非凸问题。(内部点凸算法)

NoDescentDirectionFound -8

无法计算步进方向。(内部点凸算法)

此表描述了出口标志Coneprog.求解器。

退出标志Coneprog. 数值上等于 意义
OptimalSolution 1

求解器收敛到一个解x

索尔弗林岩 0

迭代的数量超过选项。MaxIterations,或超过解决时间(秒)选项。MaxTime

NoFeasiblePointFound -2

这个问题不可行。

无限 -3

这个问题没有边界。

Directiontoosmall.

-7

搜索方向变得太小。无法进一步进展。

不稳定 -10年

这个问题在数值上不稳定。

此表描述了出口标志lsqcurvefitlsqnonlin求解器。

退出标志lsqnonlin 数值上等于 意义
searchDirectionToosmall. 4

搜索方向的幅度小于选项。StepTolerance

FunctionChangeBelowTolerance 3.

残差变化小于选项。FunctionTolerance

StepSizeBelowTolerance

2

步长小于选项。StepTolerance

OptimalSolution 1

求解器收敛到一个解x

索尔弗林岩 0

超过迭代次数选项。MaxIterations或超过函数求值次数选项。MaxFunctionEvaluations

outputfcnstop. -1

被输出函数或绘图函数停止。

NoFeasiblePointFound -2

对于优化问题,问题是不可行的:边界乌兰巴托是不一致的。

对于方程问题,没有解。

此表描述了出口标志Fminunc.求解器。

退出标志Fminunc. 数值上等于 意义
NoDecreaseAlongSearchDirection 5

目标函数的预测减少小于选项。FunctionTolerance宽容。

FunctionChangeBelowTolerance 3.

目标函数值的变化小于选项。FunctionTolerance宽容。

StepSizeBelowTolerance

2

在某一方面的变化x小于选项。StepTolerance宽容。

OptimalSolution 1

梯度的大小小于选项。OptimalityTolerance宽容。

索尔弗林岩 0

迭代次数超过选项。MaxIterations或函数求值次数超过选项。MaxFunctionEvaluations

outputfcnstop. -1

被输出函数或绘图函数停止。

无限 -3

当前迭代的目标函数如下选项。ObjectiveLimit

此表描述了出口标志fmincon求解器。

退出标志fmincon 数值上等于 意义
NoDecreaseAlongSearchDirection 5

搜索方向上的定向导数的幅度小于2 *选项。OptimalityTolerance最大约束违背小于选项。约束特许

searchDirectionToosmall. 4

搜索方向的幅度小于2 *选项。StepTolerance最大约束违背小于选项。约束特许

FunctionChangeBelowTolerance 3.

目标函数的变化值小于选项。FunctionTolerance最大约束违背小于选项。约束特许

StepSizeBelowTolerance

2

在某一方面的变化x小于选项。StepTolerance最大约束违背小于选项。约束特许

OptimalSolution 1

一阶最优测度小于选项。OptimalityTolerance,最大约束违背小于选项。约束特许

索尔弗林岩 0

迭代次数超过选项。MaxIterations或函数求值次数超过选项。MaxFunctionEvaluations

outputfcnstop. -1

被输出函数或绘图函数停止。

NoFeasiblePointFound -2

找不到可行的点。

无限 -3

当前迭代的目标函数如下选项。ObjectiveLimit最大约束违背小于选项。约束特许

此表描述了出口标志FSOLVE.求解器。

退出标志FSOLVE. 数值上等于 意义
searchDirectionToosmall. 4

搜索方向的幅度小于选项。StepTolerance方程,解决了。

FunctionChangeBelowTolerance 3.

目标函数的变化值小于选项。FunctionTolerance方程,解决了。

StepSizeBelowTolerance

2

在某一方面的变化x小于选项。StepTolerance方程,解决了。

OptimalSolution 1

一阶最优测度小于选项。OptimalityTolerance方程,解决了。

索尔弗林岩 0

迭代次数超过选项。MaxIterations或函数求值次数超过选项。MaxFunctionEvaluations

outputfcnstop. -1

被输出函数或绘图函数停止。

NoFeasiblePointFound -2

融合到不是根的点。

TrustRegionRadiusTooSmall -3

方程没有解决。信任区域半径变小(信任区域 - 嘟冰算法)。

此表描述了出口标志fzero求解器。

退出标志fzero 数值上等于 意义
OptimalSolution 1

方程解决。

outputfcnstop. -1

被输出函数或绘图函数停止。

FoundNaNInfOrComplex -4

或在搜索包含符号更改的间隔期间遇到的复数。

奇点点 -5

可能会收敛到一个奇点。

臭氧阶段录音 -6 没有找到两个函数值符号相反的点。

关于优化过程的信息,作为结构返回。输出结构包含相关的底层求解器输出字段中的字段,具体取决于哪个求解器解决被称为:

解决包括附加字段解算器输出结构来标识所使用的求解器,例如“intlinprog”

解算器是一个非线性求解器,解决包括描述衍生估计类型的一个或两个额外字段。的objectivederivative如果合适,约束扩展字段可以采用以下值:

  • “reverse-AD”用于反向自动分化

  • “forward-AD”前向前自动分化

  • “有限差分”对于有限差分估计

  • “封闭式”对于线性或二次函数

解的拉格朗日乘数,作为结构返回。

笔记

解决没有返回λequation-solving问题。

intlinprogFminunc.求解器,λ是空的,[].对于其他解算者,λ这些字段:

  • 变量- 包含每个问题变量的字段。每个问题变量名称是具有两个字段的结构:

    • 较低的-与变量相关的拉格朗日乘数下面属性,作为与变量大小相同的数组返回。非零元素表示解在下界。这些乘数在结构中lambda.Variables。variablename。降低

    • -与变量相关的拉格朗日乘数UpperBound属性,作为与变量大小相同的数组返回。非零元素表示解在上界。这些乘数在结构中lambda.Variables。variablename.Upper

  • 约束-每个问题约束包含一个字段。每个问题约束位于一个结构中,该结构的名称是约束名称,其值是与约束大小相同的数字数组。非零元素表示约束在解处是活动的。这些乘数在结构中lambda.constraints。约束名称

    笔记

    约束阵列的元素都具有相同的比较(<===,或>=),并且都是同一类型(线性、二次或非线性)。

算法

全部收缩

转换为求解器形式

在内部,解决功能通过调用求解器来解决优化问题:

  • linprog线性目标和线性约束

  • intlinprog用于线性目标和线性约束和整数约束

  • Quadprog.对于二次目标和线性约束

  • Lsqlin.lsqnonneg对于线性约束的线性最小二乘

  • lsqcurvefitlsqnonlin对于带有束缚约束的非线性最小二乘

  • Fminunc.对于没有任何约束条件(甚至没有变界)且具有一般非线性目标函数的问题

  • fmincon对于非线性约束的问题,或者具有一般非线性目标和至少一个约束

  • fzero对于标量非线性方程

  • Lsqlin.对于线性方程组,有或没有边界

  • FSOLVE.对于无约束的非线性方程组

  • lsqnonlin对于有界的非线性方程组

解决可以调用这些函数,必须将问题转换为求解器表单解决或其他相关的函数或对象。例如,这种转换需要具有矩阵表示而不是优化变量表达式的线性约束。

算法中的第一步是在将优化表达式放入问题时发生的。一个OptimizationProblem对象具有在其表达式中使用的变量的内部列表。每个变量在表达式中都有一个线性索引和一个大小。因此,问题变量具有隐含的矩阵形式。的prob2struct.函数从问题表单执行转换到求解器表单。例如,请参见将问题转化为结构

对于非线性优化问题,解决用途自动分化计算目标函数和非线性约束函数的梯度。这些导数适用于目标函数和约束函数由万博1manbetx支持优化变量和表达式的操作不要使用FCN2Optimexpr.函数。当自动微分不适用时,求解器使用有限差分估计导数。自动区分的详细信息请参见自动分化背景

对于默认值和允许的解算器解决调用,视问题的客观和约束而定,见“规划求解”.属性可以覆盖默认值“规划求解”调用时的名称 - 值对参数解决

对于算法intlinprog用来解决MILP问题intlinprog算法.对于那些linprog用来解决线性编程问题,看到线性编程算法.对于那些Quadprog.用来解决二次编程问题,看二次编程算法.对于线性或非线性最小二乘求解器算法,请参阅最小二乘(模型拟合)算法.有关非线性求解算法,请参见无约束非线性优化算法约束非线性优化算法

对于非线性方程的求解,解决在内部表示每个方程,作为左侧和右侧之间的差异。然后解决试图最小化方程各部分的平方和。解非线性方程组的算法见方程求解算法.当问题也有界时,解决呼叫lsqnonlin使方程各分量的平方和最小。看到最小二乘(模型拟合)算法

笔记

如果你的目标函数是平方和,你想解决要认识到这一点,就把它写成总和(expr。^ 2),而不是expr'* expr或任何其他形式。内部解析器只识别显式的平方和。有关详细信息,请参见编写基于问题的最小二乘的目标函数.例如,请参见基于问题的非负线性最小二乘

自动分化

自动差异化(AD)适用于解决prob2struct.在以下条件下的功能:

  • 如上所述,支持目标和约束函数万博1manbetx万博1manbetx支持优化变量和表达式的操作.它们不需要使用FCN2Optimexpr.函数。

  • 求助者呼吁解决fminconFminunc.FSOLVE.,或lsqnonlin

  • 对于优化问题,'目标'“ConstraintDerivative”的名称-值对参数解决prob2struct.“汽车”'自动前进',或'自动反转'

  • 对于等式问题,“EquationDerivative”选项设置为“汽车”'自动前进',或'自动反转'

当广告适用时 支持的所有约束函数万博1manbetx 不支持一个或多个约束万博1manbetx
目标函数的支持万博1manbetx AD用于表示目标和约束条件 广告仅用于客观
不支持目标函数万博1manbetx AD仅用于约束 广告不习惯

当这些条件不满足时,解决通过有限差分估计梯度prob2struct.不会在其生成的函数文件中创建梯度。

求解器默认选择以下类型的AD:

  • 对于一般非线性目标函数,fmincon默认为目标函数反向AD。fmincon当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon默认为非线性约束函数转发广告。

  • 对于一般非线性目标函数,Fminunc.默认为反向AD。

  • 对于最小二乘目标函数,fminconFminunc.默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数

  • lsqnonlin当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin默认为反向AD。

  • FSOLVE.当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.默认为反向AD。

笔记

在转换的问题中使用自动衍生物prob2struct.,传递指定这些衍生品的选项。

选择= optimoptions (“fmincon”“SpecifyObjectiveGradient”,真的,......“SpecifyConstraintGradient”,真正的);问题。选项=选项;

目前,广告仅适用于初级衍生品;它不适用于第二个或更高衍生物。所以,例如,如果您想使用分析粗糙的Hessian来加快优化,则无法使用解决直接使用,而必须使用基于问题的工作流中的供应衍生品

兼容性的考虑

全部展开

错误开始于R2018b

扩展功能

介绍了R2017b