コード例 #1
0
ファイル: test_template_expr.py プロジェクト: yuanzy97/pyomo
    def test_simple_sum_rule(self):
        m = ConcreteModel()
        m.I = RangeSet(3)
        m.J = RangeSet(3)
        m.x = Var(m.I,m.J)
        @m.Constraint(m.I)
        def c(m, i):
            return sum(m.x[i,j] for j in m.J) <= 0

        template, indices = templatize_constraint(m.c)
        self.assertEqual(len(indices), 1)
        self.assertIs(indices[0]._set, m.I)
        self.assertEqual(
            template.to_string(verbose=True),
            "templatesum(getitem(x, _1, _2), iter(_2, J))  <=  0.0"
        )
        self.assertEqual(
            str(template),
            "SUM(x[_1,_2] for _2 in J)  <=  0.0"
        )
        # Evaluate the template
        indices[0].set_value(2)
        self.assertEqual(
            str(resolve_template(template)),
            'x[2,1] + x[2,2] + x[2,3]  <=  0.0'
        )
コード例 #2
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
    def test_multidim_nested_sum_rule(self):
        m = ConcreteModel()
        m.I = RangeSet(3)
        m.J = RangeSet(3)
        m.JI = m.J * m.I
        m.K = Set(m.I, initialize={1: [10], 2: [10, 20], 3: [10, 20, 30]})
        m.x = Var(m.I, m.J, [10, 20, 30])

        @m.Constraint()
        def c(m):
            return sum(sum(m.x[i, j, k] for k in m.K[i]) for j, i in m.JI) <= 0

        template, indices = templatize_constraint(m.c)
        self.assertEqual(len(indices), 0)
        self.assertEqual(
            template.to_string(verbose=True), "templatesum("
            "templatesum(getitem(x, _2, _1, _3), iter(_3, getitem(K, _2))), "
            "iter(_1, _2, JI))  <=  0")
        self.assertEqual(
            str(template), "SUM(SUM(x[_2,_1,_3] for _3 in K[_2]) "
            "for _1, _2 in JI)  <=  0")
        # Evaluate the template
        self.assertEqual(
            str(resolve_template(template)), 'x[1,1,10] + '
            '(x[2,1,10] + x[2,1,20]) + '
            '(x[3,1,10] + x[3,1,20] + x[3,1,30]) + '
            '(x[1,2,10]) + '
            '(x[2,2,10] + x[2,2,20]) + '
            '(x[3,2,10] + x[3,2,20] + x[3,2,30]) + '
            '(x[1,3,10]) + '
            '(x[2,3,10] + x[2,3,20]) + '
            '(x[3,3,10] + x[3,3,20] + x[3,3,30])  <=  0')
コード例 #3
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
    def test_template_scalar(self):
        m = self.m
        t = IndexTemplate(m.I)
        e = m.x[t]
        self.assertIs(type(e), EXPR.GetItemExpression)
        self.assertEqual(e.args, (m.x, t))
        self.assertFalse(e.is_constant())
        self.assertFalse(e.is_fixed())
        self.assertEqual(e.polynomial_degree(), 1)
        self.assertEqual(str(e), "x[{I}]")
        t.set_value(5)
        v = e()
        self.assertIn(type(v), (int, float))
        self.assertEqual(v, 6)
        self.assertIs(resolve_template(e), m.x[5])
        t.set_value()

        e = m.p[t, 10]
        self.assertIs(type(e), EXPR.GetItemExpression)
        self.assertEqual(e.args, (m.p, t, 10))
        self.assertFalse(e.is_constant())
        self.assertTrue(e.is_fixed())
        self.assertEqual(e.polynomial_degree(), 0)
        self.assertEqual(str(e), "p[{I},10]")
        t.set_value(5)
        v = e()
        self.assertIn(type(v), (int, float))
        self.assertEqual(v, 510)
        self.assertIs(resolve_template(e), m.p[5, 10])
        t.set_value()

        e = m.p[5, t]
        self.assertIs(type(e), EXPR.GetItemExpression)
        self.assertEqual(e.args, (m.p, 5, t))
        self.assertFalse(e.is_constant())
        self.assertTrue(e.is_fixed())
        self.assertEqual(e.polynomial_degree(), 0)
        self.assertEqual(str(e), "p[5,{I}]")
        t.set_value(10)
        v = e()
        self.assertIn(type(v), (int, float))
        self.assertEqual(v, 510)
        self.assertIs(resolve_template(e), m.p[5, 10])
        t.set_value()
コード例 #4
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
    def test_IndexTemplate(self):
        m = self.m
        i = IndexTemplate(m.I)
        with self.assertRaisesRegex(TemplateExpressionError,
                                    "Evaluating uninitialized IndexTemplate"):
            value(i)

        self.assertEqual(str(i), "{I}")

        i.set_value(5)
        self.assertEqual(value(i), 5)
        self.assertIs(resolve_template(i), 5)
コード例 #5
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
    def test_block_templates(self):
        m = ConcreteModel()
        m.T = RangeSet(3)

        @m.Block(m.T)
        def b(b, i):
            b.x = Var(initialize=i)

            @b.Block(m.T)
            def bb(bb, j):
                bb.I = RangeSet(i * j)
                bb.y = Var(bb.I, initialize=lambda m, i: i)

        t = IndexTemplate(m.T)
        e = m.b[t].x
        self.assertIs(type(e), EXPR.GetAttrExpression)
        self.assertEqual(e.nargs(), 2)
        self.assertIs(type(e.arg(0)), EXPR.GetItemExpression)
        self.assertIs(e.arg(0).arg(0), m.b)
        self.assertEqual(e.arg(0).nargs(), 2)
        self.assertIs(e.arg(0).arg(1), t)
        self.assertEqual(str(e), "b[{T}].x")
        t.set_value(2)
        v = e()
        self.assertIn(type(v), (int, float))
        self.assertEqual(v, 2)
        self.assertIs(resolve_template(e), m.b[2].x)
        t.set_value()

        e = m.b[t].bb[t].y[1]
        self.assertIs(type(e), EXPR.GetItemExpression)
        self.assertEqual(e.nargs(), 2)
        self.assertEqual(str(e), "b[{T}].bb[{T}].y[1]")
        t.set_value(2)
        v = e()
        self.assertIn(type(v), (int, float))
        self.assertEqual(v, 1)
        self.assertIs(resolve_template(e), m.b[2].bb[2].y[1])
コード例 #6
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
    def test_simple_rule_nonfinite_set(self):
        m = ConcreteModel()
        m.x = Var(Integers, dense=False)

        @m.Constraint(Integers)
        def c(m, i):
            return m.x[i] <= 0

        template, indices = templatize_constraint(m.c)
        self.assertEqual(len(indices), 1)
        self.assertIs(indices[0]._set, Integers)
        self.assertEqual(str(template), "x[_1]  <=  0")
        # Evaluate the template
        indices[0].set_value(2)
        self.assertEqual(str(resolve_template(template)), 'x[2]  <=  0')
コード例 #7
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
 def test_template_scalar_with_set(self):
     m = self.m
     t = IndexTemplate(m.I)
     e = m.s[t]
     self.assertIs(type(e), EXPR.GetItemExpression)
     self.assertEqual(e.args, (m.s, t))
     self.assertFalse(e.is_constant())
     self.assertTrue(e.is_fixed())
     self.assertEqual(e.polynomial_degree(), 0)
     self.assertEqual(str(e), "s[{I}]")
     t.set_value(5)
     v = e()
     self.assertIs(v, m.s[5])
     self.assertIs(resolve_template(e), m.s[5])
     t.set_value()
コード例 #8
0
ファイル: test_template_expr.py プロジェクト: yuanzy97/pyomo
    def test_simple_rule(self):
        m = ConcreteModel()
        m.I = RangeSet(3)
        m.x = Var(m.I)
        @m.Constraint(m.I)
        def c(m, i):
            return m.x[i] <= 0

        template, indices = templatize_constraint(m.c)
        self.assertEqual(len(indices), 1)
        self.assertIs(indices[0]._set, m.I)
        self.assertEqual(str(template), "x[_1]  <=  0.0")
        # Test that the RangeSet iterator was put back
        self.assertEqual(list(m.I), list(range(1,4)))
        # Evaluate the template
        indices[0].set_value(2)
        self.assertEqual(str(resolve_template(template)), 'x[2]  <=  0.0')
コード例 #9
0
ファイル: test_template_expr.py プロジェクト: jialuw96/pyomo
 def test_nonTemplates(self):
     m = self.m
     self.assertIs(resolve_template(m.x[1]), m.x[1])
     e = m.x[1] + m.x[2]
     self.assertIs(resolve_template(e), e)