给定一个具有两个优化变量(x_in(t)
, x_out(t)
)的优化问题。对于任何时间步长,当 x_in
非零时,x_out
必须为零(反之亦然)。写成约束:
x_in(t)*x_out(t)=0
如何将这样的约束包含在 Matlab 的 linprog
函数中?
最佳答案
由于问题不完全是线性的,我认为您不能使用 linprog
函数按原样解决它。但是,您应该能够将问题重新表述为 mixed integer linear programming问题。然后你就可以使用例如 this extension从 Matlab Central 解决问题。
假设 x_in(t)
和 x_out(t)
是具有上界 x_in_max
和 x_out_max< 的非负变量
,然后您可以将变量 y_in(t)
和 y_out(t)
添加到您的优化问题中,并包括以下约束:
(1) y_in(t) and y_out(t) are binary, i.e. 0 or 1
(2) x_in(t) <= x_in_max * y_in(t)
(3) x_out(t) <= x_out_max * y_out(t)
(4) y_in(t) + y_out(t) = 1
鉴于 y_in
和 y_out
是二元变量,约束条件 (2) 和 (3) 将 x_
和 y_
变量并确保 x_
变量保持在范围内(修复 x_
变量的范围因此可以并且应该移除来自问题的表述)。约束 (4) 确保 _in
或 _out
事件发生,但不会同时发生。
关于matlab - 线性规划约束 : multiplication of optimization variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782146/