Software-Entwurfsmuster

Maximizer

Problem

Oft kommt es vor, dass in einer Menge von Objekten ein maximales Objekt gesucht ist. Beispiels­weise ist unter allen erlaubten Spielzügen der bestmögliche Spielzug gesucht.

Ein entsprechendes Verfahren durchläuft mit einem Iterator alle erlaubten Spielzüge, wertet diese mit einer Bewertungs­funktion evaluate aus und merkt sich jeweils den dabei bisher gefundenen maximalen Wert maxval und den dazu­gehörigen besten Spielzug bestmove.

Die landläufige Inplementation dieses Verfahrens ist folgende:

public Move findMove()
{
    double val, maxval=Double.NEGATIVE_INFINITY;
    Move move, bestmove=null;
    Iterator<Move> it=new MovesIterator();
    while (it.hasNext())
    {
        move=it.next();
        val=evaluate(move);
        if (val>maxval)
        {
            maxval=val;
            bestmove=move;
        }
    }
    return bestmove;
}

 

Klasse Maximizer

Mithilfe einer Klasse Maximizer ist es möglich, eine solche Suche nach dem maximalen Objekt auszulagern und wieder­verwendbar zu machen.

Ein Maximizer mit Typ-Parameter Type hat die Methoden

public void add(double v, Type x)

public double getMaxVal()

public Type getMaxObj()

Mit add wird ein Paar (Zahlenwert, Objekt) eingegeben. Der Maximizer merkt sich stets den eingegebenen größten Zahlenwert und das dazugehörige Objekt. Nach mehreren solcher add-Vorgänge liefert getMaxVal diesen größten Zahlenwert und getMaxObj das dazugehörige Objekt.

 

Unter Verwendung des Maximizers vereinfacht sich das obige Programm dann wie folgt; hier wird ein Maximizer mit Typ-Parameter Move verwendet.

public Move findMove()
{
    Move move;
    Iterator<Move> it=new MovesIterator();
    Maximizer<Move> max=new Maximizer<Move>();
    while (it.hasNext())
    {
        move=it.next();
        max.add(evaluate(move), move);
    }
    return max.getMaxObj();
}

 

Der Vorteil einer solchen Lösung mit einem Maximizer besteht darin, dass der Maximizer

ist.

 

Das Gegenstück zu einem Maximizer ist der Minimizer. Es ist sinnvoll, Maximizer und Minimizer in einem MiniMaximizer zu kombinieren, sodass entweder das Maximum oder das Minimum oder gleichzeitig beides gesucht werden kann.

Implementierungen in ver­schiedenen Programmier­sprachen finden sich unter Basisklassen.

 

Weiter mit:  [Iterator]   oder   [up]

 


H.W. Lang   mail@hwlang.de   Impressum   Datenschutz
Created: 05.11.2006   Updated: 13.03.2023
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden