Open hklarner opened 3 years ago
Hallo, ja das ist eine gute Idee. Das Problem ist, dass die Datenstrukturen, die sage verwendet teilweise nicht miteinander kompatibel sind. "BooleanPolynomial" ist ein Wrapper von https://github.com/BRiAl/BRiAl. Sage.logic.propcalc ist damit meines Wissens nicht direkt kompatibel. Man muss also noch einen Weg finden, dass zu konvertieren.
BRial/Polybori verwendet eine spezielle Datenstruktur (eine Art von BDDs) zur Repraesentation der Polynome. Das erschwert die Konvertierung. Evtl. koennte man example.py direkt generieren mit der Loesung, die du vorgeschlagen hast. Aber das ist dann mehr ein Workaround.
Bin den einzigen Weg gegangen, den ich finden konnte.
BooleanFormula
mit propcalc.formula
BooleanFormula
konvertieren in full parse tree, sowas wie: boolean_formula_tree = ['&', 'v4', ['~', 'v6']]
polynomial_tree = ['*', 'v4', ['+', 1, 'v6']]
Ergebnis: wir haben ein CLI mit dem man BNET Dateien zusammen mit einem Classifier String an deinen Code übergeben kann. Aufrufen mit:
python3 classy.py --bnet n7s3.bnet --classifier "v4 & !v6"
@RSchwieger sollte das übrigens nicht --phenotype
anstatt von --classifier
heißen? Also auch hier:
Hi @RSchwieger,
die Beispiele example1.py und so weiter sind ja per Hand erstellt. Ich möchte ein paar weitere Case Studies machen und würde die Gleichungen gerne aus einer BNET Datei automatisch erzeugen.
Beispiel: BNET Datei:
Dann könnten wir ein CLI schreiben, z.b.
classy.py
, was in etwa so funktioniert:Macht das Sinn?
In den Beispiel Dateien werden die Gleichungen über Variablen definiert, die SAGE anscheinend den globals angehängt hat. Diese Zeilen hier meine ich: https://github.com/RSchwieger/Classifier-construction-in-Boolean-Networks-using-algebraic-methods/blob/ca38f737a272f9c6e425e53f7f7ae4eef3cd4a17/example1.py#L15-L17
Ich habe versucht herauszufinden, ob ich diese
BooleanPolynomials
auch über Strings initialisieren kann, also etwa:aber so einen Konstruktor habe ich nicht gefunden. Dann bleibt mir nur noch Python's
exec
, oder?Das funktioniert. D.h. ich kann Variablen über Strings erzeugen. Jetzt fehlt nur noch der Schritt aus einem Boolschen Ausdruck ein Boolsches Polynom zu erzeugen. Denn die Zeilen in der BNET Datei sind ja keine Polynome. Hast Du da eine Idee?
SAGE bietet folgende Objekte:
BooleanFormulas
kann ich mit Strings initialisieren:Und aus
BooleanFunctions
kann ich Polynome machen, siehe algebraic_normal_form():Ich habe noch keinen Weg gefunden einer BooleanFormula eine BooleanFunction zu machen. Hast Du eine Idee für diesen Schritt BooleanFormula -> BooleanPolynomial oder gibt es sogar einen alternativen Ansatz ohne diese Objekte?