Hi,
I wrote https://www.ibm.com/developerworks/community/forums/html/topic?id=a8580237-639a-411b-b1df-f390a24da06c&ps=25
for CPLEX MIP
Let s have a look at CPO now.
In docplex CPO we can write
from docplex.cp.model import CpoModel
mdl = CpoModel(name='buses')
nbbus40 = mdl.integer_var(0,1000,name='nbBus40')
nbbus30 = mdl.integer_var(0,1000,name='nbBus30')
mdl.add(nbbus40*40 + nbbus30*30 >= 300)
mdl.minimize(nbbus40*500 + nbbus30*400)
msol=mdl.solve()
print(msol[nbbus40]," buses 40 seats")
print(msol[nbbus30]," buses 30 seats")
and then if we want to read data from a list of tuple
We may rely on:
-
a dictionnary integer_var_dict
from docplex.cp.model import CpoModel
# 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 = CpoModel(name='buses')
#decision variables
mdl.nbBus=mdl.integer_var_dict(Buses,0,1000,name="nbBus")
# Constraint
mdl.add(sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids)
# Objective
mdl.minimize(sum(mdl.nbBus[b]*b[busCost] for b in Buses))
msol=mdl.solve()
# Dislay solution
for b in Buses:
print(msol[mdl.nbBus[b]]," buses with ",b[busSize]," seats");
from docplex.cp.model import CpoModel
# 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 = CpoModel(name='buses')
#decision variables
mdl.nbBus = {b: mdl.integer_var(0,1000,name="nbBus"+str(b[busSize])) for b in Buses}
# Constraint
mdl.add(sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids)
# Objective
mdl.minimize(sum(mdl.nbBus[b]*b[busCost] for b in Buses))
msol=mdl.solve()
# Dislay solution
for b in Buses:
print(msol[mdl.nbBus[b]]," buses with ",b[busSize]," seats");
from docplex.cp.model import CpoModel
# Data
Buses=[
(40,500),
(30,400)
]
nbKids=300
nbSizes=len(Buses)
# Indexes
busSize=0;
busCost=1;
for b in Buses:
print("buses with ",b[busSize]," seats cost ",b[busCost])
mdl = CpoModel(name='buses')
#decision variables
mdl.nbBus = mdl.integer_var_list(nbSizes,0,1000,name="nbBus")
# Constraint
mdl.add(sum(mdl.nbBus[b]*Buses[b][busSize] for b in range(0,nbSizes)) >= nbKids)
# Objective
mdl.minimize(sum(mdl.nbBus[b]*Buses[b][busCost] for b in range(0,nbSizes)))
msol=mdl.solve()
# Dislay solution
for b in range(0,nbSizes):
print(msol[mdl.nbBus[b]]," buses with ",Buses[b][busSize]," seats");
regards
#CPOptimizer#DecisionOptimization