prob2struct
优化问题或方程问题转化为求解器的形式
描述
使用prob2struct
将一个优化问题或方程问题转化为求解程序的形式。
提示
完整的工作流程,请参阅具体问题具体分析优化工作流程或具体问题具体分析工作流求解方程。
例子
将问题转化为结构
将一个对象问题的结构优化问题。
输入基本的MILP问题混合整数线性规划基础知识:具体问题具体分析。
锭= optimvar (“锭”、4、1、“类型”,“整数”,下界的0,“UpperBound”1);合金= optimvar (“合金”、4、1、下界的,0);weightIngots = (5、3、4、6);costIngots = weightIngots。* [350330310280];costAlloys = [500450400100];成本= costIngots *锭+ costAlloys *合金;steelprob = optimproblem;steelprob。目标=成本;totalweight = weightIngots *锭+总和(合金);carbonIngots = (5、4、5、3) / 100; molybIngots = [3,3,4,4,]/100; carbonAlloys = [8,7,6,3]/100; molybAlloys = [6,7,8,9]/100; totalCarbon = (weightIngots.*carbonIngots)*ingots + carbonAlloys*alloys; totalMolyb = (weightIngots.*molybIngots)*ingots + molybAlloys*alloys; steelprob.Constraints.conswt = totalweight == 25; steelprob.Constraints.conscarb = totalCarbon == 1.25; steelprob.Constraints.consmolyb = totalMolyb == 1.25;
将问题转换为一个intlinprog
问题的结构。
问题= prob2struct (steelprob);
检查结果线性等式约束矩阵和向量。
Aeq = problem.Aeq
Aeq = (1,1) 1.0000 (2, 1) 0.0800 (3,1) 0.0600 (1、2) 1.0000 (2, 2) 0.0700 (2) 0.0700 (1、3) 1.0000 (2、3) 0.0600 (3、3) 0.0800 (1、4) 1.0000 (2、4) 0.0300 (3, 4) 0.0900 (1、5) 5.0000 (2、5) 0.2500 (3、5) 0.1500 (1,6) 3.0000 (2,6) 0.1200 (3、6) 0.0900 (7) 4.0000 (2、7) 0.2000 (3、7) 0.1600 (8) 6.0000 (2, 8) 0.1800 (3 8) 0.2400
说真的= problem.beq
说真的=3×125.0000 1.2500 1.2500
检查范围。
problem.lb
ans =8×10 0 0 0 0 0 0 0
problem.ub
ans =8×1正正正正1 1 1 1
通过调用解决问题intlinprog
。
x = intlinprog(问题)
LP:最优的客观价值是8125.600000。减少生成:应用3米尔削减。下界是8495.000000。相对差距是0.00%。找到最优解。Intlinprog停在根节点,因为客观价值差距公差内的最优值,选择。AbsoluteGapTolerance = 0(默认值)。在宽容intcon变量是整数,选项。IntegerTolerance = 1 e-05(默认值)。
x =8×11.0000 7.2500 0.2500 3.5000 1.0000 1.0000 0
将非线性问题转化为结构
具体问题具体分析框架创建一个非线性问题。
x = optimvar (“x”2);有趣= 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;概率= optimproblem (“目标”、有趣的);mycon =点(x, x) < = 4;prob.Constraints。mycon = mycon;x0。x =[-1;1.5];
转换概率
结构的优化问题。生成的目标函数文件名称“。”
和约束函数文件“circle2”
。
问题= prob2struct (x0,概率“ObjectiveFunctionName”,“。”,…“ConstraintFunctionName”,“circle2”);
prob2struct
创建非线性目标和约束函数文件在当前文件夹。创建这些文件在一个不同的文件夹,使用“FileLocation”
名称-值对。
解决这个问题。
[x, fval] = fmincon(问题)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =2×11.0000 - 1.0000
fval = 4.6187 e-11
输入参数
概率
- - - - - -优化问题或方程问题
OptimizationProblem
对象|EquationProblem
对象
优化问题或方程问题,指定为一个OptimizationProblem
对象或一个EquationProblem
对象。通过创建一个优化问题optimproblem
;通过创建一个方程问题eqnproblem
。
警告
具体问题具体分析的方法不支持复杂的值在一个目标函数,非线性等式,或非线性金宝app不等式。如果一个函数计算具有复杂的价值,即使作为一个中间值,最终结果可能是不正确的。
例子:概率= optimproblem;概率。目标= obj;prob.Constraints。cons1 = cons1;
例子:概率= eqnproblem;概率。公式=方程式;
x0
- - - - - -初始点
结构|结构数组
初始点,指定为一个结构和字段名称的变量名概率
。
对于一些全局优化工具箱解决,x0
可以是一个结构数组代表多个初始点。这些解决方案是:
遗传算法
(全局优化工具箱)和particleswarm
(全局优化工具箱)。解决这些接受多个起点作为初始种群的成员。surrogateopt
(全局优化工具箱)。该解算器接受多个初始点,帮助创建一个初始代理。
例如使用x0
与命名索引变量,明白了创建初始点优化与命名索引变量。
例子:如果概率
有变量命名x
和y
:x0。x =[3,2,17]; x0.y = [pi/3,2*pi/3]
。
数据类型:结构体
名称-值参数
指定可选的逗号分隔条名称,值
参数。的名字
参数名称和吗价值
相应的价值。的名字
必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家
。
问题= prob2struct(概率、“FileLocation”、“文件C: \ \ myproblem”)
ConstraintDerivative
- - - - - -指示使用自动微分约束功能
“汽车”
(默认)|“auto-forward”
|自动翻转的
|有限差分的
指示使用自动分化(广告)非线性约束函数,指定为逗号分隔组成的“ConstraintDerivative”
和“汽车”
(尽可能使用广告),“auto-forward”
(尽可能使用转发广告),自动翻转的
(尽可能使用反向广告),或有限差分的
(不要使用广告)。选择包括汽车
导致生成的约束函数文件时使用梯度信息解决问题提供支持约束函数,描述金宝app金宝app支持操作优化变量和表达式。例如,看到的提供衍生品运用工作流
请注意
使用自动衍生品问题的转换prob2struct
,通过选项指定这些衍生品。
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,…“SpecifyConstraintGradient”,真正的);问题。选择=选项;
例子:有限差分的
数据类型:字符
|字符串
ConstraintFunctionName
- - - - - -非线性约束函数的名称的文件
“generatedConstraints”
(默认)|文件名称
非线性约束函数创建的文件的名称prob2struct
对于一个优化问题,指定为逗号分隔组成的“ConstraintFunctionName”
和一个文件的名字。这种观点也适用于fmincon
或fminunc
问题;看到问题
。不包括文件扩展名。m
在文件的名字。prob2struct
附加的文件扩展名创建该文件。
如果你不指定ConstraintFunctionName
,然后prob2struct
覆盖“generatedConstraints.m”
。如果你不指定FileLocation
,然后prob2struct
创建文件在当前文件夹。
返回的问题
结构是指这个函数文件。
例子:“mynlcons”
数据类型:字符
|字符串
EquationFunctionName
- - - - - -方程函数的名称的文件
“generatedEquation”
(默认)|文件名称
非线性方程函数创建的文件的名称prob2struct
对于一个方程问题,指定为逗号分隔组成的“EquationFunctionName”
和一个文件的名字。这种观点也适用于fsolve
,fzero
,或lsqnonlin
方程;看到问题
。不包括文件扩展名。m
在文件的名字。prob2struct
附加的文件扩展名创建该文件。
如果你不指定EquationFunctionName
,然后prob2struct
覆盖“generatedEquation.m”
。如果你不指定FileLocation
,然后prob2struct
创建文件在当前文件夹。
返回的问题
结构是指这个函数文件。
例子:“myequation”
数据类型:字符
|字符串
FileLocation
- - - - - -位置生成的文件
当前文件夹(默认)|路径可写的文件夹
生成的文件的位置(目标函数、约束函数,和其他子功能文件),指定为逗号分隔两人组成的“FileLocation”
和一个可写的文件夹的路径。所有生成的文件都保存在这个文件夹;不支持多个文件夹。金宝app
例子:“文件C: \ MATLAB \ myproject的”
数据类型:字符
|字符串
ObjectiveDerivative
- - - - - -指示使用自动分化为目标函数
“汽车”
(默认)|“auto-forward”
|自动翻转的
|有限差分的
指示使用自动分化(广告)的非线性目标函数,指定为逗号分隔组成的“ObjectiveDerivative”
和“汽车”
(尽可能使用广告),“auto-forward”
(尽可能使用转发广告),自动翻转的
(尽可能使用反向广告),或有限差分的
(不要使用广告)。选择包括汽车
导致生成的目标函数文件包括导数信息当目标函数解决问题提供支持,中描述金宝app金宝app支持操作优化变量和表达式。例如,看到的提供衍生品运用工作流。
请注意
使用自动衍生品问题的转换prob2struct
,通过选项指定这些衍生品。
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,…“SpecifyConstraintGradient”,真正的);问题。选择=选项;
例子:有限差分的
数据类型:字符
|字符串
ObjectiveFunctionName
- - - - - -目标函数的名称的文件
“generatedObjective”
(默认)|文件名称
目标函数创建的文件的名称prob2struct
对于一个优化问题,指定为逗号分隔组成的“ObjectiveFunctionName”
和一个文件的名字。这种观点也适用于fmincon
或fminunc
问题;看到问题
。不包括文件扩展名。m
在文件的名字。prob2struct
附加的文件扩展名创建该文件。
如果你不指定ObjectiveFunctionName
,然后prob2struct
覆盖“generatedObjective.m”
。如果你不指定FileLocation
,然后prob2struct
创建文件在当前文件夹。
返回的问题
结构是指这个函数文件。
例子:“myobj”
数据类型:字符
|字符串
解算器
- - - - - -优化解算器
“intlinprog”
|“linprog”
|“lsqlin”
|“lsqcurvefit”
|“lsqnonlin”
|“lsqnonneg”
|“quadprog”
|“fminunc”
|“fmincon”
|“fzero”
|“fsolve”
|“coneprog”
|“遗传算法”
|“patternsearch”
|“particleswarm”
|“surrogateopt”
|“simulannealbnd”
优化求解程序,指定为上市解决者的名字。对于优化问题,这个表包含可用的解决每个问题类型,包括解决者全局优化工具箱。细节方程问题出现以下优化解算器的细节。
使用非线性问题转换为整数约束prob2struct
,由此产生的问题结构可以取决于选择的解决者。如果你没有全局优化工具箱许可,您必须指定解决者。看到整数约束非线性具体问题具体分析优化。
默认为每个优化问题解算器类型是列在这里。
问题类型 | 默认的解算器 |
---|---|
线性规划(LP) | linprog |
混合整数线性规划(MILP) | intlinprog |
二次规划(QP) | quadprog |
给出了二次锥规划 | coneprog |
线性最小二乘 | lsqlin |
非线性最小二乘 | lsqnonlin |
非线性规划(NLP) | |
混合整数非线性规划(适应) | 遗传算法 (全局优化工具箱) |
在这个表中,意味着问题的解算器是可用的类型,x解算器不可用。
问题类型 |
LP | MILP | QP | 二次 | 线性最小二乘 | 非线性最小二乘 | NLP | 适应 |
---|---|---|---|---|---|---|---|---|
解算器 | ||||||||
linprog |
|
x | x | x | x | x | x | x |
intlinprog |
|
|
x | x | x | x | x | x |
quadprog |
|
x |
|
|
|
x | x | x |
coneprog |
|
x | x |
|
x | x | x | x |
lsqlin |
x | x | x | x |
|
x | x | x |
lsqnonneg |
x | x | x | x |
|
x | x | x |
lsqnonlin |
x | x | x | x |
|
|
x | x |
fminunc |
|
x |
|
x |
|
|
|
x |
fmincon |
|
x |
|
|
|
|
|
x |
patternsearch (全局优化工具箱) |
|
x |
|
|
|
|
|
x |
遗传算法 (全局优化工具箱) |
|
|
|
|
|
|
|
|
particleswarm (全局优化工具箱) |
|
x |
|
x |
|
|
|
x |
simulannealbnd (全局优化工具箱) |
|
x |
|
x |
|
|
|
x |
surrogateopt (全局优化工具箱) |
|
|
|
|
|
|
|
|
请注意
如果你选择lsqcurvefit
作为一个最小二乘问题的求解,解决
使用lsqnonlin
。的lsqcurvefit
和lsqnonlin
解决者是相同的,解决
。
谨慎
为最大化问题(prob.ObjectiveSense
是“马克斯”
或“最大化”
),不指定一个最小二乘解算器(一个名字开始lsq
)。如果你这样做,解决
抛出一个错误,因为这些连接器不能最大化。
对方程求解,这为每个问题类型表包含可用的解决者。在表中,
*显示的默认解决问题类型。
Y显示一个可用的解决者。
N表示不可用解算器。
金宝app支持动力学方程
方程类型 | 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”
数据类型:字符
|字符串
输出参数
问题
——问题结构
fmincon
问题结构|fminunc
问题结构|fsolve
问题结构|intlinprog
问题结构|linprog
问题结构|lsqlin
问题结构|lsqnonlin
问题结构|quadprog
问题结构|遗传算法
问题的结构
问题的结构,作为一个返回fmincon
问题
结构,fminunc
问题
结构,fsolve
问题
结构,intlinprog
问题
结构,linprog
问题
结构,lsqlin
问题
结构,lsqnonlin
问题
结构,quadprog
问题
结构,或者遗传算法
问题
(全局优化工具箱)结构。
下表给出了由此产生的违约问题类型的优化问题。你也可以获得默认的问题类型。例如,对于非线性bound-constrained问题,您可以选择全局优化工具箱解决者通过使用解算器
论点。
线性约束优化目标和约束类型(包括边界) |
产生的问题类型 |
---|---|
线性目标和约束函数。 至少有一个变量的问题 |
intlinprog |
线性目标和约束函数。 没有问题变量的 |
linprog |
线性约束功能。 目标函数是一个常数加上平方和的线性表达式。 |
lsqlin |
绑定约束。 目标函数是一个常数+一般非线性表达式的平方和。 |
lsqnonlin |
线性约束功能。 一般的二次目标函数。 |
quadprog |
一般非线性目标函数。 没有约束。 |
fminunc |
一般的非线性目标函数,至少有一个任何类型的约束。 或者,至少有一个一般非线性约束函数。 |
fmincon |
非线性目标函数或约束函数,至少有一个整数变量。 |
遗传算法 |
下表给出了由此产生的问题类型方程解决问题。
方程类型 |
产生的问题类型 |
---|---|
线性系统有或没有界限 |
lsqlin |
标量(单)的非线性方程 |
fzero |
受约束的非线性系统 |
fsolve |
非线性系统与界限 |
lsqnonlin |
请注意
对于非线性问题,prob2struct
创建目标函数文件和非线性约束函数。对目标和约束函数,调用支持函数,金宝appprob2struct
还创建了文件并将它们存储在金宝app支持功能FileLocation
文件夹中。访问额外的参数生成函数,看看获取生成函数的细节。
线性和二次优化问题,结构问题包括一个额外的字段,f0
,代表了目标函数的一个积分常数。如果你解决问题结构使用指定的解算器,返回的目标函数值不包括f0
价值。如果你解决概率
使用解决
函数,返回包含目标函数值f0
价值。
如果ObjectiveSense的概率
是“马克斯”
或“最大化”
,然后问题
使用负的目标函数概率
因为解决最小化。最大化,最小化的负面的原始目标函数。在这种情况下,报告从解决最优函数值是负的值在最初的问题。看到最大化客观。你不能使用lsqlin
为最大化问题。
提示
如果你叫
prob2struct
多次在同一MATLAB®会议对非线性问题,使用ObjectiveFunctionName
或EquationFunctionName
论点,如果合适,ConstraintFunctionName
论点。指定惟一名称确保产生的问题结构指的是正确的目标和约束函数。否则,后续调用prob2struct
可以使生成的非线性函数文件覆盖现有的文件。为了避免造成无限递归,不打电话
prob2struct
在客观或约束函数。当调用
prob2struct
非线性问题的并行,确保最终的目标和约束函数文件有独特的名字。这样做可以避免每一次循环的写入同一个文件或文件。
算法
转换为解算器形式
问题的基础结构是所有问题变量的隐式排序成一个向量。问题的顺序变量的顺序是一样的变量
财产概率
。看到OptimizationProblem
。你还可以找到订单用varindex
。
例如,假设在这个秩序问题变量:
x
——3-by-2-by-4数组y
——一个3×2数组
在这种情况下,隐式变量顺序是一样的,如果变量的问题var = [x (:); y (:))
。
第一个24的元素var
相当于x (:)
,接下来的六要素是等价的y (:)
,总共30元素。上下边界对应这个变量排序,并且每个线性约束矩阵有30列。
问题与一般非线性目标或约束函数,prob2struct
创建函数文件在当前文件夹或在指定的文件夹中FileLocation
。返回的问题
结构是指这些函数文件。
自动分化
适用于自动分化(广告)解决
和prob2struct
函数在下列条件:
客观支持和约束函数,描述金宝app金宝app支持操作优化变量和表达式。他们不需要使用的
fcn2optimexpr
函数。对于优化问题,
“ObjectiveDerivative”
和“ConstraintDerivative”
名称-值对的理由解决
或prob2struct
将“汽车”
(默认),“auto-forward”
,或自动翻转的
。对于方程的问题,
“EquationDerivative”
选项设置为“汽车”
(默认),“auto-forward”
,或自动翻转的
。
当广告应用 | 所有约束功能支持金宝app | 不支持一个或多个约束金宝app |
---|---|---|
目标函数的支持金宝app | 广告用于目标和约束 | 广告仅用于客观 |
目标函数不支持金宝app | 广告仅用于约束 | 广告不习惯 |
当这些条件不满意,解决
由有限差分估计梯度,prob2struct
在其生成的函数文件不会创建渐变。
解决选择默认以下类型的广告:
对于一般的非线性目标函数,
fmincon
默认为反向广告为目标函数。fmincon
默认为反向广告为非线性约束函数当非线性约束的数量小于变量的数量。否则,fmincon
默认转发广告为非线性约束函数。对于一般的非线性目标函数,
fminunc
默认为反向广告。最小二乘目标函数,
fmincon
和fminunc
目标函数的默认转发广告。运用基于最小二乘的定义目标函数,看看写具体问题具体分析最小二乘法的目标函数。lsqnonlin
默认转发广告当目标向量中的元素的数量大于或等于变量的数量。否则,lsqnonlin
默认为反向广告。fsolve
默认转发广告当方程的数量大于或等于变量的数量。否则,fsolve
默认为反向广告。
请注意
使用自动衍生品问题的转换prob2struct
,通过选项指定这些衍生品。
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,…“SpecifyConstraintGradient”,真正的);问题。选择=选项;
目前,广告作品只有一阶导数;它并不适用于第二或高阶导数。举个例子,如果你想使用一个分析黑森速度优化,您不能使用解决
直接,而且必须用描述的方法提供衍生品运用工作流。
兼容性的考虑
选项
名称已被删除
错误从R2021a
的选项
名称-值对被移除。修改选项,编辑结果问题
结构。例如,
问题。选择= optimoptions (“fmincon”,…“显示”,“通路”,“MaxFunctionEvaluations”5 e4);%,或者设置一个选项:problem.options。MaxFunctionEvaluations = 5 e4;
的选项
名称-值对被删除,因为它会导致歧义的自动分化。
另请参阅
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。