Frage

Ich habe eine große Anzahl von Äquivaliken, die aussehen:

$ (A \ LEQ 0.54 \ Wedge B \ GEQ 0.12) \ Vee (C \ GT 0,98) $ $ \ Leftrightarrow $ $ (x \ leq 0.25) \ Vee (x \ gt 0,91 \ wedge y \ geq 0,01) $

Dies ist nur ein Beispiel. Im Allgemeinen könnten Formeln auf der linken oder rechten Seite der Äquivalenz alles sein, was die Form einer disjunktiven Normalform (DNF-Klausel (DNF) anzieht, die Zahlen könnten eine echte Anzahl mit fester Präzision sein, und die Ungleichungszeichen könnten $ \ leq $ , $ \ lt $ , $ \ geq $ oder $ \ gt $ .

Was ist wichtig ist, dass die möglichen Variablen auf der linken Seite aller Formeln (hier $ \ {a, b, c \} $ ) einen Satz bilden Das unterscheidet sich von den möglichen Variablen auf der rechten Seite aller Formeln (hier $ \ {x, y, z \} $ ). Auf beiden Seiten könnte es jede feste Anzahl von Variablen geben: Es muss nicht 3 Variablen sein, und muss auf beiden Seiten keine gleiche Zahl sein.

Ich habe auch einige Auswirkungen des Formulars:

$ (A \ LEQ 0.32 \ Wedge B \ GEQ 0.62) $ $ \ Rightarrow $ < Span-Klasse="Math-Container"> $ (c \ gt 0,00) $

Hier sind sowohl die linke als auch die rechte Seite nur Konjunkte von Ungleichungen, aber wichtig ist, dass der Satz von Variablen auf sowohl linke als auch rechts, dh $ \ {a, b, c \} $ hier ist das gleiche wie der Satz von Variablen auf nur die linke Seite der vorherigen Art der Formel (dh der Äquivalenzen).

Meine Frage ist: Welche Art von automatisierten Gründen muss ich die logischen Folgen eines Satzes solcher Formeln finden? Ich suche nur nach einer konkreten Identifizierung der allgemeinen Probleme, zu denen dies gehört, und alle außerhalb der BOX-Bodenträger, die möglicherweise verfügbar sind. Vielleicht ist das ein SMT-Problem?

War es hilfreich?

Lösung

Ja, Sie könnten dies mit einem SMT-Solver lösen, der lineare echte Arithmetik unterstützt. SMT unterstützt jedoch allgemeinere Ungleichheiten, in denen Sie lineare Summen von Variablen haben können (z. B. $ 2A + 3X \ LE 5.7 $ ) anstelle von einfachen Vergleiche zwischen einer einzelnen Variablen und einem Konstant (z. B. $ A \ LE 1.6 $ ), so dass es möglicherweise leistungsfähiger ist als Sie brauchen, also, wenn Sie keine linearen Ungleichheiten mit Summen haben, dann Ich stimme mit Pseudonym zu, dass der beste Ansatz sein kann, um einen Sat-Solver zu verwenden.

Ich würde eine etwas andere Kodierung angeln, um SAT zu saßen. Anstelle einer Ein-Hot-Codierung bedeutet $ x_i $ , dass $ c_ {i-1} \ le x \ le c_i $ , ich würde eine etwas andere Kodierung vorschlagen: $ x_i $ bedeutet $ x \ le c_i $ < / span>. Somit anstelle der Kodierung an einen $ (x_1, \ dots, x_n) $ vector wie $ (0,0,0, 1,0) $ Sie würden an $ (1,1,1,1,0) $ codieren. Sie fügen Einschränkungen hinzu, die $ X_I \ impliziert X_ {I-1} $ , und dann jede Ungleichung $ x \ le c_i $ entspricht einer booleschen Variablen $ x_i $ .

Andere Tipps

In Ihrem Fall kann die einfachste Lösung SAT sein.

Ihre erste Klausel enthält $ x \ le 0.25 $ und $ x> 0,91 $ . Dies bedeutet, dass es fünf Interessenregionen für die Variable $ x $ gibt, die wir mit booleschen Variablen identifizieren: $ x_1 \ EQUIV X \ IN (- \ \ Infty, 0.25) $ , $ X_2 \ EQUIV X= 0,25 $ , $ X_3 \ EQUIV X \ IN (0,25, 0.91) $ , $ X_4 \ EQUIV X= 0,91 $ , $ X_5 \ EQUIV X \ in (0.91, \ Infty) $ .

Erstellen Sie eine boolesche Variable für jedes dieser Bereiche und konvertieren Sie die Klausel, um sie zu verwenden. So, beispielsweise $ x \ le 0.25 $ in $ X_1 \ Vee X_2 $ , und $ x <0,91 $ würde in $ X_1 \ Vee X_2 \ Vee X_3 $ konvertieren.

Mehr Klauseln bedeuten mehr Konstanten und somit mehr Interessenbereiche für eine primitive Variable.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top