def test_dual_integer_vars_as_lp(self, model): var = _add_decision_variable(model, "AKGDH") assert abs(model.optimize("maximize").f - 0.874) < 0.001 # as lp: make integer continuous, set to 1 dual = dual_problem(model, "maximize", [var.id], copy=True) r = dual.reactions.get_by_id(var.id) r.variable_kind = "continuous" r.lower_bound = r.upper_bound = 1 assert abs(dual.optimize("minimize").f - 0.874) < 0.001 r.lower_bound = r.upper_bound = 0 assert abs(dual.optimize("minimize").f - 0.858) < 0.001
def test_dual_integer_vars_as_lp(self): model = create_test_model("textbook") var = _add_decision_variable(model, "AKGDH") self.assertAlmostEqual(model.optimize("maximize").f, 0.874, places=3) # as lp: make integer continuous, set to 1 dual = dual_problem(model, "maximize", [var.id], copy=True) r = dual.reactions.get_by_id(var.id) r.variable_kind = "continuous" r.lower_bound = r.upper_bound = 1 self.assertAlmostEqual(dual.optimize("minimize").f, 0.874, places=3) r.lower_bound = r.upper_bound = 0 self.assertAlmostEqual(dual.optimize("minimize").f, 0.858, places=3)
def test_dual_integer_vars_as_mip(self, model): # mip var = _add_decision_variable(model, "AKGDH") dual = dual_problem(model, "maximize", [var.id], copy=True) var_in_dual = dual.reactions.get_by_id(var.id) # minimization, so the optimal value state is to turn off AKGDH assert abs(dual.optimize("minimize").f - 0.858) < 0.001 # turn off AKGDH in dual var_in_dual.lower_bound = var_in_dual.upper_bound = 1 assert abs(dual.optimize("minimize").f - 0.874) < 0.001 # turn on AKGDH in dual var_in_dual.lower_bound = var_in_dual.upper_bound = 0 assert abs(dual.optimize("minimize").f - 0.858) < 0.001
def test_dual_integer_vars_as_mip(self): # mip model = create_test_model("textbook") var = _add_decision_variable(model, "AKGDH") dual = dual_problem(model, "maximize", [var.id], copy=True) var_in_dual = dual.reactions.get_by_id(var.id) # minimization, so the optimal value state is to turn off AKGDH self.assertAlmostEqual(dual.optimize("minimize").f, 0.858, places=3) # turn off AKGDH in dual var_in_dual.lower_bound = var_in_dual.upper_bound = 1 self.assertAlmostEqual(dual.optimize("minimize").f, 0.874, places=3) # turn on AKGDH in dual var_in_dual.lower_bound = var_in_dual.upper_bound = 0 self.assertAlmostEqual(dual.optimize("minimize").f, 0.858, places=3)