gpt4 book ai didi

c++ - 在 C++ 中向 CPLEX 模型添加约束

转载 作者:行者123 更新时间:2023-11-30 02:35:11 32 4
gpt4 key购买 nike

我正在使用 CPLEX 库在 C++ 中编写 MILP,但在向模型添加约束时遇到问题。代码比较长,这里只包含代码的大致结构和其中一个约束(以及涉及的变量)。

#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <string>
#include "ilcplex/ilocplex.h"

using namespace std;

ILOSTLBEGIN

int main(){

//CPLEX environment and definition of the modelling object
IloEnv env;
IloModel model(env);

//Define the multi dimensional arrays for float and bool variables
typedef IloArray<IloBoolVarArray> BoolVar2D;
typedef IloArray<IloFloatVarArray> FloatVar2D;
typedef IloArray<IloArray<IloBoolVarArray> > BoolVar3D;
typedef IloArray<IloArray<IloFloatVarArray> > FloatVar3D;
typedef IloArray<IloArray<IloArray<IloBoolVarArray> > > BoolVar4D;

//Definition of the variable involved in the constraint
FloatVar3D U(env, I); //all alternatives except the opt-out
for(int i=0; i < I; i++){
U[i] = FloatVar2D(env, N);
for(int n=0; n < N; n++){
U[i][n] = IloFloatVarArray(env, R);
}
}

//Construction of the constraint (chi, beta, lambda, p are parameters)
for(int i =0; i < I; i++){
for(int n=0; n < N; n++){
int L_in = L[i][n];
for(int r=0; r < R; r++){
IloExpr sum(env);
sum += chi[i][n][r];
for(int l=0; l < L_in; l++){
sum += beta[i][n] * lambda[i][n][l] * p[i][n][l];
}
model.add(U[i][n][r] == sum);
}
}
}

env.end();

}

运行代码时出现以下错误消息:

libc++abi.dylib: terminating with uncaught exception of type IloWrongUsage

有谁知道这样定义约束有什么问题吗?对于更简单的问题,我尝试了同样的方法,而且它奏效了。

谢谢!

最佳答案

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

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

概念上,

int main()
{
try
{
// your variable definition and constraint code
}
catch ( IloException& e )
{
std::cout << e << std::endl;
e.end();
}
}

这应该告诉您异常的确切性质是什么。 ILOG 错误有多种原因(可能是一些无效参数、内存不足或许可证过期等),将其打印出来应该会有所帮助。

如果失败,您将不得不使用调试器逐步检查您的代码,以查看它在哪里出错以及原因。

关于c++ - 在 C++ 中向 CPLEX 模型添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33871043/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com