29 lines
935 B
Matlab
Executable File
29 lines
935 B
Matlab
Executable File
function p = presolve_bounds_from_inequalities(p)
|
|
if p.K.l >0
|
|
nnz_per_row = (p.F_struc | p.F_struc)*[0;ones(size(p.F_struc,2)-1,1)];
|
|
valid_rows = find(nnz_per_row>1);
|
|
valid_rows(valid_rows<=p.K.f)=[];
|
|
valid_rows(valid_rows>p.K.f + p.K.l)=[];
|
|
for j = valid_rows(:)'
|
|
b = p.F_struc(j,1);
|
|
a = p.F_struc(j,2:end);
|
|
if nnz(p.F_struc(j,2:end))>1
|
|
ap = a.*(a>0);
|
|
am = a.*(a<0);
|
|
for k = find(a)
|
|
L = p.lb;
|
|
U = p.ub;
|
|
L(k) = 0;
|
|
U(k) = 0;
|
|
if a(k) > 0 & (p.ub(k)-p.lb(k)) > 1e-8
|
|
newlower = (-b - ap*U - am*L)/a(k);
|
|
p.lb(k) = max(p.lb(k),newlower);
|
|
elseif a(k) < 0
|
|
newupper = (b + ap*U + am*L)/(-a(k));
|
|
p.ub(k) = min(p.ub(k),newupper);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|