Warum gibt der PyCharm-Typprüfer eine Warnung zu Operatoren in der ComponentData-Klasse aus, wenn diese indiziert werdenPython

Python-Programme
Anonymous
 Warum gibt der PyCharm-Typprüfer eine Warnung zu Operatoren in der ComponentData-Klasse aus, wenn diese indiziert werden

Post by Anonymous »

Ich arbeite an einem Pyomo-Modell mit indizierten Variablen, Ausdrücken und Einschränkungen und erhalte einige Warnungen bezüglich der ComponentData-Klasse. Das Modell läuft immer noch reibungslos und die Ergebnisse sind korrekt, aber die Warnungen häufen sich mittlerweile, weshalb ich der Sache auf den Grund gehen wollte. Mir ist aufgefallen, dass ich die Warnungen nur erhalte, wenn ich mit indizierten Werten arbeite. Ohne indizierte Werte werden sie nicht angezeigt.
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 diesem Beispiel gibt mir PyCharm (Version 2025.3) die folgenden Warnungen:
  • 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): [...]
Hier ist ein Minimalbeispiel ohne indizierte Werte:

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)
Dies ist ein sehr ähnliches Beispiel, nur ohne Indizes, und ich erhalte hier keine Warnungen.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post