prob2struct
将优化问题或方程问题转换为求解形式
描述
使用prob2struct
将优化问题或方程问题转换为求解形式。
提示
有关完整的工作流程,请参见基于问题的优化工作流或求解方程的基于问题的工作流程.
例子
将问题转化为结构
将优化问题对象转换为问题结构。
输入基本的MILP问题混合整数线性规划基础:基于问题的.
Ingots = optimvar(“锭”、4、1、“类型”,“整数”,下界的0,“UpperBound”1);合金= optimvar(“合金”、4、1、下界的, 0);weightIngots = [5,3,4,6];成本锭=重量锭。*[350,330,310,280];costalloy = [500,450,400,100];成本=成本锭*锭+成本合金*合金;Steelprob =优化问题;steelprob。目标=成本;总重量=重量*锭数+总和(合金);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
问题的结构。
Problem = prob2struct(steelprob);
检查得到的线性相等约束矩阵和向量。
Aeq =问题。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
Beq = problem.beq
说真的=3×125.0000 1.2500 1.2500
检查边界。
problem.lb
ans =8×10 0 0 0 0 0 0
problem.ub
ans =8×1无穷无穷无穷无穷1 1 1 1
打电话解决问题intlinprog
.
X = intlinprog(问题)
LP:最优目标值为8125.600000。切割生成:应用3 mir切割。下界为8495.000000。相对差距为0.00%。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。
x =8×17.2500 0 0.2500 3.5000 1.0000 1.0000 0 1.0000
将非线性问题转化为结构问题
在基于问题的框架中创建一个非线性问题。
X = optimvar(“x”2);趣味= 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;问题=优化问题(“目标”、有趣的);Mycon = dot(x,x) <= 4;probo . 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.6241e-11
输入参数
概率
- - - - - -优化问题或方程问题
OptimizationProblem
对象|EquationProblem
对象
优化问题或方程问题,指定为OptimizationProblem
对象或EquationProblem
对象。通过使用创建一个优化问题optimproblem
;用。创建一个方程问题eqnproblem
.
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中的复值。金宝app如果函数计算具有复杂的值,即使是作为中间值,最终结果也可能是不正确的。
例子:Prob =优化问题;概率。目标= obj;prob.Constraints。con1 = con1;
例子:Prob = eqnproblem;概率。方程= eqs;
x0
- - - - - -初始点
结构|向量的OptimizationValues
对象
初始点,指定为具有字段名等于中的变量名的结构概率
.
对于一些全局优化工具箱解决,x0
可以是向量OptimizationValues
表示多个初始点的对象。属性创建点optimvalues
函数。这些解算器是:
遗传算法
(全局优化工具箱),gamultiobj
(全局优化工具箱),paretosearch
(全局优化工具箱)而且particleswarm
(全局优化工具箱).这些解算器接受多个起始点作为初始总体的成员。MultiStart
(全局优化工具箱).这个解算器接受局部解算器的多个初始点,例如fmincon
.surrogateopt
(全局优化工具箱).这个求解器接受多个初始点来帮助创建初始代理。
例如,使用x0
使用命名索引变量,请参见用命名索引变量创建优化的初始点.
例子:如果概率
具有命名为x
而且y
:x0。x =[3,2,17]; x0.y = [pi/3,2*pi/3]
.
数据类型:结构体
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:problem = prob2struct(prob,'FileLocation','C:\Documents\myproblem')
ConstraintDerivative
- - - - - -指示对约束函数使用自动微分
“汽车”
(默认)|“auto-forward”
|自动翻转的
|有限差分的
指示对非线性约束函数使用自动微分(AD),指定为由逗号分隔的对组成“ConstraintDerivative”
而且“汽车”
(尽可能使用AD),“auto-forward”
(尽可能使用正向AD),自动翻转的
(尽可能使用反向AD),或有限差分的
(请勿使用AD)。选择包括汽车
在支持约束函数的情况下,使结果约束函数文件在解决问题时使用梯度信息,如金宝app金宝app优化变量和表达式的支持操作.有关示例,请参见基于问题的工作流程中的供给导数
请注意
在由。转换的问题中使用自动导数prob2struct
,传递指定这些导数的选项。
选项= optimoptions(“fmincon”,“SpecifyObjectiveGradient”,真的,...“SpecifyConstraintGradient”,真正的);问题。Options = Options;
例子:有限差分的
数据类型:字符
|字符串
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”
|自动翻转的
|有限差分的
表示对非线性目标函数使用自动微分(AD),指定为由逗号分隔的对组成“ObjectiveDerivative”
而且“汽车”
(尽可能使用AD),“auto-forward”
(尽可能使用正向AD),自动翻转的
(尽可能使用反向AD),或有限差分的
(请勿使用AD)。选择包括汽车
在解决问题时,如果目标函数得到支持,则使得到的目标函数文件包含导数信息,如金宝app金宝app优化变量和表达式的支持操作.有关示例,请参见基于问题的工作流程中的供给导数.
请注意
在由。转换的问题中使用自动导数prob2struct
,传递指定这些导数的选项。
选项= optimoptions(“fmincon”,“SpecifyObjectiveGradient”,真的,...“SpecifyConstraintGradient”,真正的);问题。Options = Options;
例子:有限差分的
数据类型:字符
|字符串
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”
|“遗传算法”
|“gamultiobj”
|“paretosearch”
|“patternsearch”
|“particleswarm”
|“surrogateopt”
|“simulannealbnd”
优化求解器,指定为列出的求解器的名称。对于优化问题,此表包含每种问题类型的可用求解器,包括来自的求解器全局优化工具箱.方程问题的详细信息出现在优化求解器的详细信息下面。
用于转换具有整数约束的非线性问题prob2struct
,得到的问题结构取决于所选择的求解器。如果你没有全局优化工具箱许可证,您必须指定求解器。看到非线性问题优化中的整数约束.
这里列出了每种优化问题类型的默认求解器。
问题类型 | 默认的解算器 |
---|---|
线性规划(LP) | linprog |
混合整数线性规划(MILP) | intlinprog |
二次规划(QP) | quadprog |
二阶锥规划(SOCP) | coneprog |
线性最小二乘 | lsqlin |
非线性最小二乘 | lsqnonlin |
非线性规划(NLP) | |
混合整数非线性规划(MINLP) | 遗传算法 (全局优化工具箱) |
多目标 | gamultiobj (全局优化工具箱) |
在这个表格中,表示求解器可用于该问题类型,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 (全局优化工具箱) |
|
|
|
|
|
|
|
|
gamultiobj (全局优化工具箱) |
|
|
|
|
|
|
|
|
paretosearch (全局优化工具箱) |
|
x |
|
|
|
|
|
x |
请注意
如果你愿意lsqcurvefit
作为最小二乘问题的解算器,解决
使用lsqnonlin
.的lsqcurvefit
而且lsqnonlin
求解器是相同的解决
.
谨慎
对于最大化问题(概率。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
问题
结构,或者遗传算法
问题
(全局优化工具箱)结构。
下表给出了优化问题的缺省问题类型。您还可以获得非默认问题类型。例如,对于非线性有界-有约束问题,您可以选择大多数全局优化工具箱的求解器解算器
论点。
优化目标和约束类型(线性约束包括边界) |
问题类型 |
---|---|
线性目标和约束函数。 至少有一个问题变量具有 |
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 × 2 × 4的数组y
—3 × 2数组
在这种情况下,隐式变量顺序与问题变量相同Vars = [x(:);y(:)]
.
的前24个元素var
都相当于x (:)
,接下来的6个元素等价于y (:)
,共30个元素。下界和上界对应于这个变量排序,每个线性约束矩阵有30列。
对于具有一般非线性目标函数或约束函数的问题,prob2struct
属性指定的文件夹中创建函数文件FileLocation
.返回的问题
结构引用这些函数文件。
自动分化
自动微分(AD)适用于解决
而且prob2struct
在以下条件下的作用:
支持目标函数和约束函数,如金宝app金宝app优化变量和表达式的支持操作.它们不需要使用
fcn2optimexpr
函数。对于优化问题,请使用
“ObjectiveDerivative”
而且“ConstraintDerivative”
的名称-值对参数解决
或prob2struct
设置为“汽车”
(默认),“auto-forward”
,或自动翻转的
.对于方程问题,用
“EquationDerivative”
选项设置为“汽车”
(默认),“auto-forward”
,或自动翻转的
.
AD何时生效 | 支持所有约束函数金宝app | 不支持一个或多个约束金宝app |
---|---|---|
目标功能支持金宝app | AD用于目标和约束 | AD仅用于客观 |
不支持的目标函数金宝app | AD仅用于约束 | 未使用AD |
当这些条件不满足时,解决
通过有限差分估计梯度,和prob2struct
不会在其生成的函数文件中创建渐变。
解算器默认选择以下类型的AD:
对于一般的非线性目标函数,
fmincon
对于目标函数,默认为反向AD。fmincon
当非线性约束数小于变量数时,非线性约束函数默认为反向AD。否则,fmincon
对于非线性约束函数,默认为正向AD。对于一般的非线性目标函数,
fminunc
默认为反向AD。对于最小二乘目标函数,
fmincon
而且fminunc
对于目标函数,默认为转发AD。有关基于问题的最小二乘目标函数的定义,请参见为基于问题的最小二乘写目标函数.lsqnonlin
当目标向量中的元素数量大于或等于变量数量时,默认为转发AD。否则,lsqnonlin
默认为反向AD。fsolve
当方程的数量大于或等于变量的数量时,默认转发AD。否则,fsolve
默认为反向AD。
请注意
在由。转换的问题中使用自动导数prob2struct
,传递指定这些导数的选项。
选项= optimoptions(“fmincon”,“SpecifyObjectiveGradient”,真的,...“SpecifyConstraintGradient”,真正的);问题。Options = Options;
目前,AD仅适用于一阶导数;它不适用于二阶或更高阶导数。因此,例如,如果您想使用分析黑森来加速优化,则不能使用解决
中所描述的方法基于问题的工作流程中的供给导数.
版本历史
在R2017b中引入R2021a:选项
Name-Value已被删除
的选项
已删除名称-值对。若要修改选项,请编辑结果问题
结构。例如,
问题。选项= optimoptions(“fmincon”,...“显示”,“通路”,“MaxFunctionEvaluations”5 e4);%或者,只设置一个选项:problem.options. maxfunctionassessments = 5e4;
的选项
删除了名称-值对,因为它会在自动区分的情况下导致歧义。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。