我调用 cplex 来解决 visual studio 中的优化问题。 我的问题就这么简单:
IloNumVarArray a(env,N,0,IloInfinity);
IloNumVarArray d(env,N,0,IloInfinity);
IloModel Model(env);
//objective function
IloExpr obj(env);
for(IloInt n=0; n<N;n++)
obj+=a[n]*c1[n]-d[n]*c2[n];
Model.add(IloMinimize(env,obj));
obj.end();
for(IloInt n=0;n<N;n++){
Model.add(a[n]==0);
Model.add(d[n]==0);
}
IloCplex cplex_p(Model);
cplex_p.setParam(IloCplex::EpGap,0.0001);
cplex_p.solve();
cplex_p.end();
Model.end();
但每次它都会给我这个错误信息:
Unhandled exception at 0x74eeb9bc in For-Calling-Cplex.exe: Microsoft C++ exception: IloWrongUsage at memory location 0x0027fbe4..
我做错了什么?
最佳答案
使用结束函数还为时过早。
obj.end();
因为您将它作为目标函数添加到模型中。除非您正在迭代创建模型并且内存不足,否则您不应该真正调用 .end() 函数。
如果你使用的是 msvc,你应该在 Debug模式下编译并且 set a breakpoint使调试器在实际抛出异常时停止。 接下来,您应该始终在较高级别捕获 IloException。在 try/catch block 中编写函数调用
try {
buildModel():
} catch (const IloException& e)
{
cerr << e;
throw; // if you like
}
关于c++ - 未处理的异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307918/