我正在使用Java中的CPLEX解决线性编程。我有一个二进制决策变量定义为

IloNumVar[] xd = new IloNumVar[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 function的所有六个重载中,要添加到模型中的方程式的RHS将是整数。它始终是一个double或另一个IloNumExpr

因此,您只需要声明:

double C_d

一个人很高兴能为您服务!

10-06 01:41