예제 #1
0
def define_model(**kwds):

    model = ConcreteModel()

    model.x = Var(INDEX_SET, bounds=(-5, 4))  # domain variable
    model.Fx = Var(INDEX_SET)  # range variable
    model.p = Param(INDEX_SET, initialize=1.0)

    model.obj = Objective(expr=sum_product(model.Fx),
                          sense=kwds.pop('sense', maximize))

    model.piecewise = Piecewise(INDEX_SET,
                                model.Fx,
                                model.x,
                                pw_pts=DOMAIN_PTS,
                                f_rule=F,
                                **kwds)

    #Fix the answer for testing purposes
    model.set_answer_constraint1 = Constraint(expr=model.x[1] == -5.0)
    model.set_answer_constraint2 = Constraint(expr=model.x[2] == -3.0)
    model.set_answer_constraint3 = Constraint(expr=model.x[3] == -2.5)
    model.set_answer_constraint4 = Constraint(expr=model.x[4] == -1.5)
    model.set_answer_constraint5 = Constraint(expr=model.x[5] == 2.0)
    model.set_answer_constraint6 = Constraint(expr=model.x[6] == 3.5)
    model.set_answer_constraint7 = Constraint(expr=model.x[7] == 4.0)

    return model
예제 #2
0
def define_model(**kwds):

    model = ConcreteModel()

    model.x = Var(INDEX_SET1, INDEX_SET2, bounds=(0,6)) # domain variable
    model.Fx = Var(INDEX_SET1, INDEX_SET2) # range variable
    model.p = Param(INDEX_SET1, INDEX_SET2, initialize=1.0)

    model.obj = Objective(expr=sum_product(model.Fx), sense=kwds.pop('sense',maximize))

    model.piecewise = Piecewise(INDEX_SET1,INDEX_SET2,model.Fx,model.x,
                                  pw_pts=DOMAIN_PTS,
                                  f_rule=F, **kwds)

    #Fix the answer for testing purposes
    model.set_answer_constraint1 = Constraint(INDEX_SET2,rule= lambda model,t2,t3: model.x['1',t2,t3] == 0.0)
    model.set_answer_constraint2 = Constraint(INDEX_SET2,rule= lambda model,t2,t3: model.x['2',t2,t3] == 3.0)
    model.set_answer_constraint3 = Constraint(INDEX_SET2,rule= lambda model,t2,t3: model.x['3',t2,t3] == 5.5)
    model.set_answer_constraint4 = Constraint(INDEX_SET2,rule= lambda model,t2,t3: model.x['40',t2,t3] == 6.0)

    return model
예제 #3
0
def define_model(**kwds):

    model = ConcreteModel()

    model.x = Var(INDEX) # domain variable
    
    model.Fx = Var(INDEX) # range variable

    model.obj = Objective(expr=sum_product(model.Fx)+sum_product(model.x), sense=kwds.pop('sense',maximize))

    model.piecewise = Piecewise(INDEX,model.Fx,model.x,
                                  pw_pts=DOMAIN_PTS,
                                  f_rule=F,
                                  unbounded_domain_var=True,
                                  **kwds)

    #Fix the answer for testing purposes
    model.set_answer_constraint1 = Constraint(expr= model.x[1] == 0.5) # Fx1 should solve to 0
    model.set_answer_constraint2 = Constraint(expr= model.x[2] == 1.0)  # 
    model.set_answer_constraint3 = Constraint(expr= model.Fx[2] == 0.5) # 
    model.set_answer_constraint4 = Constraint(expr= model.x[3] == 1.5) # Fx3 should solve to 1
    model.set_answer_constraint5 = Constraint(expr= model.x[4] == 2.5) # Fx4 should solve to 1.5
    
    return model
예제 #4
0

def ub_indices_init(model):
    return [(t1, t2, i) for t1 in INDEX_SET1 for t2 in INDEX_SET2
            for i in xrange(len(PIECEWISE_PTS[t1, t2]))]


model.SOS_indices = Set(INDEX_SET1,
                        INDEX_SET2,
                        dimen=3,
                        ordered=True,
                        initialize=SOS_indices_init)
model.ub_indices = Set(ordered=True, dimen=3, initialize=ub_indices_init)

model.x = Var(INDEX_SET1, INDEX_SET2)
model.Fx = Var(INDEX_SET1, INDEX_SET2)
#Add SOS1 variable to model
model.y = Var(model.ub_indices, within=NonNegativeReals)


def constraint1_rule(model, t1, t2):
    return model.x[t1, t2] == sum(model.y[t1, t2, i] * PIECEWISE_PTS[t1, t2][i]
                                  for i in xrange(len(PIECEWISE_PTS[t1, t2])))


def constraint2_rule(model, t1, t2):
    return model.Fx[t1,
                    t2] == sum(model.y[t1, t2, i] * F(PIECEWISE_PTS[t1, t2][i])
                               for i in xrange(len(PIECEWISE_PTS[t1, t2])))

예제 #5
0
파일: sos2.py 프로젝트: vova292/pyomo
INDEX_SET = [1,2]
PIECEWISE_PTS = {1:[1,2,3], 2:[1,2,3]}
F = lambda x: x**2

model = ConcreteModel()

def SOS_indices_init(model,t):
    return [(t,i) for i in xrange(len(PIECEWISE_PTS[t]))]
def ub_indices_init(model):
    return [(t,i) for t in INDEX_SET for i in xrange(len(PIECEWISE_PTS[t]))]

model.SOS_indices = Set(INDEX_SET,dimen=2, ordered=True, initialize=SOS_indices_init)
model.ub_indices = Set(ordered=True, dimen=2,initialize=ub_indices_init)

model.x = Var(INDEX_SET)
model.Fx = Var(INDEX_SET)
#Add SOS2 variable to model
model.y = Var(model.ub_indices,within=NonNegativeReals)

def constraint1_rule(model,t):
    return model.x[t] == sum(model.y[t,i]*PIECEWISE_PTS[t][i] for i in xrange(len(PIECEWISE_PTS[t])) )
def constraint2_rule(model,t):
    return model.Fx[t] == sum(model.y[t,i]*F(PIECEWISE_PTS[t][i]) for i in xrange(len(PIECEWISE_PTS[t])) )
def constraint3_rule(model,t):
    return sum(model.y[t,j] for j in xrange(len(PIECEWISE_PTS[t]))) == 1

model.obj = Objective(expr=sum_product(model.Fx), sense=maximize)
model.constraint1 = Constraint(INDEX_SET,rule=constraint1_rule)
model.constraint2 = Constraint(INDEX_SET,rule=constraint2_rule)
model.constraint3 = Constraint(INDEX_SET,rule=constraint3_rule)
model.SOS_set_constraint = SOSConstraint(INDEX_SET, var=model.y, index=model.SOS_indices, sos=2)