将CPLEX数学模型从C ++传输到Python [英] transfer CPLEX mathematical model from C++ to Python
本文介绍了将CPLEX数学模型从C ++传输到Python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经使用CPLEX在C ++中对我的数学模型进行了编程,现在我想使用docplex.mp.model将其转移到Python中我在添加约束时遇到了一些问题.在C ++中,我习惯于添加这样的约束
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
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编写这段代码的:
I write this code in python like this:
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 sum甚至model.sum
You could use python sum or even model.sum
参见示例
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
"""
这篇关于将CPLEX数学模型从C ++传输到Python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文