如何在 pyomo 中保存(腌制)模型实例
How to save (pickle) a model instance in pyomo
我想创建一个模型实例,然后保存它,以便稍后加载和求解(与求解相比,初始化需要相当长的时间)。
当我尝试这个时,它给了我以下错误。
with open('model.pickle', 'w') as f:
pickle.dump(instance, f)
属性错误:
无法腌制本地对象 'Euphemia.init..obj_expression
objective函数是这样的:
def obj_expression(model):
curve = sum(model.x[area, hour, Type, index] * model.Q[area, hour, Type, index] *
( model.P1[area, hour, Type, index] + model.P0[area, hour, Type, index] ) / 2
for (area, hour, Type, index) in model.Curve )
bids = sum(model.y[area, index] * model.PB[area, index] *
sum( model.QB[area, index, hour] for (hour) in model.Hours )
for (area, index) in model.Bids )
return curve + bids
self.model.OBJ = pe.Objective(rule = obj_expression, sense = pe.maximize)
有人知道如何保存具体模型吗?
解决办法是cloudpickle模块,普通pickle的pickle功能有问题。一个例子:
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)
使用 DerivativeVar 时,pickle(以及 cloudpickle)似乎不起作用。
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)
莳萝似乎可以代替酸洗弱引用:Pickling weakref in Python
我想创建一个模型实例,然后保存它,以便稍后加载和求解(与求解相比,初始化需要相当长的时间)。 当我尝试这个时,它给了我以下错误。
with open('model.pickle', 'w') as f:
pickle.dump(instance, f)
属性错误: 无法腌制本地对象 'Euphemia.init..obj_expression
objective函数是这样的:
def obj_expression(model):
curve = sum(model.x[area, hour, Type, index] * model.Q[area, hour, Type, index] *
( model.P1[area, hour, Type, index] + model.P0[area, hour, Type, index] ) / 2
for (area, hour, Type, index) in model.Curve )
bids = sum(model.y[area, index] * model.PB[area, index] *
sum( model.QB[area, index, hour] for (hour) in model.Hours )
for (area, index) in model.Bids )
return curve + bids
self.model.OBJ = pe.Objective(rule = obj_expression, sense = pe.maximize)
有人知道如何保存具体模型吗?
解决办法是cloudpickle模块,普通pickle的pickle功能有问题。一个例子:
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)
使用 DerivativeVar 时,pickle(以及 cloudpickle)似乎不起作用。
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)
莳萝似乎可以代替酸洗弱引用:Pickling weakref in Python