Forum



NeXuS am 28.04.2020 14:29 #15447


Hi,

ich hatte kürzlich die Zeit mal einen Blick in die KI Programmierung zu werfen und stellte mir eine Frage...
Ist es möglich einen defensiven KI Typ zu implementieren?

Was genau stelle ich mir unter einem defensiven KI Typen vor?

  • Eine defensive KI stellt die Einstellung zum Besetzen für Militärgebäude mit mittlerer Distanz zur Grenze auf 100%, sobald sie eine Soldatenproduktion aufgebaut hat.

  • Eine defensive KI stellt die Einstellung zum Besetzen für Militärgebäude mit ferner Distanz zur Grenze auf 100%, sobald sie eine zweite Soldatenproduktion aufgebaut hat.

  • Eine defensive KI stellt die Einstellung zum Besetzen für Militärgebäude im Inland auf 100%, sobald sie eine dritte Soldatenproduktion aufgebaut hat.

  • Eine defensive KI prüft vor einem Angriff, ob im Falle eines Totalverlustes der eingesetzten Einheiten, genug Soldaten zur Verfügung stehen, um das jetzt geleerte Gebäude neu zu besetzen. Falls nicht, sollte der Angriff nicht stattfinden.



Ansonsten handelt die DefensiveKI wie eine HardAI. Dies nimmt einem Grenzverlauf etwas die Dynamik, die - wie ich beobachten konnte - manchmal einem Alles-Oder-Nichts Spiel entspricht... Sobald man den wüsten Ansturm der KI überstanden hat, ist das Hinterland quasi wehrlos, da meist nur 1 Soldat in den Gebäuden bleibt.
Umso gravierender ist es, wenn ein lachender Dritter anwesend ist, der nun die geschwächte KI aufräumen kann. Wenn die KI ihre Gebäude voll besetzt hält, ist ein Durchmarsch nicht einfach umsetzbar, da hinter der Hauptlinie weitere Verteidiger warten.
Auf der anderen Seite führt dies natürlich zu deutlich weniger Kampfhandlungen und einer verlangsamten Expansion der KI... schwierig wird es noch zusätzlich dadurch, dass die KI ihre Gebäude zu Festungen und Wachttürmen expandiert.

Andererseits sind die nötigen Anpassungen im Code nicht allzu gravierend... Es muss eine Checkbox eingefügt werden, die den Defensiv-Bool festhält und dieser muss im Code abgefragt werden.


In AIPlayerJH.cpp muss in Zeile 1704 irgendetwas in dieser Richtung eingefügt werden:
if((bDefensive) && numberOfSoldiersInWH > numberOfSoldiersCurrentlyAttacking + numberOfSoldiersNeededForThisAttack)
        {
            continue;
        }

Zum Auffüllen der Militärgebäude im Inland habe ich noch keine Position gefunden... Aber es gibt ja den ein oder anderen Handler für die Überprüfung der Gebäude zahlen.

Ich würde das gerne mal testen, allerdings kenne ich mich mit C++ zuwenig aus. Ich bin eher auf C# Basis unterwegs...

---
http://www.danta-spiele.de

"Der Mensch spielt nur, wo er in voller Bedeutung des Wortes Mensch ist, und er ist nur da ganz Mensch, wo er spielt." - Schiller


Spike am 28.04.2020 18:11 #15450

Im Ruhestand
Das bedeutet im Umkehrschluss, dass die AI mit Katapulten einfach "zurückgedrängt" werden kann wenn sie ein geringeres
Angriffspotential hat.
Auch ist die KI auf Karten auf denen sie z.B. eigentlich um die Mitte kämpfen muss im Nachteil wenn sie einfach passiv bleibt oder?

Auch bei Spielen mit Menschen ist es so, dass diese im Hinterland keine Soldaten mehr haben - das wird in der Regel an der Front
verbrannt und entweder man produziert nach oder der Gegner.

Allerdings wären AI Typen sicherlich eine schöne Sache, aktuell ist das Verhalten sehr berechenbar was die AI leider nie zu einem
wirklichen Gegner macht, wenn diese immer anders reagieren würde oder gar taktische Langzeitpläne verfolgen, dann wäre sie sicher einen
Schritt weiter :)

---



NeXuS am 29.04.2020 10:00 #15454


Mein Vorschlag war nicht so gemeint, dass er eine absolute Verbesserung zum aktuellen Spielstil darstellt oder die KI menschenähnlicher (sprich effektiver) macht.
Ich möchte einer KI eher etwas wie einen Charakter geben, sei es jetzt 100% optimal oder nicht.

Es gibt bestimmt Spieler, die eine langsamere Herangehensweise und eine defensive KI eher bevorzugen...

Anstelle der harten Grenzen auf Schmieden kann man auch vergangene Spielzeit betrachten...
Eine einfache KI würde von Anfang an alle Gebäude zu 100% besetzen.
Eine mittlere KI würde nach einer halben Stunde ihr Gebäude zu 100% besetzen (längere Expansionsphase am Anfang).
Und eine schwere KI könnte nach 30 Minuten die Gebäude in mittlerer Entfernung zur Grenze voll besetzen und nach einer Stunde die Gebäude im Inland voll besetzen (längere Expansionsphase am

Zusätzlich kann man auch die für einen Angriff zur Verfügung stehenden Soldaten senken (Militäreinstellung), aber das kann dazu führen, dass die KI gar nicht mehr angreift, was auch nicht wünschenswert wäre, daher habe ich diesen Ansatz bereits verworfen.

Sofern das DefensiveFlag gesetzt ist greifen die KIs nur an, wenn sie einen Prozentsatz der eingesetzten Einheiten sofort in den Militärgebäuden ersetzen können (mindestens diese Anzahl Soldaten noch im Lager zur Verfügung steht).
Einfach: 100%
Mittel: 80%
Schwer: 60%

Wie mir gestern an einem Spiel aufgefallen ist, spammt die KI Militärgebäude scheinbar unabhängig davon, ob sie diese auch besetzen kann oder nicht. Das wäre natürlich ein Problem auf größeren Karten (z.B.: Europa), da es mehr Möglichkeiten gibt, neue Militärgebäude zu bauen, als diese voll zu besetzen. Dementsprechend stünden einer KI nie genug Militäreinheiten zur Verfügung, um einen Angriff zu starten.

In besagter Europa Karte hat der Wikinger im Norden aber immerhin 7 Schmelzen und 11 Schmieden errichtet, was einen eindrucksvollen Zuwachs an militärischer Schlagkraft zur Schau gestellt hat. Respekt dafür!


Nochmal zur Vollbesetzung der Gebäude: Ich weiß, dass menschliche Spieler das nicht tun und es im Multiplayer schnell zu einem großen Gemetzel an der Grenze kommt. Aber so spiele ich und meine Leute das Spiel zum Beispiel nicht. ;-) Wir spielen eh nur gegen die KI und dann auch eher vorsichtig und zurückhaltend. Es geht uns mehr ums Siedeln... ;-)

Daher werden unsere Gebäude im Hinterland im Laufe des Spiels meist voll besetzt... Ist halt auch für uns etwas gemächlicher. ;-)


Weitere mögliche KI Typen (skizziert):
- WirtschaftsKI (Militäreinstellung für Einheiten für den Angriff bei 20% > seltene Angriffe, aber keine Begrenzung auf den Nachschub & eventuell Anpassung der BauKI (der Wikinger in der Europakarte hatte ewig viel freies Land, welches ungenutzt rum lag. Wenn ich mich recht erinnere werden die benötigten Gebäude in Abhängigkeit der verfügbaren Minenplätze getriggert. Mehr Minen = mehr Militärproduktion und mehr Nahrungsproduktion) Bei einer WirtschaftsKI müsste man eventuell einfach mal den Zähler für aktuelle Minen um +X bei der Berechnung des Nahrungsbedarfs anheben. Das würde dann zu einer Überproduktion von Nahrung führen, sähe aber deutlich nach einer WirtschaftsKI aus. Sofern man irgendwann mal mit einer KI handeln kann, wäre die WirtschaftsKI auch nicht schlecht, da sie einen Überschuss zum Handel mit oder zur Abgabe an menschliche Spieler hätte. Und das Waren verschicken ist ja bereits implementiert...)
- HilfsKI (spielt ganz normal, ist aber darauf ausgelegt, einem Teampartner zu helfen und schickt von Zeit zu Zeit Ressourcen per Esel. (Es wäre übrigens cool, wenn die Esel nach dem Handel wieder nach Hause zurückkehren würden) (gibt es eigentlich bereits Handel mit Schiff?) Kann die KI den Warenbestand eines anderen Spielers auslesen? Dann wäre es zum Beispiel für diese KI möglich den Werkzeugvorrat eines Spielers aufzufüllen, in dem sie immer ein oder zwei Werkzeuge rüberschickt, wenn dort der Vorrat auf 0 gesunken ist. Man kann auch Nahrungs- oder Grundrohstoffe wie Getreide betrachten).

---
http://www.danta-spiele.de

"Der Mensch spielt nur, wo er in voller Bedeutung des Wortes Mensch ist, und er ist nur da ganz Mensch, wo er spielt." - Schiller




Feel free to post in English!

Antwort schreiben

Username:
Security code:
Text:

   
  Convert smilies like :), ;) etc. into small graphics?
  Convert WWW-addresses into clickable links?
  Soll Boardcode in ihrer Nachricht aktiviert werden?