将优化问题或方程问题转化为求解形式
使用prob2struct
将优化问题或方程问题转化为求解形式。
提示
有关完整的工作流,请参见具体问题具体分析优化工作流程或求解方程的基于问题的工作流.
将优化问题对象转换为问题结构。
输入基本的MILP问题混合整数线性规划基础:基于问题.
锭= optimvar (“锭”、4、1、“类型”,“整数”,下界的,0,“UpperBound”1);合金= optimvar (“合金”、4、1、下界的, 0);weightIngots =(5、3、4、6);costIngots = weightIngots。* [350330310280];costAlloys = [500450400100];成本=成本锭*锭+成本合金*合金;steelprob = optimproblem;steelprob。目标=成本;totalweight = weight gots*锭+ sum(合金);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 =问题。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
problem.ub
ans =8×1Inf Inf Inf Inf 1 1 1 1 1
通过打电话来解决问题intlinprog
.
x = intlinprog(问题)
LP:最佳目标值为8125.60万。切割生成:应用3个mir切割。下界是8495000000。相对差距为0.00%。找到最优解。Intlinprog在根节点停止,因为客观值在最优值options的间隙公差范围内。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);Fun = 100*(x(2) - x(1)²)²+ (1 - x(1))²;概率= optimproblem (“目标”、有趣的);Mycon = dot(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”
|自动翻转的
|有限差分的
表示对非线性约束函数使用自动微分(AD),指定为逗号分隔对组成“ConstraintDerivative”
和“汽车”
(如果可能,请使用AD)“auto-forward”
(如果可能,使用前向广告),自动翻转的
(如果可能的话,使用反向AD),或者有限差分的
(请勿使用AD)。选择包括汽车
在满足约束函数支持的情况下,使生成的约束函数文件使用梯度信息来解决问题,如金宝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”
|自动翻转的
|有限差分的
表示使用自动微分(AD)对非线性目标函数,指定为逗号分隔对组成“ObjectiveDerivative”
和“汽车”
(如果可能,请使用AD)“auto-forward”
(如果可能,使用前向广告),自动翻转的
(如果可能的话,使用反向AD),或者有限差分的
(请勿使用AD)。选择包括汽车
在目标函数支持的情况下,使所得到的目标函数文件在解决问题时包含导数信息,如金宝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 |
二阶锥规划(SOCP) | coneprog |
线性最小二乘 | lsqlin |
非线性最小二乘 | lsqnonlin |
非线性规划(NLP) | |
混合整数非线性规划(MINLP) | 遗传算法 (全局优化工具箱) |
在这个表中,表示解决程序可用于问题类型,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
求解器是相同的解决
.
谨慎
对于最大化问题(概率。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的数组
在这种情况下,隐式变量的顺序与问题变量的顺序相同var = [x (:); y (:))
.
的前24个元素var
相当于x (:)
,接下来的6个元素等价于y (:)
,总共有30个元素。下界和上界对应于这个变量排序,每个线性约束矩阵有30列。
对于一般非线性目标或约束函数的问题,prob2struct
在当前文件夹或指定的文件夹中创建函数文件FileLocation
.返回的问题
结构指的是这些函数文件。
自动分化(AD)适用于解决
和prob2struct
以下条件下的功能:
支持目标函数和约束函数,如金宝app金宝app支持优化变量和表达式的操作.它们不需要使用fcn2optimexpr
函数。
对于优化问题,“ObjectiveDerivative”
和“ConstraintDerivative”
的名称-值对参数解决
或prob2struct
将“汽车”
(默认),“auto-forward”
,或自动翻转的
.
对于方程问题,“EquationDerivative”
选项设置为“汽车”
(默认),“auto-forward”
,或自动翻转的
.
当广告应用 | 支持的所有约束函数金宝app | 不支持一个或多个约束金宝app |
---|---|---|
目标函数的支持金宝app | AD用于表示目标和约束条件 | AD仅用于客观目的 |
不支持目标函数金宝app | 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”,真正的);问题。选择=选项;
目前,AD仅适用于一阶衍生物;它不适用于二阶或更高阶导数。例如,如果你想使用分析Hessian来加速你的优化,你不能使用解决
直接使用,而必须使用基于问题的工作流中的供应衍生品.
选项
名称-值已被移除错误开始在R2021a
的选项
名称-值对已被移除。要修改选项,请编辑结果问题
结构。例如,
问题。选择= optimoptions (“fmincon”,...“显示”,“通路”,“MaxFunctionEvaluations”5 e4);或者,只设置一个选项:problem.options.MaxFunctionEvaluations = 5 e4;
的选项
名称-值对已被删除,因为在存在自动区分时,它可能导致歧义。
您已经有了geänderte版本死亡Beispiels。Möchten您是谁? Änderungen öffnen?
您有一个连接到MATLAB-Befehl entspricht:
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。Webbrowser unterstützen keine MATLAB-Befehle。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。