cplexjavaapi中目标函数的建模

cplexjavaapi中目标函数的建模,java,cplex,operations-research,Java,Cplex,Operations Research,我正在尝试使用java在Cplex中对目标函数和(I在站点中,j在站点中,k在路由中)(c[I][j]*x[I][j][k]*TruckKmCost)进行建模 IloLinearNumExpr expr = cplex.linearNumExpr(); for (int i = 1; i <= nbFarmer; i++) { for (int j = 1; j <= nbFarmer; j++) {

我正在尝试使用java在Cplex中对目标函数和(I在站点中,j在站点中,k在路由中)(c[I][j]*x[I][j][k]*TruckKmCost)进行建模

IloLinearNumExpr expr = cplex.linearNumExpr();
            for (int i = 1; i <= nbFarmer; i++) {
                for (int j = 1; j <= nbFarmer; j++) {
                    for (int k = 1; k <= nbRouting; k++) {
                  expr.addTerm(truckKmCost, c[i][j],x[i][j][k]);   
               }
            }
}
IloLinearNumExpr=cplex.linearNumExpr();

对于(int i=1;i您没有指定
c[i][j]
是变量还是数字。根据这一点,您的问题有两种不同的解决方案:

  • 如果
    c[i][j]
    是一个数字,那么只需编写
    expr.addTerm(truckKmCost*c[i][j],x[i][j][k])
    ,也就是说,将两个数字合并为一个参数,以
    addTerm
  • 如果
    c[i][j]
    是一个变量,那么您的目标不是线性的而是二次的。在这种情况下,您不能使用
    IloLinearNumExpr
    ,而必须使用
    IloQuadNumExpr
    。此类的
    addTerm()
    将两个变量作为参数