주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

exception 관련 문의

  • 정재헌
  • 2012.05.16
  • 조회수 2,334
다음과 같은 소스코드를 실행할때 cplex.solve() 함수를 실행하면(debugging 시)
다음과 같은 에러 메세지가 뜹니다..)(참조로 Cplex는 메인함수가 아닌 함수에서 call 하여 사용]


MyTest.exe의 0x7c7e2afb에 첫째 예외가 있습니다. Microsoft C++ 예외: IloCplex::Exception(메모리 위치 0x3815eca0


[소스코드]

#define TN 3 ///# of vehicle types...
#define iteration4 100
//#include <stdlib.h>

#include <ilcplex/ilocplex.h>

ILOSTLBEGIN
typedef IloArray<IloNumVarArray> IloNumVarArray2;

double ext_knapsack( double a[], double cc[], int s[], int xx[], int n, double capa)
{ int i;double minval = 0.0;
IloEnv env;
try {
IloNumVarArray x(env, n + 1, 0, 1, ILOINT);
IloModel model(env);
IloExpr v(env);
for(i = 1 ; i <= n ; i++)
{
v+= a[s[i]] * x[i];
}
model.add(v <= capa); ////////1st constraint add
v.end();
IloExpr obj(env);
for(i = 1; i <= n; i++)
obj += cc[s[i]] * x[i];
model.add(IloMinimize(env, obj));
obj.end();
IloCplex cplex(model);
cplex.exportModel("steel.lp");
// IloCplex cplex(env);
// cplex.extract(model);
cplex.solve();

IloNum tolerance = cplex.getParam(IloCplex::EpInt);
for(i = 1; i <= n; i++)
{
if( cplex.getValue(x[i]) >= 1 - tolerance)
{
minval = minval + cc[s[i]];
xx[s[i]] = 1;
}
else
xx[s[i]] = 0;
}
}///end try
catch(IloException& e) { }
env.end();
return(minval);
}

댓글 2

  • 이보헌2012-05-22
    #define TN 3 ///# of vehicle types...
    #define iteration4 100
    #include <ilcplex/ilocplex.h>

    ILOSTLBEGIN
    //typedef IloArray IloNumVarArray2;

    int main ()//ext_knapsack( double a[], double cc[], int s[], int xx[], int n, double capa)
    {
    IloEnv env;

    IloNumArray a(env, 3, 0.0, 1.0, 2.0);

    IloNumArray cc(env, 3, 0.0, 1.0, 2.0);
    IloIntArray s(env, 3, 0, 1, 2);
    IloIntArray xx(env, 3, 0, 1, 2);
    IloInt n = 3;
    double capa = 10;


    int i;
    double minval = 0.0;
    try {
    IloNumVarArray x(env, n, 0, 1, ILOINT);

    IloModel model(env);
    IloExpr v(env);
    for(i = 0 ; i < n ; i++)
    {
    model.add(x[i] >= 0);
    }

    for(i = 0 ; i < n ; i++)
    {
    v+= a[s[i]] * x[i];
    }
    model.add(v <= capa); ////////1st constraint add
    //v.end();
    IloExpr obj(env);
    for(i = 0 ; i < n ; i++)
    obj += cc[s[i]] * x[i];
    model.add(IloMinimize(env, obj));
    //obj.end();
    IloCplex cplex(model);

    cplex.exportModel("steel.lp");
    // IloCplex cplex(env);
    // cplex.extract(model);
    cplex.solve();

    //IloNum tolerance = cplex.getParam(IloCplex::EpInt);
    for(i = 0 ; i < n ; i++)
    {
    if( cplex.getValue(x[i]) >= 0.9)
    {
    minval = minval + cc[s[i]];
    xx[s[i]] = 1;
    }
    else
    xx[s[i]] = 0;
    cout << xx << endl;
    }
    cout << "xx 결과 :" ;
    for(i = 0 ; i < n ; i++)
    {
    cout << xx[i] << ", " ;
    }
    cout << endl;

    }///end try
    catch(IloException& e) {
    cout << e << endl;}
    env.end();
    return 0 ;//((int)minval);
    }
    아이콘삭제
  • 이보헌2012-05-22
    간단한 문제로 수정해서 실행해 보았는데, cplex.getValue()에서 에러가 발생한 것이 아닌가 합니다.
    cplex에서 getValue를 할때 model에 한번이상 add가 된 상태여야 하며, 그렇지 않은 상태에서 getValue함수로 접근하면 에러가 발생합니다.
    아이콘삭제

댓글 입력