I want to create a model instance and then save it so I can load and solve at a later time (the initialization takes quite long compared to the solving). When I tried this i
The solution is the cloudpickle module, regular pickle has problems pickling functions. An example:
import cloudpickle
with open('test.pkl', mode='wb') as file:
cloudpickle.dump(instance, file)
with open('test.pkl', mode='rb') as file:
instance = cloudpickle.load(file)
It looks like pickle (and also cloudpickle) will not work when DerivativeVar is used.
from pyomo.environ import *
from pyomo.dae import *
import pickle
import dill
model = ConcreteModel()
model.x = ContinuousSet(initialize=(0., 1.))
model.y = Var(model.x, initialize=1.)
with open('model1.pickle', 'wb') as f:
pickle.dump(model, f)
model.dydx = DerivativeVar(model.y, wrt=model.x)
with open('model2.pickle', 'wb') as f:
try:
pickle.dump(model, f)
except TypeError:
dill.dump(model, f)
dill appears to work instead for pickling a weakref: Pickling weakref in Python