使用ORTools实现自定义酸洗代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ORTools实现自定义酸洗代码相关的知识,希望对你有一定的参考价值。
我正在使用多处理,我知道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
我应该怎么做才能解决这个问题?
答案
我不相信这是可行的,因为python只是C ++对象的一个轻量级包装器。现在,线性求解器和CP-SAT求解器支持将模型存储在protobuf对象中,该对象可以被序列化。
它确实会引发一些问题,因为在创建模型时,会创建链接到模型的变量。序列化后,您没有这些变量可用。所以查询solve()的解决方案很复杂。
以上是关于使用ORTools实现自定义酸洗代码的主要内容,如果未能解决你的问题,请参考以下文章