1

決定変数が特定のセットに制限されている整数計画問題を解決したいと考えています。

たとえば、決定変数 xi は [2,5,7,10] で選択する必要があります。

テストのために、次のように Pyomo を使用して Python コードを作成しました。

from pyomo.environ import *
model = AbstractModel()
model.X = Set(initialize=[2, 5, 7, 10])
model.x = Var(within=model.X)
model.obj = Objective(expr=model.x+1)
m = model.create_instance()
opt = SolverFactory("glpk")
results = opt.solve(m)

これらのコードを実行すると、次のようなエラー メッセージが表示されました。

ここに私の質問があります:

  • このエラーの理由は何ですか?
  • それに対処する方法は?
  • この種の問題を処理できる他の最適化ツールはありますか?

助けてくれてありがとう!

4

1 に答える 1

3
  • このエラーの理由は何ですか?

    エラーが示すように、GLPK のような混合整数線形ソルバーは、連続変数、バイナリ変数、および一般整数変数のみを処理できます。指定すると

    model.X = Set(initialize=[2, 5, 7, 10])
    model.x = Var(within=model.X) 
    

    個別のカテゴリ変数を作成しようとしていますが、Pyomo は内部的に表すことができますが、その特定のソルバーに渡す方法はありません。

  • それに対処する方法は?

    一連のバイナリ変数を使用した標準的な再定式化があります。

    model.X = Set(initialize=[2, 5, 7, 10])
    model.select_x = Var(model.X, domain=Binary)
    model.x = Var()
    def pick_one(m):
        return 1 == sum(m.selext_x[i] for i in m.X)
    model.pick_one = Constraint(rule=pick_one)
    def set_x(m):
        return m.x == sum(i*m.select_x[i] for i in m.X)
    model.set_x = Constraint(rule=set_x)
    
  • この種の問題を処理できる他の最適化ツールはありますか?

    離散カテゴリ変数を処理できるソルバーがいくつかありますが、上記の定式化を使用した方がよいでしょう。

于 2016-10-28T05:09:58.930 に答える