2016-05-06 18 views
1

私はCPLEXおよびC++プログラミングの初心者で、中規模のMIP問題を解決しようとしています。CPLEX時間最初の実行可能な解まで

私の問題は、CPLEXが最初の実現可能な解を得て、最良の実現可能な解を得るのにどれくらいの時間を要したかということです。

私はすでに時間制限を設定する方法を知っていますが、CPLEXのソリューションプールを使用して実現可能なすべてのソリューションを取得していますが、その時間はありませんでした。

実現可能な各ソリューションの時間値を取得するためのCPLEXに直接コードはありますか?

EDIT1

ありがとう:問題のコードは次のようになります。

IloEnv env; 
IloModel model(env); 
IloCplex cplex(model); 
IloCplex::Param::TimeLimit; 

IloExpr term2(env); 
IloExpr term3(env); 
IloExpr objetivo(env); 

IloInt i,j; 
double CP; 

IloNumVarArray z(env, columnas-1, 0, INFTY,ILOBOOL); 
IloNumVarArray a(env, columnas, -1*INFTY, INFTY, ILOFLOAT); 

for (i = 0; i < filas; i++){ 
    IloExpr term1(env); 
    for(j = 0; j < columnas-1; j++){ 

     term1 += a[j]*(A[i+1][j+2]); 
    } 
    term2 += ((b[i+1])-(term1+a[columnas-1]))*((b[i+1])-(term1+a[columnas-1])); 
    term1.end(); 
} 

for(j = 0; j < columnas-1; j++){ 
     term3 += z[j]; 
    } 
objetivo=term2/(sigmasq)+2*(term3+1)-(filas); 

model.add(IloMinimize(env, objetivo)); 


for (j = 0; j < columnas-1; j++) { 
    IloExpr restr(env); 
    restr = a[j] + (bigM)*z[j]; 
    model.add(0 <= restr <= IloInfinity); 
    restr.end(); 
} 
for (j = 0; j < columnas-1; j++) { 
    IloExpr restr(env); 
    restr = (bigM)*z[j] - a[j]; 
    model.add(0 <= restr <= IloInfinity); 
    restr.end(); 
} 

cplex.setParam(IloCplex::Param::ClockType, 2); 
cplex.setParam(IloCplex::Param::TimeLimit, 3600); 

cplex.solve(); 

PD:いくつかのパラメータはスペイン語であるが、それは私の母国語だと申し訳ありません。

+0

あなたが試したこと、特にあなたがハングアップしているところのコードを提供できますか? – DVK

+0

もちろん、編集済みです! – Javier

+0

私は実際にコードのどこかで狩りをしていませんが、私はそれらの時間値を得るために私が何ができるか分かりません... – Javier

答えて

0

incumbent callbackを使用すると、道に沿って見つかったすべての整数実現可能な解(および最終解を含む)について時間を得ることができます(getCplexTime関数を参照)。まず、一般的なコールバックの使用例については、CPLEXに同梱されているilomipex4.cppの例を参照してください。また、Concertでコールバックを実装するためのdocumentationを参照してください。

+0

ありがとうございました!それは私の問題を完全に解決する! – Javier

関連する問題