OptimizationProblem
优化问题
说明
一个OptimizationProblem
对象说明一个优化问题,包括优化的变量、约束、目标函数以及目标是最大化还是最小化。使用 solve
求解完整的问题。
提示
有关完整的工作流,请参阅基于问题的优化工作流。
创建对象
使用 optimproblem
创建一个 OptimizationProblem
对象。
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
属性
Description
— 问题标签
''
(默认) | 字符串 | 字符向量
问题标签,指定为字符串或字符向量。该软件不使用 Description
。这是个任意标签,您可以将其用于任意目的。例如,您可以共享、存档或呈现模型或问题,并在 Description
属性中存储关于模型或问题的描述性信息。
示例: "Describes a traveling salesman problem"
数据类型: char
| string
ObjectiveSense
— 指示最小化或最大化
'minimize'
(默认) | 'min'
| 'maximize'
| 'max'
指示最小化或最大化,指定为 'minimize'
或 'maximize'
。该属性影响 solve
的运行。
您可以使用短名称 'min'
表示 'minimize'
或 'max'
表示 'maximize'
。
示例: 'maximize'
数据类型: char
| string
Variables
— 对象中的优化变量
OptimizationVariable
对象的结构体
Objective
— 目标函数
标量 OptimizationExpression
| 包含标量 OptimizationExpression
的结构体
目标函数,指定为标量 OptimizationExpression
或包含标量 OptimizationExpression
的结构体。您可以在创建问题时加入目标函数,也可以在此后通过圆点表示法将目标函数加入问题中。
prob = optimproblem('Objective',5*brownies + 2*cookies) % or prob = optimproblem; prob.Objective = 5*brownies + 2*cookies
Constraints
— 优化约束
OptimizationConstraint
对象 | OptimizationEquality
对象 | OptimizationInequality
对象 | 包含 OptimizationConstraint
、OptimizationEquality
或 OptimizationInequality
对象的结构体
优化约束,指定为 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 | 将优化问题或方程问题转换为求解器形式 |
show | 显示有关优化对象的信息 |
solve | 求解优化问题或方程问题 |
solvers | Determine default and valid solvers for optimization problem or equation problem |
varindex | 将问题变量映射到基于求解器的变量索引 |
write | 保存优化对象描述 |
示例
创建和求解最大化问题
创建最大化线性规划问题。该问题有两个正变量和三个线性不等式约束。
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
15
版本历史记录
在 R2017b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)