![](/img/trans.png)
[英]Matlab optimization - conditional sum of optimization variable in constraint
[英]How to add a constraint to my optimization?
我正在制定一个具有二维矩阵A的优化问题。
A= [0 f1 0 f2]
[f3 f3 0 0]
.........
我还有另一个二维矩阵B应该填写。 B具有与A相同的大小。如果a_ij = 0(A的元素),则我需要b_ij(B的元素)为零;如果a_ij不为零,则我需要b_ij大于零且小于或等于a_ij。
我如何在我的公式中表示这一点? 我添加了此约束/条件:
b_ij<=a_ij
但这不满足以下条件:当a_ij不等于零时,b_ij不等于零。 有什么帮助吗?
如果所有元素都是正数,则通过逐元素比较来保持每个矩阵的最小元素:
B2 = min(A,B)
或者,创建一个逻辑矩阵,指示是否满足条件,然后将每个元素与矩阵B
相乘,仅保留满足条件的元素,将其他元素设置为零:
B = B.*(A~=0)
然后,使B
元素小于或等于A
元素,否则将其替换为A
的值。
B = B.*(B<=A) + A.*(B>A) )
此选项使您可以概括约束。
如果a_ij的元素大于零,则指示需要b_ij的元素大于零。 一种选择是使用函数max
来确保B
所有元素均为正。
B = max(1e-2,B); % exact value is yours to set.
此步骤由您决定,并取决于您的问题。
您要实现含义
a = 0 => b = 0
a <> 0 => 0 < b <= a
如果a
是(恒定)数据,那么这是微不足道的。 如果a
是变量,那么事情就不那么容易了。
您实现了部分含义为
b <= a
这意味着a
为非负数: a>=0
。 这也意味着b
为非负数。 剩下的含义a>0 => b>0
现在可以实现为
a <= δ * 1000
b >= δ / 1000
δ in {0,1}
许多MIP求解器支持指标约束。 那可以让你说:
δ = 0 -> a = 0
δ = 1 -> b >= 0.001
δ in {0,1}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.