예제 #1
0
    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])
예제 #2
0
    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]])
예제 #3
0
    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])
예제 #4
0
    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]])