【问题标题】:Modeling the Objective Function in the CPLEX Java API在 CPLEX Java API 中对目标函数进行建模
【发布时间】:2020-01-13 18:05:19
【问题描述】:

我#m 试图对目标函数建模 sum(i in Sites,j in Sites, k in Routings)(c[i][j] * x[i][j][k]*TruckKmCost ) 在 Cplex 中使用 java。

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]);   
               }
            }
}

这是我的尝试,但方法 addTerm 只接受 (double, IloNumVar),我无法将 c[i][j] 转换为 IloNumVar,因为我需要它作为 int,所以我可以添加我的 int 值给它。

一定有一个非常简单的解决方案,也许有人可以帮助我,我现在有点难过。

非常感谢!

【问题讨论】:

    标签: java cplex operations-research


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多