Я рассматривал возможность использования z3 для минимизации проблем, связанных с квадратами. Но когда я пишу этот простой пример (z3opt в Python 3):z3opt python - минимизирующий квадрат
from z3 import *
a = Real('a')
b = Real('b')
cost = Real('cost')
opt = Optimize()
opt.add(a + b == 3)
opt.add(And(a >= 0, a <= 10))
opt.add(And(b >= 0, b <= 10))
opt.add(cost == a * 10.0 + b ** 2.0)
h = opt.minimize(cost)
print(opt.check())
print(opt.reason_unknown())
print(opt.lower(h))
print(opt.model())
Проверка возвращает «неизвестный»:
unknown
(incomplete (theory arithmetic))
-1*oo
[b = 0, cost = 30, a = 3]
ли я определение проблемы в неправильном направлении, или это внутреннее ограничение z3?
У вас есть предложение относительно альтернативы z3, которое могло бы решить это? Я использовал его для удобного интерфейса (автоматически создавая большие системы уравнений, из которых большинство из них линейны), но обнаружил, что я не могу обойти эту проблему. –
Насколько мне известно, я не знаю ни одного * SMT * решателя, который в настоящее время обеспечивает прямые процедуры оптимизации * нелинейных целей *. Я с сожалением могу сказать, что мои знания в смежных областях недостаточно глубоки, чтобы предложить вам другой инструмент для решения этой проблемы. @GeromePistre –