主要内容

prob2struct

将优化问题或方程问题转换为求解器形式

描述

使用prob2struct将最优化问题或方程问题转化为求解器形式。

小费

对于完整的工作流程,请参阅基于问题的优化工作流程或者基于问题的解决方程的工作流程

例子

问题= prob2struct(概率返回适合于基于求解器的解决方案的优化问题结构。对于非线性问题,prob2struct为目标函数创建文件,如果需要,对于非线性约束函数和支持文件。万博1manbetx

例子

问题= prob2struct(概率X0.也转换初始点结构X0.并包括它问题

例子

问题= prob2struct(___名称,价值,对于任何输入参数,使用一个或多个名称值对参数指定其他选项。例如,对于非线性优化问题,问题= prob2struct(prob,'ObjectivencyName','objfun1')指定prob2struct创建一个目标函数文件objfun1.m.在当前文件夹中。

例子

全部收缩

将优化问题对象转换为问题结构。

输入基本的MILP问题混合整数线性编程基础:基于问题

锭= Optimvar('锭',4,1,'类型'“整数”'indowbound',0,'上行',1);合金= Optimvar('合金',4,1,'indowbound',0);重量= [5,3,4,6];costingots =权重。* [350,330,310,280];costoloys = [500,450,400,100];成本=雄芯*铸铁+ costoloys *合金;SteelProb = OptimProblem;steelprob.objective =成本;Totalweight = Preceingot *锭+和(合金);碳刺茨= [5,4,5,3] / 100;莫利印刷= [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(3,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(1,7)4.0000(2,7)0.2000(3,7)0.1600(1,8)6.0000(2,8)0.1800(3,8)0.2400
beq =问题
BEQ =3×125.0000 1.2500 1.2500

检查界限。

问题.LB.
ans =.8×10 0 0 0 0 0 0 0 0
问题
ans =.8×1Inf Inf Inf Inf 1 1 1 1

通过呼叫来解决问题intlinprog.

x = intlinprog(问题)
LP:最佳目标值为8125.600000。切割生成:施加3 miR切割。下限为8495.000000。相对间隙为0.00%。找到最佳解决方案。intlinprog在根节点停止,因为客观值在最佳值的间隙容忍度范围内,Options.absolutegAppolerance = 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)^ 2)^ 2 +(1  -  x(1))^ 2;prob = OptimProblem('客观的',乐趣);mycon = dot(x,x)<= 4;prob.constraints.mycon = mycon;x0.x = [-1; 1.5];

转变概率优化问题结构。命名生成的目标函数文件'rosenbrock'和约束函数文件'circle2'

问题= prob2struct(prob,x0,'OperateFunctionName''rosenbrock'......'constraintfunctionname''circle2');

prob2struct在当前文件夹中创建非线性目标和约束函数文件。要在不同的文件夹中创建这些文件,请使用'fileLocation'名称值对。

解决这个问题。

[x,fval] = fmincon(问题)
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =2×11.0000 1.0000
fval = 4.6187e-11

输入参数

全部收缩

优化问题或等式问题,指定为优化问题对象或An.EquationProblem目的。通过使用创建优化问题OptimProblem.;通过使用创建等式问题eqnproblem.

警告

基于问题的方法不支持客观函数,非线性等分或非线性不等式中的复杂值。万博1manbetx如果函数计算具有复数,甚至作为中间值,最终结果也可能不正确。

例子:prob = OptimProblem;prob.objective = obj;prob.constraints.cons1 = cons1;

例子:prob = eqnproblem;prob.equations = eqs;

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

举个例子X0.使用命名索引变量,请参阅使用命名索引变量创建优化的初始点

例子:如果概率有变量命名Xyx0.x = [3,2,17];X0.Y = [PI / 3,2 * PI / 3]

数据类型:塑造

名称值对参数

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

例子:问题= prob2struct(prob,'fileLocation','c:\ documents \ myproblus')

指示使用自动分化(AD)的非线性约束函数,指定为包括的逗号分隔对'约束扩展'和任何一种'汽车'(如果可能的话使用广告)或'有限差异'(不要使用广告)。'汽车'由于支持约束函数,导致产生的约束函数文件包括衍生信息,如所描述的万博1manbetx万博1manbetx在优化变量和表达式上支持的操作。例如,看到基于问题的工作流程的供应衍生物

笔记

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

选择= optimoptions (“fmincon”'specifyobjectivegrient',真的,......'specifyconstraintgradient',真的);问题.Options =选项;

警告

'目标''约束扩展'名称值对参数目前仅适用于解决的问题粉刺或者Fminunc.。如果在解决方程时尝试使用这些参数解决或者转换等式prob2struct,matlab.®发出错误。

例子:'有限差异'

数据类型:char|细绳

由此创建的非线性约束函数文件的名称prob2struct对于优化问题,指定为逗号分隔的配对组成'constraintfunctionname'和文件名。这个论点适用于粉刺或者Fminunc.问题;看问题。不包括文件扩展名.m在文件名中。prob2struct在创建文件时追加文件扩展名。

如果您未指定contrultindfunctionname., 然后prob2struct覆盖'生成的混合物araints.m'。如果您未指定fileLocation., 然后prob2struct在当前文件夹中创建文件。

回归问题结构是指此函数文件。

例子:“mynlcons”

数据类型:char|细绳

由此创建的非线性等式函数文件的名称prob2struct对于等式问题,指定为逗号分隔的对'areationfunctionname'和文件名。这个论点适用于FSOLVE.Fzero., 或者lsqnonlin方程式;看问题。不包括文件扩展名.m在文件名中。prob2struct在创建文件时追加文件扩展名。

如果您未指定公平功能名称, 然后prob2struct覆盖'生成时段..m'。如果您未指定fileLocation., 然后prob2struct在当前文件夹中创建文件。

回归问题结构是指此函数文件。

例子:“myequation”

数据类型:char|细绳

生成文件的位置(目标函数,约束函数和其他子功能文件),指定为包括的逗号分隔对'fileLocation'和一个可写文件夹的路径。所有生成的文件都存储在此文件夹中;不支持多个文件夹。万博1manbetx

例子:“文件C: \ MATLAB \ myproject的”

数据类型:char|细绳

指示使用自动分化(AD)的非线性目标函数,指定为包括的逗号分隔对'目标'和任何一种'汽车'(如果可能的话使用广告)或'有限差异'(不要使用广告)。'汽车'由于支持,导致产生的目标函数文件包括衍生信息,所以提供了目标函数,如下所述万博1manbetx万博1manbetx在优化变量和表达式上支持的操作。例如,看到基于问题的工作流程的供应衍生物

笔记

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

选择= optimoptions (“fmincon”'specifyobjectivegrient',真的,......'specifyconstraintgradient',真的);问题.Options =选项;

警告

'目标''约束扩展'名称值对参数目前仅适用于解决的问题粉刺或者Fminunc.。如果在解决方程时尝试使用这些参数解决或者转换等式prob2struct,Matlab发出错误。

例子:'有限差异'

数据类型:char|细绳

由此创建的目标函数文件的名称prob2struct对于优化问题,指定为逗号分隔的配对组成'OperateFunctionName'和文件名。这个论点适用于粉刺或者Fminunc.问题;看问题。不包括文件扩展名.m在文件名中。prob2struct在创建文件时追加文件扩展名。

如果您未指定ObjectiveFunctionName., 然后prob2struct覆盖'generageObjective.m'。如果您未指定fileLocation., 然后prob2struct在当前文件夹中创建文件。

回归问题结构是指此函数文件。

例子:“myobj”

数据类型:char|细绳

输出参数

全部收缩

问题结构,作为一个返回粉刺问题结构体,Fminunc.问题结构体,FSOLVE.问题结构体,intlinprog.问题结构体,linprog问题结构体,Lsqlin.问题结构体,lsqnonlin问题结构,或者quadprog问题结构体。

下表为结果类型提供了优化问题的结果类型。

优化目标和约束类型(线性约束包括界限)

产生的问题类型

线性目标和约束函数。

至少有一个问题变量有“整数”类型。

intlinprog.

线性目标和约束函数。

没有问题变量有“整数”类型。

linprog

线性约束函数。

目标函数是一个常数加上线性表达式的总和。

Lsqlin.

束缚约束。

目标函数是恒定的一般非线性表达式的总和。

lsqnonlin

线性约束函数。

一般二次目标函数。

quadprog

一般非线性目标函数。

没有约束。

Fminunc.

一般非线性目标函数,并且存在任何类型的至少一个约束。

或者,至少有一个一般的非线性约束函数。

粉刺

下表为等式解决问题提供了结果类型的问题类型。

方程式

产生的问题类型

有或没有界限的线性系统

Lsqlin.

标量(单个)非线性方程

Fzero.

非线性系统没有约束

FSOLVE.

带界的非线性系统

lsqnonlin

笔记

对于非线性问题,prob2struct为目标和非线性约束函数创建功能文件。对于呼叫支持功能的客观和约束函数,万博1manbetxprob2struct还会创建支持功能文件并将其万博1manbetx存储在其中fileLocation.文件夹中。要访问生成函数中的额外参数,请参见获取生成的函数详细信息

对于线性和二次优化问题,问题结构包括其他字段,F0.,表示目标函数的添加常数。如果使用指定的求解器解决问题结构,则返回的目标函数值不包括F0.价值。如果你解决概率使用解决功能,返回的目标函数值包括F0.价值。

如果是ObjectiveSense.概率'最大限度'或者'最大化', 然后问题使用目标函数的负面概率因为解决最小化。为了最大化,它们使原始目标函数的负值最小化。在这种情况下,求解器报告的最优函数值为原问题值的负值。看到最大化目标。你不能使用Lsqlin.对于最大化问题。

尖端

  • 如果你打电话prob2struct多次在同一MATLAB会话中为非线性问题,使用ObjectiveFunctionName.或者公平功能名称论证,如果合适的话contrultindfunctionname.争论。指定唯一名称可确保产生的问题结构是指正确的目标和约束函数。否则,后续呼叫prob2struct可以导致生成的非线性功能文件覆盖现有文件。

  • 避免导致无限递归,请不要打电话prob2struct在目标或约束函数内。

  • 在呼唤时prob2struct在并行处理非线性问题时,确保产生的目标和约束函数文件有唯一的名称。这样做可以避免每次循环都写同一个或多个文件。

算法

全部收缩

转换为求解器形式

问题结构的基础是将所有问题变量的隐性排序变成单个向量。问题变量的顺序与秩序相同变量财产概率。看到优化问题。您还可以通过使用找到订单varindex.

例如,假设问题变量是这样排列的:

  • X- 一个3×2×4阵列

  • y- 一个3×2阵列

在这种情况下,隐式的变量顺序与问题变量相同vars = [x(:); y(:)]

前24个元素vars.相当于X(:),接下来的六个元素等价于y(:),共有30个元素。下限和上限对应于该变量排序,并且每个线性约束矩阵具有30列。

对于一般非线性目标或约束函数的问题,prob2struct在当前文件夹中或在指定的文件夹中创建功能文件fileLocation.。回归问题结构是指这些函数文件。

自动分化

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

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

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

笔记

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

选择= optimoptions (“fmincon”'specifyobjectivegrient',真的,......'specifyconstraintgradient',真的);问题.Options =选项;

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

兼容性考虑因素

展开全部

在R2020B中不推荐

在R2017B中介绍