【问题标题】:transfer CPLEX mathematical model from C++ to Python将 CPLEX 数学模型从 C++ 转移到 Python
【发布时间】:2021-04-23 13:42:05
【问题描述】:

我已经使用 CPLEX 在 C++ 中编写了我的数学模型,现在我想使用 docplex.mp.model 将其传输到 Python 我在添加约束时遇到了一些问题。在C++中,我习惯这样添加约束

for (j = NumD; j < NumDC; j++)
{
    IloExpr v(env);
    for (i = 0; i < NumDC; i++)
    {
        for (k = 0; k < NumV; k++)
        {
            v += xijk[i][j][k];
        }
    }
    model.add(v >= 1);
}

我在 python 中这样写代码:

for j in range(NumD,NumDC):
    v = model.linear_expr()
    for i in range(NumDC):
        for k in range(NumV):
            v+=xijk[i,j,k]
    model.add_constraint(v >= 1)

这是对的吗? 谢谢:)

【问题讨论】:

    标签: python c++ cplex docplex


    【解决方案1】:

    你可以使用 python sum 甚至 model.sum

    注意:始终使用 model.sum 而不是 python 总和,即 O(n*n)

    查看示例

    https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoodatainalistoftuple.py

    from docplex.mp.model import Model
    
    # Data
    
    Buses=[
        (40,500),
        (30,400)
        ]
    
    nbKids=300
    
    # Indexes
    
    busSize=0;
    busCost=1;
    
    for b in Buses:
        print("buses with ",b[busSize]," seats cost ",b[busCost])
    
    mdl = Model(name='buses')
    
    #decision variables
    mdl.nbBus=mdl.integer_var_dict(Buses,name="nbBus")
    
    # Constraint
    mdl.add_constraint(mdl.sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids, 'kids')
    
    # Objective
    mdl.minimize(mdl.sum(mdl.nbBus[b]*b[busCost] for b in Buses))
    
    mdl.solve()
    
    # Display solution
    for b in Buses:
        print(mdl.nbBus[b].solution_value," buses with ",b[busSize]," seats"); 
    
    """
    which gives
    buses with  40  seats cost  500
    buses with  30  seats cost  400
    6.0  buses with  40  seats
    2.0  buses with  30  seats
    """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多