24 lines
456 B
Mathematica
24 lines
456 B
Mathematica
|
|
function F = binary_implies_linearequality(f,X,M,m,eps);
|
||
|
|
|
||
|
|
if nargin < 3 || isempty(M)
|
||
|
|
[M,m,infbound] = derivebounds(f);
|
||
|
|
if infbound
|
||
|
|
warning('You have unbounded variables in an implication leading to a lousy big-M relaxation.');
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if all(m==0)
|
||
|
|
lhs = m;
|
||
|
|
elseif all(m==1)
|
||
|
|
lhs = 1-X;
|
||
|
|
else
|
||
|
|
lhs = m.*(1-X);
|
||
|
|
end
|
||
|
|
if all(M==0)
|
||
|
|
rhs = M;
|
||
|
|
elseif all(M==1)
|
||
|
|
rhs = 1-X;
|
||
|
|
else
|
||
|
|
rhs = M.*(1-X);
|
||
|
|
end
|
||
|
|
F = [f -f] <= [rhs -lhs];
|