внедрить пользовательский код выбора в ORTools - PullRequest
0 голосов
/ 05 июня 2018

Я использую многопроцессорную обработку и знаю, что модуль 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 Ответ

0 голосов
/ 23 марта 2019

Я не верю, что это выполнимо, так как питон - просто легкая оболочка вокруг объекта C ++.Теперь линейный решатель и решатель CP-SAT поддерживают сохранение модели в объекте protobuf, который можно сериализовать.

Это вызывает некоторые проблемы, поскольку при создании модели вы создаете переменные, которые связаны ствоя модельПосле сериализации у вас нет этих переменных.Таким образом, запрос решения решения () является сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...