主要内容

optimproblem

创建优化问题

描述

使用optimproblem创建一个优化问题。

提示

有关完整的工作流程,请参见基于问题的优化工作流

例子

概率= optimproblem使用默认属性创建优化问题。

例子

概率= optimproblem (名称,值使用一个或多个指定的其他选项名称,值对参数。例如,要指定最大化问题而不是最小化问题,请使用prob = optimproblem('ObjectiveSense','maximize')

请注意

优化问题中的所有名称必须是唯一的。具体来说,所有变量名称、目标函数名称和约束函数名称必须不同。

例子

全部折叠

创建一个默认属性的优化问题。

问题=优化问题
prob = OptimizationProblem与属性:描述:“ObjectiveSense: '最小化'变量:[0x0 struct]包含0 OptimizationVariables目标:[0x0 OptimizationExpression]约束:[0x0 struct]包含0 OptimizationConstraints没有问题定义。

创建一个最大化的线性规划问题。这个问题有两个正变量和三个线性不等式约束。

问题=优化问题(“ObjectiveSense”“马克斯”);

创造积极的变量。在问题中包含一个目标函数。

X = optimvar(“x”、2、1,下界的, 0);概率。目标= x(1) + 2*x(2);

在问题中创建线性不等式约束。

con1 = x(1) + 5*x(2) <= 100;con2 = x(1) + x(2) <= 40;con3 = 2*x(1) + x(2)/2 <= 60;prob.Constraints。con1 = con1;prob.Constraints。con2 = con2;prob.Constraints。con3 = con3;

回顾问题。

显示(概率)
优化问题:求解:x最大化:x(1) + 2*x(2)服从con1: x(1) + 5*x(2) <= 100服从con2: x(1) + x(2) <= 40服从con3: 2*x(1) + 0.5*x(2) <= 60变量边界:0 <= x(1) 0 <= x(2)

解决问题。

Sol =解决(问题);
用linprog解决问题。找到最优解。
sol.x
ans =2×125.0000 - 15.0000

用一个二维变量的两个目标函数做一个问题x.中的表达式创建目标函数x,并把它们作为结构放在目标中。

X = optimvar(“x”2,下界= 2,UpperBound = 2);Prob =优化问题;probe . objective .first = norm(x)^2;probe . objective .second = norm(x - [1;0])^2;

解决问题。

rng默认的%用于再现性Sol =解决(问题);
使用gamultiobj解决问题。优化终止:Pareto解扩散的平均变化小于options.FunctionTolerance。金宝搏官方网站

画出解。

paretoplot (sol)

图中包含一个轴对象。标题为Pareto Front的axis对象包含4个类型为text、scatter的对象。

检查帕累托前沿的一个点。为此,单击该图并单击数据提示工具:

datatips2.png

然后点击帕累托前面的一个点。

paretopoint.png

图中点的索引为9。你可以在x与该点关联的值,作为索引9的解。

索尔(9)方式
ans =2×10.5544 - -0.0306

输入参数

全部折叠

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:要指定最大化问题,请使用prob = optimproblem('ObjectiveSense','maximize')

问题约束,指定为OptimizationConstraint数组或结构OptimizationConstraint数组作为字段。

例子:prob = optimproblem('Constraints',sum(x,2) == 1)

问题标签,指定为字符串或字符向量。该软件无法使用描述为计算。描述是一个可以用于任何原因的任意标签。例如,您可以共享、归档或呈现模型或问题,并在中存储关于模型或问题的描述性信息描述

例子:《旅行推销员问题的迭代方法》

数据类型:字符|字符串

目标函数,指定为标量OptimizationExpression对象的数组OptimizationExpression对象,或具有标量的结构OptimizationExpression作为字段。

  • 对于标量(单目标)问题,将目标函数指定为标量优化表达式或值为标量优化表达式的结构。

  • 对于多目标问题,将目标函数指定为向量值优化表达式、优化表达式数组或优化表达式结构。例如,这个目标是一个标量优化变量中的优化表达式结构x

    Prob =优化问题;probe . objective .first = x^2;probe . objective .second = (x + 1)^2;

例子:prob = optimproblem('Objective',sum(sum(x)))对于一个二维变量x

例子:prob = optimproblem('Objective',(x-a).^2)在哪里x而且一个是2乘1的,还有x是优化变量。

优化感,指定为“最小化”“最大化”.你也可以指定“最小值”获得“最小化”“马克斯”获得“最大化”.的解决函数最小化目标时ObjectiveSense“最小化”并使目标最大化ObjectiveSense“最大化”

ObjectiveSense可以是一个有价值的结构吗“最小化”“最小值”“最大化”,或“马克斯”.当问题目标是一个结构时,可以使用这种形式。的客观的而且ObjectiveSense结构应该具有相同的字段名,因此ObjectiveSense适用于相应的客观的.例如,

X = optimvar(“x”2,“UpperBound”2,“下界”2);Prob =优化问题;probe . objective .first = norm(x)^2;probe . objective .second = -norm(x - [1;0])^2;prob.ObjectiveSense.first =“最小值”;prob.ObjectiveSense.second =“马克斯”

如果客观的是结构,可以指定吗ObjectiveSense如名如姓“马克斯”.在这种情况下,所有的目标都是相同的ObjectiveSense

例子:prob = optimproblem('ObjectiveSense','max')

数据类型:字符|字符串

输出参数

全部折叠

优化问题,返回为OptimizationProblem对象。通常,要完成问题描述,需要指定目标函数和约束。但是,你可以有一个没有目标函数的可行性问题,或者你可以有一个没有约束的问题。通过呼叫解决一个完整的问题解决

警告

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

版本历史

在R2017b中引入