Suppose I have a lot of variables in mdl1. After saving mdl1 in a .sav and .lp, I read it back into doCPlex.
mdl2 = ModelReader.read(filename)
Now I want to recreate all the variables in mdl2. How to do that? Suppose I know the variables' names are 'variable1', 'variable2', 'variable3'. I would want to do something like
variable1 = mdl_2.get_var_by_name('variable1')
However, there might be hundreds of variables, I cannot afford to hand-tpye them in. So I want to use something like
eval("variable1 = mdl_2.get_var_by_name('variable1')")
But that did not work for me. Any help? Thanks!
You can use a dictionnary. I will do this with the zoo example
Suppose you have a small lp file
\ENCODING=ISO-8859-1
\Problem name: zoooplwithoutobjective
Minimize
obj:
Subject To
c1: 40 nbBus40 + 30 nbBus30 >= 300
Bounds
nbBus40 >= 0
nbBus30 >= 0
Generals
nbBus40 nbBus30
End
then you can write
from docplex.mp.model import Model
from docplex.mp.model_reader import ModelReader
mdl = ModelReader.read_model('zoowithoutobj.lp', model_name='zoo')
intvars={}
for v in mdl.iter_integer_vars():
intvars[v.name]=v
print(intvars)
which gives
{'nbBus40': docplex.mp.Var(type=I,name='nbBus40'), 'nbBus30': docplex.mp.Var(type=I,name='nbBus30')}