Skip to content

Commit

Permalink
fix #1441
Browse files Browse the repository at this point in the history
  • Loading branch information
bqpd committed Oct 8, 2019
1 parent df7f668 commit 609e04b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
20 changes: 14 additions & 6 deletions gpkit/nomials/math.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,14 +394,18 @@ def __init__(self, left, oper, right):
def relaxed(self, relaxvar):
"Returns the relaxation of the constraint in a list."
if self.oper == ">=":
return [relaxvar*self.left >= self.right]
relaxed = [relaxvar*self.left >= self.right]
elif self.oper == "<=":
return [self.left <= relaxvar*self.right]
relaxed = [self.left <= relaxvar*self.right]
elif self.oper == "=":
return [self.left <= relaxvar*self.right,
relaxvar*self.left >= self.right]
raise ValueError(
"Constraint %s had unknown operator %s." % self.oper, self)
relaxed = [self.left <= relaxvar*self.right,
relaxvar*self.left >= self.right]
else:
raise ValueError(
"Constraint %s had unknown operator %s." % self.oper, self)
for constr in relaxed:
constr.sgp_parent = self
return relaxed


# pylint: disable=too-many-instance-attributes, invalid-unary-operand-type
Expand Down Expand Up @@ -519,6 +523,8 @@ def sens_from_dual(self, la, nu, result): # pylint: disable=unused-argument
self.relax_sensitivity = la
if self.sgp_parent:
self.sgp_parent.relax_sensitivity = la
if getattr(self.sgp_parent, "sgp_parent", None):
self.sgp_parent.sgp_parent.relax_sensitivity = la
nu, = nu
presub, = self.unsubbed
if hasattr(self, "pmap"):
Expand Down Expand Up @@ -600,6 +606,8 @@ def sens_from_dual(self, la, nu, result):
self.relax_sensitivity = la[0] - la[1]
if self.sgp_parent:
self.sgp_parent.relax_sensitivity = self.relax_sensitivity
if getattr(self.sgp_parent, "sgp_parent", None):
self.sgp_parent.sgp_parent.relax_sensitivity = self.relax_sensitivity
var_senss = {}
for var in self.varkeys:
for i, m in enumerate(self.unsubbed):
Expand Down
11 changes: 8 additions & 3 deletions gpkit/solution_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,14 @@ def tight_table(self, _, ntightconstrs=5, tight_senss=1e-2, **kwargs):
if not self.model:
return []
title = "Tightest Constraints"
data = [((-float("%+6.2g" % c.relax_sensitivity), str(c)),
"%+6.2g" % c.relax_sensitivity, id(c), c)
for c in self.model.flat() if c.relax_sensitivity >= tight_senss]
try:
data = [((-float("%+6.2g" % c.relax_sensitivity), str(c)),
"%+6.2g" % c.relax_sensitivity, id(c), c)
for c in self.model.flat()
if c.relax_sensitivity >= tight_senss]
except AttributeError:
print("Constraint %s had no `relax_sensitivity` attribute." % c)
return []
if not data:
lines = ["No constraints had a sensitivity above %+5.1g."
% tight_senss]
Expand Down

0 comments on commit 609e04b

Please sign in to comment.