使用 ORTools 实现自定义酸洗代码
Posted
技术标签:
【中文标题】使用 ORTools 实现自定义酸洗代码【英文标题】:implement custom pickling code in using ORTools 【发布时间】:2018-06-05 09:20:20 【问题描述】:我正在使用多处理,并且我知道 pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。
而且我还知道可以腌制哪些类型的数据,例如 Integer、List、Set 和 ....
但是如果我想使用其他数据,而不是 pick_able ,我应该怎么做?
更准确地说,我想使用多处理来并行处理 ORTools 中的创建约束。打击是我的代码:
manager = Manager()
constraints = manager.list(range(16))
def constraint_saz():
"constraint's condition"
# Create the constraints
for i in range(len(data)):
constraints[i] = solver.Constraint(1,1)
p = Process(target=constraint_saz, args=(constraints,i))
p.start()
p.join()
但我得到了这个错误:
TypeError: can't pickle SwigPyObject objects
我应该怎么做才能解决这个问题?
【问题讨论】:
【参考方案1】:我不认为这是可行的,因为 python 只是 C++ 对象的一个轻量级包装器。 现在,线性求解器和 CP-SAT 求解器支持将模型存储在 protobuf 对象中,可以序列化。
这确实会引发一些问题,因为当您创建模型时,您会创建链接到模型的变量。序列化后,您没有这些变量可用。所以查询solve()的解很复杂。
【讨论】:
以上是关于使用 ORTools 实现自定义酸洗代码的主要内容,如果未能解决你的问题,请参考以下文章