AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Pascal-Code durch anderes Programm generieren lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Pascal-Code durch anderes Programm generieren lassen

Ein Thema von Gargamel · begonnen am 18. Okt 2012 · letzter Beitrag vom 20. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

Pascal-Code durch anderes Programm generieren lassen

  Alt 18. Okt 2012, 08:51
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
  Mit Zitat antworten Zitat
weisswe
(Gast)

n/a Beiträge
 
#2

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 18. Okt 2012, 09:34
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...
Also Echtzeit und 3D wird da sicher ein Problem...

W!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.587 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 18. Okt 2012, 09:41
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#4

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 10:49
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.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 19:37
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.
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#6

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 20:18
Oder eine der Script Engines die im Forum vorgestellt wurden.
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#7

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 20:53
@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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.587 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 21:31
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#9

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 21:38
Unter der Annahme, das das keine Blödelei war... wie kommt sowas?
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Pascal-Code durch anderes Programm generieren lassen

  Alt 20. Okt 2012, 21:59
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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