【发布时间】:2013-07-11 22:55:46
【问题描述】:
Optimization Toolbox 中的 bintprog 命令解决了具有不等式约束和可选等式约束的 0-1 编程问题:Ax
我有一个 |Ax| 形式的问题
【问题讨论】:
标签: matlab mathematical-optimization integer-programming
Optimization Toolbox 中的 bintprog 命令解决了具有不等式约束和可选等式约束的 0-1 编程问题:Ax
我有一个 |Ax| 形式的问题
【问题讨论】:
标签: matlab mathematical-optimization integer-programming
如果 size(A) = [n,m],你的约束是这样的
for each {i in 1..m}
-b <= sum {j in 1..n} a_{ij} * x_{ij} <= b
这与两组约束相同
for each {i in 1..m}
sum {j in 1..n} a_{ij} * x_{ij} <= b
sum {j in 1..n} a_{ij} * x_{ij} >= -b
因为你必须把它写成 Ax
for each {i in 1..m}
sum {j in 1..n} a_{ij} * x_{ij} <= b
sum {j in 1..n} -a_{ij} * x_{ij} <= b
在 MATLAB 中,给定您原来的 A 和 b,您可以使用
制作这些“加倍”约束矩阵A = [A; -A];
b = [b; b];
并用这些新的 (A,b) 求解您的整数程序。
【讨论】:
这很容易:
你有|Ax| <= b。这相当于(正如您自己指出的)-b <= Ax <= b。
所以,你有额外的不等式约束:Ax <= b 和 -Ax <= b。
因此,您可以在所有 AA = [ A ; -A ] 和 bb = [b;b] 中定义您的绝对值约束:
x = bintprog( f, AA, bb );
【讨论】: