def test_cobyla_optimizer_with_variable_bounds(self): """Cobyla Optimizer Test With Variable Bounds.""" # initialize optimizer cobyla = CobylaOptimizer() # initialize problem problem = QuadraticProgram() # set variables and bounds problem.continuous_var(lowerbound=-1, upperbound=1) problem.continuous_var(lowerbound=-2, upperbound=2) # set objective and minimize problem.minimize(linear=[1, 1]) # solve problem with cobyla result = cobyla.solve(problem) # analyze results self.assertAlmostEqual(result.x[0], -1.0, places=6) self.assertAlmostEqual(result.x[1], -2.0, places=6) # set objective and minimize problem.maximize(linear=[1, 1]) # solve problem with cobyla result = cobyla.solve(problem) # analyze results self.assertAlmostEqual(result.x[0], 1.0, places=6) self.assertAlmostEqual(result.x[1], 2.0, places=6)
def test_admm_maximization(self): """Tests a simple maximization problem using ADMM optimizer""" mdl = Model("simple-max") c = mdl.continuous_var(lb=0, ub=10, name="c") x = mdl.binary_var(name="x") mdl.maximize(c + x * x) op = from_docplex_mp(mdl) admm_params = ADMMParameters() solver = ADMMOptimizer(params=admm_params, continuous_optimizer=CobylaOptimizer()) solution = solver.solve(op) self.assertIsNotNone(solution) self.assertIsInstance(solution, ADMMOptimizationResult) self.assertIsNotNone(solution.x) np.testing.assert_almost_equal([10, 0], solution.x, 3) self.assertIsNotNone(solution.fval) np.testing.assert_almost_equal(10, solution.fval, 3) self.assertIsNotNone(solution.state) self.assertIsInstance(solution.state, ADMMState) self.assertEqual(len(solution.samples), 1) self.assertAlmostEqual(solution.fval, solution.samples[0].fval) np.testing.assert_almost_equal(solution.x, solution.samples[0].x) self.assertEqual(solution.status, solution.samples[0].status) self.assertAlmostEqual(solution.samples[0].probability, 1.0)
def test_cobyla_optimizer_with_trials(self): """Cobyla Optimizer Test.""" # load optimization problem problem = QuadraticProgram() problem.continuous_var(upperbound=4) problem.continuous_var(upperbound=4) problem.linear_constraint(linear=[1, 1], sense="=", rhs=2) problem.minimize(linear=[2, 2], quadratic=[[2, 0.25], [0.25, 0.5]]) # solve problem with cobyla cobyla = CobylaOptimizer(trials=3) result = cobyla.solve(problem) # analyze results self.assertAlmostEqual(result.fval, 5.8750)
def test_cobyla_optimizer_with_quadratic_constraint(self): """Cobyla Optimizer Test With Quadratic Constraints.""" # load optimization problem problem = QuadraticProgram() problem.continuous_var(upperbound=1) problem.continuous_var(upperbound=1) problem.minimize(linear=[1, 1]) linear = [-1, -1] quadratic = [[1, 0], [0, 1]] problem.quadratic_constraint(linear=linear, quadratic=quadratic, rhs=-1 / 2) # solve problem with cobyla cobyla = CobylaOptimizer() result = cobyla.solve(problem) # analyze results self.assertAlmostEqual(result.fval, 1.0, places=2)
def test_cobyla_optimizer_with_invalid_num_trials(self): """Cobyla Optimizer Test with an invalid number of trials.""" with self.assertRaises(ValueError): _ = CobylaOptimizer(trials=0) with self.assertRaises(ValueError): _ = CobylaOptimizer(trials=-1) with self.assertRaises(ValueError): cobyla = CobylaOptimizer() cobyla.trials = 0 with self.assertRaises(ValueError): cobyla = CobylaOptimizer() cobyla.trials = -1