我正在尝试使用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)的值用作整数。
答案 0 :(得分:0)
目前尚不清楚您的想法。您的问题有两种解释:
a[m + deltatest]
的表达式,而CPLEX无法实现(但可以使用CP来实现)。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;