多维数组的CPLEX等式约束



我在Java中使用CPLEX解决线性规划。我有一个二元决策变量定义为

IloNumVar[] xd = new IloNumVar[Tend];

,其中Tend为时间。决策变量受约束,即xd随时间的总和必须等于给定的整数C_d,其实现为:

cplex.addEq(cplex.sum(xd), C_d);

到目前为止一切正常。

我遇到的问题是,现在我正试图使用多维数组来概括决策变量的数量:

IloNumVar[][] xd = new IloNumVar[Tend][count_d];

,但我仍然需要施加约束,即每个决策变量随时间的总和必须等于一个常数。我试过了:

IloNumVar[] Sum_d   = new IloNumVar[Tend];
IloNumVar[]  Sum_D  = new IloNumVar[1];
for(int j=0;j<count_d;j++){
    for (int i = 1; i<Tend; i++){
        cplex.addEq(Sum_d[i],cplex.sum(Sum_d[i-1],xd[i][j])); 
        }
    cplex.addEq(Sum_d[Tend],Sum_D);
    cplex.addEq(Sum_D,C_d);
    }

,但我得到以下错误:此行有多个标记

  • 类型IloCplexModeler中的方法addEq(IloNumExpr, double)不适用于参数(IloNumVar, IloNumVar[])
  • 类型IloCplexModeler中的方法addEq(IloNumExpr, double)不适用于参数(IloNumVar[], int)

我不太确定在问题定义中包含等效约束的正确方法是什么。

此错误是由于不尊重addEq过载。

addEq函数的所有六次重载中,您添加到模型中的方程的RHS为整数。它总是一个double或另一个IloNumExpr

因此,您只需要声明:

double C_d

我很高兴为你服务!

相关内容

  • 没有找到相关文章

最新更新