Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Pascal-Code durch anderes Programm generieren lassen (https://www.delphipraxis.net/171059-pascal-code-durch-anderes-programm-generieren-lassen.html)

Gargamel 18. Okt 2012 07:51

Pascal-Code durch anderes Programm generieren lassen
 
Hi

Vorgeschichte:

Ich möchte eine KI entwickeln, die so flexibel wie möglich einsetzbar ist. Dafür möchte ich ein Programm schreiben, in welchem man seine KI-Objektypen (Hase, Soldat, Alien, Fussballspieler... was auch immer), definieren kann. Dazu gehören, je nach Objekttyp, unterschiedliche Eigenschaften, Pathfinding, State-Machines usw.
Nehmen wir z.B. mal die State-Machines. Dort definiert man verschiedene Zustände wie laufen, flüchten, jagen, fressen. Einer dieser Zustände ist von Anfang an aktiv. Um jetzt jedoch in einen anderen Zustand zu gelangen, müssen bestimmte Kriterien erfüllt sein.

Zustand: laufen
Bedingung: Wenn Hunger, dann jagen.
Zustand: jagen
Bedingung: Wenn Beute gemacht, dann fressen.
Zustand: fressen

Mit solchen State-Machines lassen sich viele lustige Sachen anstellen. :)

Wenn ich so ein Programm schreibe, wo ich das alles definieren kann, müssen alle Angaben von der KI ausgewertet und ausgeführt werden. Jetzt ist es natürlich so, daß jeder Objekttyp unterschiedliche Eigenschaften hat, die die KI im Vorfeld garnicht kennt. Demnach kann ich nicht einfach in Delphi Klassen erstellen und deren Eigenschaften zur Laufzeit erweitern. Auch sind die Bedingungen ein Problem (Wechsel von einem Zustand in den nächsten), da diese oftmals komplexere Formeln enthalten. Ich hatte mir das so vorgestellt, daß man in dem separaten Programm die Bedingungen wie in einem Ausdrucks- bzw. Formeleditor erstellt (kennt man z.B. von Microsoft Access).

Jetzt gibt es zwei Möglichkeiten:

Variante A: Ich schreibe so ein Programm.
Vorteil: Die KI ist flexibel einsetzbar. *** Nachteil: Die Ausführungsgeschwindigkeit ist langsam, da alle Eigenschaften der Objekte und vorallem die Bedingungen in den State-Machines erstmal ausgewertet (interpretiert) werden müssen. Und das in jedem Hauptschleifendurchlauf.

Variante B: Ich lasse das mit dem separaten Programm und codiere alles "hart" in Delphi.
Vorteil: Die Ausführungsgeschwindigkeit ist deutlich höher. *** Nachteil: Die KI ist nicht flexibel einsetzbar.


Jetzt fiel mir allerdings eine mögliche Lösung ein, um evtl. die Vorteile beider Varianten zu vereinen. Die sieht so aus:
Ich schreibe diese separate Programm, wo ich jegliche Objekttypen, Eigenschaften, Kriterien für State-Machines usw. definieren kann. Final, wenn alle Informationen eingegeben wurden, erzeugt das Programm Pascal-Code in Form von *.pas-Dateien, speichert diese ab und läßt durch den Kommandozeilen-Compiler eine DLL erstellen. Die KI selbst läuft in einer DLL und wird an eine 3D-Engine gebunden.

OK, zugegeben, die Idee klingt ziemlich abenteuerlich.

Was haltet Ihr davon?

Danke

weisswe 18. Okt 2012 08:34

AW: Pascal-Code durch anderes Programm generieren lassen
 
Hallo!

Ich würde das "Univerum" und die "Objekte" mit den "Eigenschaften" in einer Datenbank ablegen.
Die Regeln "Gehirn" müsstest du dann natürlich in einer "Sprache" definieren - und diese ebenfalls in der DB ablegen.
Das Programm selbst muss "nur" mehr die Objekte erstellen, Regeln ausführen und darstellen "Visu".
Vorteil: Die "Regeln" könneten automatisch optimiert werden "Lernen".
Die Frage ist nur, welche Rechnpower du verwenden kannst... 8-)
Also Echtzeit und 3D wird da sicher ein Problem... :)

W!

jaenicke 18. Okt 2012 08:41

AW: Pascal-Code durch anderes Programm generieren lassen
 
Dafür eignet sich eher eine .NET Sprache wie C#, denn da kannst du zur Laufzeit im Arbeitsspeicher Code generieren, der dann ausgeführt wird. Das ist im Grunde genau was du möchtest, nur einfacher.

Ansonsten würde ich schlicht Pascal Script benutzen, z.B. DWScript.

Gargamel 20. Okt 2012 09:49

AW: Pascal-Code durch anderes Programm generieren lassen
 
Vielen Dank für die Anregungen.

Datenbanken wollte ich mir aus Gründen der Geschwindigkeit verkneifen. Eigenschaftenlisten nebst deren Werten könnte ich ggf. auch intern über ein dyn. Array verwalten. Das gilt auch für Nodes (Binärbäume, Wälder, etc.) bezüglich Pathfinding.

Scripting (z.B. DWScript) wäre eine Möglichkeit. Aber auch da muß ich auf die Geschwindigkeit achten. Man könnte auch LUA verwenden, nur muß man auch da aufpassen. Ausserdem weiß ich nicht, wie solche Scripting-Module auf Multithreading reagieren, da sich meine KI momentan (es gibt einen ersten Prototypen) über mehrere CPU-Kerne aufteilen läßt.

Und genau wegen solcher Gedankenspiele kam ich auf die Idee, Pascal-Code über eine separates Programm generieren zu lassen.

Die Codegenerierung zur Laufzeit über C# klingt allerdings sehr gut. Damit müsste ich mal einige Versuche wagen.

Furtbichler 20. Okt 2012 18:37

AW: Pascal-Code durch anderes Programm generieren lassen
 
Wieso generierst Du keinen Freepascal-Code, lässt den von FPC als kompilieren, bindest ihn ein und fertig? Oder musst Du situativ ständig neuen Code generieren?

Du kannst auch einen anderen freien Compiler der Sprache deiner Wahl nehmen.

Florian Hämmerle 20. Okt 2012 19:18

AW: Pascal-Code durch anderes Programm generieren lassen
 
Oder eine der Script Engines die im Forum vorgestellt wurden.

Gargamel 20. Okt 2012 19:53

AW: Pascal-Code durch anderes Programm generieren lassen
 
@Furtbichler

Eben. Genau das steht ja auch ganz unten im ersten Post. Darauf basiert ja meine ursprüngliche Frage.

@Florian Hämmerle

Lua & Co. will ich eben nicht unbedingt wegen der geringeren Geschwindigkeit nutzen. Wenn aber alles nichts hilft, würde ich aber darauf zurückgreifen.

jaenicke 20. Okt 2012 20:31

AW: Pascal-Code durch anderes Programm generieren lassen
 
Zitat:

Zitat von Gargamel (Beitrag 1187754)
Lua & Co. will ich eben nicht unbedingt wegen der geringeren Geschwindigkeit nutzen. Wenn aber alles nichts hilft, würde ich aber darauf zurückgreifen.

DWScript ist an vielen Stellen kaum langsamer als Delphicode. :wink:

Gargamel 20. Okt 2012 20:38

AW: Pascal-Code durch anderes Programm generieren lassen
 
Unter der Annahme, das das keine Blödelei war... wie kommt sowas?

implementation 20. Okt 2012 20:59

AW: Pascal-Code durch anderes Programm generieren lassen
 
Zitat:

Zitat von Gargamel (Beitrag 1187765)
Unter der Annahme, das das keine Blödelei war... wie kommt sowas?

Alle Standardroutinen sind nativ implementiert. Das Skript wird vorm Starten blitzkompiliert und liegt als Bytecode vor - verglichen mit Maschinencode auf relativ hohem Level, sodass die VM gar nicht so viel zu tun hat und der Loewenanteil tatsaechlich nativ laeuft. Wenn gut optimiert wird, kann so ein Skript auch schneller sein als kompilierte Programme. Es kann aber auch viel langsamer sein, wenn bspw. sehr viel berechnet wird, denn da koennen die Optimierungen nicht ausgespielt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.
Seite 1 von 2  1 2      

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