<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bergsteigeralgorithmus</id>
	<title>Bergsteigeralgorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bergsteigeralgorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bergsteigeralgorithmus&amp;action=history"/>
	<updated>2026-05-31T09:27:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Bergsteigeralgorithmus&amp;diff=190096&amp;oldid=prev</id>
		<title>imported&gt;Rosa Olmos: zeug</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bergsteigeralgorithmus&amp;diff=190096&amp;oldid=prev"/>
		<updated>2025-07-05T10:40:38Z</updated>

		<summary type="html">&lt;p&gt;zeug&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Extrema_example_de.svg|mini|rechts|An einem lokalen Maximum bricht der Algorithmus ab, ohne das globale Maximum gefunden zu haben.]]&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;Bergsteigeralgorithmus&amp;#039;&amp;#039;&amp;#039; ([[englische Sprache|engl.]] &amp;#039;&amp;#039;hill climbing&amp;#039;&amp;#039;) ist ein einfaches, [[Heuristik|heuristisches]] [[Optimierungsverfahren]]. Es besteht dabei eine Analogie zu einem Bergsteiger, der im dichten Nebel den Gipfel sucht und dazu seine Schritte möglichst steil bergauf lenkt. Geht es nach allen Richtungen nur noch nach unten, ist er auf einem Gipfel angekommen. &lt;br /&gt;
&lt;br /&gt;
Ebenso wird im Bergsteigeralgorithmus eine potenzielle Lösung für ein gegebenes Problem Schritt für Schritt verbessert. Dabei wird jeweils eine lokale Veränderung durchgeführt und nur übernommen, wenn der entstandene Lösungskandidat besser geeignet ist. Das Verfahren endet, wenn vom aktuellen Punkt aus keine Verbesserung mehr möglich ist – analog ist der Bergsteiger auf einem Hügel angekommen. Der gefundene Punkt ist im besten Fall das globale Maximum (&amp;#039;&amp;#039;Bergspitze&amp;#039;&amp;#039;) oder nur ein lokales (&amp;#039;&amp;#039;Nebengipfel&amp;#039;&amp;#039;). Der Bergsteigeralgorithmus kann als simpler [[evolutionärer Algorithmus]] aufgefasst werden, wobei es nur ein [[Individuum]], keine [[Rekombination (evolutionärer Algorithmus)|Rekombination]] und eine [[Mutation (evolutionärer Algorithmus)|Mutation]]s-Operation gibt.&lt;br /&gt;
&lt;br /&gt;
Für das Problem der lokalen Maxima gibt es folgende Ansätze:&lt;br /&gt;
* Eine ganze Population von Bergsteigern beginnt an verschiedenen Startpunkten, sodass verschiedene Maxima erklommen werden.&lt;br /&gt;
* Ein lokales Maximum wird durch eine einmalige starke Mutation verlassen, durch abermaliges Bergsteigen kann dann ein anderes Maximum gefunden werden.&lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Implementierung eines Bergsteigeralgorithmus ist im Artikel [[Downhill-Simplex-Verfahren]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Pseudocode-Beispiel ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
function HillClimbing(startNode, evaluate, generateNeighbors, maxIterations):&lt;br /&gt;
    # INITIALISIERUNG&lt;br /&gt;
    # besterKnoten: Speichert den global besten gefundenen Zustand während der gesamten Suche&lt;br /&gt;
    besterKnoten = startNode&lt;br /&gt;
    &lt;br /&gt;
    # besteBewertung: Bewertung des global besten Zustands&lt;br /&gt;
    besteBewertung = evaluate(startNode)&lt;br /&gt;
    &lt;br /&gt;
    # aktuellerKnoten: Der Zustand, von dem aus in dieser Iteration Nachbarn generiert werden&lt;br /&gt;
    aktuellerKnoten = startNode&lt;br /&gt;
    &lt;br /&gt;
    # aktuelleBewertung: Bewertung des aktuellen Zustands (zwischengespeichert zur Vermeidung wiederholter Berechnung)&lt;br /&gt;
    aktuelleBewertung = besteBewertung&lt;br /&gt;
&lt;br /&gt;
    # HAUPTSUCHSCHLEIFE - Maximal maxIterations Durchläufe&lt;br /&gt;
    for i = 1 to maxIterations:&lt;br /&gt;
        # NACHBARGENERIERUNG&lt;br /&gt;
        # Erzeugt alle möglichen Nachfolgezustände des aktuellen Knotens&lt;br /&gt;
        # Die Art der Nachbarn hängt von der Problemdomäne ab (z.B. kleine Änderungen an Parametern)&lt;br /&gt;
        nachbarn = generateNeighbors(aktuellerKnoten)&lt;br /&gt;
        &lt;br /&gt;
        # INITIALISIERUNG DER NACHBARSUCHE&lt;br /&gt;
        besterNachbar = NULL        # Wird auf den besten gefundenen Nachbarn gesetzt&lt;br /&gt;
        # Startwert für Vergleich - wird durch erste bessere Bewertung ersetzt&lt;br /&gt;
        # FÜR MINIMIERUNGSPROBLEME: +INFINITY statt -INFINITY verwenden&lt;br /&gt;
        besteNachbarBewertung = -INFINITY&lt;br /&gt;
&lt;br /&gt;
        # NACHBARN EVALUIEREN&lt;br /&gt;
        # Durchläuft alle generierten Nachbarn, um den besten zu finden&lt;br /&gt;
        for nachbar in nachbarn:&lt;br /&gt;
            # Bewertungsfunktion berechnet die Qualität dieses Nachbarn&lt;br /&gt;
            bewertung = evaluate(nachbar)&lt;br /&gt;
            &lt;br /&gt;
            # VERGLEICH MIT AKTUELL BESTEM NACHBARN&lt;br /&gt;
            # FÜR MINIMIERUNGSPROBLEME: &amp;lt; statt &amp;gt; verwenden&lt;br /&gt;
            if bewertung &amp;gt; besteNachbarBewertung:&lt;br /&gt;
                # Neuen besten Nachbarn gefunden - aktualisieren&lt;br /&gt;
                besterNachbar = nachbar&lt;br /&gt;
                besteNachbarBewertung = bewertung&lt;br /&gt;
&lt;br /&gt;
        # ABBRUCHBEDINGUNG PRÜFEN (Lokales Maximum)&lt;br /&gt;
        # Wenn kein Nachbar besser ist als der aktuelle Zustand:&lt;br /&gt;
        # FÜR MINIMIERUNGSPROBLEME: &amp;gt;= statt &amp;lt;= verwenden&lt;br /&gt;
        if besteNachbarBewertung &amp;lt;= aktuelleBewertung:&lt;br /&gt;
            # Abbruch, da lokales Optimum erreicht&lt;br /&gt;
            # Kein besserer Nachbar in der Nachbarschaft existiert&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
        # BEWEGUNG ZUM NEUEN ZUSTAND&lt;br /&gt;
        # Wechsel zum besten gefundenen Nachbarn&lt;br /&gt;
        aktuellerKnoten = besterNachbar&lt;br /&gt;
        &lt;br /&gt;
        # Bewertung des neuen Zustands speichern (bereits in der Schleife berechnet)&lt;br /&gt;
        aktuelleBewertung = besteNachbarBewertung&lt;br /&gt;
        &lt;br /&gt;
        # GLOBALE BESTWERT-AKTUALISIERUNG&lt;br /&gt;
        # Prüft, ob der neue Zustand besser ist als der bisher global beste&lt;br /&gt;
        # FÜR MINIMIERUNGSPROBLEME: &amp;lt; statt &amp;gt; verwenden&lt;br /&gt;
        if aktuelleBewertung &amp;gt; besteBewertung:&lt;br /&gt;
            # Neuer global bester Zustand gefunden&lt;br /&gt;
            besterKnoten = aktuellerKnoten&lt;br /&gt;
            besteBewertung = aktuelleBewertung&lt;br /&gt;
&lt;br /&gt;
    # ERGEBNISRÜCKABE&lt;br /&gt;
    # Gibt den besten während der gesamten Suche gefundenen Zustand zurück&lt;br /&gt;
    # Dieser kann vom aktuellen Zustand abweichen (z.B. wenn später Pfade schlechter waren)&lt;br /&gt;
    return besterKnoten&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fragestellungen ==&lt;br /&gt;
=== Schrittweite ===&lt;br /&gt;
Existiert eine [[Abstandsfunktion]] auf der [[Definitionsmenge]] D einer [[Funktion (Mathematik)|Funktion]], so stellt sich oft die Frage, wie groß einer der Schritte (von einer Stelle zur nächsten) sein soll, zum Beispiel:&lt;br /&gt;
* immer gleich groß (gleicher Abstand in D)&lt;br /&gt;
* zufällig groß (wird angewendet zur Vermeidung des Festlaufens in lokalen Extrema)&lt;br /&gt;
* kleiner werdend (wenn der Algorithmus erkennt, dass das Optimum in der Nähe sein muss und sich auf dieses konzentrieren muss, z.&amp;amp;nbsp;B. relativ zur Gradientennorm)&lt;br /&gt;
* größer werdend (wenn die Richtung erfolgversprechend erscheint)&lt;br /&gt;
* abhängig vom Individuum&lt;br /&gt;
&lt;br /&gt;
=== Selektionsstrategie ===&lt;br /&gt;
Wann soll die Selektion auf einzelne Bergsteiger angewandt werden?&lt;br /&gt;
* nach jedem Schritt&lt;br /&gt;
* nach jedem Bergauf-Schritt&lt;br /&gt;
* wenn ein [[lokales Maximum]] erreicht wurde&lt;br /&gt;
* erst nach größeren Zeiträumen (um das Überwinden von „Durststrecken“ zu ermöglichen)&lt;br /&gt;
&lt;br /&gt;
=== Individuenanzahl ===&lt;br /&gt;
Wie viele Individuen sollen verwendet werden, um eine gute Lösung zu erreichen?&lt;br /&gt;
&lt;br /&gt;
=== Abbruchkriterium ===&lt;br /&gt;
Wie viele Generationen soll es geben, bis die Suche nach besseren Lösungen aufgegeben wird?&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
* [[Stuart Jonathan Russell|Stuart Russel]], [[Peter Norvig]]: &amp;#039;&amp;#039;Artificial Intelligence: A Modern Approach.&amp;#039;&amp;#039; Third Edition. Prentice Hall, Upper Saddle River, NJ 2010, ISBN 978-0-13-604259-4, S. 122–125.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Optimierungsalgorithmus]]&lt;br /&gt;
[[Kategorie:Suchalgorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Rosa Olmos</name></author>
	</entry>
</feed>