0

Is it possible if we combine two models of docplex.mp within one pyton coding file? For example, mdl. and mdl2.

Thank you.

1 Answers1

0

Yes. Suppose the 2 combined schools from https://github.com/AlexFleischerParis/zoodocplex/blob/master/zootwoinstancescombined.py

from docplex.mp.model import Model

#Two independent schools, first school 300 kids, second one 350
#Combined in a single model because of a coupling constraint
#(Total number of buses)

mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
nbbus40bis = mdl.integer_var(name='nbBus40bis')
nbbus30bis = mdl.integer_var(name='nbBus30bis')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.add_constraint(nbbus40bis*40 + nbbus30bis*30 >= 350, 'kids2')
mdl.add_constraint(nbbus40+nbbus30+nbbus40bis+nbbus30bis<=17,'total nb of buses')
mdl.minimize(nbbus40*500 + nbbus30*400+nbbus40bis*500 + nbbus30bis*400)

mdl.solve(log_output=True,)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

are not combined any more.

Then you can write

from docplex.mp.model import Model

#Two independent schools, first school 300 kids, second one 350


mdl1 = Model(name='buses1')
nbbus40 = mdl1.integer_var(name='nbBus40')
nbbus30 = mdl1.integer_var(name='nbBus30')

mdl2= Model(name='buses2')
nbbus40bis = mdl2.integer_var(name='nbBus40bis')
nbbus30bis = mdl2.integer_var(name='nbBus30bis')
mdl1.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl2.add_constraint(nbbus40bis*40 + nbbus30bis*30 >= 350, 'kids2')

mdl1.minimize(nbbus40*500 + nbbus30*40)
mdl2.minimize(nbbus40bis*500 + nbbus30bis*400)

mdl1.solve(log_output=True,)
mdl2.solve(log_output=True,)

for v in mdl1.iter_integer_vars():
    print(v," = ",v.solution_value)

for v in mdl2.iter_integer_vars():
    print(v," = ",v.solution_value)
Alex Fleischer
  • 9,276
  • 2
  • 12
  • 15
  • Dear @Alex Fleischer, how about if the models combination because of decision variables? If you do not mind, please look at the details that I posted on IBM community, thank you. – Nicholas Nicholas Jul 22 '22 at 14:02