z3 числовые ограничения: что лучше?

Какой из следующих двух способов записи (эквивалентных) ограничений предпочтителен (с точки зрения производительности) при решении целочисленных вещественных ограничений с использованием z3?

(assert (=> (и (<= значение 0,0009765625) (<значение 0,001953125)) (= новое значение 0,0009765625)))

                                     OR

(assert (=> (и (<= (/ 1,0 1024,0) значение) (<значение (/ 1,0 512,0)))) (= новое значение (/ 1,0 1024,0))))

Обратите внимание, что у нас здесь есть взаимные степени степеней двойки (и существует много таких ограничений этого типа, включающих как меньшие, так и большие числа).

1 ответ

Решение

Внутри Z3 преобразует все цифры в десятичной записи в дроби. Это преобразование выполняется при разборе формулы. В любом случае, мы не ожидаем увидеть большую разницу в производительности между этими двумя кодировками. Время анализа обычно незначительно в Z3 (по сравнению со временем решения).

Другие вопросы по тегам