G
@harteware sagte in Algorithmus in Tabelle umwandeln:
Ich bin vielleicht zu doof das Problem zu verstehen (Du willst eine lookup table für x berechnen in Abhängigkeit von mehreren Variablen und tausenden Bedingungen?)
Ich bin wohl eher zu doof, das zu erklären. Ich arbeite schon seit Jahren damit und kann wohl schlecht nachvollziehen, welche Informationen andere brauchen. Aber ich denke, das mit der Lookup Tabelle hast du schon richtig verstanden.
Es geht nicht um ein Script, sondern um hundert tausende Das ist Teil eines Systems zum Aufbau von parametrischen Modellen. Basiert teilweise auf irgendwelchen alten DIN und VDA Normen. Damit haben Kunden selber ihre Modelle aufgebaut.
Meist ist das auch nicht schlimm, sondern echt praktisch. Man kann Parameter in Abhängigkeit von anderen Parametern definieren und das ist eben die Sprache, um das zu tun. Vieles lässt sich durch einzeilige Scripte erledigen.
Nur sind es mit der Zeit immer mehr geworden, die immer komplexere Regeln damit abgebildet haben. z.B. irgendwelche Bestellnummern oder ähnliches. "Wenn Typ A und Größe zwischen 10 und 20, dann... Aber wenn Größe doch größer als 20, dann...".
Ist ja im Grunde egal. Jedenfalls ist das ein Werkzeug, das schon seit Jahrzehnten im bei vielen Kunden im Einsatz ist und daran wollen und können wir auch nichts ändern. Ist nur die Frage, was wir alles optimieren können.
Das "Analysieren" ist nicht so das Problem, irgendwelche Analysen über den AST Baum haben wir schon öfter drin. Mir fehlt eher die Idee, in welche Datenstruktur man das ganze verpacken könnte.
Meine Überlegungen gehen in etwa in diese Richtung:
struct variableEntry {
std::pair<variant, variant> valueInterval;
std::vector<int> branchIndices;
someEnum conjunction;
};
Davon könnte man pro Variable eine sortierte Liste anlegen, nach dem kleineren Wert im Interval (z.B. > 5 => 5...max) sortieren und damit schon mal für einen konkreten Wert schnell den richtigen Eintrag finden. Über die branchIndices könnte man das mit anderen Variablenbedingungen verknüpfen.
Aber wie man die Verknüpfung machen könnte, habe ich noch nicht so wirklich raus. Wie unterscheide ich z.B. und und oder? Oder was mache ich, wenn zweimal die gleiche Variable benutzt wird (a > 5 and a < 10)?