主要内容

optimproblem

创建优化问题

描述

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

提示

有关完整的工作流程,请参见具体问题具体分析优化工作流程

例子

概率= optimproblem创建一个默认属性的优化问题。

例子

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

请注意

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

例子

全部折叠

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

概率= optimproblem
描述:" ObjectiveSense: ' minimal ' Variables: [0x0 struct] contains 0 OptimizationVariables Objective: [0x0 OptimizationExpression] Constraints: [0x0 struct] contains 0 OptimizationConstraints没有定义问题。

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

概率= optimproblem (“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。cons1 = cons1;prob.Constraints。cons2 = cons2;prob.Constraints。cons3 = cons3;

回顾这个问题。

显示(概率)
优化问题:求解:x maximize: 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)

解决这个问题。

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

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

x = optimvar (“x”2,下界= 2,UpperBound = 2);概率= optimproblem;prob.Objective.first =规范(x) ^ 2;probe . objective .second = norm(x - [1;0])^2;

解决这个问题。

rng默认的%的再现性索尔=解决(问题);
使用gamultiobj解决问题。优化终止:帕累托解扩散的平均变化小于期权。

策划解决方案。

paretoplot (sol)

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

考察帕累托前沿的一个点。为此,单击图,然后单击数据提示工具:

datatips2.png

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

paretopoint.png

图中点的下标是9。你可以找到x与该点相关的值作为索引9的解。

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

输入参数

全部折叠

名称-值参数

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

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:要指定最大化问题,请使用概率= optimproblem(“ObjectiveSense”、“最大化”)

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

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

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

例子:“旅行推销员问题的迭代方法”

数据类型:字符|字符串

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

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

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

    概率= optimproblem;prob.Objective.first = x ^ 2;probe . objective .second = (x + 1)^2;

例子:概率= optimproblem(“目标”,总和(sum (x)))对于二维变量x

例子:概率= optimproblem(“目标”,(x) ^ 2)在哪里x而且一个穿2乘1的,还有x是一个优化变量。

优化意义,具体为“最小化”“最大化”.您还可以指定“最小值”获得“最小化”“马克斯”获得“最大化”.的解决函数使目标最小化ObjectiveSense“最小化”并使目标最大化ObjectiveSense“最大化”

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

x = optimvar (“x”2,“UpperBound”2,“下界”2);概率= optimproblem;prob.Objective.first =规范(x) ^ 2;probe . objective .second = -norm(x - [1;0])^2;prob.ObjectiveSense.first =“最小值”;prob.ObjectiveSense.second =“马克斯”

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

例子:概率= optimproblem(“ObjectiveSense”、“max”)

数据类型:字符|字符串

输出参数

全部折叠

优化问题,返回为OptimizationProblem对象。通常,要完成问题描述,您需要指定一个目标函数和约束。然而,你可以有一个没有目标函数的可行性问题,也可以有一个没有约束的问题。通过打电话来解决一个完整的问题解决

警告

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

版本历史

介绍了R2017b

Baidu
map