|
|
@ -102,10 +102,13 @@ function forward!(t::AddSlackVariables, data::ProblemData)
|
|
|
|
ge = [i for i = 1:nrows if isfinite(data.constr_lb[i]) && !isequality[i]]
|
|
|
|
ge = [i for i = 1:nrows if isfinite(data.constr_lb[i]) && !isequality[i]]
|
|
|
|
le = [i for i = 1:nrows if isfinite(data.constr_ub[i]) && !isequality[i]]
|
|
|
|
le = [i for i = 1:nrows if isfinite(data.constr_ub[i]) && !isequality[i]]
|
|
|
|
EQ, GE, LE = length(eq), length(ge), length(le)
|
|
|
|
EQ, GE, LE = length(eq), length(ge), length(le)
|
|
|
|
is_integral(row_idx, rhs) = (
|
|
|
|
function is_integral(row_idx, rhs)
|
|
|
|
abs(rhs - round(rhs)) <= 1e-6 &&
|
|
|
|
rhs_is_integer = abs(rhs - round(rhs)) <= 1e-6
|
|
|
|
all(j -> data.var_types[j] ∈ ['I', 'B'], findnz(data.constr_lhs[row_idx, :])[1])
|
|
|
|
cols, coeffs = findnz(data.constr_lhs[row_idx, :])[1:2]
|
|
|
|
)
|
|
|
|
vars_are_integer = all(j -> data.var_types[j] ∈ ['I', 'B'], cols)
|
|
|
|
|
|
|
|
coeffs_are_integer = all(v -> abs(v - round(v)) <= 1e-6, coeffs)
|
|
|
|
|
|
|
|
return rhs_is_integer && vars_are_integer && coeffs_are_integer
|
|
|
|
|
|
|
|
end
|
|
|
|
slack_types = [
|
|
|
|
slack_types = [
|
|
|
|
[is_integral(ge[i], data.constr_lb[ge[i]]) ? 'I' : 'C' for i = 1:GE];
|
|
|
|
[is_integral(ge[i], data.constr_lb[ge[i]]) ? 'I' : 'C' for i = 1:GE];
|
|
|
|
[is_integral(le[i], data.constr_ub[le[i]]) ? 'I' : 'C' for i = 1:LE]
|
|
|
|
[is_integral(le[i], data.constr_ub[le[i]]) ? 'I' : 'C' for i = 1:LE]
|
|
|
|