在C+中向CPLEX模型添加约束+; < >我使用CPLEX库在C++中编码MILP,在向模型中添加约束时,我遇到了问题。代码相当长,所以这里我只包括代码的一般结构和一个约束(以及涉及的变量)

在C+中向CPLEX模型添加约束+; < >我使用CPLEX库在C++中编码MILP,在向模型中添加约束时,我遇到了问题。代码相当长,所以这里我只包括代码的一般结构和一个约束(以及涉及的变量),c++,netbeans,linear-programming,cplex,C++,Netbeans,Linear Programming,Cplex,有人知道这样定义约束有什么不对吗?我试着用同样的方法解决更简单的问题,结果成功了 谢谢 它甚至可能不是约束条件。正如错误文本所说,您得到了一个异常,但没有捕获它。因此,程序终止 首先,您应该将代码包装在try/catch块中: 在概念上, int main() { try { // your variable definition and constraint code } catch ( IloException& e ) {

有人知道这样定义约束有什么不对吗?我试着用同样的方法解决更简单的问题,结果成功了


谢谢

它甚至可能不是约束条件。正如错误文本所说,您得到了一个异常,但没有捕获它。因此,程序终止

首先,您应该将代码包装在
try/catch
块中:

在概念上,

int main()
{
    try
    {
        // your variable definition and constraint code
    }
    catch ( IloException& e )
    {
        std::cout << e << std::endl;
        e.end();
    }
}
intmain()
{
尝试
{
//变量定义和约束代码
}
捕获(异常与e)
{

std::cout首先,我建议使用
ilonumvarray
而不是
IloFloatVarArray
。一般来说,它应该初始化为
ilonumvarray(const-ilonev-env,IloNum-lb,const-ilonummarray-ub,IloNumVar::Type=ILOFLOAT)
,但如果变量是连续的,并且介于0和无穷大之间,则只需使用:

typedef IloArray<IloNumVarArray> twoDarray;
for(int i=0; i < I; i++){
    U[i] = twoDarray(env, N);
    for(int n=0; n < N; n++){
        U[i][n] = IloNumVarArray(env, R);
    }
}

或者,如果这不起作用,定义一维的
ilunmarray
的lambda_l[l]和p_l[l]通过lambda和p.

感谢您的帮助,我终于能够找出问题所在。基本上,变量的初始化是不正确的,因为我没有将它们添加到模型中。例如,U变量的定义应如下所示:

typedef IloFloatVarArray NumVar1D;
typedef IloArray<IloFloatVarArray> NumVar2D;
typedef IloArray<IloArray<IloFloatVarArray> > NumVar3D;

NumVar3D U(env);
for(int i=0; i < I; i++){
    NumVar2D Ui(env);
    for(int n=0; n < N; n++){
        NumVar1D Uin(env);
        for(int r=0; r<R; r++){
            Uin.add(IloFloatVar(env));
        }
        Ui.add(Uin);
    }
    U.add(Ui);
}
typedef-floatvararray NumVar1D;
typedef IloArray NumVar2D;
typedef-IloArray NumVar3D;
NumVar3D U(环境);
for(int i=0;itypedef IloArray<IloNumVarArray> twoDarray;
for(int i=0; i < I; i++){
    U[i] = twoDarray(env, N);
    for(int n=0; n < N; n++){
        U[i][n] = IloNumVarArray(env, R);
    }
}
model.add(U[i][n][r] == chi[i][n][r] + beta[i][n] * IloSum( lambda[i][n][l]* p[i][n][l]));
typedef IloFloatVarArray NumVar1D;
typedef IloArray<IloFloatVarArray> NumVar2D;
typedef IloArray<IloArray<IloFloatVarArray> > NumVar3D;

NumVar3D U(env);
for(int i=0; i < I; i++){
    NumVar2D Ui(env);
    for(int n=0; n < N; n++){
        NumVar1D Uin(env);
        for(int r=0; r<R; r++){
            Uin.add(IloFloatVar(env));
        }
        Ui.add(Uin);
    }
    U.add(Ui);
}