예제 #1
0
파일: models.py 프로젝트: CanLi1/pyomo-1
def makeTwoTermIndexedDisjunction():
    m = ConcreteModel()
    m.A = Set(initialize=[1, 2, 3])
    m.B = Set(initialize=['a', 'b'])
    m.x = Var(m.A, bounds=(-10, 10))

    def disjunct_rule(d, i, k):
        m = d.model()
        if k == 'a':
            d.cons_a = Constraint(expr=m.x[i] >= 5)
        if k == 'b':
            d.cons_b = Constraint(expr=m.x[i] <= 0)
    m.disjunct = Disjunct(m.A, m.B, rule=disjunct_rule)

    def disj_rule(m, i):
        return [m.disjunct[i, k] for k in m.B]
    m.disjunction = Disjunction(m.A, rule=disj_rule)
    return m
예제 #2
0
def get_model(flag, fixprim, fixdual):
    model = ConcreteModel()

    model.obj = Param(default=20)

    model.n = Param(default=7)
    model.m = Param(default=7)

    model.N = RangeSet(1, model.n)
    model.M = RangeSet(1, model.m)

    def c_rule(model, j):
        return 5 if j < 5 else 9.0 / 2

    model.c = Param(model.N)

    def b_rule(model, i):
        if i == 4:
            i = 5
        elif i == 5:
            i = 4
        return 5 if i < 5 else 7.0 / 2

    model.b = Param(model.M)

    def A_rule(model, i, j):
        if i == 4:
            i = 5
        elif i == 5:
            i = 4
        return 2 if i == j else 1

    model.A = Param(model.M, model.N)

    model.x = Var(model.N, within=NonNegativeReals)
    model.y = Var(model.M, within=NonNegativeReals)
    model.xx = Var([1, 2], model.N, within=NonNegativeReals)
    model.yy = Var([1, 2], model.M, within=NonNegativeReals)

    if flag:
        model.ydiff = Objective(expr=model.yy[2, fixdual] -
                                model.yy[1, fixdual])

        def yext_rule(model, k):
            return sum(model.b[i] * model.yy[k, i]
                       for i in model.M) == model.obj

        model.yext = Constraint([1, 2])

        def dualcons_rule(model, k, j):
            return sum(model.A[i, j] * model.yy[k, i]
                       for i in model.N) <= model.c[j]

        model.dualcons = Constraint([1, 2], model.N)
    else:
        model.xdiff = Objective(expr=model.xx[2, fixprim] -
                                model.xx[1, fixprim])

        def xext_rule(model, k):
            return sum(model.c[j] * model.xx[k, j]
                       for j in model.N) == model.obj

        model.xext = Constraint([1, 2])

        def primcons_rule(model, k, i):
            return sum(model.A[i, j] * model.xx[k, j]
                       for j in model.M) >= model.b[i]

        model.primcons = Constraint([1, 2], model.M)

    model.create()
    return model
예제 #3
0
        i = 4
    return 5 if i < 5 else 7.0 / 2


model.b = Param(model.M)


def A_rule(model, i, j):
    if i == 4:
        i = 5
    elif i == 5:
        i = 4
    return 2 if i == j else 1


model.A = Param(model.M, model.N)

model.x = Var(model.N, within=NonNegativeReals)
model.y = Var(model.M, within=NonNegativeReals)

model.cost = Objective(expr=sum_product(model.c, model.x))


def primalcon_rule(model, i):
    return sum(model.A[i, j] * model.x[j] for j in model.N) >= model.b[i]


model.primalcon = Constraint(model.M)

model.dual = Suffix(direction=Suffix.IMPORT)
model.rc = Suffix(direction=Suffix.IMPORT)