Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

OptimizationProblem

优化问题

说明

一个OptimizationProblem 对象说明一个优化问题,包括优化的变量、约束、目标函数以及目标是最大化还是最小化。使用 solve 求解完整的问题。

创建对象

使用 optimproblem 创建一个 OptimizationProblem 对象。

警告

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

属性

全部展开

问题标签,指定为字符串或字符向量。该软件不使用 Description。这是个任意标签,您可以将其用于任意目的。例如,您可以共享、存档或呈现模型或问题,并在 Description 属性中存储关于模型或问题的描述性信息。

示例: "Describes a traveling salesman problem"

数据类型: char | string

指示最小化或最大化,指定为 'minimize''maximize'。该属性影响 solve 的运行。

您可以使用短名称 'min' 表示 'minimize''max' 表示 'maximize'

示例: 'maximize'

数据类型: char | string

此属性为只读

对象中的优化变量,指定为 OptimizationVariable 对象的结构体。

数据类型: struct

目标函数,指定为标量 OptimizationExpression 或包含标量 OptimizationExpression 的结构体。您可以在创建问题时加入目标函数,也可以在此后通过圆点表示法将目标函数加入问题中。

prob = optimproblem('Objective',5*brownies + 2*cookies)
% or
prob = optimproblem;
prob.Objective = 5*brownies + 2*cookies

优化约束,指定为 OptimizationConstraint 对象、OptimizationEquality 对象、OptimizationInequality 对象或包含这些对象之一的结构体。您可以在创建问题时加入约束,或之后通过圆点表示法将约束加入问题中:

constrs = struct('TrayArea',10*brownies + 20*cookies <= traysize,...
    'TrayWeight',12*brownies + 18*cookies <= maxweight);
prob = optimproblem('Constraints',constrs)
% or
prob.Constraints.TrayArea = 10*brownies + 20*cookies <= traysize
prob.Constraints.TrayWeight = 12*brownies + 18*cookies <= maxweight

通过将约束设置为 [] 可删除该约束。

prob.Constraints.TrayArea = [];

对象函数

optimoptions创建优化选项
prob2struct将优化问题或方程问题转换为求解器形式
showDisplay information about optimization object
solve求解优化问题或方程问题
varindex将问题变量映射到基于求解器的变量索引
writeSave optimization object description

示例

全部折叠

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

prob = optimproblem('ObjectiveSense','max');

创建正变量。在问题中设置一个目标函数。

x = optimvar('x',2,1,'LowerBound',0);
prob.Objective = x(1) + 2*x(2);

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

cons1 = x(1) + 5*x(2) <= 100;
cons2 = x(1) + x(2) <= 40;
cons3 = 2*x(1) + x(2)/2 <= 60;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;

检查此问题。

show(prob)
  OptimizationProblem : 

	Solve for:
       x

	maximize :
       x(1) + 2*x(2)


	subject to cons1:
       x(1) + 5*x(2) <= 100

	subject to cons2:
       x(1) + x(2) <= 40

	subject to cons3:
       2*x(1) + 0.5*x(2) <= 60

	variable bounds:
       0 <= x(1)
       0 <= x(2)

求解。

sol = solve(prob);
Solving problem using linprog.

Optimal solution found.
sol.x
ans = 2×1

   25.0000
   15.0000

在 R2017b 中推出