def test_sp_relaxation(self): w = Variable('w') x = Variable('x') y = Variable('y') z = Variable('z') with SignomialsEnabled(): m = Model(x, [x+y >= w, x+y <= z/2, y <= x, y >= 1], {z: 3, w: 3}) r1 = ConstantsRelaxed(m) self.assertEqual(len(r1.varkeys), 8) with self.assertRaises(ValueError): mr1 = Model(x*r1.relaxvars, r1) # no 'prod' mr1 = Model(x*r1.relaxvars.prod()**10, r1) cost1 = mr1.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost1/1024, 1, self.ndig) m.debug(verbosity=0) with SignomialsEnabled(): m = Model(x, [x+y >= z, x+y <= z/2, y <= x, y >= 1], {z: 3}) if self.solver != "cvxopt": m.debug(verbosity=0) r2 = ConstraintsRelaxed(m) self.assertEqual(len(r2.varkeys), 7) mr2 = Model(x*r2.relaxvars.prod()**10, r2) cost2 = mr2.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost2/1024, 1, self.ndig) with SignomialsEnabled(): m = Model(x, [x+y >= z, x+y <= z/2, y <= x, y >= 1], {z: 3}) if self.solver != "cvxopt": m.debug(verbosity=0) r3 = ConstraintsRelaxedEqually(m) self.assertEqual(len(r3.varkeys), 4) mr3 = Model(x*r3.relaxvar**10, r3) cost3 = mr3.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost3/(32*0.8786796585), 1, self.ndig)
def test_sp_relaxation(self): w = Variable('w') x = Variable('x') y = Variable('y') z = Variable('z') with SignomialsEnabled(): m = Model(x, [x+y >= w, x+y <= z/2, y <= x, y >= 1], {z: 3, w: 3}) r1 = ConstantsRelaxed(m) self.assertEqual(len(r1.varkeys), 8) mr1 = Model(x*r1.relaxvars.prod()**10, r1) cost1 = mr1.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost1/1024, 1, self.ndig) m.debug(verbosity=0) with SignomialsEnabled(): m = Model(x, [x+y >= z, x+y <= z/2, y <= x, y >= 1], {z: 3}) if self.solver != "cvxopt": m.debug(verbosity=0) r2 = ConstraintsRelaxed(m) self.assertEqual(len(r2.varkeys), 7) mr2 = Model(x*r2.relaxvars.prod()**10, r2) cost2 = mr2.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost2/1024, 1, self.ndig) with SignomialsEnabled(): m = Model(x, [x+y >= z, x+y <= z/2, y <= x, y >= 1], {z: 3}) if self.solver != "cvxopt": m.debug(verbosity=0) r3 = ConstraintsRelaxedEqually(m) self.assertEqual(len(r3.varkeys), 4) mr3 = Model(x*r3.relaxvar**10, r3) cost3 = mr3.localsolve(verbosity=0)["cost"] self.assertAlmostEqual(cost3/(32*0.8786796585), 1, self.ndig)
def test_sp_relaxation(self): w = Variable("w") x = Variable("x") y = Variable("y") z = Variable("z") with SignomialsEnabled(): m = Model(x, [x + y >= w, x + y <= z / 2, y <= x, y >= 1], { z: 3, w: 3 }) r1 = ConstantsRelaxed(m) self.assertEqual(len(r1.varkeys), 8) with self.assertRaises(ValueError): _ = Model(x * r1.relaxvars, r1) # no "prod" sp = Model(x * r1.relaxvars.prod()**10, r1).sp(use_pccp=False) cost = sp.localsolve(verbosity=0, solver=self.solver)["cost"] self.assertAlmostEqual(cost / 1024, 1, self.ndig) m.debug(verbosity=0, solver=self.solver) with SignomialsEnabled(): m = Model(x, [x + y >= z, x + y <= z / 2, y <= x, y >= 1], {z: 3}) m.debug(verbosity=0, solver=self.solver) r2 = ConstraintsRelaxed(m) self.assertEqual(len(r2.varkeys), 7) sp = Model(x * r2.relaxvars.prod()**10, r2).sp(use_pccp=False) cost = sp.localsolve(verbosity=0, solver=self.solver)["cost"] self.assertAlmostEqual(cost / 1024, 1, self.ndig) with SignomialsEnabled(): m = Model(x, [x + y >= z, x + y <= z / 2, y <= x, y >= 1], {z: 3}) m.debug(verbosity=0, solver=self.solver) r3 = ConstraintsRelaxedEqually(m) self.assertEqual(len(r3.varkeys), 4) sp = Model(x * r3.relaxvar**10, r3).sp(use_pccp=False) cost = sp.localsolve(verbosity=0, solver=self.solver)["cost"] self.assertAlmostEqual(cost / (32 * 0.8786796585), 1, self.ndig)
"Debug examples" from gpkit import Variable, Model, units x = Variable("x", "ft") x_min = Variable("x_min", 2, "ft") x_max = Variable("x_max", 1, "ft") y = Variable("y", "volts") m = Model(x/y, [x <= x_max, x >= x_min]) m.debug() print("# Now let's try a model unsolvable with relaxed constants\n") m2 = Model(x, [x <= units("inch"), x >= units("yard")]) m2.debug() print("# And one that's only unbounded\n") # the value of x_min was used up in the previous model! x_min = Variable("x_min", 2, "ft") m3 = Model(x/y, [x >= x_min]) m3.debug() x_min = Variable("x_min", 2, "ft") m4 = Model(x, [x >= x_min]) m4.debug()
"Debug examples" from gpkit import Variable, Model, units x = Variable("x", "ft") x_min = Variable("x_min", 2, "ft") x_max = Variable("x_max", 1, "ft") y = Variable("y", "volts") m = Model(x/y, [x <= x_max, x >= x_min]) m.debug() print "# Now let's try a model unsolvable with relaxed constants\n" Model(x, [x <= units("inch"), x >= units("yard")]).debug() print "# And one that's only unbounded\n" # the value of x_min was used up in the previous model! x_min = Variable("x_min", 2, "ft") Model(x/y, [x >= x_min]).debug()
"Debug examples" from gpkit import Variable, Model x = Variable("x", "ft") x_min = Variable("x_min", 2, "ft") x_max = Variable("x_max", 1, "ft") y = Variable("y", "volts") m = Model(x/y, [x <= x_max, x >= x_min]) m.debug(verbosity=0)
"Debug examples" from gpkit import Variable, Model x = Variable("x", "ft") x_min = Variable("x_min", 2, "ft") x_max = Variable("x_max", 1, "ft") y = Variable("y", "volts") m = Model(x / y, [x <= x_max, x >= x_min]) m.debug(verbosity=0)