Einführende Beispiele - Mehr-Wellen-Optimierung

Dieses Kapitel enthält einige einführende Beispiele zu Mehr-Wellen-Optimierung. Sie unterscheidet sich nicht grundlegend von der 1-Wellen-Optimierung, hat jedoch im Allgemeinen mehr Freiheitsgrade (weil mehr Generäle und Truppenarten). Daher sind potentiell die Rechenzeiten von Centurion höher. Deine Erfahrungen aus der 1-Wellen-Optimierung können hier hilfreich sein.

## Beispiel MWO-1: Vorwelle und Hauptwelle

Wir benutzen das Lager Betrog#28, das ist das Lager „hinter dem Teich“ im ersten Sektor des Betrogenen Schneiders. Das Lager ist unverhältnismäßig teuer, wenn man es in einer einzigen Welle angeht:

αO-C v1.3 18-Apr-2019 14:15:26 (PV 24/05/2018 in-game changes)
14R;203M;3S;50K;GM ==> 2,7EP/PLVMix, 723,31PLVMix, 30s Dauer, [703,5-723,3-750]PLV, PlrDd 14R;[197-202,2-203]M;[0-0,2-3]S, 1.980EP
…
-Camp=Betrog#28 -Attack=\*R;\*M;\*S;\*E;\*C;\*B;\*LB;\*AB;\*K;GM

Man verliert also über 202M. Wir wollen uns eine Vorwelle mit einem Veteran gönnen, der mit Bogenschützen bestückt werden soll. Bei der Hauptwelle mit Generalmajor gehen wir davon aus, dass wir nur noch R, M und K benötigen werden. Wieviele von all diesen… da fragen wir Centurion. Wähle „Job  Optimierung…“ und fülle den Dialog wie im Bild zu sehen:

Benutze die blauen Knöpfe, um zwei Tabs für zwei Wellen einzurichten, die erste für einen Vet, die zweite für einen GM. Das Fenster ist für beliebig viele Wellen konzipiert. Man kann sie einrichten, verschieben, ändern löschen. Wie üblich lässt sich in der Command Line das Gesamtergebnis der Konfiguration beobachten.
Diesen Auftrag schicken wir nun los und warten, bis er beendet ist. Bei Mehr-Wellen-Optimierung kann das manchmal dauern. Jede einzelne Simulation einer Angriffskonfiguration ist komplexer, weil sie 2 Wellen enthält und oft gibt es auch mehr Möglichkeiten, weil jede Welle eine individuelle Truppenkonfiguration erhalten muss. Wir haben in unserem Beispiel aber nur 4 Truppenarten (BRMK). In höchstens einigen Minuten sollte das Resultat vorliegen:

αO-C v1.3 18-Apr-2019 14:18:12 (PV 24/05/2018 in-game changes)
138B;Vet && 172R;4M;94K;GM ==> 6,6EP/PLVMix, 301,62PLVMix, [30-30,5-40]s Dauer, [295,1-301,6-317,1]PLV, PlrDd [164-170,1-172]R;[0-0,1-4]M;138B;1Vet, 1.980EP
…
-Camp=Betrog#28 -Attack=\*B;Vet -Attack=\*R;\*M;\*K;GM

Wie wir sehen verlieren wir hier im Schnitt 170,1R, 138B und 0,1M. Das ist sicherlich deutlich günstiger als die 202M in der Einzelwelle vorher. Der PLVMix ist von 723,31 gesunken auf jetzt 301,62, was diese Aussage bestätigt.
Wir wissen aber nun auch genau, wieviele B wir in der ersten Welle benötigen… nämlich nicht 250, wie der Veteran aufnehmen könnte. Optimal ist es, nur 138B zu nehmen. Da könnte man auch in Betracht ziehen, einen Tavernengeneral oder einen Kampfgestählten zu nehmen… falls man den Veteran gleich noch woanders braucht anstatt ihn ins Lazarett zu schicken.

## Beispiel MWO-2: Smart Lock

Dieser Abschnitt präsentiert ein Beispiel für einen sogenannten Smart Lock. Das ist ein Lock mit mehr als einer Welle, wobei die erste Welle zunächst die Truppen im Lager reduziert, damit die zweite Welle es nicht so schwer hat, schön lange zu kämpfen (also zu locken). Der Unterschied zum Vario Lock besteht darin, dass man nicht erst die erste Welle schickt, sieht was übrig bleibt und entsprechend die zweite Welle für den Lock bestückt, sondern dass man beide Generäle bestückt und kurz hintereinander losschickt, sodass die gesamte entstehende Lockzeit die Summe aus beiden Generälen ist.
Wenn Centurion einen Smart Lock optimiert, so ist dabei das Ziel, dass die minimale Kampfdauer eine vorgegebene Mindestlänge erreicht, und von allen Varianten die das tun diejenige gesucht wird, bei der man am wenigsten Material verliert. Dabei zählt die letzte Welle nicht mit, denn wir gehen ja davon aus, dass die letzte Welle als Lock hält und wir die Truppen dort nicht verlieren.
Im Beispiel unten verwenden wir das Lager Wissen#58, eines der Lager auf dem Plateau der Bibliothek. Wenn man dieses Lager als einfachen (1-Wellen) Lock optimiert, bekommt man eine Kampfdauer von 60 Sekunden:

αO-C v1.3 18-Apr-2019 14:29:22 (PV 24/05/2018 in-game changes)
152BSK;Tav ==> 60s Dauer, 1.337,6PLV, PlrDd 152BSK;1Tav, [945-1.003,4-1.050]EP, EnmDd [27-28,7-30]Sa
-Camp=Wissen#58 -Objective=Lock -Attack=\*SK;\*BSK;\*RIT;\*SS;\*GSS;\*BSS;\*BEL;Tav

Daran orientieren wir uns jetzt. Diese Zeit wollen wir verbessern. Ein Smart Lock wird über das Fenster für Optimierung definiert: „Job  Optimierung…“:

Wir haben zunächst 2 Wellen mit Tav definiert. Die erste Welle besteht nur aus \*C, die werden geopfert um das Lager so weit zu reduzieren, dass die zweite Welle schön lange durchhält. Die zweite Welle soll durchhalten und kann deshalb alle Truppenarten aufnehmen. Im Feld „Ziel“ haben wir „SmartLock“ eingestellt und Centurion so mitgeteilt, was wir vorhaben. Zusätzlich müssen wir noch vorgeben, wie lang die gesamte Mindestdauer sein soll:
Das tun wir mit der Bedingung „Dauer (Min)“, indem wir ihren Wert auf 100-999 Sekunden festlegen. Damit verbieten wir alle Ergebnisse, deren Mindestkampfzeit weniger als 100s beträgt. Wir wollen also um 40s besser sein als der „einfache“ Lock. Unter all den Varianten, die das erfüllen, wird Centurion jetzt diejenige suchen, die am wenigsten Kavallerie in der 1. Welle verliert. Und los!

αO-C v1.3 18-Apr-2019 14:37:23 (PV 24/05/2018 in-game changes)
32C;Tav && 200BSK;Tav ==> 115,2PLVAvgN1, 100s Dauer, 1.875,2PLV, PlrDd 32C;200BSK;2Tav, [1.923-2.038,9-2.124]EP, EnmDd [7-8,8-10]Du;[49-51,7-54]Sa
…
-Camp=Wissen#58 -Objective=SmartLock -Attack=\*C;Tav -Attack=\*SK;\*BSK;\*RIT;\*SS;\*GSS;\*BSS;\*BEL;Tav -Conditions=100-999DurationMin

In der Kommandozeile erkennen wir die beiden Klauseln für die Objective und die Conditions wieder. Sie sind blau markiert. Die grüne Markierung zeigt die Kampfzeit der Lösung an. Wir haben insgesamt eine Lockzeit von 100s. Das ist das Resultat des Einsatzes (und Verlusts) von 32C. Man kann nun bewerten, ob man das tun möchte oder eine andere Vorgehensweise sucht.
Man sieht auch, dass Centurion mit den 100s unsere Bedingung voll ausgeschöpft hat. Kürzer hätte der Kampf nicht laufen dürfen, länger schon. Das wird aber im Allgemeinen so rauskommen: Centurion minimiert die Verluste durch die 1. Welle. Weniger Pferde heißt auch weniger Reduzierung der Truppen im Lager durch die 1. Welle und damit möglicherweise kürzere Laufzeit der 2. Welle weil das Mehr an Gegnern diese Welle jetzt schneller besiegt.
Nehmen wir an wir benötigen eine Kampfzeit von 120s! Analog zu oben setzen wir diesen Auftrag ab und erhalten:

αO-C v1.3 18-Apr-2019 14:41:12 (PV 24/05/2018 in-game changes)
109C;Tav && 197BSK;Tav ==> 392,4PLVAvgN1, 120s Dauer, 2.126PLV, PlrDd 109C;197BSK;2Tav, [2.819-2.982,4-3.168]EP, EnmDd [28-30,7-33]Du;[59-62,4-66]Sa
…
-Camp=Wissen#58 -Objective=SmartLock -Attack=\*C;Tav -Attack=\*SK;\*BSK;\*RIT;\*SS;\*GSS;\*BSS;\*BEL;Tav -Conditions=120-999DurationMin

Auch das hat geklappt… wir setzen jetzt 109C ein statt 32C und verlieren diese natürlich auch. Dafür hält die Sache aber nun 120s.
Es bleibt noch anzumerken, dass man Smart Locks, wie auch Locks, am besten mit sehr hohen Iterationszahlen rechnet. Die standardmäßigen 1000 sind hier wirklich das untere Limit! Wenn ich die Zeit habe, gehe ich manchmal bis 10000 hoch. Das gibt einfach mehr Sicherheit, dass in der Spielpraxis nicht doch einmal ein Kampf¬verlauf erscheint, der bei den 1000 Iterationen nicht dabei war…

## Beispiel MWO-3: Verlustfreie letzte Welle

Bei der Quest „Insignien einer Rächerin“ wird folgende Aufgabe verlangt: „Gewinnt mindestens 1 Kampf (Kämpfe), ohne eine Truppe zu verlieren.“ Centurion’s Feature „LosslessLastWave“ soll dabei helfen, für ein gewähltes Lager einen Angriff zu erhalten, mit dem die Aufgabe erfüllt werden kann.
Es gibt zwar Lager, die man generell mit nur einer Welle verlustfrei machen kann. Aber vielleicht hat man ja grade nicht den richtigen General, die richtigen Truppen oder das richtige Abenteuer dafür bei der Hand!
Es kommt nun nicht darauf an, ein ganzes Lager verlustfrei zu beseitigen, sondern nur einen Kampf, d.h. die letzte Welle verlustfrei genügt. Der Optimierungsauftrag an Centurion soll dabei so lauten:
Für ein gegebenes Lager und zwei gegebene Generäle (1. und 2. Welle) ermittle einen Angriff so, dass die 2. Welle verlustfrei ist und die 1. Welle möglichst wenige Verluste einfährt.
Dabei muss Centurion den Angriff recht gut austarieren. Wir wollen nicht mit einer übermächtigen 1. Welle angreifen, die zu viel Verluste erzeugt oder gar selbst schon das Lager besiegt. Die 1. Welle soll auch nicht zu schwach sein, weil dann zu viele Gegner im Lager verbleiben und die 2. Welle vielleicht nicht mehr verlustfrei sein kann.
Beispiel: Wir wählen das Lager #0 aus dem AT der schwarzen Ritter. Dieses Lager ist mit der Mary Christmas alleine nicht verlustfrei zu besiegen. Schickt man aber eine schüchterne Vorwelle mit Tav, so gibt es das hier:

αO-C v1.3 18-Apr-2019 14:45:51 (PV 24/05/2018 in-game changes)
187B;Tav && 196C;MXM ==> 177,7+0=177,7PLVBeforeTroopRecovery, 177,65PLVAvgN1, 177,7PLV, PlrDd 187B;1Tav, [1.424-1.430,4-1.444]EP
…
-Camp=Ritter#0 -Objective=LosslessLastWave -Attack=\*B;Tav -Attack=\*C;MXM

In grün ist dabei die Stelle markiert an der man sieht, dass keine Verluste in der 2. Welle auftreten. Dieses Resultat wurde so optimiert („-Objective=Lossless-Last¬Wave“), dass man auch davon ausgehen kann, dass die 187B der ersten Welle nicht unterschritten werden sollten… sonst geht die zweite Welle nicht mehr verlustfrei aus. Die entsprechende Definition in Centurion dazu sieht so aus:

In die erste Welle stecke man nur Truppen, die man auch bereit ist komplett zu verlieren. Diese Truppen sollten in der Lage sein, möglichst viele der Gegner auszuschalten. In die zweite Welle stecke man starke Truppen, die den verbliebenen Rest verlustfrei meistern können. Erstschlageinheiten bieten sich an.
Wie bei Locks ist es auch hier zu empfehlen, nicht mit der Iterationszahl runter zu gehen sondern eher hoch.