解决优化问题或方程问题
采用解决
找到优化问题或等式问题的解决方案。
提示
对于完整的工作流程,请参阅具体问题具体分析优化工作流程或基于问题的解决方程的工作流程.
解决优化问题定义的线性编程问题。
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
和y
.
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 = 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
解决线性计划力解决
使用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苹果将会去BOS
980个橙子将会l
.
求解非线性方程组
使用基于问题的方法,首先定义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;
概率
- - - - - -优化问题或等式问题OptimizationProblem
对象|公式问题
对象优化问题或等式问题,指定为OptimizationProblem
对象或一个公式问题
对象。通过使用OptimProblem.
;通过使用eqnproblem
.
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中的复值。万博1manbetx如果函数计算具有复值,即使是中间值,最终结果也可能是不正确的。
例子:概率= optimproblem;prob.objective = obj;prob.constraints.cons1 = cons1;
例子:概率= eqnproblem;概率。公式=方程式;
x0
- - - - - -初始点初始点,指定为字段名等于中的变量名的结构概率
.
有关示例使用x0
对于命名索引变量,请参见用命名索引变量创建优化初始点.
例子:如果概率
有变量命名x
和y
:x0。x=[3.,2,17]; x0.y = [pi/3,2*pi/3]
.
数据类型:结构体
指定可选的逗号分隔的对名称,值
参数。的名字
是参数名称和价值
为对应值。的名字
必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家
.
解决(概率,'选项',选择)
“选项”
- - - - - -优化选项optimoptions
|选择结构优化选项,指定为逗号分隔对,由“选项”
和创建的对象optimoptions
或选项结构,例如创建optimset
.
在内部,解决
函数称相关的求解器称为详细“规划求解”
参考参考。确保这件事选项
与求解器兼容。例如,intlinprog
不允许选项是一个结构,和lsqnonneg
不允许选项为对象。
有关选项设置的建议,以改进intlinprog
解决方案或解决方案的速度,见调整整数线性规划.为了linprog
,默认值对偶单纯形的
算法通常是内存高效和快速的。偶尔,linprog
当较快解决大问题时算法
选择是“内点”
.有关用于改进非线性问题的解决方案的选项设置的建议,请参阅常用选项:调优和故障排除和改善结果.
例子:选择= optimoptions(“intlinprog”,“显示”,“没有一个”)
“规划求解”
- - - - - -优化求解器“intlinprog”
|'linprog'
|'lsqlin'
|“lsqcurvefit”
|“lsqnonlin”
|'lsqnonneg'
|“quadprog”
|“fminunc”
|“fmincon”
|“fzero”
|“fsolve”
优化求解器,指定为逗号分隔对,由“规划求解”
和列出的解决者的名称。为了优化问题,此表包含每个问题类型的可用求解器。
问题类型 | 默认的解算器 | 其他允许的求解器 |
---|---|---|
线性目标,线性约束 | linprog |
intlinprog ,Quadprog. ,fmincon ,Fminunc. (Fminunc. 不推荐,因为无约束线性规划是常数或无界的) |
线性目标,线性和整数约束 | intlinprog |
linprog (整数约束忽略) |
二次目标,线性约束 | Quadprog. |
fmincon ,Fminunc. (没有限制) |
线性目标、可选线性约束、锥约束的形式范数(线性表达式)+常数<=线性表达式 或SQRT(平方和)+常数<=线性表达式 |
Coneprog. |
fmincon |
最小化|| C * X-D || ^ 2受线性约束 | Lsqlin. 当目标是一个常数加上线性表达式的平方和时 |
Quadprog. ,lsqnonneg (忽略x> = 0以外的约束lsqnonneg ),fmincon ,Fminunc. (没有限制) |
最小化|| C * X - D || ^ 2受X> = 0 | Lsqlin. |
Quadprog. ,lsqnonneg |
最小化总和(e (i) ^ 2)。 , 在哪里E(i) 是一个优化表达式,受约束吗 |
lsqnonlin 当目标具有给出的表格时编写基于问题的最小二乘的目标函数 |
lsqcurvefit ,fmincon ,Fminunc. (没有限制) |
最小化一般非线性功能f(x) | Fminunc. |
fmincon |
最小化一般非线性功能f(x),或使任何受非线性约束的函数最小 | fmincon |
(没有任何) |
笔记
如果你选择lsqcurvefit
作为最小二乘问题的求解器,解决
用途lsqnonlin
.的lsqcurvefit
和lsqnonlin
求解器是相同的解决
.
警告
对于最大化问题(概率。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。
对于最小二乘目标函数,fmincon
和Fminunc.
默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数.
lsqnonlin
当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin
默认为反向AD。
FSOLVE.
当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.
默认为反向AD。
例子:有限差分的
数据类型:char
|细绳
“ConstraintDerivative”
- - - - - -对约束函数使用自动微分的指示“汽车”
(默认)|'自动前进'
|'自动反转'
|有限差分的
表示对非线性约束函数使用自动微分(AD),指定为逗号分隔对组成“ConstraintDerivative”
和“汽车”
(如果可能,请使用AD)'自动前进'
(如果可能,使用前向广告),'自动反转'
(如果可能的话,使用反向AD),或者有限差分的
(不要使用广告)。选择包括汽车
导致底层求解器在解决问题时使用梯度信息,条件是支持约束函数,如所描述的万博1manbetx万博1manbetx支持优化变量和表达式的操作.例如,请参见自动微分在基于问题优化中的作用.
求解器默认选择以下类型的AD:
对于一般非线性目标函数,fmincon
默认为目标函数反向AD。fmincon
当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon
默认为非线性约束函数转发广告。
对于一般非线性目标函数,Fminunc.
默认为反向AD。
对于最小二乘目标函数,fmincon
和Fminunc.
默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数.
lsqnonlin
当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin
默认为反向AD。
FSOLVE.
当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.
默认为反向AD。
例子:有限差分的
数据类型:char
|细绳
“EquationDerivative”
- - - - - -使用自动差异的等式的指示“汽车”
(默认)|'自动前进'
|'自动反转'
|有限差分的
表示对非线性约束函数使用自动微分(AD),指定为逗号分隔对组成“EquationDerivative”
和“汽车”
(如果可能,请使用AD)'自动前进'
(如果可能,使用前向广告),'自动反转'
(如果可能的话,使用反向AD),或者有限差分的
(不要使用广告)。选择包括汽车
使底层求解器在解决问题时使用梯度信息,只要方程函数是支持的,如中所述万博1manbetx万博1manbetx支持优化变量和表达式的操作.例如,请参见自动微分在基于问题优化中的作用.
求解器默认选择以下类型的AD:
对于一般非线性目标函数,fmincon
默认为目标函数反向AD。fmincon
当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon
默认为非线性约束函数转发广告。
对于一般非线性目标函数,Fminunc.
默认为反向AD。
对于最小二乘目标函数,fmincon
和Fminunc.
默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数.
lsqnonlin
当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin
默认为反向AD。
FSOLVE.
当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.
默认为反向AD。
例子:有限差分的
数据类型:char
|细绳
索尔
——解决方案解决方案,作为一个结构返回。结构的字段是优化变量的名称。看到优越的
.
fval.
- 解决方案的目标函数值目标函数在解处的值,作为实数返回,或者,对于方程组,作为实向量返回。对于最小二乘问题,fval.
是解决方案中残留的平方和。对于等式解决问题,fval.
是解处的函数值,也就是方程的左边减去右边。
提示
如果你不去要求fval.
对于优化问题,可以使用以下方法计算:
fval =评估(prob.Objective sol)
exitflag
-原因解决器停止解析器停止的原因,作为枚举变量返回。您可以转换exitflag
到它的数值等效使用双(ExitFlag)
,和它的字符串等效使用字符串(exitflag)
.
此表描述了出口标志intlinprog
求解器。
退出标志intlinprog |
数值上等于 | 意义 |
---|---|---|
OptimalWithPoorFeasibility |
3. |
该解决方案对于相对而是可行的 |
IntegerFeasible |
2 | intlinprog 过早停止,发现整数可行点。 |
OptimalSolution |
|
求解器收敛到一个解 |
索尔弗林岩 |
|
看到公差和停止标准. |
outputfcnstop. |
-1 |
intlinprog 被输出函数或绘图函数停止。 |
NoFeasiblePointFound |
|
找不到可行的点。 |
无限 |
|
这个问题没有边界。 |
FeasibilityLost |
|
求解器损失了可行性。 |
Exitflags3.
和-9
涉及具有很大侵犯性的万博 尤文图斯解决方案。这些通常由具有大条件数量的线性约束矩阵或具有大解决方案组件的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或者在变量上给出更紧的边界。
此表描述了出口标志linprog
求解器。
退出标志linprog |
数值上等于 | 意义 |
---|---|---|
OptimalWithPoorFeasibility |
3. |
该解决方案对于相对而是可行的 |
OptimalSolution |
1 |
求解器收敛到一个解 |
索尔弗林岩 |
0 |
迭代的数量超过 |
NoFeasiblePointFound |
-2 |
找不到可行的点。 |
无限 |
-3 |
这个问题没有边界。 |
Foundnan. |
-4 |
|
PrimalDualInfe.able. |
-5 |
原始和双重问题都是不可行的。 |
Directiontoosmall. |
-7 |
搜索方向太小。没有进一步的进展。 |
FeasibilityLost |
-9 |
求解器损失了可行性。 |
Exitflags3.
和-9
涉及具有很大侵犯性的万博 尤文图斯解决方案。这些通常由具有大条件数量的线性约束矩阵或具有大解决方案组件的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或者在变量上给出更紧的边界。
此表描述了出口标志Lsqlin.
求解器。
退出标志Lsqlin. |
数值上等于 | 意义 |
---|---|---|
FunctionChangeBelowTolerance |
3. |
残余的变化小于规定的公差 |
StepSizeBelowTolerance |
|
步长小于 |
OptimalSolution |
1 |
求解器收敛到一个解 |
索尔弗林岩 |
0 |
迭代的数量超过 |
NoFeasiblePointFound |
-2 |
为了优化问题,问题是不可行的。或, 对于方程问题,没有解。 |
IllConditioned |
-4 |
不良条件阻碍了进一步优化。 |
NoDescentDirectionFound |
-8 |
搜索方向太小。没有进一步的进展。( |
此表描述了出口标志Quadprog.
求解器。
退出标志Quadprog. |
数值上等于 | 意义 |
---|---|---|
LocalMinimumFound |
4 |
发现本地最低限度;最小不是唯一的。 |
FunctionChangeBelowTolerance |
3. |
目标函数值的变化小于规定的公差 |
StepSizeBelowTolerance |
|
步长小于 |
OptimalSolution |
1 |
求解器收敛到一个解 |
索尔弗林岩 |
0 |
迭代的数量超过 |
NoFeasiblePointFound |
-2 |
这个问题不可行。或, |
IllConditioned |
-4 |
不良条件阻碍了进一步优化。 |
nonconvex. |
|
发现非凸问题。( |
NoDescentDirectionFound |
-8 |
无法计算步进方向。( |
此表描述了出口标志Coneprog.
求解器。
退出标志Coneprog. |
数值上等于 | 意义 |
---|---|---|
OptimalSolution |
1 |
求解器收敛到一个解 |
索尔弗林岩 |
0 |
迭代的数量超过 |
NoFeasiblePointFound |
-2 |
这个问题不可行。 |
无限 |
-3 |
这个问题没有边界。 |
Directiontoosmall. |
|
搜索方向变得太小。无法进一步进展。 |
不稳定 |
-10年 |
这个问题在数值上不稳定。 |
此表描述了出口标志lsqcurvefit
或lsqnonlin
求解器。
退出标志lsqnonlin |
数值上等于 | 意义 |
---|---|---|
searchDirectionToosmall. |
4 |
搜索方向的幅度小于 |
FunctionChangeBelowTolerance |
3. |
残差变化小于 |
StepSizeBelowTolerance |
|
步长小于 |
OptimalSolution |
1 |
求解器收敛到一个解 |
索尔弗林岩 |
0 |
超过迭代次数 |
outputfcnstop. |
-1 |
被输出函数或绘图函数停止。 |
NoFeasiblePointFound |
-2 |
对于优化问题,问题是不可行的:边界 对于方程问题,没有解。 |
此表描述了出口标志Fminunc.
求解器。
退出标志Fminunc. |
数值上等于 | 意义 |
---|---|---|
NoDecreaseAlongSearchDirection |
5 |
目标函数的预测减少小于 |
FunctionChangeBelowTolerance |
3. |
目标函数值的变化小于 |
StepSizeBelowTolerance |
|
在某一方面的变化 |
OptimalSolution |
1 |
梯度的大小小于 |
索尔弗林岩 |
0 |
迭代次数超过 |
outputfcnstop. |
-1 |
被输出函数或绘图函数停止。 |
无限 |
-3 |
当前迭代的目标函数如下 |
此表描述了出口标志fmincon
求解器。
退出标志fmincon |
数值上等于 | 意义 |
---|---|---|
NoDecreaseAlongSearchDirection |
5 |
搜索方向上的定向导数的幅度小于2 * |
searchDirectionToosmall. |
4 |
搜索方向的幅度小于2 * |
FunctionChangeBelowTolerance |
3. |
目标函数的变化值小于 |
StepSizeBelowTolerance |
|
在某一方面的变化 |
OptimalSolution |
1 |
一阶最优测度小于 |
索尔弗林岩 |
0 |
迭代次数超过 |
outputfcnstop. |
-1 |
被输出函数或绘图函数停止。 |
NoFeasiblePointFound |
-2 |
找不到可行的点。 |
无限 |
-3 |
当前迭代的目标函数如下 |
此表描述了出口标志FSOLVE.
求解器。
退出标志FSOLVE. |
数值上等于 | 意义 |
---|---|---|
searchDirectionToosmall. |
4 |
搜索方向的幅度小于 |
FunctionChangeBelowTolerance |
3. |
目标函数的变化值小于 |
StepSizeBelowTolerance |
|
在某一方面的变化 |
OptimalSolution |
1 |
一阶最优测度小于 |
索尔弗林岩 |
0 |
迭代次数超过 |
outputfcnstop. |
-1 |
被输出函数或绘图函数停止。 |
NoFeasiblePointFound |
-2 |
融合到不是根的点。 |
TrustRegionRadiusTooSmall |
-3 |
方程没有解决。信任区域半径变小( |
此表描述了出口标志fzero
求解器。
退出标志fzero |
数值上等于 | 意义 |
---|---|---|
OptimalSolution |
1 |
方程解决。 |
outputfcnstop. |
-1 |
被输出函数或绘图函数停止。 |
FoundNaNInfOrComplex |
-4 |
|
奇点点 |
-5 |
可能会收敛到一个奇点。 |
臭氧阶段录音 |
-6 |
没有找到两个函数值符号相反的点。 |
输出
-优化流程信息关于优化过程的信息,作为结构返回。输出结构包含相关的底层求解器输出字段中的字段,具体取决于哪个求解器解决
被称为:
解决
包括附加字段解算器
在输出
结构来标识所使用的求解器,例如“intlinprog”
.
当解算器
是一个非线性求解器,解决
包括描述衍生估计类型的一个或两个额外字段。的objectivederivative
如果合适,约束扩展
字段可以采用以下值:
“reverse-AD”
用于反向自动分化
“forward-AD”
前向前自动分化
“有限差分”
对于有限差分估计
“封闭式”
对于线性或二次函数
λ
-解处的拉格朗日乘数解的拉格朗日乘数,作为结构返回。
笔记
解决
没有返回λ
equation-solving问题。
为intlinprog
和Fminunc.
求解器,λ
是空的,[]
.对于其他解算者,λ
这些字段:
变量
- 包含每个问题变量的字段。每个问题变量名称是具有两个字段的结构:
较低的
-与变量相关的拉格朗日乘数下面
属性,作为与变量大小相同的数组返回。非零元素表示解在下界。这些乘数在结构中lambda.Variables。
.variablename
。降低
上
-与变量相关的拉格朗日乘数UpperBound
属性,作为与变量大小相同的数组返回。非零元素表示解在上界。这些乘数在结构中lambda.Variables。
.variablename
.Upper
约束
-每个问题约束包含一个字段。每个问题约束位于一个结构中,该结构的名称是约束名称,其值是与约束大小相同的数字数组。非零元素表示约束在解处是活动的。这些乘数在结构中lambda.constraints。
.约束名称
笔记
约束阵列的元素都具有相同的比较(<=
,==
,或>=
),并且都是同一类型(线性、二次或非线性)。
在内部,解决
功能通过调用求解器来解决优化问题:
前解决
可以调用这些函数,必须将问题转换为求解器表单解决
或其他相关的函数或对象。例如,这种转换需要具有矩阵表示而不是优化变量表达式的线性约束。
算法中的第一步是在将优化表达式放入问题时发生的。一个OptimizationProblem
对象具有在其表达式中使用的变量的内部列表。每个变量在表达式中都有一个线性索引和一个大小。因此,问题变量具有隐含的矩阵形式。的prob2struct.
函数从问题表单执行转换到求解器表单。例如,请参见将问题转化为结构.
对于非线性优化问题,解决
用途自动分化计算目标函数和非线性约束函数的梯度。这些导数适用于目标函数和约束函数由万博1manbetx支持优化变量和表达式的操作不要使用FCN2Optimexpr.
函数。当自动微分不适用时,求解器使用有限差分估计导数。自动区分的详细信息请参见自动分化背景.
对于默认值和允许的解算器解决
调用,视问题的客观和约束而定,见“规划求解”
.属性可以覆盖默认值“规划求解”
调用时的名称 - 值对参数解决
.
对于算法intlinprog
用来解决MILP问题intlinprog算法.对于那些linprog
用来解决线性编程问题,看到线性编程算法.对于那些Quadprog.
用来解决二次编程问题,看二次编程算法.对于线性或非线性最小二乘求解器算法,请参阅最小二乘(模型拟合)算法.有关非线性求解算法,请参见无约束非线性优化算法和约束非线性优化算法.
对于非线性方程的求解,解决
在内部表示每个方程,作为左侧和右侧之间的差异。然后解决
试图最小化方程各部分的平方和。解非线性方程组的算法见方程求解算法.当问题也有界时,解决
呼叫lsqnonlin
使方程各分量的平方和最小。看到最小二乘(模型拟合)算法.
笔记
如果你的目标函数是平方和,你想解决
要认识到这一点,就把它写成总和(expr。^ 2)
,而不是expr'* expr
或任何其他形式。内部解析器只识别显式的平方和。有关详细信息,请参见编写基于问题的最小二乘的目标函数.例如,请参见基于问题的非负线性最小二乘.
自动差异化(AD)适用于解决
和prob2struct.
在以下条件下的功能:
如上所述,支持目标和约束函数万博1manbetx万博1manbetx支持优化变量和表达式的操作.它们不需要使用FCN2Optimexpr.
函数。
对于优化问题,'目标'
和“ConstraintDerivative”
的名称-值对参数解决
或prob2struct.
将“汽车”
,'自动前进'
,或'自动反转'
.
对于等式问题,“EquationDerivative”
选项设置为“汽车”
,'自动前进'
,或'自动反转'
.
当广告适用时 | 支持的所有约束函数万博1manbetx | 不支持一个或多个约束万博1manbetx |
---|---|---|
目标函数的支持万博1manbetx | AD用于表示目标和约束条件 | 广告仅用于客观 |
不支持目标函数万博1manbetx | AD仅用于约束 | 广告不习惯 |
当这些条件不满足时,解决
通过有限差分估计梯度prob2struct.
不会在其生成的函数文件中创建梯度。
求解器默认选择以下类型的AD:
对于一般非线性目标函数,fmincon
默认为目标函数反向AD。fmincon
当非线性约束的数量小于变量的数量时,默认为非线性约束函数的反向广告。否则,fmincon
默认为非线性约束函数转发广告。
对于一般非线性目标函数,Fminunc.
默认为反向AD。
对于最小二乘目标函数,fmincon
和Fminunc.
默认为目标函数转发AD。关于基于问题的最小二乘目标函数的定义,见编写基于问题的最小二乘的目标函数.
lsqnonlin
当物体向量中的元素数大于或等于变量数时默认为转发广告。否则,lsqnonlin
默认为反向AD。
FSOLVE.
当方程的数量大于或等于变量的数量时,默认转发AD。否则,FSOLVE.
默认为反向AD。
笔记
在转换的问题中使用自动衍生物prob2struct.
,传递指定这些衍生品的选项。
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,......“SpecifyConstraintGradient”,真正的);问题。选项=选项;
目前,广告仅适用于初级衍生品;它不适用于第二个或更高衍生物。所以,例如,如果您想使用分析粗糙的Hessian来加快优化,则无法使用解决
直接使用,而必须使用基于问题的工作流中的供应衍生品.
解决(问题解决者)
,解决(prob,选项)
, 和解决(概率,求解器,选项)
语法被移除错误开始于R2018b
为…选择选项或基础求解器解决
,使用名称值对。例如,
索尔=解决(概率,“选项”选择,“规划求解”,“quadprog”);
前面的语法不像名称-值对那样灵活、标准或可扩展。
解决
估计用于非线性溶剂的衍生物使用指α.
求解器的选项是真的
.例如,
选择= optimoptions (“fminunc”,'使用指平行',真正的);[溶胶,fval] =解决(x0,概率“选项”选项)
解决
当所有非线性函数都被支持时,不使用平行导数估计,如万博1manbetx万博1manbetx支持优化变量和表达式的操作.在这种情况下,解决
使用自动微分来计算导数。看到自动分化.
您可以通过设置自动差异来覆盖自动分化并使用有限差异估计'目标'
和“ConstraintDerivative”
争论到有限差分的
.
你点击一个链接对应于这个MATLAB命令:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。