Hayo, ich wäre angemeldet - kann aber momentan das Konto noch nicht aktivieren
Ich stehe nun vor der wichtigen Entscheidung, wie ich eine KI für meine Anwendung konzipiere. Das ist gar nicht so leicht, darum schlage ich jetzt mal was vor, wovon ich ausgehe, dass es hier in der Luft zerrissen wird. Doch zuvor noch ein paar Zeilen zu der Applikation:
Wie manche aus dem GUI-Forum sicherlich schon wissen, arbeite ich an einer Anwendung, die Knoten und Kanten darstellen kann. Dies sind Arbeitsprozesse, mit Übergangswahrscheinlichkeiten. Gesucht ist der effizienteste Weg vom Start zum Ziel. Mööh, das ist doch Traveling Salesman werden einige sicher denken, und ya, das stimmt. Die „innovative“ Idee ist, dies aber nun mit der Ameisen-KI zu lösen und nicht mit althergebrachten Algorithmen.
**[img=http://img101.imageshack.us/img101/5412/78079398.jpg]
**
Mein Programm besteht aus folgenden Modulen (Controller genannt)
Das Herz ist der MainController. Der startet alle anderen Controller und leitet Kommunikation wenns sein muss durch. Ganz unten ist der XMLController. Der parst XML und schiebt die Attribute in eine ArrayList, nein in zwei. In eine ArrayList und eine ArrayList. Beides sind von mir erstellte Klassen mit eben diesen Attributen.
Dann gibt es einen OutputController. Der ist für die Ausgabedarstellung notwendig. Wenn die GUI initialisiert ist, schreibt er auch in die GUI-Konsole (Textarea auf der GUI).
Der GraphController verwaltet die Knoten- und Kantenlisten. D.h. er gibt auch Teillisten zurück, z.B. von allen Kanten die zu einem Knoten führen oder von ihm abgehen, oder deren Übergangswahrscheinlichkeit größer einer bestimmten Schwelle ist (die Schwelle stellt man mit einem JSlider ein)
Der GUIController initialisiert die GUI und holt die Teillisten aus GraphController (über main) Achya, die Controller sind alle auf private, ausser die von main. Deswegen muss der GUIController teilweise auch als Proxy dienen. Nämlich für das Zeichenfeld (das JPanel), denn der muss ja die Kanten und Knoten dann letztlich zeichnen.
So das ist alles schon ziemlich fertig - jetzt möchte ich mit der KI beginnen.
Der KIController startet dann die Berechnung. Doch vorher muss er Bots initialisieren. Nun weiß ich aber nicht womit man das am besten macht. Da ich vllt auch andere KIs einsetzen will, bräuchte ich soetwas wie eine KIElement - Klasse, in welcher die Regeln für die KI stehen. Das Problem ist aber, dass ich eine andere KI anders betiteln müsste.
sowas wie
setupKI(KIElement kiElement) wäre das dann. kiElement soll aber aus verschiedenen Klassen kommen können. Geht das? Mein Programmierverstand schreit nein. KIElement ist ja nunmal die Klasse und ich kann nicht zwei verschiedene Klassen mit dem gleichen Namen haben. Was gehen könnte, wäre eine Ableitung einer Defaultklasse die KIElement heißt, und die dann zu modifizieren. Sowas hatte ich auch vor, aber wie man das realisiert weiß ich noch nicht so richtig. Es geht ja darum, das das Objekt von KIElement (der Übergabeparameter wegen) stammt. Man soll ja später noch weitere KIs entwickeln können, ohne dass die alten überschrieben werden von der Neuen. Das soll also auch modular sein.
grob gesagt soll sowas dabei rauskommen:
KIElement ki1 = new AntKI();
KIElement ki2 = new BeeKI();
geht sowas? Ich wäre sehr von einer angeregten Diskussion angetan.