2016-09-06 12 views
-2

GurobiとPythonの使用私は与えられた状況に対して線形問題を最適に解くことができた。しかし、1つの変数の下限を1ずつ増やすことができる範囲が与えられている場合、正しい構文(forループ、while、またはその他)を書く方法を理解できませんでした。話すことがたくさんあります。第2に、対象変数の下限の各増分に対する連続的に得られた最適な目標値をプロットするとどうすればよいでしょうか?正直なところ、どのようにすべての問題を解決するかを、最終的に1つのプロットに表示するために、個々の関連する下限を使って最適値をどのように保持するかを正確に想像することはできませんでした。Pythonコードを修正して、変数の下限が1だけインクリメントされている線形プログラムを解く。

+0

"1のインクリメント"で正確に何を意味するのですか?整数プログラミングについて話していますか?バインディングが通常の場合と異なる場合は、制約内の定数項を調整するのは簡単なはずです。 – Zafi

+0

私は、変数の下限を毎回1ずつ増やすことによってモデルを順次解決しなければならないことを意味しました。したがって、対象変数がそれぞれLBとUBで境界が定められているxである場合、LBは、100から始まり200で終了する[100-200]のように、あらかじめ定義された範囲を超えて1ずつ増加します。 –

+0

最適化中に下限が変わるのですか?あなたのアプリケーションは何ですか? – Zafi

答えて

0

まず、Gurobiモデルのラッパーとして機能するクラスを定義します。変数を定義するときに使用する引数として、下限を使用する必要があります。

def main(): 
    N = 50    # number of iterations 
    result_set = []  # this stores tuples containing the lower bound and the objective function 

    for i in range(N): 
     model = GurobiModel(lowerBound = i) 
     objVal = model.solve() 
     result_set.append((i, objVal)) 

がうまくいけば、これはに十分です:

class GurobiModel: 

    def __init__(self, lowerBound): 

     # create an empty Gurobi model object 
     self.model = Model() 

     # add your variable using the argument as the lower bound 
     self.variable1 = self.model.addVar(lb=lowerBound,vtype=GRB.INTEGER, name='variable1') 

     # add more variables, constraints, and objective function 
     ... 

    def solve(self): 
     """Solves the model and returns the optimal objective value (or None if model is infeasible).""" 
     self.model.optimize() 

     if model.status == GRB.Status.OPTIMAL: 
      # if model is optimal, return objective value 
      return self.model.objVal 
     else: 
      print('Model is infeasible') 
      return None 

は今、あなたは(興味の変数の下限に指定して)新しいGurobiModelオブジェクトを作成し、最適にそれを解決し、メイン関数を作成することができますあなたを始めましょう。モデルのサイズがかなり大きい場合は、繰り返しごとにモデル全体を再構築したくない場合など、変数を抽出する方が便利ですgetVarByName()メソッドを呼び出し、下限を変更します)。

関連する問題