简体   繁体   English

将 CPLEX 数学 model 从 C++ 转移到 Python

[英]transfer CPLEX mathematical model from C++ to Python

I have programmed my mathematical model in C++ using CPLEX,now I want to transfer it to Python using docplex.mp.model I met some problems in adding constraints. I have programmed my mathematical model in C++ using CPLEX,now I want to transfer it to Python using docplex.mp.model I met some problems in adding constraints. In C++,I am used to add constraints like this在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);
}

I write this code in python like this:我在 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)

Is this right?这是正确的吗? Thanks:)谢谢:)

You could use python sum or even model.sum您可以使用 python sum 甚至 model.sum

NB: Always use model.sum instead of python sum that is O(n*n)注意:始终使用 model.sum 而不是 python 总和,即 O(n*n)

See example in参见示例

https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoodatainalistoftuple.py 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
"""

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM