Возможно ли модифицировать модель cp_sat после построения?

#constraint-programming #or-tools

#ограничение-программирование #или-tools

Вопрос:

У меня есть модель для нахождения определенного класса целых чисел («числа Кейта»), которая работает хорошо, но довольно медленно, поскольку требует многократного построения новой модели. Есть ли способ обновить модель, в частности изменить коэффициент в ограничении. Другими словами, измените модель, чтобы она соответствовала другой mat , без полной реконструкции?

 def _construct_model(self, mat):
  model = cp_model.CpModel()
  digit = [model.NewIntVar(0, 9, f'digit[{i}]') for i in range(self.k)]

  # Creates the constraint.
  model.Add(sum([mat[i] * digit[i] for i in range(self.k)]) == 0)

  model.Add(digit[0] != 0)
  return model, digit
  

Ответ №1:

Да, но вы предоставлены сами себе.

Вы можете получить доступ к базовому cp_model_proto protobuf из модели и изменить его напрямую.

В настоящее время у него нет плана добавлять API модификации поверх cp_model API.