Dies ist meine Erfahrung aus der Implementierung einer MTG-KI .
Wenn die KI von Anfang an nicht berücksichtigt wird, kann es schwierig sein, sie später hinzuzufügen.
Ihre Engine benötigt eine Möglichkeit, den Spielstatus zu kopieren. Es braucht auch eine Möglichkeit, eine Bewegung schnell rückgängig zu machen, damit der Suchbaum effizient generiert werden kann.
Jeder KI-Thread sollte mit einer eigenen Kopie des Spiels arbeiten.
Wenn der Computer eine Bewegung ausführt, simuliert er mögliche Ergebnisse des Spiels, indem er die Auswirkungen jeder möglichen Bewegung simuliert.
Der grundlegende Algorithmus ist:
Erstellen Sie eine Liste gültiger Züge (Zauber, Fähigkeiten, Pass ...). Führen Sie jeden Zug aus, um einen neuen Status zu generieren, und erstellen Sie dann eine neue Liste gültiger Züge. Wiederholen Sie diesen Vorgang, bis das Spiel endet oder bis Sie eine bestimmte Tiefe erreicht haben. Denken Sie daran, dass Sie das Spiel für beide Spieler simulieren.
Dieser Prozess generiert einen Baum. Jeder Pfad im Baum repräsentiert eine gültige Abfolge von Aktionen im Spiel. Weisen Sie jedem Blattknoten dieses Baums eine Punktzahl zu. Diese Punktzahl sollte ein Indikator dafür sein, welcher Spieler eine größere Chance hat, das Spiel zu gewinnen. Verwenden Sie den Minimax- Algorithmus, um diese Punktzahl an die Wurzel des Baums weiterzugeben.
Jeder Zug aus der ursprünglichen Liste hat jetzt eine Punktzahl. Wählen Sie den besten Zug aus.
Leider ist MTG ziemlich kompliziert und der grundlegende Algorithmus wird nicht sehr gut funktionieren ...
Dinge zu verbessern:
- Manafähigkeiten (z. B. Landtippen) müssen unterschiedlich behandelt werden.
- Deklarieren Sie nicht alle möglichen Kombinationen von Angreifern und Blockern, sondern verwenden Sie einige Heuristiken für den schnellen Kampf.
- Zaubersprüche, für die Ziele erforderlich sind, beeinträchtigen die Leistung. Verwenden Sie Heuristiken, um nur "gute Ziele" auszuwählen. (Jede Karte, für die Ziele erforderlich sind, sollte einen Rangfolgenalgorithmus haben.)
- Zuweisen von Zeitregeln zu jeder Karte, um zu begrenzen, wann KI in Betracht ziehen kann, sie zu spielen.
- Wenn eine Karte X hat, sollte sie wissen, wie man einen guten X-Wert berechnet, und dies nur versuchen, wenn sie gespielt wird.
- Wenn eine Karte wiederholt aktiviert werden kann, berechnen Sie mithilfe eines Algorithmus, wie oft und tun Sie dies als einen Zug.
- Erzwingen Sie nur eine Option, wenn Sie Zaubersprüche mit mehreren spielen, basierend auf dem Spielstatus.
Hier ist eine Kartenimplementierung, die einige Heuristiken von oben verwendet:
public class LightningBolt : CardTemplateSource
{
public override IEnumerable<CardTemplate> GetCards()
{
yield return Card
.Named("Lightning Bolt")
.ManaCost("{R}")
.Type("Instant")
.Text("Lightning Bolt deals 3 damage to target creature or player.")
.Cast(p =>
{
p.Effect = () => new DealDamageToTargets(3);
p.TargetSelector.AddEffect(trg => trg.Is.CreatureOrPlayer().On.Battlefield());
p.TargetingRule(new EffectDealDamage(3));
p.TimingRule(new TargetRemovalTimingRule(removalTag: EffectTag.DealDamage));
});
}
}
1) Eine Werteheuristik . Sie benötigen eine Heuristik, mit der die KI bewerten kann, wie "gut" ein bestimmter Spielstatus ist. In MTG könnte beispielsweise eine sehr einfache Heuristik 2 Punkte für jede Karte, die Sie im Spiel haben, und 1 Punkt für jeden Lebenspunkt des Feindes zuweisen. Eines der Ziele der KI wäre es also, alle anderen Dinge gleich zu spielen so viele Karten wie möglich, aber es wäre auch bereit, jede Karte zu opfern, um dem Feind 2 oder mehr Schaden zuzufügen. Beachten Sie, dass diese Heuristik wahrscheinlich vom Deck im Spiel abhängt. Bei Mill-Decks müssen Sie beispielsweise die Deckgröße des Gegners als primäre Punktquelle einbeziehen.
2) Lookahead bewegen . Die Spielregeln beschreiben alle legalen Züge, die einem Spieler zur Verfügung stehen, einschließlich des Ziehens / Abwerfens / Platzierens / Aktivierens einer Karte. Jeder Zug kann anhand der Heuristik bewertet werden, die Sie in Schritt 1 erstellt haben. Dies liest jedoch nur einen Zug. Erfolgreichere Strategien sollten den nachfolgenden Zug des Gegners und den Zug der KI danach berücksichtigen und so weiter. Normalerweise verwenden Sie eine Minimax- Strategie.
3) Weitere Optimierung Die naive Bewegungssuche nimmt exponentiell zu, je weiter Sie suchen. Mit einer Technik ähnlich der Alpha / Beta-Bereinigung bewerten Sie keine wirklich schlechten Pfade. Wenn Sie herausfinden können, dass ein Spielstatus streng von einem anderen Spielstatus dominiert wird, müssen Sie diesen Zweig des Bewegungsbaums nicht weiter nach unten schauen. Auch wenn die Heuristik einen allgemeinen "Orientierungssinn" vermittelt, ist das Ergebnis bestimmter Kartenkombinationen möglicherweise nicht ersichtlich. Insbesondere bei Verwendung von Themen-Decks können Sie eine Liste mit leistungsstarken Combos führen, insbesondere Gambits, die mehrere Schritte ausführen, bevor die Heuristik den Wert der Combo erkennt.
quelle
Magie: Die Versammlungsduelle der Planeswalker haben eine KI, die mögliche zukünftige Spielzustände simuliert. Unterschiedliche KI-Schwierigkeiten können unterschiedlich lange dauern, um Vorabdrehungen zu planen. Zusätzlich werden die Decks einfacher KI-Gegner so sortiert, dass seltenere Karten eher am unteren Rand des Decks erscheinen.
Hier ist ein ausführlicher Artikel mit Bildern (!):
http://www.wizards.com/Magic/Magazine/Article.aspx?x=mtg/daily/feature/44
quelle
Nun, Sie müssen verschiedene Dinge tun:
Das sind die Grundlagen. Natürlich kann es variieren, wie das Spiel selbst ist.
quelle