コード例 #1
0
    def test_explicit_model(self):
        dual = Model()
        convert_linear_problem_to_dual(self.model, dual_model=dual)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #2
0
 def test_making_primal_unbounded(self):
     self.model.remove(self.c1)
     dual = convert_linear_problem_to_dual(self.model)
     primal_status = self.model.optimize()
     dual_status = dual.optimize()
     self.assertEqual(primal_status, optlang.interface.UNBOUNDED)
     self.assertEqual(dual_status, optlang.interface.INFEASIBLE)
コード例 #3
0
 def test_making_primal_infeasible(self):
     # Note: The dual of an infeasible primal will be either unbounded or infeasible. In this case it is unbounded.
     c4 = Constraint(self.model.variables["z"], lb=100)
     self.model.add(c4)
     dual = convert_linear_problem_to_dual(self.model)
     primal_status = self.model.optimize()
     dual_status = dual.optimize()
     self.assertEqual(primal_status, optlang.interface.INFEASIBLE)
     self.assertEqual(dual_status, optlang.interface.UNBOUNDED)
コード例 #4
0
    def test_dual_value_equal_primal(self):
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #5
0
    def test_variable_with_positive_lower_bound(self):
        self.model.variables["x"].lb = 1
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #6
0
    def test_with_minimization(self):
        self.model.objective = Objective(self.model.objective.expression * -1, direction="min")
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, -31)
        self.assertEqual(dual.objective.value, -31)
コード例 #7
0
    def test_zero_bound_variable(self):
        w = Variable("w", lb=0, ub=0)
        self.model.add(w)
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #8
0
    def test_free_constraint(self):
        c4 = Constraint(self.model.variables["x"], lb=None, ub=None)
        self.model.add(c4)
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #9
0
    def test_empty_constraint(self):
        c4 = Constraint(0, lb=0, ub=13)
        self.model.add(c4)
        dual = convert_linear_problem_to_dual(self.model)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 31)
        self.assertEqual(dual.objective.value, 31)
コード例 #10
0
    def test_equality_constraint_not_zero(self):
        c2 = self.model.constraints[1]
        c2.ub = 1
        c2.lb = 1
        dual = convert_linear_problem_to_dual(self.model, maintain_standard_form=False)
        primal_status = self.model.optimize()
        dual_status = dual.optimize()

        self.assertEqual(primal_status, optlang.interface.OPTIMAL)
        self.assertEqual(dual_status, optlang.interface.OPTIMAL)

        self.assertEqual(self.model.objective.value, 32)
        self.assertEqual(dual.objective.value, 32)
コード例 #11
0
 def test_dual_is_standard_form(self):
     dual = convert_linear_problem_to_dual(self.model, infinity=1000)
     dual_2 = convert_linear_problem_to_dual(self.model, maintain_standard_form=False, infinity=1000)
     self.assertTrue(all(var.lb >= 0 for var in dual.variables))
     self.assertFalse(all(var.lb >= 0 for var in dual_2.variables))
コード例 #12
0
 def test_infinity(self):
     dual = convert_linear_problem_to_dual(self.model, infinity=1000)
     for var in dual.variables:
         self.assertTrue(var.ub <= 1000)
         self.assertTrue(var.lb >= -1000)