Ich überlegte, z3 zu verwenden, um Probleme mit Quadraten zu minimieren. Aber wenn ich dieses einfache Beispiel (z3opt in Python 3) schreiben:z3opt python - Quadrat minimieren
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())
Die Kontrolle gibt „unbekannt“:
unknown
(incomplete (theory arithmetic))
-1*oo
[b = 0, cost = 30, a = 3]
Bin ich das Problem in der falschen Art und Weise definiert, oder ist dies eine intrinsische Einschränkung von z3?
Hätten Sie einen Vorschlag für eine Alternative zu z3, die das Problem lösen könnte? Ich benutzte es für seine praktische Schnittstelle (automatisches Erstellen großer Systeme von Gleichungen, von denen die meisten linear sind), aber ich finde, dass ich dieses Problem nicht umgehen kann. –
Meines Wissens nach kenne ich keinen * SMT * -Löser, der zur Zeit direkte Optimierungsverfahren für * nichtlineare Objektive * bietet. Ich bedauere zu sagen, dass mein Wissen in verwandten Bereichen nicht tief genug ist, um Ihnen ein anderes Werkzeug zur Lösung dieses Problems vorzuschlagen. @GeromePistre –