예제 #1
0
    def test_fp_MINLP2_simple(self):
        """Test the feasibility pump algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = SimpleMINLP2()
            print('\n Solving SimpleMINLP2 using feasibility pump')
            results = opt.solve(model,
                                strategy='FP',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0],
                                iteration_limit=30)

            self.assertTrue(is_feasible(model, self.get_config(opt)))
예제 #2
0
    def test_ECP_MINLP2_simple(self):
        """Test the extended cutting plane decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = SimpleMINLP2()
            print('\n Solving MINLP2_simple problem with extended cutting plane')
            results = opt.solve(model, strategy='ECP',
                                init_strategy='initial_binary',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0])

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.cost.expr), 6.00976, places=2)
예제 #3
0
 def test_FP_OA_MINLP2_simple(self):
     """Test the FP-OA algorithm."""
     with SolverFactory('mindtpy') as opt:
         model = SimpleMINLP2()
         print('\n Solving SimpleMINLP2 using FP-OA')
         results = opt.solve(model,
                             strategy='OA',
                             init_strategy='FP',
                             mip_solver=required_solvers[1],
                             nlp_solver=required_solvers[0],
                             iteration_limit=30)
         self.assertIs(results.solver.termination_condition,
                       TerminationCondition.optimal)
         self.assertAlmostEqual(value(model.cost.expr), 6.00976, places=2)
예제 #4
0
 def test_lazy_OA_MINLP2_simple(self):
     """Test the LP/NLP decomposition algorithm."""
     with SolverFactory('mindtpy') as opt:
         model = SimpleMINLP2()
         print('\n Solving MINLP2_simple problem with LP/NLP')
         results = opt.solve(model,
                             strategy='OA',
                             init_strategy='initial_binary',
                             mip_solver=required_solvers[1],
                             nlp_solver=required_solvers[0],
                             single_tree=True,
                             bound_tolerance=1E-2)
         self.assertIs(results.solver.termination_condition,
                       TerminationCondition.optimal)
         self.assertAlmostEqual(value(model.cost.expr), 6.00976, places=2)
예제 #5
0
    def test_OA_MINLP2_simple(self):
        """Test the outer approximation decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = SimpleMINLP2()
            print('\n Solving problem with Outer Approximation')
            results = opt.solve(model,
                                strategy='OA',
                                init_strategy='initial_binary',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0],
                                obj_bound=10)

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.cost.expr), 6.00976, places=2)
예제 #6
0
 def test_GOA_MINLP2_simple(self):
     """Test the global outer approximation decomposition algorithm."""
     with SolverFactory('mindtpy') as opt:
         model = SimpleMINLP2()
         print('\n Solving MINLP2_simple problem with Outer Approximation')
         results = opt.solve(model,
                             strategy='GOA',
                             mip_solver=required_solvers[1],
                             nlp_solver='baron',
                             add_nogood_cuts=True,
                             single_tree=True,
                             bound_tolerance=1E-2)
         self.assertIs(results.solver.termination_condition,
                       TerminationCondition.optimal)
         self.assertAlmostEqual(value(model.cost.expr), 6.00976, places=2)
예제 #7
0
from pyomo.contrib.mindtpy.tests.from_proposal import ProposalModel
from pyomo.contrib.mindtpy.tests.constraint_qualification_example import ConstraintQualificationExample
from pyomo.environ import SolverFactory, value
from pyomo.opt import TerminationCondition

required_solvers = ('ipopt', 'glpk')
# required_solvers = ('gams', 'gams')
if all(SolverFactory(s).available() for s in required_solvers):
    subsolvers_available = True
else:
    subsolvers_available = False

model_list = [EightProcessFlowsheet(convex=True),
              ConstraintQualificationExample(),
              SimpleMINLP(),
              SimpleMINLP2(),
              SimpleMINLP3(),
              ProposalModel(),
              ]


@unittest.skipIf(not subsolvers_available,
                 'Required subsolvers %s are not available'
                 % (required_solvers,))
class TestMindtPy(unittest.TestCase):
    """Tests for the MindtPy solver plugin."""

    def test_ECP(self):
        """Test the extended cutting plane decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            for model in model_list: