Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi IF THEN Konstrukte dynamisch erstellen. (https://www.delphipraxis.net/101167-if-then-konstrukte-dynamisch-erstellen.html)

Go2EITS 9. Okt 2007 11:21


IF THEN Konstrukte dynamisch erstellen.
 
Ich habe wieder ein Problem, dass ich mal zur Diskussion stelle:

Ich möchte neue If bedingungen vom Programm einfügen lassen.
Bisher ist mir nur eingefallen, die If-Bedingungen als Include-Datei zu erstellen und den Compiler aufzurufen,
damit die neuen If-Bedingungen akzeptiert werden. Kann ich irgendwie diese dynamisch erstellen?
Hat jemand schon mal einen Ansatz dazu? Sollte ich P-Code erstellen oder eine Scriptsprache?

mkinzler 9. Okt 2007 11:23

Re: IF THEN Konstrukte dynamisch erstellen.
 
Wie meinst du das mit dynamisch? Bedingte Kompilierung?

Go2EITS 9. Okt 2007 11:33

Re: IF THEN Konstrukte dynamisch erstellen.
 
Nein, keine bedingte Kompilierung.
If Temperatur >20 then MarkieseOut;

Ergänzung, die im Programm aufgenommen werden sollen.
If Temperatur >20 and Sonnenschein then MarkieseOut;
If Innentemperatur >22 and Sonnenschein then MarkieseOut;

Diese Ifs werden durch einen "Zufallsgenerator" generiert.
Natürlich können Bedingungen/Muster "zufällig" z. B. aus einem Array gepickt werden:
if(Array[1,10])>0 and (Array[1,234] =Montag) and (Array[1,534]<>0) then Fehler;

Soweit verstanden?

mkinzler 9. Okt 2007 11:35

Re: IF THEN Konstrukte dynamisch erstellen.
 
Dann wäre eine Skript-Komponente vielleicht sinnvoll (z.B. PascalScript)

Go2EITS 9. Okt 2007 11:47

Re: IF THEN Konstrukte dynamisch erstellen.
 
Naja, dass wäre eine Lösung, wie schon in meinem ersten Beitrag geschreiben.

Mir fällt ein, ich hatte vor Jahren eine Lösung, die wenn ich mich richtig entsinne mit Mengen gelöst habe.
Ich habe eine Menge generiert, diese ausgelesen und interpretiert. Bin aber mangels Programmierkenntnisse nicht weit gekommen.
Aber der String oder die Menge sah so oder s.ä. aus:
Befehle:=''IF','THEN','<','>','<>','=','AND','NOT' ,'OR','(',')';
Und irgendwie hatte ich auch die Regeln implementiert.

Gäbe es nicht eine andere Lösung außer die mit Pascalscript?
Lisp in Delphi vielleicht?

SirThornberry 9. Okt 2007 12:52

Re: IF THEN Konstrukte dynamisch erstellen.
 
sowas geht einfach mit Programmierlogic
Delphi-Quellcode:
If (Temperatur > 20) and
  (not(Beruecksichtige_Sonnenschein) or Sonnenschein) then
begin
 MarkieseOut;
end;

turboPASCAL 9. Okt 2007 13:04

Re: IF THEN Konstrukte dynamisch erstellen.
 
Das Gummibärchen hat folgendes geschrieben:
sowas geht einfach mit Programmierlogic


Das setzt aber eine feste Programierung und oder Bedingung vorraus. Im nachhinein gibt es dann keine
Möglichkeit das Programm anders entscheiden zu lassen wenn eine Bedingung hinzu kommt oder sich verringert.
Man muss also über ein externes, nicht fest in das Programm eingebunde Script arbeiten, will man es flexibel halten zB. für den Kundensupport.

PascalScript wäre also eine gute Lösung wenn man sich nicht selbst etwas basteln will.

SirThornberry 9. Okt 2007 13:10

Re: IF THEN Konstrukte dynamisch erstellen.
 
Das stimmt, man kann im Nachhinein nichts hinzu fügen. Aber auch bei verwendung von Scripts geht das nicht wenn diese Verbindung zum richtigen Programm haben sollen. Wenn das Script zum Beispiel Werte von richtigen Variablen aus dem Programm verwenden soll muss man das auch vorher festlegen da die Variablen später (nach dem compiliere) nicht mehr mit Namen angesprochen werden können.

OregonGhost 9. Okt 2007 13:14

Re: IF THEN Konstrukte dynamisch erstellen.
 
Vielleicht wäre hier auch ein System interessant wie die, die z.B. in den Editoren von StarCraft und WarCraft III Verwendung fanden, oder in Outlook im Regeleditor, oder auch in vielen neueren Mediaplayern (z.B. WMP) beim Erstellen intelligenter Wiedergabelisten. Dabei sind die durchführbaren Aktionen und die möglichen Bedingungen vom Programm vorgegeben, aber der Benutzer kann sie beliebig kombinieren und konfigurieren.

Go2EITS 9. Okt 2007 13:29

Re: IF THEN Konstrukte dynamisch erstellen.
 
@SirThornberry
Es geht darum, neue If-Then Schleifen dynamisch hinzuzufügen, nicht wie sie geschrieben werden. Das wäre ein anderes Thema.
Diese If-Then Schleifen sollen dann auch noch gespeichert werden.
Die Lösung scheint schwierig zu sein und nur über ein Plugin oder Script zu bewältigen.

Letztendlich ist es ein Programm, das Regeln per Zufall erstellt, diese im Programm einfügt und prüft und kommt ein brauchbares Ergebnis raus, auch speichern diese soll. Die neuen Daten/Inputs werden dann von den neuen, generierten If-Then Bedingungen im Aktionsmodus geprüft. Das Programm ist ein wenig komplex und bevor ich Zeit investiere, möchte ich die Frage der If-Bedingungen bzw. dynamischen Regeln zuerst lösen.

Rote Fenster
@OregonGhost
Lua wird bei Warcraft eingesetzt. Das Programm generiert hunderttausende If-Statements, die um die Wette, bez. das beste Ergebnis eifern. Da wird manuelles Verknüpfen nicht vorgesehen sein.

LUA, Fastscript und ScriptPascal habe ich mir schon runtergeladen. Aber ich wollte mich nicht neu einlernen, damit ich 20 Zeilen If-Statesments in mein Programm während er Laufzeit einfüge. Die schnellste Version erscheint mir die Generation der If-Statements als Include Datei und den Source neu zu compilieren zulassen. Ich denke, nun wird mein Anliegen klarer.

OregonGhost 9. Okt 2007 13:44

Re: IF THEN Konstrukte dynamisch erstellen.
 
@Lua: Lua wird bei World Of Warcraft für das clientseitige Scripting eingesetzt. Mir wäre neu, dass es auch für das serverseitige Scripting von Warcraft 3 verwendet wird. Aber selbst wenn, Outlook und WMP setzen dafür kein Lua ein. Ich verstehe das Problem insofern nicht, als dass du ja offenbar die Bedingungen zur Kompilierzeit kennst, oder wer soll die wann generieren? Davon abgesehen basieren die von mir genannten Konzepte ungeachtet ihrer Umsetzung alle auf dem Prinzip von parametrierbaren Regeln. Wenn es bei dir wirklich nur einfache if-thens gibt (und bitte, bitte, es sind keine If-Then-Schleifen :wink:), sollte das ein gangbarer Weg sein. Ich habe im Rahmen meiner Diplomarbeit ein Programm entwickelt, das für bestimmte Dinge ebenfalls Regeln benötigt (im Endeffekt logische Verkettung, also im Prinzip sowas, wie du es benötigst), aber das war auch in .NET 2.0 und somit hat man auch beim Benutzer den Compiler zur Verfügung, und außerdem war das Ergebnis des Programms eine DLL. Das Grundprinzip jedoch ist eigentlich in diesem Zusammenhang einfach, du definierst die Eigenschaften, die du unterscheiden willst, und die Werte, die für diese Eigenschaften möglich sind. Eine Überprüfung dieser Verkettung ist dann nicht mehr kompliziert, weil du ja nur die Namen der Eigenschaften und die Werte parsen musst.

Go2EITS 9. Okt 2007 14:05

Re: IF THEN Konstrukte dynamisch erstellen.
 
@OregonGhost
Ich kenne die Bedingungen nicht.
Noch ein Beispiel:
Ich habe eintausend Zeilen mit z. B. 1000 Spalten und eine Ergebnis (Prognose) zu den Spalten.
Nicht alle Spalten generieren das Ergebnisse notwendig. Es genügen vielleicht in einer Spalte 20-200 Bedingungen, die
die auf neue Zeilen mit 1000 Werten laufen lasse. Die entspechende oder entsprechenden If-Bedingung/Regeln werden dann aktiv.
Es kann auch sein, dass, ein Wert /oder n-Werte unter den Tausend Werten einer Zeile aktiv sein muss, damit andere Regeln ihre Gültigkeit bekommen.
Man sieht bei meinem Programm sofort, ob es eine vernünftige Prognose geben kann, da jede Regel, die aktiv geworden ist, wenn man ihr ein neues Muster vorgesetzt hat, ihr Ergebnis angezeigt.

Im Gegensatz zu neuronalen Netzen gewinnen die Regeln, die sich am meisten - ohne Fehler- oder mit geringster Fehlerquote bewährt haben und nicht die Regel, oder besser die Muster, die am häufigsten im Trainingssatz vorkommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz