Python 如何将max功能从CPLEX OPL切换到Docplex?
我对CPLEX OPL实施了以下限制Python 如何将max功能从CPLEX OPL切换到Docplex?,python,modeling,cplex,opl,docplex,Python,Modeling,Cplex,Opl,Docplex,我对CPLEX OPL实施了以下限制 forall (i in N) forall (j in M) forall (k in 1..i) sum(z in 1 ..i)(p[z]*(x[z][j][k]+y[z][j][k])) + (t[k]*max(z in 1 ..i)(x[z][j][k]+y[z][j][k]))<= d[i]; forall(N中的i) 福尔(j英寸M) forall(1..i
forall (i in N)
forall (j in M)
forall (k in 1..i)
sum(z in 1 ..i)(p[z]*(x[z][j][k]+y[z][j][k])) + (t[k]*max(z in 1 ..i)(x[z][j][k]+y[z][j][k]))<= d[i];
forall(N中的i)
福尔(j英寸M)
forall(1..i中的k)
求和(1..i中的z)(p[z]*(x[z][j][k]+y[z][j][k])+(t[k]*max(1..i中的z)(x[z][j][k]+y[z][j][k])mdl.max就是方法
在OPL中
而在python中
for i in N:
for j in M:
for k in range(i):
mdl.sum((x[(i,j,k)]+y[(i,j,k)])*p[z] for z in range(i))+(t[k]*mdl.max(x[(z,j,k)]+y[(z,j,k)] for z in range(i)) <= d[i]
int nbKids=300;
{int} buses={30,40,50};
dvar int+ nbBus[buses];
dvar int maxNbOfBusesGivenSize;
minimize maxNbOfBusesGivenSize;
subject to
{
// logical constraint
// maxNbOfBusesGivenSize is the max of all nbBus
maxNbOfBusesGivenSize==max(i in buses) nbBus[i];
sum(i in buses) i*nbBus[i]>=nbKids;
}
execute DISPLAY_After_SOLVE
{
writeln("The max number of buses is ",maxNbOfBusesGivenSize);
writeln("nbBus = ",nbBus);
}
from docplex.mp.model import Model
mdl = Model(name='buses')
nbKids=300;
buses=[30,40,50]
#decision variables
mdl.nbBus = {b: mdl.integer_var(name="nbBus"+str(b)) for b in buses}
# Constraint
mdl.add_constraint(sum(mdl.nbBus[b]*b for b in buses) >= nbKids, 'kids')
# Objective
# logical constraint is the max of all nbBus
mdl.minimize(mdl.max(mdl.nbBus[b] for b in buses))
mdl.solve(log_output=True,)
mdl.export("c:\\temp\\buses.lp")
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)