Is there a way to access promo indexed parameters that they can be used in a "pythonic way"? To be able to use features like list comprehensions, map, filter, reduce...?
import sys, traceback
from pyomo.environ import ConcreteModel, Set, Param, Var, value
def f(x,y):
return sum([i+j for i, j in zip(x,y)])
x = [1,2]
y = [3,4]
model = ConcreteModel()
model.s = Set(initialize=['1st','2nd'])
model.x = Var(model.s,initialize={'1st': x[0], '2nd': x[1]})
model.y = Var(model.s,initialize={'1st': y[0], '2nd': y[1]})
model.x1 = Var(initialize=x[0])
model.x2 = Var(initialize=x[1])
model.y1 = Var(initialize=y[0])
model.y2 = Var(initialize=y[1])
print 'from function f(x,y): %d' %f(x,y)
print 'As Var():'
print f(model.x.values(),model.y.values())
print f([model.x1, model.x2],[model.y1, model.y2])
print f([value(model.x['1st']),value(model.x['2nd'])],[value(model.y['1st']),value(model.y['2nd'])])
print 'As Param():'
model.v = Param(model.s,initialize={'1st': x[0], '2nd': x[1]})
model.w = Param(model.s,initialize={'1st': y[0], '2nd': y[1]})
model.v1 = Param(initialize=x[0])
model.v2 = Param(initialize=x[1])
model.w1 = Param(initialize=y[0])
model.w2 = Param(initialize=y[1])
try:
print f(model.x,model.y)
except TypeError:
print 'Cannot compute f(model.x,model.y)'
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stdout)
print f(model.v.values(),model.w.values())
print f([model.v1, model.v2],[model.w1, model.w2])
print f([value(model.v['1st']),value(model.v['2nd'])],[value(model.w['1st']),value(model.w['2nd'])])
try:
print f(model.v,model.w)
except TypeError:
print 'Cannot compute f(model.x,model.y)'
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stdout)