Teachers Paradise School Supplies Teacher Resources Free Encyclopedia
Teachers Paradise FREE Teaching Resources
Home Arts Crafts Audio Visual Equipment Office Supplies Teacher Resources
Hauptseite | See live article

Minimax-Algorithmus

[vi[pl:Algorytm min-max]]

Der Minimax-Algorithmus ist ein Algorithmus zur Ermittlung der optimalen Spielstrategie für Spiele bei denen zwei gegnerische Spieler abwechselnd Züge ausführen (z.B. Schach, Go, Reversi, Dame, Mühle oder Vier Gewinnt).

Im Gegensatz zu Würfelspielen sind die genannten Spiele nicht vom Zufall abhängig, im Gegensatz zu Karten- und Ratespielen sind sie offen, d.h. in jeder Spielsituation sind jedem der beiden Spieler alle Zugmöglichkeiten des jeweiligen Gegenspielers bekannt.

Aus diesem Grund läßt sich die optimale Strategie für das jeweilige Spiel mit dem Minimax-Verfahren ermitteln. Die optimale Strategie ist dann gefunden, wenn sie zum (bestmöglichen) Ergebnis eines Spielers führt, wenn man von optimaler Spielweise des Gegner ausgeht. Für einige Spiele, wie das so genannte Nimm-Spiel, lässt sich eine optimale Strategie auch direkt ohne Minimax berechnen.

Table of contents
1 Algorithmus
2 Bewertungsfunktion
3 Suchbaum-Beispiel
4 Anmerkungen
5 Pseudocode

Algorithmus

Der Algorithmus funktioniert folgendermaßen:

Bewertungsfunktion

Eine ideale Bewertungsfunktion ordnet einer Stellung den Wert +1 zu, wenn Spieler A gewinnt und den Wert -1, wenn Spieler B gewinnt und 0 bei Unentschieden. Kann man von sämtlichen Spielpositionen den Suchbaum bis zur maximalen Tiefe aufbauen (bis zur Endstellung, wo man sieht, wer gewinnt), so spielt der Algorithmus ein perfektes Spiel. Allerdings ist in der Praxis der vollständige Aufbau eines Suchbaums nur bei sehr einfachen Spielen wie Tic-Tac-Toe möglich.

Bei fast allen anderen Spielen ist dies zu rechenaufwendig. Deshalb begnügt man sich damit, den Suchbaum nur bis zu einer vorgegebenen Suchtiefe aufzubauen. Die Bewertungsfunktion wird modifiziert, sehr gute Spielpositionen für A erhalten sehr hohe Werte, sehr gute Spielpositionen für B erhalten sehr niedrige Werte. Zur Ermittlung der Werte bedient man sich Heuristiken zur Schätzung.

Die steigende Rechenleistung von Computern und bessere Programme haben mittlerweile dazu geführt, dass selbst bei so komplexen Spielen wie Schach heutzutage die meisten Menschen ohne Mühe vom Computer geschlagen werden können. Die dabei verwendete Strategie beruht im Wesentlichen auf dem Minmax-Algorithmus.

Suchbaum-Beispiel


Das Bild oben zeigt einen einfachen Baum mit Suchtiefe 3.

Die Knoten der Ebenen 1 und 3 entsprechen Spielsituationen, in denen Spieler A am Zug ist, d.h. hier wird jeweils der Max-Wert der untergeordneten Knoten ermittelt.

Die Knoten der Ebene2 entsprechen Spielsituationen, in denen Spieler B am Zug ist, d.h. hier wird jeweils der Min-Wert der untergeordneten Knoten ermittelt.

Auf der Blätterebene werden die Knotenwerte jeweils über die Bewertungsfunktion ermittelt.

Im Bild sind Kanten ( = Spielzüge ), die zum Max-Wert führen, rot gekennzeichnet. Kanten, die zum Min-Wert führen, sind blau gekennzeichnet.

Anmerkungen

Der Minimax-Algorithmus benötigt einerseits abhängig von der Suchtiefe extrem viel Zeit, andererseits steigt in der Regel bei höherer Suchtiefe auch die Qualität des Suchergebnisses.

Es existieren daher verschiedenen optimierte Varianten, z.B.

Pseudocode

Hauptprogramm (Auszug):
  var doNext : number
  dummy := maxWert ( gewünschte suchTiefe )
  Zug doNext ausführen
function maxWert ( restTiefe ) returns number
var ermittelt, zugWert : number
begin
  ermittelt := - unendlich
  für alle möglichen Züge
    Zug simulieren
    if restTiefe <= 1 or keineFolgezügeMehrMöglich
    then zugWert := bewertungsFunktion
    else zugWert := minWert ( restTiefe - 1 )
    Zug-Simulation zurücksetzen
    if zugWert > ermittelt then begin
      ermittelt := zugWert
      doNext := nummer des Zuges  /* für das Hauptprogramm */
    end
  end
  return ermittelt
end maxWert
function minWert ( restTiefe ) returns number
var ermittelt, zugWert : number
begin
  ermittelt := + unendlich
  für alle möglichen Züge
    Zug simulieren
    if restTiefe <= 1 or keineFolgezügeMehrMöglich
    then zugWert := bewertungsFunktion
    else zugWert := maxWert ( restTiefe - 1 )
    Zug-Simulation zurücksetzen
    if zugWert < ermittelt then ermittelt := zugWert
  end
  return ermittelt
end minWert



Pay for Educational Supplies & Teaching Supplies with Visa, Master Card, American Express, Discover or Paypal.
All trademarks & brands are the property of their respective owners.
Legal Notice 2000-2008 TeachersParadise.com, Inc. All Rights Reserved