# Pattern zur Auswahl eines Objektes anhand vieler Kriterien



## ManfNan (21. Jul 2012)

Hallo,

ich zerbreche mir schon seit langem den Kopf darüber, wie ich Folgendes Problem möglichst gut wartbar lösen könnte:

Es liegt in einem Spiel eine bestimmte Situation vor, die sich durch viele Kriterien beschreiben lässt. Jetzt soll eine Empfehlung für die zu vollziehende Handlung errechnet werden. 
Ein einfacher Ansatz ist zunächst einmal eine regelbasierte Handlungsempfehlung abzugeben. Diesen möchte ich auch weiterhin erst einmal beibehalten. 

Hierzu wird nun eine Vielzahl an Situationsanalyseobjekten bereitgestellt, wobei pro Spielsituation immer nur eines davon passend ist und anhand der Eigenschaften der aktuellen Spielsituation selektiert werden soll.

Doch wie kann ich möglichst wartbar ein solches Objekt anhand der Eigenschaften der Spielsituation selektieren, wenn sich die Kriterien zur Beschreibung einer Spielsituation potentiell noch ändern können??

In einer Factory müsste ich bei vielen Kriterien erstens sehr viele case Abfragen machen und bei Änderungen der Auswahlkriterien wirds zweitens super schlecht wartbar und aufwändig anzupassen.

Dann hab ich mir gedacht man könnte die Analyseobjekte mit einer Methode in einer Oberklasse ausstatten, die lautet: usableForThisSituation(gameSituation) und darin die Eigenschaften der SpielSituation mit entsprechenden Feldern der Objekte vergleichen und wenn sie übereinstimmen true zurückliefern. Das Ganze soll dann noch am besten static sein.

Allerdings müsste ich bei sehr vielen Situationsanalyseobjekten dann auch im Zweifel sehr viele Vergleiche durchführen, bis das passende Objekt gefunden wurde.
Außerdem müsste ich eine Liste aller Analyseobjekte anlegen und durchiterieren, was bei vielen Objekten ordentlich Speicher kostet.

Kennt ihr für so einen Fall vllt ein Pattern oder eine andere Lösungsidee, um bei Änderungen der Eigenschaften einer Spielsituation möglichst nur an einer Stelle den Vergleich auf ein passendes Analyseobjekt abändern zu müssen oder vllt einen ganz anderen Ansatz, wenn meiner total in die falsche Richtung geht bei diesem Problem??? 

Wäre super dankbar dafür.

Mfg,
Manni


----------



## Ullenboom (24. Jul 2012)

Da kommt mir so etwas wie die Zuständigkeitskette ? Wikipedia in den Sinn. In dieser hängen die Bewertungen und jedes Spielobjekt wird durchgereicht bis eine Bewertung zuschlägt.
Als Abwandlung: Die Objekte werden der Reihe nach an die Bewertungsobjekte gegeben, diese liefen einen Match-Grad (0-100%) und der mit dem höchsten Rate bewertet schlussendlich das Objekt.


----------



## nichts frei? (24. Jul 2012)

Ich habe ja keine Ahnung, was du für Spielsituationen hast,
aber eventuell kannst du das ganze mit einem Neuralen Netzwerk lösen?
(der Link bezieht sich nur auf ein 'feedforward neural network').
Damit bekommst du auch noch Ergebnisse, wenn eine Situation eintrift, mit der gar nicht gerechnet wurde.
Ich habe auf dem Gebiet allerdings auch nur begrenzt Erfahrung.

tschau

[OT]Ein tolles Buch.[/OT]


----------

