Optimization CPLEX最大功能范围

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

对于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,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
    。最后,您还需要客户mer
    i
    作为输入

    对于所有
    (k,j)
    一对元素,例如
    k
    V
    中的车辆,
    j
    是集合
    F^o
    中的客户,您将计算差异
    U_jk-U_ik
    ,同时验证上述条件。在这种情况下,您将更新索引和最大值并继续

    请注意,
    maxVal
    必须初始化为一个值,该值将在第一次验证条件时得到改善。函数将返回最佳/更高的值

    很高兴能为您服务。。。
    Y

    可能只有我一个人,但你在这里问的问题不是很清楚。你能举一个例子说明这些非线性约束到底是什么样的吗?如果你展示一段代码,可能会有所帮助。你说IloMax不起作用。会发生什么?是否引发异常?