Add with_lhs argument

master
Alinson S. Xavier 5 years ago
parent 18521331c9
commit 4dd4ef52bd
No known key found for this signature in database
GPG Key ID: DCA0DAD4D2F58624

@ -166,8 +166,10 @@ class FeaturesExtractor:
def __init__( def __init__(
self, self,
with_sa: bool = True, with_sa: bool = True,
with_lhs: bool = True,
) -> None: ) -> None:
self.with_sa = with_sa self.with_sa = with_sa
self.with_lhs = with_lhs
def extract( def extract(
self, self,
@ -183,6 +185,7 @@ class FeaturesExtractor:
features.constraints = solver.get_constraints( features.constraints = solver.get_constraints(
with_static=with_static, with_static=with_static,
with_sa=self.with_sa, with_sa=self.with_sa,
with_lhs=self.with_lhs,
) )
features.constraints_old = solver.get_constraints_old( features.constraints_old = solver.get_constraints_old(
with_static=with_static, with_static=with_static,

@ -167,6 +167,7 @@ class GurobiSolver(InternalSolver):
self, self,
with_static: bool = True, with_static: bool = True,
with_sa: bool = True, with_sa: bool = True,
with_lhs: bool = True,
) -> ConstraintFeatures: ) -> ConstraintFeatures:
model = self.model model = self.model
assert model is not None assert model is not None
@ -187,14 +188,15 @@ class GurobiSolver(InternalSolver):
if with_static: if with_static:
rhs = tuple(model.getAttr("rhs", gp_constrs)) rhs = tuple(model.getAttr("rhs", gp_constrs))
senses = tuple(model.getAttr("sense", gp_constrs)) senses = tuple(model.getAttr("sense", gp_constrs))
lhs_l: List = [None for _ in gp_constrs] if with_lhs:
for (i, gp_constr) in enumerate(gp_constrs): lhs_l: List = [None for _ in gp_constrs]
expr = model.getRow(gp_constr) for (i, gp_constr) in enumerate(gp_constrs):
lhs_l[i] = tuple( expr = model.getRow(gp_constr)
(self._var_names[expr.getVar(j).index], expr.getCoeff(j)) lhs_l[i] = tuple(
for j in range(expr.size()) (self._var_names[expr.getVar(j).index], expr.getCoeff(j))
) for j in range(expr.size())
lhs = tuple(lhs_l) )
lhs = tuple(lhs_l)
if self._has_lp_solution: if self._has_lp_solution:
dual_value = tuple(model.getAttr("pi", gp_constrs)) dual_value = tuple(model.getAttr("pi", gp_constrs))

@ -173,6 +173,7 @@ class InternalSolver(ABC, EnforceOverrides):
self, self,
with_static: bool = True, with_static: bool = True,
with_sa: bool = True, with_sa: bool = True,
with_lhs: bool = True,
) -> ConstraintFeatures: ) -> ConstraintFeatures:
pass pass

@ -132,6 +132,7 @@ class BasePyomoSolver(InternalSolver):
self, self,
with_static: bool = True, with_static: bool = True,
with_sa: bool = True, with_sa: bool = True,
with_lhs: bool = True,
) -> ConstraintFeatures: ) -> ConstraintFeatures:
model = self.model model = self.model
assert model is not None assert model is not None
@ -162,26 +163,32 @@ class BasePyomoSolver(InternalSolver):
senses.append("=") senses.append("=")
rhs.append(float(c.upper())) rhs.append(float(c.upper()))
# Extract LHS if with_lhs:
lhsc = [] # Extract LHS
expr = c.body lhsc = []
if isinstance(expr, SumExpression): expr = c.body
for term in expr._args_: if isinstance(expr, SumExpression):
if isinstance(term, MonomialTermExpression): for term in expr._args_:
lhsc.append((term._args_[1].name, float(term._args_[0]))) if isinstance(term, MonomialTermExpression):
elif isinstance(term, _GeneralVarData): lhsc.append(
lhsc.append((term.name, 1.0)) (
else: term._args_[1].name,
raise Exception( float(term._args_[0]),
f"Unknown term type: {term.__class__.__name__}" )
) )
elif isinstance(expr, _GeneralVarData): elif isinstance(term, _GeneralVarData):
lhsc.append((expr.name, 1.0)) lhsc.append((term.name, 1.0))
else: else:
raise Exception( raise Exception(
f"Unknown expression type: {expr.__class__.__name__}" f"Unknown term type: {term.__class__.__name__}"
) )
lhs.append(tuple(lhsc)) elif isinstance(expr, _GeneralVarData):
lhsc.append((expr.name, 1.0))
else:
raise Exception(
f"Unknown expression type: {expr.__class__.__name__}"
)
lhs.append(tuple(lhsc))
# Extract dual values # Extract dual values
if self._has_lp_solution: if self._has_lp_solution:

Loading…
Cancel
Save