def test_improper_basic_step_linear(self): model_builder = import_file( join(exdir, 'two_rxn_lee', 'two_rxn_model.py')) m = model_builder.build_model(use_mccormick=True) m.basic_step = apply_basic_step([ m.reactor_choice, m.max_demand, m.mccormick_1, m.mccormick_2]) for disj in m.basic_step.disjuncts.values(): self.assertIs( disj.improper_constraints[1].body, m.P) self.assertEqual( disj.improper_constraints[1].lower, None) self.assertEqual( disj.improper_constraints[1].upper, 2) self.assertEqual( disj.improper_constraints[2].body.polynomial_degree(), 1) self.assertEqual( disj.improper_constraints[2].lower, None) self.assertEqual( disj.improper_constraints[2].upper, 0) self.assertEqual( disj.improper_constraints[3].body.polynomial_degree(), 1) self.assertEqual( disj.improper_constraints[3].lower, None) self.assertEqual( disj.improper_constraints[3].upper, 0) self.assertEqual( len(disj.improper_constraints), 3) self.assertFalse(m.max_demand.active) self.assertFalse(m.mccormick_1.active) self.assertFalse(m.mccormick_2.active)
def test_improper_basic_step_simpleConstraint(self): m = models.makeTwoTermDisj() m.simple = Constraint(expr=m.x <= m.a + 1) m.basic_step = apply_basic_step([m.disjunction, m.simple]) self.check_after_improper_basic_step(m) self.assertFalse(m.simple.active) self.assertFalse(m.disjunction.active)
def test_improper_basic_step(self): model_builder = import_file( join(exdir, 'two_rxn_lee', 'two_rxn_model.py')) m = model_builder.build_model() m.basic_step = apply_basic_step([m.reactor_choice, m.max_demand]) for disj in m.basic_step.disjuncts.values(): self.assertEqual( disj.improper_constraints[1].body.polynomial_degree(), 2) self.assertEqual(disj.improper_constraints[1].lower, None) self.assertEqual(disj.improper_constraints[1].upper, 2) self.assertEqual(len(disj.improper_constraints), 1) self.assertFalse(m.max_demand.active)
def test_improper_basic_step_constraintData(self): m = models.makeTwoTermDisj() @m.Constraint([1, 2]) def indexed(m, i): return m.x <= m.a + i m.basic_step = apply_basic_step([m.disjunction, m.indexed[1]]) self.check_after_improper_basic_step(m) self.assertFalse(m.indexed[1].active) self.assertTrue(m.indexed[2].active) self.assertFalse(m.disjunction.active)
def test_indicator_var_references(self): m = models.makeTwoTermDisj() m.simple = Constraint(expr=m.x <= m.a + 1) m.basic_step = apply_basic_step([m.disjunction, m.simple]) refs = [ v for v in m.basic_step.component_data_objects( BooleanVar, sort=SortComponents.deterministic) ] self.assertEqual(len(refs), 2) self.assertIs(refs[0][None], m.d[0].indicator_var) self.assertIs(refs[1][None], m.d[1].indicator_var)
def test_improper_basic_step_indexedConstraint(self): m = models.makeTwoTermDisj() @m.Constraint([1, 2]) def indexed(m, i): return m.x <= m.a + i m.basic_step = apply_basic_step([m.disjunction, m.indexed]) for disj in m.basic_step.disjuncts.values(): self.assertEqual(len(disj.improper_constraints), 2) cons = disj.improper_constraints[1] self.check_constraint_body(m, cons, -1) cons = disj.improper_constraints[2] self.check_constraint_body(m, cons, -2)
def test_improper_basic_step(self): model_builder = import_file( join(exdir, 'two_rxn_lee', 'two_rxn_model.py')) m = model_builder.build_model() m.basic_step = apply_basic_step([m.reactor_choice, m.max_demand]) for disj in m.basic_step.disjuncts.values(): self.assertEqual( disj.improper_constraints[1].body.polynomial_degree(), 2) self.assertEqual( disj.improper_constraints[1].lower, None) self.assertEqual( disj.improper_constraints[1].upper, 2) self.assertEqual( len(disj.improper_constraints), 1) self.assertFalse(m.max_demand.active)
def solve_basic_step_model(): m_base = build_gdp_model() m_base.BS = apply_basic_step([m_base.disjunctions[1],m_base.disjunctions[2]]) # crux to pprint component #with open('pprint.log','w') as outputfile: # m_base.disjunctions.pprint(outputfile) #m_bs_chull = TransformationFactory('gdp.chull').create_using(m_base) m_bigm = TransformationFactory('gdp.bigm').create_using(m_base, bigM=100) m_bigm.pprint() solver = SolverFactory('gams') solver.solve(m_bigm, tee=True, solver='baron') m_bigm.objective.display() m_bigm.x1.display() m_bigm.x2.display()
def test_improper_basic_step_linear(self): model_builder = import_file( join(exdir, 'two_rxn_lee', 'two_rxn_model.py')) m = model_builder.build_model(use_mccormick=True) m.basic_step = apply_basic_step( [m.reactor_choice, m.max_demand, m.mccormick_1, m.mccormick_2]) for disj in m.basic_step.disjuncts.values(): self.assertIs(disj.improper_constraints[1].body, m.P) self.assertEqual(disj.improper_constraints[1].lower, None) self.assertEqual(disj.improper_constraints[1].upper, 2) self.assertEqual( disj.improper_constraints[2].body.polynomial_degree(), 1) self.assertEqual(disj.improper_constraints[2].lower, None) self.assertEqual(disj.improper_constraints[2].upper, 0) self.assertEqual( disj.improper_constraints[3].body.polynomial_degree(), 1) self.assertEqual(disj.improper_constraints[3].lower, None) self.assertEqual(disj.improper_constraints[3].upper, 0) self.assertEqual(len(disj.improper_constraints), 3) self.assertFalse(m.max_demand.active) self.assertFalse(m.mccormick_1.active) self.assertFalse(m.mccormick_2.active)