Esempio n. 1
0
 def test_maximize_obj(self):
     """Test the extended cutting plane decomposition algorithm."""
     with SolverFactory('mindtpy') as opt:
         model = ProposalModel()
         model.obj.sense = maximize
         print('\n test maximize case to improve code coverage')
         opt.solve(model,
                   strategy='ECP',
                   mip_solver=required_solvers[1],
                   nlp_solver=required_solvers[0])
         self.assertAlmostEqual(value(model.obj.expr), 14.83, places=1)
Esempio n. 2
0
    def test_fp_Proposal(self):
        """Test the feasibility pump algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving ProposalModel 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)))
Esempio n. 3
0
    def test_ECP_Proposal(self):
        """Test the extended cutting plane decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving Proposal problem with extended cutting plane')
            results = opt.solve(model, strategy='ECP',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0])

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.obj.expr), 0.66555, places=2)
Esempio n. 4
0
 def test_maximize_obj(self):
     """Test the outer approximation decomposition algorithm."""
     with SolverFactory('mindtpy') as opt:
         model = ProposalModel()
         model.objective.sense = maximize
         opt.solve(model, strategy='OA',
                   mip_solver=required_solvers[1],
                   nlp_solver=required_solvers[0],
                   #   mip_solver_args={'timelimit': 0.9}
                   )
         self.assertAlmostEqual(
             value(model.objective.expr), 14.83, places=1)
Esempio n. 5
0
    def test_lazy_OA_Proposal(self):
        """Test the LP/NLP decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving Proposal problem with LP/NLP')
            results = opt.solve(model,
                                strategy='OA',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0],
                                single_tree=True)

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.obj.expr), 0.66555, places=2)
Esempio n. 6
0
    def test_FP_OA_Proposal(self):
        """Test the FP-OA algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving ProposalModel 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.obj.expr), 0.66555, places=2)
Esempio n. 7
0
    def test_GOA_Proposal(self):
        """Test the global outer approximation decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving Proposal problem with Outer Approximation')
            results = opt.solve(model,
                                strategy='GOA',
                                mip_solver=required_solvers[1],
                                nlp_solver=required_solvers[0],
                                add_no_good_cuts=True,
                                integer_to_binary=True)

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.obj.expr), 0.66555, places=2)
Esempio n. 8
0
    def test_OA_Proposal_with_int_cuts(self):
        """Test the outer approximation decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print('\n Solving problem with Outer Approximation')
            results = opt.solve(
                model,
                strategy='OA',
                mip_solver=required_solvers[1],
                nlp_solver=required_solvers[0],
                add_integer_cuts=True,
                integer_to_binary=
                True  # if we use lazy callback, we cannot set integer_to_binary True
            )

            self.assertIs(results.solver.termination_condition,
                          TerminationCondition.optimal)
            self.assertAlmostEqual(value(model.obj.expr), 0.66555, places=2)
    def test_GOA_Proposal_with_int_cuts_tabu_list(self):
        """Test the global outer approximation decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            print(
                '\n Solving Proposal problem with Outer Approximation(no-good cuts)'
            )
            results = opt.solve(
                model,
                strategy='GOA',
                mip_solver=required_solvers[1],
                nlp_solver=required_solvers[0],
                use_tabu_list=True,
                integer_to_binary=
                True,  # if we use lazy callback, we cannot set integer_to_binary True
                single_tree=True)

            self.assertIn(
                results.solver.termination_condition,
                [TerminationCondition.optimal, TerminationCondition.feasible])
            self.assertAlmostEqual(value(model.obj.expr), 0.66555, places=2)
Esempio n. 10
0
    def test_OA_quadratic_strategy(self):
        """Test the outer approximation decomposition algorithm."""
        with SolverFactory('mindtpy') as opt:
            model = ProposalModel()
            if SolverFactory('cplex').available():
                mip_solver = 'cplex'
            elif SolverFactory('gurobi').available():
                mip_solver = 'gurobi'
            for quadratic_strategy in (0, 1, 2):
                results = opt.solve(
                    model,
                    strategy='OA',
                    mip_solver=mip_solver,
                    nlp_solver=required_solvers[0],
                    quadratic_strategy=quadratic_strategy,
                )

                self.assertIn(results.solver.termination_condition, [
                    TerminationCondition.optimal, TerminationCondition.feasible
                ])
                self.assertAlmostEqual(value(model.objective.expr),
                                       model.optimal_value,
                                       places=1)
Esempio n. 11
0
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:
                results = opt.solve(model, strategy='ECP',
                                    init_strategy='rNLP',