基于问题的优化工作流
请注意
优化工具箱™提供了解决单目标优化问题的两种方法。本主题描述基于问题的方法。基于求解器的优化问题设置描述基于求解器的方法。
执行以下步骤解决优化问题。
使用创建优化问题对象
optimproblem
.问题对象是一个容器,您可以在其中定义一个客观表达式和约束。优化问题对象定义问题和问题变量中存在的任何边界。例如,创建一个最大化问题。
问题=优化问题(“ObjectiveSense”,“最大化”);
使用创建命名变量
optimvar
.优化变量是用来描述问题目标和约束条件的符号变量。在变量定义中包含任何边界。例如,创建一个名为
“x”
.X = optimvar(“x”15日3“类型”,“整数”,下界的0,“UpperBound”1);
将问题对象中的目标函数定义为命名变量中的表达式。
请注意
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的,比如
经验值
,然后使用将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转化为优化表达式而且金宝app优化变量和表达式的支持操作.如果有必要,在表达式中包含额外的参数作为工作区变量;看到在基于问题的方法中传递额外的参数.
例如,假设你有一个实矩阵
f
与变量矩阵大小相同x
,目标为中的项的和f
乘以相应的变量x
.概率。目标= sum(sum(f.*x));
将优化问题的约束定义为命名变量中的比较或表达式的比较。
请注意
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的,比如
经验值
,然后使用将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转化为优化表达式而且金宝app优化变量和表达式的支持操作.例如,假设每一行变量的和
x
必须为1,并且每列变量的和必须不超过1。Onesum = sum(x,2) == 1;Vertsum = sum(x,1) <= 1;probo . constraints .onesum = onesum;prov . constraints .vertsum = vertsum;
对于非线性问题,将初始点设置为结构,其字段为优化变量名。例如:
x0。x= randn(size(x)); x0.y = eye(4);假设y是一个4乘4的变量
通过使用来解决问题
解决
.Sol =解决(问题);对于非线性问题,Sol = solve(prob,x0)
除了这些基本步骤之外,您还可以在使用显示
或写
.为以下选项设置解决
通过使用optimoptions
,详见更改默认解算器或选项.
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中的复值。金宝app如果函数计算具有复杂的值,即使是作为中间值,最终结果也可能是不正确的。
请注意
优化问题中的所有名称必须是唯一的。具体来说,所有变量名称、目标函数名称和约束函数名称必须不同。
有关基本的混合整数线性规划示例,请参见混合整数线性规划基础:基于问题的或者视频版本用优化建模方法求解一个混合整数线性规划问题.有关非线性示例,请参见解决一个约束非线性问题,基于问题.有关更广泛的示例,请参见基于问题的非线性优化,线性规划与混合整数线性规划,或二次规划与锥规划.
另请参阅
fcn2optimexpr
|optimproblem
|optimvar
|解决
|optimoptions
|显示
|写