メインコンテンツへスキップ

PyomoのImplicitly replacing the Component attribute警告について

·514 文字·2 分
目次

はじめに
#

Pythonの最適化モデリングツールPyomoで、WARNING: Implicitly replacing the Component attribute <variable>という警告が表示される場合、Pyomoのモデルに重複した変数名や制約名が定義されています。異なる変数名や制約名にすることで、警告が表示されなくなります。

検証環境は以下の通りです。

  • Python 3.7.9
  • Pyomo 6.4.1

重複した変数・制約
#

2つの変数を持つPyomoモデルを考えます。まず、誤った例として、以下のようにx1が2回定義されたコードを実行します。

import pyomo.environ as pyo

model = pyo.ConcreteModel()

model.x1 = pyo.Var(domain=pyo.Reals)
model.x1 = pyo.Var(domain=pyo.Reals)

これを実行すると、以下の警告が表示されます。原因となる行番号が表示されないため、大規模なコードでは発生個所の特定に苦労しそうです。また、同じ名前の変数を重複して定義すると、後のものに置き換えられる仕様です。

WARNING: Implicitly replacing the Component attribute x1 (type=<class
    'pyomo.core.base.var.ScalarVar'>) on block unknown with a new Component
    (type=<class 'pyomo.core.base.var.AbstractScalarVar'>). This is usually
    indicative of a modelling error. To avoid this warning, use
    block.del_component() and block.add_component().

正しいコードでは、x1, x2などと異なる変数名にします。

import pyomo.environ as pyo

model = pyo.ConcreteModel()

model.x1 = pyo.Var(domain=pyo.Reals)
model.x2 = pyo.Var(domain=pyo.Reals)

制約についても同様に、異なる変数名を定義します。重複した制約名を定義すると、変数の場合と似た警告が表示されます。

WARNING: Implicitly replacing the Component attribute const1 (type=<class
    'pyomo.core.base.constraint.ScalarConstraint'>) on block unknown with a
    new Component (type=<class
    'pyomo.core.base.constraint.AbstractScalarConstraint'>). This is usually
    indicative of a modelling error. To avoid this warning, use
    block.del_component() and block.add_component().

参考
#

pyomo Implicitly replacing the Component attribute - Stack Overflow

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

Pyomoの変数をベクトル化する
·1409 文字·3 分
Pyomoで多変数の最適化を簡潔に記述するため、変数をベクトル化する方法をまとめた。
PyomoでGDP最適化問題を解く
·1602 文字·4 分
PyomoでGDP (Generalized Disjunctive Programming) と呼ばれる最適化問題を解いた。GDPは論理的な制約を持つ最適化問題である。
PyomoとIPOPTで非線形計画問題を解く
·2785 文字·6 分
最適化モデリングツールPyomoと、最適化ソルバIPOPTを使って非線形計画問題を解く方法をまとめた。
Pyomoで線形計画問題を解く
·2506 文字·6 分
PyomoというPythonライブラリを使って線形計画問題を解く方法をまとめた。本記事では、Pyomoの導入方法と、問題の記述方法について示す。
PyomoとCouenneで非凸の混合整数非線形計画問題(MINLP)を解く
··1998 文字·4 分
PyomoというPythonライブラリと、Couenneという最適化ソルバを使って非凸の混合整数非線形計画問題 (MINLP) を解く方法をまとめた。
最適制御向け最適化ライブラリOpEnのRust build of TCP interface failedエラーについて
·1185 文字·3 分
OpEnで発生するRust build of TCP interface failedエラーの解消方法を示します。