2017-08-31 2 views
0

J'ai un MILP assez basique que j'essaie de résoudre, mais pendant que mon code fonctionne, je n'ai pas de valeurs. Je pense que cela est dû à ma fonction objectif (depuis le changement à quelque chose de trivial ne produit une réponse):Contraintes multi-indexées ou objectifs dans Pyomo

def OPEX (m): 
    return sum (m.Q_ng[u,t]*m.ng_price[t] + m.E_imp[t]*m.el_price_imp[t] - m.E_exp[t]*m.el_price_exp[t] for u in m.U for t in m.P) 
m.obj = Objective(rule=OPEX) 

Je dois minimiser la somme sur u et t, est-ce que vous iriez à ce sujet?

+0

En règle de débogage générale, vous pouvez comprendre ce que m .obj produit en appelant 'm.obj.pprint()' –

Répondre

0

Mon problème a fini par être comment j'ai écrit mes contraintes. Selon le livre par William E. Hart, Carl Laird, Jean-Paul Watson et David L. Woodruff: Pyomo - Optimisation Modélisation en Python, vous pouvez écrire des fonctions avec _rule ajouté à eux, puis lorsque vous définissez votre contrainte juste nommez le même sans utiliser de règle, par exemple

def BOIL_off_rule (m,t): 
    return (0,m.f["BOIL",t]*Boiler_max,Boiler_max*y["BOIL",t]) 
m.BOIL_off = Constraint(m.P) 

Toutefois, cela ne semble pas fonctionner (peut-être parce que dans le livre qu'ils utilisent coopr qui comprend d'autres bibliothèques/modules et non seulement Pyomo)