Я использую Z3Py для построения больших формул (~ 1500 Bool
переменных, ~ 90k утверждений), и в настоящее время я использую Solver.add
для добавления утверждений, которые в основном невелики (например, последствия для 2 переменных).
Мой код выглядит примерно так: примерно 10 внешних for
последовательностей.Глубина вложения цикла варьируется от 2 до 6.
s = Solver()
for i in range(A):
for j in range(B):
...
s.add(Implies(vars[i,j,...], vars[k,l,...]))
Проблема в том, что построение решателя занимает ~ 11 секунд (с __debug__ == False
), а на поиск решения - всего около 8.
Профилирование показывает, что много времени тратится на Z3_sort_to_ast
, z3code.Elementaries.Check
(вызываемый первым) и другие методы, которые, как кажется, могут быть встроены по крайней мере, если не исключены каким-либо образом.
Как оптимизировать создание Z3 Solver
?Может быть, есть внутренний интерфейс более низкого уровня, который может ускорить процесс?