Je veux être en mesure de définir une intégrale dans pyomo
dans le cadre d'une fonction objectif.Comment définir un Integral comme une fonction objective dans pyomo?
Je ne peux pas comprendre quel type d'expression est nécessaire pour l'intégrale.
Voilà ma meilleure estimation:
model = ConcreteModel()
model.t = ContinuousSet(bounds = (0,1))
model.y = Var(model.t)
model.dydt = DerivativeVar(model.y, wrt=(model.t))
def myintegral(model,i):
return model.dydt[i]
model.n = Integral(model.t, wrt=model.t, rule=myintegral) # this line is the trouble
def myobjective(model):
return model.n
model.obj = Objective(rule=myobjective)
L'erreur est: TypeError: A callable type that is not a Pyomo expression can not be used to initialize an Expression object. Use 'rule' to initalize with function types.
Mais, je ne comprends pas pourquoi l'expression à l'intérieur de l'intégrale est un problème, car ces variables semblent être totalement indexable par l'indice model.t
:
# but, this is totally fine:
print model.dydt[0]
print model.dydt[1]
Suis-je mal compris quelque chose à ce sujet?
Voici quelques ressources que je consultés au préalable:
https://groups.google.com/forum/#!topic/pyomo-forum/6RhEXEMDTPc https://software.sandia.gov/downloads/pub/pyomo/PyomoOnlineDocs.html#_parameters https://projects.coin-or.org/Coopr/browser/pyomo/trunk/examples/dae/Heat_Conduction.py?rev=9315
Je suis ouvert aux suggestions/liens sur d'autres ressources sur pyomo
.
Peut-être pouvez-vous me montrer un exemple d'expression intégrale valide? Comment savez-vous que c'est un bug? – simple
Désolé, je n'ai aucun exemple utilisant 'Integral'. Peut-être que l'un des mainteneurs de pyomo.dae interviendra plus tard. –
Cependant, je suis certain que le composant 'Integral' appelle incorrectement le constructeur de la classe de base, donc vous devriez ouvrir un ticket pour vous assurer que le développeur de ce paquet est conscient du problème. –