主要内容

prob2struct

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

描述

使用prob2struct将一个优化问题或方程问题转化为求解程序的形式。

例子

问题= prob2struct (概率)返回一个结构优化问题适合solver-based解决方案。对于非线性问题,prob2struct为目标函数创建文件,如果有必要,对非线性约束函数和支持文件。金宝app

例子

问题= prob2struct (概率,x0)还将初始点的结构x0,包括在问题

例子

问题= prob2struct (___,名称,值),对于任何输入参数,指定附加选项使用一个或多个名称-值对参数。例如,对于一个非线性优化问题,问题= prob2struct(概率、“ObjectiveFunctionName”、“objfun1”)指定prob2struct创建一个目标函数文件命名objfun1.m在当前文件夹。

例子

全部折叠

将一个对象问题的结构优化问题。

输入基本的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对象。通过创建一个优化问题optimproblem;通过创建一个方程问题eqnproblem

警告

具体问题具体分析的方法不支持复杂的值在一个目标函数,非线性等式,或非线性金宝app不等式。如果一个函数计算具有复杂的价值,即使作为一个中间值,最终结果可能是不正确的。

例子:概率= optimproblem;概率。目标= obj;prob.Constraints。cons1 = cons1;

例子:概率= eqnproblem;概率。公式=方程式;

初始点,指定为一个结构和字段名称的变量名概率

对于一些全局优化工具箱解决,x0可以是一个结构数组代表多个初始点。这些解决方案是:

  • 遗传算法(全局优化工具箱)particleswarm(全局优化工具箱)。解决这些接受多个起点作为初始种群的成员。

  • surrogateopt(全局优化工具箱)。该解算器接受多个初始点,帮助创建一个初始代理。

例如使用x0与命名索引变量,明白了创建初始点优化与命名索引变量

例子:如果概率有变量命名xy:x0。x =[3,2,17]; x0.y = [pi/3,2*pi/3]

数据类型:结构体

名称-值参数

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:问题= prob2struct(概率、“FileLocation”、“文件C: \ \ myproblem”)

指示使用自动分化(广告)非线性约束函数,指定为逗号分隔组成的“ConstraintDerivative”“汽车”(尽可能使用广告),“auto-forward”(尽可能使用转发广告),自动翻转的(尽可能使用反向广告),或有限差分的(不要使用广告)。选择包括汽车导致生成的约束函数文件时使用梯度信息解决问题提供支持约束函数,描述金宝app金宝app支持操作优化变量和表达式。例如,看到的提供衍生品运用工作流

请注意

使用自动衍生品问题的转换prob2struct,通过选项指定这些衍生品。

选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,“SpecifyConstraintGradient”,真正的);问题。选择=选项;

例子:有限差分的

数据类型:字符|字符串

非线性约束函数创建的文件的名称prob2struct对于一个优化问题,指定为逗号分隔组成的“ConstraintFunctionName”和一个文件的名字。这种观点也适用于fminconfminunc问题;看到问题。不包括文件扩展名。m在文件的名字。prob2struct附加的文件扩展名创建该文件。

如果你不指定ConstraintFunctionName,然后prob2struct覆盖“generatedConstraints.m”。如果你不指定FileLocation,然后prob2struct创建文件在当前文件夹。

返回的问题结构是指这个函数文件。

例子:“mynlcons”

数据类型:字符|字符串

非线性方程函数创建的文件的名称prob2struct对于一个方程问题,指定为逗号分隔组成的“EquationFunctionName”和一个文件的名字。这种观点也适用于fsolve,fzero,或lsqnonlin方程;看到问题。不包括文件扩展名。m在文件的名字。prob2struct附加的文件扩展名创建该文件。

如果你不指定EquationFunctionName,然后prob2struct覆盖“generatedEquation.m”。如果你不指定FileLocation,然后prob2struct创建文件在当前文件夹。

返回的问题结构是指这个函数文件。

例子:“myequation”

数据类型:字符|字符串

生成的文件的位置(目标函数、约束函数,和其他子功能文件),指定为逗号分隔两人组成的“FileLocation”和一个可写的文件夹的路径。所有生成的文件都保存在这个文件夹;不支持多个文件夹。金宝app

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

数据类型:字符|字符串

指示使用自动分化(广告)的非线性目标函数,指定为逗号分隔组成的“ObjectiveDerivative”“汽车”(尽可能使用广告),“auto-forward”(尽可能使用转发广告),自动翻转的(尽可能使用反向广告),或有限差分的(不要使用广告)。选择包括汽车导致生成的目标函数文件包括导数信息当目标函数解决问题提供支持,中描述金宝app金宝app支持操作优化变量和表达式。例如,看到的提供衍生品运用工作流

请注意

使用自动衍生品问题的转换prob2struct,通过选项指定这些衍生品。

选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,“SpecifyConstraintGradient”,真正的);问题。选择=选项;

例子:有限差分的

数据类型:字符|字符串

目标函数创建的文件的名称prob2struct对于一个优化问题,指定为逗号分隔组成的“ObjectiveFunctionName”和一个文件的名字。这种观点也适用于fminconfminunc问题;看到问题。不包括文件扩展名。m在文件的名字。prob2struct附加的文件扩展名创建该文件。

如果你不指定ObjectiveFunctionName,然后prob2struct覆盖“generatedObjective.m”。如果你不指定FileLocation,然后prob2struct创建文件在当前文件夹。

返回的问题结构是指这个函数文件。

例子:“myobj”

数据类型:字符|字符串

优化求解程序,指定为上市解决者的名字。对于优化问题,这个表包含可用的解决每个问题类型,包括解决者全局优化工具箱。细节方程问题出现以下优化解算器的细节。

使用非线性问题转换为整数约束prob2struct,由此产生的问题结构可以取决于选择的解决者。如果你没有全局优化工具箱许可,您必须指定解决者。看到整数约束非线性具体问题具体分析优化

默认为每个优化问题解算器类型是列在这里。

问题类型 默认的解算器
线性规划(LP) linprog
混合整数线性规划(MILP) intlinprog
二次规划(QP) quadprog
给出了二次锥规划 coneprog
线性最小二乘 lsqlin
非线性最小二乘 lsqnonlin
非线性规划(NLP)

fminunc问题没有约束,否则fmincon

混合整数非线性规划(适应) 遗传算法(全局优化工具箱)

在这个表中,是的意味着问题的解算器是可用的类型,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。的lsqcurvefitlsqnonlin解决者是相同的,解决

谨慎

为最大化问题(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问题结构,或者遗传算法问题(全局优化工具箱)结构。

下表给出了由此产生的违约问题类型的优化问题。你也可以获得默认的问题类型。例如,对于非线性bound-constrained问题,您可以选择全局优化工具箱解决者通过使用解算器论点。

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

产生的问题类型

线性目标和约束函数。

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

intlinprog

线性目标和约束函数。

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

linprog

线性约束功能。

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

lsqlin

绑定约束。

目标函数是一个常数+一般非线性表达式的平方和。

lsqnonlin

线性约束功能。

一般的二次目标函数。

quadprog

一般非线性目标函数。

没有约束。

fminunc

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

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

fmincon

非线性目标函数或约束函数,至少有一个整数变量。

遗传算法

下表给出了由此产生的问题类型方程解决问题。

方程类型

产生的问题类型

线性系统有或没有界限

lsqlin

标量(单)的非线性方程

fzero

受约束的非线性系统

fsolve

非线性系统与界限

lsqnonlin

请注意

对于非线性问题,prob2struct创建目标函数文件和非线性约束函数。对目标和约束函数,调用支持函数,金宝appprob2struct还创建了文件并将它们存储在金宝app支持功能FileLocation文件夹中。访问额外的参数生成函数,看看获取生成函数的细节

线性和二次优化问题,结构问题包括一个额外的字段,f0,代表了目标函数的一个积分常数。如果你解决问题结构使用指定的解算器,返回的目标函数值不包括f0价值。如果你解决概率使用解决函数,返回包含目标函数值f0价值。

如果ObjectiveSense概率“马克斯”“最大化”,然后问题使用负的目标函数概率因为解决最小化。最大化,最小化的负面的原始目标函数。在这种情况下,报告从解决最优函数值是负的值在最初的问题。看到最大化客观。你不能使用lsqlin为最大化问题。

提示

  • 如果你叫prob2struct多次在同一MATLAB®会议对非线性问题,使用ObjectiveFunctionNameEquationFunctionName论点,如果合适,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函数。

  • 解算器的调用解决fmincon,fminunc,fsolve,或lsqnonlin

  • 对于优化问题,“ObjectiveDerivative”“ConstraintDerivative”名称-值对的理由解决prob2struct“汽车”(默认),“auto-forward”,或自动翻转的

  • 对于方程的问题,“EquationDerivative”选项设置为“汽车”(默认),“auto-forward”,或自动翻转的

当广告应用 所有约束功能支持金宝app 不支持一个或多个约束金宝app
目标函数的支持金宝app 广告用于目标和约束 广告仅用于客观
目标函数不支持金宝app 广告仅用于约束 广告不习惯

当这些条件不满意,解决由有限差分估计梯度,prob2struct在其生成的函数文件不会创建渐变。

解决选择默认以下类型的广告:

  • 对于一般的非线性目标函数,fmincon默认为反向广告为目标函数。fmincon默认为反向广告为非线性约束函数当非线性约束的数量小于变量的数量。否则,fmincon默认转发广告为非线性约束函数。

  • 对于一般的非线性目标函数,fminunc默认为反向广告。

  • 最小二乘目标函数,fminconfminunc目标函数的默认转发广告。运用基于最小二乘的定义目标函数,看看写具体问题具体分析最小二乘法的目标函数

  • lsqnonlin默认转发广告当目标向量中的元素的数量大于或等于变量的数量。否则,lsqnonlin默认为反向广告。

  • fsolve默认转发广告当方程的数量大于或等于变量的数量。否则,fsolve默认为反向广告。

请注意

使用自动衍生品问题的转换prob2struct,通过选项指定这些衍生品。

选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真的,“SpecifyConstraintGradient”,真正的);问题。选择=选项;

目前,广告作品只有一阶导数;它并不适用于第二或高阶导数。举个例子,如果你想使用一个分析黑森速度优化,您不能使用解决直接,而且必须用描述的方法提供衍生品运用工作流

兼容性的考虑

全部展开

错误从R2021a

介绍了R2017b