Hier ist ein Minimalbeispiel mit indizierten Werten:
Code: Select all
import pyomo.environ as pyo
model = pyo.ConcreteModel()
model.s = pyo.Set(initialize=[1, 2, 3]) # with indexes = with warnings
model.v1 = pyo.Var(model.s, bounds=(0.1, 1.0))
model.v2 = pyo.Var(model.s, bounds=(0.2, 1.0))
def x_rule(m: pyo.Model, s: int):
return m.v1[s] * m.v2[s]
model.x = pyo.Expression(model.s, rule=x_rule)
def objective(m: pyo.Model):
return sum(m.x[s] for s in m.s)
model.obj = pyo.Objective(rule=objective)
pyo.SolverFactory("ipopt").solve(model)
- In der x_rule (speziell für den Multiplikationsoperator *):
Code: Select all
Class 'ComponentData' does not define '__mul__', so the '*' operator cannot be used on its instances - In der Zielfunktion (insbesondere für den Code innerhalb der Summenfunktion):
Code: Select all
Unexpected type(s): Generator[ComponentData, Any, None]) Possible type(s): [...]
Code: Select all
import pyomo.environ as pyo
model = pyo.ConcreteModel()
model.v1 = pyo.Var(bounds=(0.1, 1.0))
model.v2 = pyo.Var(bounds=(0.2, 1.0))
def x_rule(m: pyo.Model):
return m.v1 * m.v2
model.x = pyo.Expression(rule=x_rule)
def objective(m: pyo.Model):
return m.x
model.obj = pyo.Objective(rule=objective)
pyo.SolverFactory("ipopt").solve(model)
In beiden Fällen erhalte ich die gleichen Ergebnisse (nur einmal für alle drei Werte von v1 und v2 und einmal für die einzelne Variable). Auch mein eigenes Projekt mit deutlich mehr Variablen (und leider auch mehr Warnungen...) läuft durch und liefert aussagekräftige Ergebnisse.
Verwende ich die indizierten Werte in den Funktionen falsch oder unsauber, weshalb ich diese Warnungen bekomme, oder liegt es an „falsch positiven“ Warnungen, die Pyomo manchmal ausgibt? In einem ähnlichen Fall (Warum gibt mir PyCharm eine Warnung aus, wenn ich die .fix()-Methode von Pyomo verwende?) habe ich auch Warnungen von Pyomo für Funktionalitäten erhalten, die in der Dokumentation beschrieben werden, während ich sie verwende, und die wahrscheinlich noch nicht geglättet wurden.
Mobile version