다음과 같은 소스코드를 실행할때 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);
}