2016-11-02 10 views
0

C++でcplex(IloCplex)を使用していくつかのモデルを構築して解決しようとしています。私はこれら3つのモデルを紙の上にランダムに構築しましたが、forループでそれらを構築することはできません。C++でのforループのモデル構築(Cplex Concert Technologyを使用)

Minimize 2x1 + 5x2 
S.t. 3x1 + 2x2<=5 
x1,x2 >= 0 

Minimize x1 + 3x2 
S.t. 2x1 + 5x2 >= 3 
x1,x2>=0 

Minimize 4x1+2x2 
s.t. x1 – x2 <= 0 
x1,x2>=0 

ここでは、私がやろうとしていることを簡単に抜粋しています。

私は、デバッグしていると私も試してみましたエラーは、同様に(その行の代わりに)cplex.extract(model);

IloCplex cplex(model)をスローされます。しかし、それも同じエラーを投げている。私はまた、IloEnvenv.end()をforループの中と外に持っていこうとしましたが、何も変わりません。

#include <iostream> 
#include <sstream> 
#include <vector> 
#include <fstream> 
#include <string> 

#include <ilcplex/ilocplex.h> 
ILOSTLBEGIN 

using namespace std; 

int main() 
{ 
    int a[3] = {3,2,1}; 
    int b[3] = {2,5,-1}; 
    int c1[3] = {2,1,4}; 
    int c2[3] = {5,3,2}; 
    cout << "Hi" <<endl; 
    //a = {3,2,1}; 
    //b = [2,5,-1]; 
    //c1 = [2,1,4]; 
    //c2 = [5,3,2]; 

    IloEnv env; 
    IloCplex cplex; 
    for(int r=0;r<3;r++){ 
     cout << "Good" << endl; 
     IloModel model(env); 
     IloNumVarArray x(env); 
     x.add(IloNumVar(env)); 
     x.add(IloNumVar(env)); 
     model.add(a[r]*x[0]+b[r]*x[1]); 
     model.add(IloMinimize(env, c1[r]*x[0]+c2[r]*x[1])); 
     cplex.extract(model); 
     cplex.solve(); 
     cout << "Min= " << cplex.getObjValue() << endl; 
     cplex.clear(); 
     model.end(); 
    } 
    env.end(); 
} 

そして、これが(つまり、任意の助けになるだろう場合)私はデバッグてる時に私が取得エラーメッセージが表示され、[私はデバッグないよ場合は、それだけで中止'S]:

Unhandled exception at at 0x00007FFA8B667788 in DebugTemplate.exe: Microsoft C++ exception: IloEmptyHandleException at memory location 0x00000003886FF510. 

前もって感謝します。

答えて

0

プログラムにはいくつかの問題があります。あなたは(あなたが制約のIloRangeArrayを定義し、それに追加する必要があり

model.add(a[r]*x[0]+b[r]*x[1]); 

:この行で、また

IloCplex cplex(env); 

:まず第一に、あなたはIloEnvcplex変数を初期化する必要があります右側にも欠けている)。たとえば:あなたはrに応じて、異なる右辺を定義する方法を把握するために

IloRangeArray c(env); 
c.add(a[r]*x[0]+b[r]*x[1] <= 1); 
model.add(c); 

は、私は運動としてそれを残しておきます(私は上記の「< = 1」に、それをハードコードされました) 。デバッグ時

は最後に、それだけで(LP形式でモデルを書き出す)solveを呼び出す前にexportModelの呼び出しを追加することは常に良い考えです:

cplex.exportModel("test.lp"); 

私も見てお勧めしますCPLEXに含まれる例(ilolpex1.cppなど)。

関連する問題