是否可以将IloNumVar与Java中的常数相加?

时间:2019-10-22 22:16:11

标签: java cplex

我正在尝试使用Cplex库将IloNumVar与Java中的常量变量相加。问题是由于这些变量之间的差异,无法对它们求和。所以我想知道如何将这两个不同的变量相加。正如我在使用Cplex的Opl中所知道的那样,您可以轻松地做到这一点,但是java呢?有什么办法可以将一个具有常量java值的IloNumVar(决策变量)求和?

不要分享任何技巧来解决我的问题。

    int [] a = new int [10];
    IloNumVar deltatest = model.numVar(3, 5);
    int m = 2;

如何将结果分配给Integer?例如,我要执行此行。

     a[m+deltaset] = 1000;

我想在其他方程式中将(m + delset)的值用作整数。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您的想法。您的问题有两种解释:

  1. 您想在模型中使用类似a[m + deltatest] 的表达式,而CPLEX无法实现(但可以使用CP来实现)。
  2. 之后,您要使用CPLEX为deltatest找到的值。在这种情况下,您可以只a[m + Math.round(cplex.getValue(deltatest))]

答案 1 :(得分:0)

您不能完全使用a[m + deltatest],但是以下技术可能会有所帮助。

首先,您可以创建一个变量数组,并使用该数组的索引来索引到a中。例如:

     final int NumVars = 10;
     int[] a = new int[NumVars];
     IloNumVar[] varArray = cplex.numVarArray(NumVars, 3, 5);
     int m = 2;

     for (int i = 0; i < (NumVars - m); ++i) {
        // i corresponds to the variable at varArray[i].
        a[m + i] = 1000;
     }

或者,您可以构建地图,如下所示:

     int[] a = new int[10];
     Map<IloNumVar, Integer> varMap = new Hashtable<IloNumVar, Integer>();
     int currentIndex = 0;
     IloNumVar deltatest = cplex.numVar(3, 5);
     varMap.put(deltatest, currentIndex++);
     int m = 2;

     a[m + varMap.get(deltatest)] = 1000;