Пара очков ...
Во-первых, это неверный код. Я не уверен, что такое последний сегмент, но вы не можете добавить позиционный аргумент после названных, и неясно, что вы пытаетесь сделать с t:ode(m, t)
:
Constraint(model.t, rule=lambda m, t: odeu(m, t))
Pyomo выполняет вычисление выражений для индексов набора, и пока он попадает в набор, вы GTG. Я не совсем понимаю, что вы имеете в виду под «индексированием с плавающей запятой». Я думаю, вы ищете что-то вроде этого, где у вас есть временной индекс и некоторое смещение, которое вам нужно использовать в некоторых ограничениях:
# set with lag
from pyomo.environ import *
mdl = ConcreteModel()
mdl.t = Set(initialize=range(5)) # a set index for time
mdl.x = Var(mdl.t) # a toy variable
tde = 2 # some offset
# make constraint
def c1(mdl, t):
if t - tde < 0: # out of bounds
return Constraint.Skip
return mdl.x[t - tde] <= 10
mdl.c1 = Constraint(mdl.t, rule=c1)
mdl.pprint()
дает модель с соответствующими ограничениями ...
1 Set Declarations
t : Dim=0, Dimen=1, Size=5, Domain=None, Ordered=False, Bounds=(0, 4)
[0, 1, 2, 3, 4]
1 Var Declarations
x : Size=5, Index=t
Key : Lower : Value : Upper : Fixed : Stale : Domain
0 : None : None : None : False : True : Reals
1 : None : None : None : False : True : Reals
2 : None : None : None : False : True : Reals
3 : None : None : None : False : True : Reals
4 : None : None : None : False : True : Reals
1 Constraint Declarations
c1 : Size=3, Index=t, Active=True
Key : Lower : Body : Upper : Active
2 : -Inf : x[0] : 10.0 : True
3 : -Inf : x[1] : 10.0 : True
4 : -Inf : x[2] : 10.0 : True
3 Declarations: t x c1