Grundverständnis BDI-Agenten



  • Hi,
    ich entwickel zur Zeit ein kleines Kampfsystem, dass ein paar Einheiten aufeinander los lässt. Ich wollte eine Art KI einbauen (womit ich noch nicht groß Erfahrungen gemacht habe), die jeder Einheit ein "Gehirn" gibt, damit sie eigenständig handeln, sich zum nächsten Feind bewegen, bei einer Übermacht fliehen, etc.
    Ich weiß, einige werden wissen, dass es sowas in Form von "Massive" gibt, aber ich möchte versuchen mein Verständnis für soetwas zu erweitern und das ganze einfach im kleinen Maßstab versuchen selbst auf die Beine zu stellen.

    Jetzt bin ich über das Konzept der BDI-Agenten gestolpert, allerdings ist mir noch nicht so richtig klar geworden, wie man das in einer Programmiersprache ausdrückt und wie man die Verhältnisse setzt.
    Zum Beispiel:
    In der hinteren Reihe steht ein Bogenschütze, vorn an der Kampflinie ein verbündeter Schwertkämpfer, der von einem gegnerischen Schwertkämpfer attackiert wird. Meinetwegen kommt noch ein feindlicher Reiter auf den Bogenschützen zugeritten.

    Jetzt zu dem Verständnis:

    Beliefs: Prinzipiell müsste man (vorrausgesetzt man hat x-y-Koordinaten für das Schlachtfeld) ja eine Sichtweite festlegen und alle auf diesen Koordinaten stattfindenden Aktionen aufnehmen. Dann würde der Agent sehen, dass ein Freund in einem Kampf verwickelt ist und ein Reiter auf ihn zugeritten kommt.

    Desire: Der Agent möchte gerne überleben, will seinem Freund helfen und möglichst viele Gegner ausschalten

    Intention: Der Agent bzw die Agentenarmee will den Kampf gewinnen und dabei die eigenen Verluste möglichst minimal halten.

    Jetzt ist die Frage, wie ich das möglichst elegant in C++ ausdrücke und wie ich die Verhältnisse so setze, dass er entweder seinem Verbündeten hilft, oder sich selbst rettet. Und ich würde nicht mal sagen, die oder die Aktion ist die richtige. Mir fällt ein, dass der Agent ja auch überschlagen könnte, wie lange der Reiter noch braucht und dann vllt in der Zeit auch 2 Pfeile abschießen könnte.

    Ich hoffen ihr versteht mein Anliegen 😃
    So far, danke fürs lesen und interessieren 🙂



  • am billigsten mit ein paar if



  • Es gibt tonnenweise Literatur zu dem Thema, lies dich da etwas ein. So ein Thema kann man nicht in einem Forum diskutieren, mit jemandem der keine Ahnung davon hat.


Anmelden zum Antworten