Optimization CPLEX最大功能范围
对于F^d中的所有I,我有一个形式为max_{k in V,j in F^o:o>d}{U_{jk}-U_{ik}>0的非线性约束。集合V表示车队,而F^o表示某种类型的客户,F^I表示某种类型的客户。我如何实现一个max函数,该函数能够在CPLEX、maxl()和IloMAx()中计算这个值如果我理解正确,你的Optimization CPLEX最大功能范围,optimization,routing,cplex,Optimization,Routing,Cplex,对于F^d中的所有I,我有一个形式为max_{k in V,j in F^o:o>d}{U_{jk}-U_{ik}>0的非线性约束。集合V表示车队,而F^o表示某种类型的客户,F^I表示某种类型的客户。我如何实现一个max函数,该函数能够在CPLEX、maxl()和IloMAx()中计算这个值如果我理解正确,你的max函数将返回所有k in V和j in F^o的max正值中的U_jk-U_ik的最大值,这样o>d。如果这是正确的,你只需要两个循环,一个在k上,另一个在上一个在j上。对于每个(k
max
函数将返回所有k in V
和j in F^o
的max
正值中的U_jk-U_ik
的最大值,这样o>d
。如果这是正确的,你只需要两个循环,一个在k
上,另一个在上一个在j
上。对于每个(k,j)
对,您需要验证所有条件:
超过获得的较高值;同时
具有U_jk-U_ik
的正值
我假设您将在max函数之外检查o>d
条件,以简化它。我建议您按如下方式执行:
IloInt myMaxFunction(IloIntArray V, IloIntArray Fo, Ilo2IntArray U, IloInt i) {
IloInt jMax;// j index of the maximum value
IloInt kMax;// k index of the maximum value
IloInt maxVal = -IloInfinity;// maximum value
IloInt Difference;
for (IloInt k = 0; k < V.getSize(); k++) {
for (IloInt j = 0; j < Fo.getSize(); j++) {
Difference = U[F0[j]][V[k]] - U[i][V[k]];
if ((Difference > 0) && (Difference > maxVal)) {
jMax = j;
kMax = k;
maxVal = Difference;
}
}
}
return maxVal;
}
IloInt myMaxFunction(IloIntArray V、IloIntArray Fo、IloIntArray U、IloInt i){
IloInt jMax;//j最大值的索引
IloInt kMax;//k最大值的索引
IloInt maxVal=-IloInfinity;//最大值
i点差异;
对于(IloInt k=0;k0)和&(差异>最大值)){
jMax=j;
kMax=k;
maxVal=差异;
}
}
}
返回maxVal;
}
您将输入两个线性阵列,第一个包含车辆组,第二个包含距离d
我假设的仓库更远的客户。第三个参数是一组二维整数,您可以使用定义:typedef IloArray Ilo2IntArray
。最后,您还需要客户meri
作为输入
对于所有(k,j)
一对元素,例如k
是V
中的车辆,j
是集合F^o
中的客户,您将计算差异U_jk-U_ik
,同时验证上述条件。在这种情况下,您将更新索引和最大值并继续
请注意,maxVal
必须初始化为一个值,该值将在第一次验证条件时得到改善。函数将返回最佳/更高的值
很高兴能为您服务。。。
Y可能只有我一个人,但你在这里问的问题不是很清楚。你能举一个例子说明这些非线性约束到底是什么样的吗?如果你展示一段代码,可能会有所帮助。你说IloMax不起作用。会发生什么?是否引发异常?