CPLEX最大功能超出范围

时间:2016-04-21 15:05:36

标签: optimization routing cplex

我有一个非线性约束,其形式为max_ {k in V,j in F ^ o:o> d} {U_ {jk} - U_ {ik}> F ^ d中的所有i都为0。集合V表示车队,而F ^ o表示某种类型的客户,而F ^ i表示某种类型的客户。如何实现能够在CPLEX,maxl()和IloMAx()中计算此功能的max函数似乎不起作用

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的max函数将返回U_jk - U_ik对所有k in Vj in F^o的正值中的最大值,使o > d k }}。如果这是正确的,您只需要几个循环,一个在j上,另一个在(k, j)上。对于每个U_jk - U_ik对,您需要验证所有条件:

  1. 超过所获得的较高值;而且
  2. o > d具有正值。
  3. 我假设您将在max函数之外检查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; } 条件以简化它。我建议你这样做:

    d

    您将进入两个线性阵列,第一个包含车辆组,第二个包含远离typedef IloArray<IloIntArray> Ilo2IntArray距离库我认为的客户。第三个参数是您可以定义的二维整数集:i。最后,您还需要客户(k, j)作为输入。

    对于所有k元素对,Vj中的车辆而F^oU_jk - U_ik集合中的客户,您将计算差异maxVal,同时验证上述条件。在这种情况下,您将更新索引和最大值并继续。

    请注意,list = [7,13,6,1] x = 5 for i,j in enumerate(list): if j==x: print(i) else: print(-1) 必须初始化为在第一次验证条件时会得到改善的值。函数将返回最佳/更高的值。

    很高兴能为您服务...... ÿ