PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Developer Diary [Hearts of Iron IV]Entwicklertagebuch 54 - KI



Marvin
30.04.16, 09:43
https://forum.paradoxplaza.com/forum/index.php?threads/hearts-of-iron-iv-development-diary-54-ai.924168/

Zwei große KI-Probleme in HoI IV
1: In einem dynamischen Sandbox-Spiel historische Plausibilität bewahren
2: Die Ausführung der Schlachtpläne soll sich vorteilhaft anfühlen

Für den ersten Punkt gibt es ein paar Sachen, die die KI von HoI von anderen PDX Titeln unterscheidet. Da das Spiel chronologisch deutlich kompakter und die historischen Hintergründe noch nicht so lange her sind, erwarten Spieler verschiedene Dinge von der HoI KI. Hearts of Iron IV ist zwar mehr Sandbox-orientiert als der dritte Teil, ist es doch historisch und die verschiedenen Nationen hatten Gründe für die Entscheidungen, die sie getroffen haben. Das Problem war es, eine KI zu entwerfen, die dynamisch auf neue Situationen in einer Art und Weise reagierien kann, die Sinn ergibt, egal wie historisch die Umstände sind.

Als Lösung haben wir eine dynamische KI als Grundlage und diverse Spielmechaniken, die Nationen in ihre historische Richtung drängen. Ein wichtiger Faktor hierfür ist natürlich das Fokus-System. Damit lenken wir sowohl Spieler als auch die KI vor und während dem großen Krieg. Die KI wählt ihre Foki entweder fest gescripted, wenn das Spiel historisch gespielt wird, das ist voll modbar aber es gibt auch eine Einstellung für die historischen Skripte. Ist dieser Modus nicht aktiv, wählt die KI ihre Foki aus scripted weights und einem dynamischen System abhängig von der Situation der Nation.

Das dynamische System mit scripted weights bestimmt alle Teile der KI. Neben den 200 einstellbaren Werten, die verschiedene Aspekte der KI bestimmt, gibt es noch das Triggersystem aus dem Modding Entwicklertagebuch. Es gibt praktisch keine Aspekte der KI die man nicht durch Defines, Anpassung der weights oder beidem beeinflussen kann.

Z.B. die Wahrscheinlichkeit, dass Österreich den Anschluss akzeptiert:


ai_chance = {
base = 30
modifier = {
add = -25
GER = { has_army_size = { size < 20 } }
}
modifier = {
factor = 10
GER = { has_army_size = { size > 19 } }
}
}


Deutsche Reaktion, wenn sie ablehnen.


anschluss_rejected = {

# Conditions
enable = {
tag = GER
has_completed_focus = GER_anschluss
country_exists = AUS
}
abort = {
NOT = {
country_exists = AUS
}
}

# Modification if strategy is enabled
ai_strategy = {
type = antagonize
id = "AUS"
value = 300
}
}


Außerdem gibt es für die Beziehung zwischen Nationen noch Modifikatoren. Diese können via Minister, Gesetzer oder Anführer-Eigenschaften eingesetzt werden. Das heißt, dass die Interaktionen zwischen Nationen nicht nur von der Ideologie sondern auch von den Männern an der Macht bestimmt. Eine solche Eigenschaft könnte z.B. so aussehen.



warrior_code = {
random = no
ai_call_ally_desire_factor = -40
}


Or this:


warmonger = {
random = no
ai_focus_aggressive_factor = 0.5
}


Es gibt für Modder auch die Möglichkeit für bestimmte Nationen höheren Fokus auf bestimmte Division zu legen. Außerdem kann das dynamische System z.B. auch von selbst passende Divisionen für überschüssige Ausrüstung anlegen.
Auch die Bewertung von verschiedenen Friedensoptionen ist sowohl abhängig von Nation als auch Ideologie voll skriptbar. Vielen Dank hierfür an Groogy.


Die zweite Herausforderung, die Schlachtpläne. Wenn man der KI die Kontrolle über ein System überlässt, muss man sich immer Gedanken über dessen Schwächen machen. Wenn eine KI seine eigene Truppenaufstellung versaut, wird nicht viel passieren, läuft aber was mit den Einheiten des Spielers schief, führt das zu Frustration.
Dies soll vor allem über das Design geregelt werden, das System soll keinen "Gewinne Krieg" Knopf darstellen, sondern ein Werkzeug sein um große ARmeen zu organisieren ohne sich um jedes Detail kümmern zu müssen. Sowohl die KI als auch der Spieler werden kritische Operationen leiten, aber sie müssen sich keine Gedanken über offensichtliche Situationen machen und haben damit mehr Möglichkeiten sich um größere Armeen und Operationen zu kümmern. Die internen Abläufe der KI sind allgemein simpler gehalten und haben damit weniger Punkte an denen etwas schief gehen kann. Es war harte Arbeit, aber hat sich gelohnt!

Lasst uns einen Blick in den Kopf der KI werfen.
Hier hat das Deutsche gerade Polen den Krieg erklärt. Der Tooltip beschreibt die allgemeine Einsetllung ggü andere Nationen. Das Deutsche Reich mag seine benachbarten Demokratien nicht, aber unterstützt seine faschistischen Fraktionsmitglieder.

https://forum.paradoxplaza.com/forum/index.php?attachments/dd1-jpg.173986/

Die Niederlande fühlen sich vom Deutschen Reich bedroht und wollen es entweder geschwächt sehen oder sein Freund sein, haben aber auf jeden Fall Angst sie direkt verägern.

https://forum.paradoxplaza.com/forum/index.php?attachments/dd2-jpg.173987/

Wenn wir nach Englands Einstellung ggü den Niederlanden schauen, sehen wir, dass sie sie beschützen wollen.

https://forum.paradoxplaza.com/forum/index.php?attachments/dd3-jpg.173988/

Da England aber gerade dem Deutschen Reich den Krieg erklärt hat, wollen die Niederlande nicht wirklich den Alliierten beitreten, da das die Gefahr seitens des Deutschen Reiches erhöhen würde.

https://forum.paradoxplaza.com/forum/index.php?attachments/dd4-jpg.173989/

Und am Ende schauen wir uns die Befehlskette der KI an. Man muss hier bedenken, dass viele Gruppen sich die Truppen teilen und am Ened mit weniger als sie wollen oder brauchen auskommen müssen, wenn andere Gruppen eine höhere Priorität haben.

https://forum.paradoxplaza.com/forum/index.php?attachments/dd5-jpg.173990/

Welche Arten von Truppen in welcher Reihenfolge enden ist ebenso dynamisch, aber ich h abe keinen tollen Tooltip zum Zeigen dazu.

Der stolzeste Moment eines jeden KI-Programmierers ist es, wenn die eigene KI einen auf unerwartete Weise besiegt. Ich hatte solch eine Moment vor zwei Wochen als das Deutsche Reich. Ich hatte ohne Probleme durch überlegene Plannung und Bewaffnung Westeuropa übernommen. Da ich England vor dem Ostfeldzug erobern wollte, habe ich meine Küste befestigt, falls die Alliierten D-Day Ambitionen hatten, auch die Grenze zur SU wurde befestigt und der Rest meiner Ressourcen wurde für den Aufbau einer Marine-Invasion verwendet. Dann schafften es England und die USA sowohl die italienische als auch die spanische Küstenverteidigung zu überwältigen und einen Brückenkopf zu errichten. Bis meine Truppen zur Unterstützung ankamen hatten USA & UK beretis deutlich mehr Truppen stationiert und überwältigten auch meine Truppen. Einer von Beiden wäre noch gegangen, aber beide zusammen mit einem ordentlichen Brückenkopf waren zuviel.
Abgesehen davon sind meine besten Tage wenn Da9l (HoI4 Streams) mir erzählt, dass die KI ihn besiegt oder zumindest zum Ändern seiner Pläne gezwungen habe.

Ein paar allgemeine Infos:
Es gibt kein "Hard Coding" außerhalb der Skripts. Es gibt nirgends Code-zeilen nach dem Prinzip "Ist Nation X, tue Y"
Die dynamische KI cheatet nicht. Sie nutzen dieselben Infos wie der Spieler, inklusiver Schätzungen feindlicher Truppenstärke basierend auf Geheimdienstinfos.
Mit Ausnahme dem Fördern von Parteibeliebtheit, gibt es kein Feature, dass die KI nicht nutzen darf. Dies ist mehr ein Sandbox-Feature für den Spieler. Wir mussten sie auch in Sachen Coups anzetteln begrenzen.

Vielen Dank hierbei auch an Wiz, unserem KI-Chef und Groogy der immer aushalf, wenn die Arbeit zu viel für eine Person wurde. Außerdem möchte ich mich bei allen Beta-Testern bedanken, die viel Feedback und Unterstützung geliefert haben.