2017-01-05 12 views
2

私はいくつかのGurobiコードをCPLEXに翻訳しようとしていますが、変数の開始値を設定する方法に問題があります。グロビの.set()メソッドのCPLEXに相当するものは何ですか?

元のコードは次のようになります。

for (int b=0; b<nB ; ++b){ 
    for (int t=0; t<t_max; ++t){ 
     Yvars[b][t].set(GRB_DoubleAttr_Start, startVals[b][t+shift]); 
    } 
} 

同等のCPLEXコードがどうなりますか?私はこれを行う方法のどこにでも情報を見つけることができません。

IloNumVarArray startVar(env); 
IloNumArray startVal(env); 
for (int b = 0; b < nB; ++b) 
    for (int t = 0; t < t_max; ++t) { 
     startVar.add(Yvars[b][t]); 
     startVal.add(startVals[b][t+shift]); 
    } 
cplex.addMIPStart(startVar, startVal); 

だけではなく、個々に影響します。このように、私はモデル自体に開始値を追加する必要がありますことを示唆していること、しかし

http://www.ibm.com/support/knowledgecenter/en/SS9UKU_12.4.0/com.ibm.cplex.zos.help/UsrMan/topics/discr_optim/mip/para/49_mipStarts.html

:私は見つけることができる最も近いはこれです元のコードと同じように変数。グロビのような変数にそれをする方法はありますか?それとも、一度にすべてをやらなければならないのですか?

答えて

1

CPLEXでMIP開始を追加する方法は正しいです(代替構文はありません)。 「すべてを一度にやり直さなければならないか」ということを正確には分かりませんが、おそらく、それらのすべてではなく、変数のサブセットに対してMIP開始値を提供できるかどうかを尋ねているのかもしれません。その場合はMIP starts and effort levelを参照してください(例:CPX_MIPSTART_SOLVEMIP CPLEXは少なくとも1つの離散変数の値を指定する必要があるsubMIPを解決します)。 C++ APIでは、addMIPStartメソッドには、これを制御するオプションのeffortパラメータがあります。

関連する問題