#or-tools #cp-sat-solver
#или-инструменты #cp-sat-решатель
Вопрос:
Дорогие, я использую CP-SAT в python. У меня есть две переменные:
pippo = model.NewIntVar(-93372036854775808,9123372036854775807, 'pippo')
test = model.NewIntVar(-93372036854775808,9123372036854775807, 'test')
и следующие переменные решения:
for r in self.all_records:
memory = {}
for p in self.all_decisions:
# create bool decision variables
memory[p] = model.NewBoolVar('c' str(r) self.scenario.decisions[p].name)
self.decision_var[r] = memory
У меня есть два ограничения:
1) test==sum(self.scenario.dataset['is_fraud'][r]*self.decision_var[r][0] for r in self.all_records)
2) pippo == test
Если я удалю ограничение 2) все в порядке, но с ограничением 2 я получаю эту ошибку:
Possible integer overflow in constraint: linear {
vars: 126660
vars: 126661
coeffs: -1
coeffs: 1
domain: 0
domain: 0
}
and Status is MODEL_INVALID.
Я действительно не понимаю, почему. Не могли бы вы мне помочь, пожалуйста?
Ответ №1:
Решатель активно проверяет возможное переполнение. Если модель имеет потенциальное целочисленное переполнение, она считается недействительной.
Вы видите это сообщение. Пожалуйста, уменьшите границы целочисленных переменных (скорее всего, достаточно int32 min / max).
Комментарии:
1. есть ли способ избежать этой предварительной проверки? Я хотел не выполнять его
2. Нет, решатель в этом случае не является надежным. Таким образом, решение, скорее всего, будет недействительным. Но вы можете вызвать метод validate перед решением.