def test_initialize_2(self): # All variables used in an expression # None of the Integer variables looks like a binary M = pe.ConcreteModel() M.p = pe.Param(initialize=1) M.x = pe.Var([0]) M.y = pe.Var([1, 2], within=pe.Binary) M.z = pe.Var([3, 4, 5], within=pe.Integers) M.x[0].setlb(0) M.x[0].setub(1) M.z[4].setlb(0) M.z[4].setub(2) M.o = pe.Objective(expr=M.x[0] + 2 * sum(M.y[i] for i in M.y) + 3 * sum(M.z[i] for i in M.z)) def c_rule(M, i): return pe.Constraint.Skip M.c1 = pe.Constraint([0], rule=c_rule) M.c2 = pe.Constraint(expr=M.x[0] <= np.PINF) #M.c3 = pe.Constraint(expr=M.p <= 2) Changed in Pyomo 6.0 M.s = SubModel(fixed=M.x) lmpr, _ = convert_pyomo2LinearMultilevelProblem(M, inequalities=True) U = lmpr.U L = lmpr.U.LL self.assertEqual(len(U.x), len(M.x) + len(M.z) + len(M.y)) self.assertEqual(U.d, 0) self.assertEqual(list(U.c[U]), [1, 3, 3, 3, 2, 2])
def test_initialize_3a(self): # All variables used in an expression # None of the Integer variables looks like a binary M = pe.ConcreteModel() M.x = pe.Var([0]) M.y = pe.Var([1, 2], within=pe.Binary) M.z = pe.Var([3, 4, 5], within=pe.Integers) M.x[0].setlb(0) M.x[0].setub(1) M.z[4].setlb(0) M.z[4].setub(2) M.o = pe.Objective(expr=1) M.c = pe.Constraint(expr=M.x[0] + 2 * sum(M.y[i] for i in M.y) + 3 * sum(M.z[i] for i in M.z) == 0) M.s = SubModel(fixed=M.x) #M.s.c = pe.Constraint(expr=M.x[0]+sum(M.y[i] for i in M.y)+sum(M.z[i] for i in M.z) == 0) lmpr, _ = convert_pyomo2LinearMultilevelProblem(M, inequalities=False) U = lmpr.U L = lmpr.U.LL self.assertEqual(len(lmpr.U.x), len(M.x) + len(M.z) + len(M.y)) self.assertEqual(U.c[U], None) # 2 rows because the lmpr is an inequality, so the equality is split in two self.assertEqual(U.A[U].shape, (1, 6)) self.assertEqual([list(U.A[U].toarray()[i]) for i in range(1)], [[1, 3, 3, 3, 2, 2]])
def test_initialize1(self): # All variables used in an expression # One of the Integer variables looks like a binary M = pe.ConcreteModel() M.x = pe.Var() M.z = pe.Var([3, 4, 5], within=pe.Integers) M.y = pe.Var([1, 2], within=pe.Binary) M.z[4].setlb(0) M.z[4].setub(1) M.o = pe.Objective(expr=1 + 2 * M.x + 3 * sum(M.y[i] for i in M.y) + 4 * sum(M.z[i] for i in M.z)) M.s = SubModel(fixed=M.x) M.s.o = pe.Objective(expr=5 + 6 * M.x + 7 * sum(M.y[i] for i in M.y) + 8 * sum(M.z[i] for i in M.z)) lmpr, _ = convert_pyomo2LinearMultilevelProblem(M, inequalities=True) U = lmpr.U L = lmpr.U.LL self.assertEqual(len(U.x), len(M.x)) self.assertEqual(len(L.x), len(M.z) + len(M.y)) self.assertEqual(U.d, 1) self.assertEqual(list(U.c[U]), [2]) self.assertEqual(list(U.c[L]), [4, 4, 3, 3, 4]) self.assertEqual(L.d, 5) self.assertEqual(list(L.c[U]), [6]) self.assertEqual(list(L.c[L]), [8, 8, 7, 7, 8])
def test_initialize_4a(self): # All variables used in an expression # None of the Integer variables looks like a binary M = pe.ConcreteModel() M.x = pe.Var([0]) M.X = pe.Var([0]) M.y = pe.Var([1, 2], within=pe.Binary) M.Y = pe.Var([1, 2], within=pe.Binary) M.z = pe.Var([3, 4, 5], within=pe.Integers) M.Z = pe.Var([3, 4, 5], within=pe.Integers) M.x[0].setlb(0) M.x[0].setub(1) M.z[4].setlb(0) M.z[4].setub(2) M.o = pe.Objective(expr=1) M.c = pe.Constraint(expr=M.x[0] + 2 * sum(M.y[i] for i in M.y) + 3 * sum(M.z[i] for i in M.z) == 0) M.C1 = pe.Constraint(expr=M.x[0] >= 0) M.C2 = pe.Constraint(expr=M.x[0] <= 0) M.C3 = pe.Constraint(expr=pe.inequality(0, M.x[0], 1)) M.s = SubModel(fixed=M.x) M.s.c = pe.Constraint(expr=M.X[0] + sum(M.Y[i] for i in M.Y) + sum(M.Z[i] for i in M.Z) == 0) lmpr, _ = convert_pyomo2LinearMultilevelProblem(M, inequalities=True) U = lmpr.U L = U.LL self.assertEqual(len(U.x), len(M.x) + len(M.z) + len(M.y)) self.assertEqual(len(L.x), len(M.X) + len(M.Z) + len(M.Y)) self.assertEqual(U.c[U], None) # 2 rows because the lmpr is an inequality, so the equality is split in two self.assertEqual(U.A[U].shape, (6, 6)) self.assertEqual([list(U.A[U].toarray()[i]) for i in range(6)], [[1.0, 3, 3, 3, 2, 2], [-1.0, -3, -3, -3, -2, -2], [-1.0, 0, 0, 0, 0, 0], [1.0, 0, 0, 0, 0, 0], [-1.0, 0, 0, 0, 0, 0], [1.0, 0, 0, 0, 0, 0]]) # 2 rows because the lmpr is an inequality, so the equality is split in two self.assertEqual(L.A[L].shape, (2, 6)) self.assertEqual([list(L.A[L].toarray()[i]) for i in range(2)], [[1, 1, 1, 1, 1, 1], [-1, -1, -1, -1, -1, -1]])