CPLEX java - 多维数组的等式约束

时间:2015-07-21 23:58:55

标签: java multidimensional-array 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)

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

任何建议都会非常感激。

1 个答案:

答案 0 :(得分:1)

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

addEq function的所有六个重载中,您对模型添加的等式的RHS是一个整数。它总是double或另一个IloNumExpr

因此,您只需声明:

double C_d

很高兴能为您服务!