Ich habe eine Frage zu Quantifier.Quantifizierer Vs Non-Quantifier
Angenommen, dass ich ein Array haben, und ich will Array-Index 0, 1 und 2 sind für dieses Array berechnen -
(declare-const cpuA (Array Int Int))
(assert (or (= (select cpuA 0) 0) (= (select cpuA 0) 1)))
(assert (or (= (select cpuA 1) 0) (= (select cpuA 1) 1)))
(assert (or (= (select cpuA 2) 0) (= (select cpuA 2) 1)))
Oder sonst kann ich die Verwendung derselben forall konstruieren, wie angegeben -
Jetzt möchte ich den Unterschied zwischen zwei von ihnen verstehen. Die erste Methode wird schnell ausgeführt und liefert ein einfaches und lesbares Modell. Im Gegensatz dazu ist die Code-Größe mit der zweiten Option sehr gering, aber das Programm benötigt Zeit für die Ausführung. Und auch die Lösung ist komplex.
Ich möchte die zweite Methode verwenden, da mein Code kleiner wird. Ich möchte jedoch ein lesbares einfaches Modell finden.
Lieber Leonardo, ich komme wieder auf die gleiche Frage zurück. Ich versuche den Code für Sat Solver zu optimieren. Können Sie mir bitte sagen, wann es gut ist, Konstanten zu verwenden und wann es gut ist, uninterpretierte Funktionen zu verwenden. Zum Beispiel habe ich ungefähr 30-40 nicht interpretierte Funktionen in meinem Code. Wenn ich einige Funktionen für mehrere Konstanten (zB xA 0) ersetze, die durch xA0 ersetzt werden, bekomme ich eine Reduzierung der Laufzeit, aber für andere bekomme ich keine. Was ist die Schlüsselregel, um zwischen ihnen zu wählen? Ist es abhängig davon, wie viel Sie sie im Code verwenden? – Raj
Fluktuationen sind sehr häufig. Wir beobachten Schwankungen auch dann, wenn wir kleine Modifikationen vornehmen, etwa die Assertion neu ordnen. Jede geringfügige Änderung kann die Reihenfolge ändern, in der Z3 den Suchraum überquert. Als Faustregel sollten wir, wann immer möglich, Quantifizierer vermeiden. Wenn wir ein Problem mit einer einzigen Theorie kodieren können, werden wir normalerweise eine bessere Leistung erzielen. Natürlich haben wir immer Ausnahmen. Welche Art von Leistungsschwankungen beobachten Sie? Es ist in der Größenordnung von 2x, 10x, 100x? –