Frage

Ich habe ida $ ^ * $ , um das 8-Puzzle optimal zu lösen, und meine Freunde verwendet einen $ ^ * $ auch dafür (mit derselben Manhattan-Entfernung heuristisch).

Ich habe die durchschnittliche Laufzeit und Anzahl der Knoten meines Algorithmus für 20 Beispiele und den Algorithmus meines Freundes berechnet.Der Zeitdurchschnitt für meinen Algorithmus war viel schneller als der Algorithmus meines Freundes, aber meine durchschnittliche Anzahl der besuchten Knoten ist viel mehr als mein Freund.

ich kenne IDA $ ^ * $ Besucht jeden Knoten mehr als einmal, aber warum ist es schneller als ein $ ^ * $ ?

War es hilfreich?

Lösung

Da Sie bereits IDA-Class="Math-Container"> $ ^ * $ implementiert haben, verstehen Sie sicher, warum es mehr Knoten ausdehnt als ein $ ^ * $ , dh es beginnt im Startzustand mit einer neuen Tiefe-ersten Durchquerung in jeder Iteration. Hinweis zuerst, dass die Gesamtzahl der Knoten von IDA $ ^ * $ , zwangsläufig größer als ein $ ^ * $ ist nicht so viel größer. Der Grund ist, dass die Anzahl der Knoten in jeder Tiefe gemäß einer geometrischen Serie mit Faktor $ B $ B $ , dem Verzweigungsfaktor, fortschreitet. Infolgedessen ist die Anzahl der Knoten in Tiefe $ D $ , $ B ^ D $ , ist viel größer als die Summe aller auf den vorherigen Iterationen erweiterten Knoten, dh $ B ^ d> \ sum_ {I= 0} ^ {D-1} B ^ I $ . Aus diesem Unterschied erscheint es heraus, dass IDA $ ^ * $ $ \ frac {b} {B-1} $ erforderlich ist Zusätzliche Erweiterungen, die asymptotisch optimal sind, da das Limit für einen großen $ B $ ist, ist 1. Abschluss, für jeden -algorithmus, der alle Knoten besucht In Tiefe $ D $ ist viel schwieriger als alle Knoten in den vorhergehenden Tiefen zu besuchen.

Wenn Sie mehr in dieses Problem eintauchen möchten, empfehle ich Ihnen dringend, das Originalpapier zu lesen: Korf, Richard E. Tiefe-First-Iterativ-Vertiefung: Eine optimale Zulässige Baumsuche. Künstliche Intelligenz (27), 97-109, 1985. Siehe insbesondere Theorem 4.2:

Tiefe-First-iteratives Vertiefung ist asymptotisch optimal unter Brute-Force-Baum sucht in Bezug auf Zeit, Raum und Länge von Lösung.

Natürlich liefert es optimale Lösungen, so dass es zulässig ist und somit asymptotisch optimal ist. Es praktiziert nur Tiefe-Erster-Travers und daher ist es asymptotisch optimal in Bezug auf den Raum (erfordert mit einer guten Implementierung nur $ O (d) $ ).

Wie für die Zeit, ich habe bereits den Haupttheoretischen Grund umrissen, aber lassen Sie es mich wissen lassen, um drei Hauptgründe hervorzuheben, warum es in der Praxis so schnell ist:

    .
  1. Zunächst einmal, für fast alle Zwecke wird die Gesamtlaufzeit eines Algorithmus von der Zeit dominiert, um die Zeit, um Knoten zu erweitern (andere Vorgänge sind eher einfach und atomar). Es ist in der Tat, wenn Sie Knoten expandieren, dass IDA $ ^ * $ außerordentlich schnell sein kann, weil:

    1.1. Ida $ ^ * $ wird rekursiv umgesetzt, so dass alles, was Sie benötigen, den Status annehmen, der als Argument angegeben ist, und um ein Kind gleichzeitig zu generieren (für Ihren speziellen Fall) bedeutet einfach, den Rohling mit einer benachbarten Fliese zu tauschen, das ist nur eine Anweisung!). Für einen $ ^ * $ erfordert jedoch der Erweiterungsvorgang: Erste, indem er einen Zustand aus der Warteschlange auftaucht, und erzeugt dann alle ihre Kinder (dh die leere Fliese in allen mögliche Anweisungen).

    1.2. Während der vorhergehende Vorgang etwas Unterschied macht, ist der wirklich wichtige, dass ein $ ^ * $ Sortierknoten in offener Sortierknoten erfordert. Auch wenn Sie dies mit einem 1-Eimer tun (was $ O (1) $ ) tun würde, beachten Sie, dass IDA $ ^ * $ Es ist nicht erforderlich, Knoten überhaupt nicht zu sortieren, so dass während ein $ ^ * $ Zeit dauert, was in der Anzahl der erweiterten Knoten linear ist, Ida $ ^ * $ nimmt überhaupt keine.

  2. Drittens ist einer der Beiträge der Best-First-Suchalgorithmen (z. B. ein $ ^ * $ ), dass sie keine Knoten, indem Verwenden einer geschlossenen Liste (das trotz seines Namens normalerweise als Set implementiert ist !!). IDA $ ^ * $ hat keine doppelte Erkennung von Mechanismen und damit wieder, ein $ ^ * $ führt einen zusätzlichen Betrieb durch, der überhaupt nicht von IDA $ ^ * $ ausgeführt wird. Wenn Sie mehr über doppelte Erkennung erfahren möchten in ida $ ^ * $ siehe: reinefeld, a.; Marsland, T. Verbesserte iterative Feuersuche. IEEE-Transaktionen auf Musteranalyse und Machine Intelligenz (16) 7, 701-710, 1994.

  3. Der letzte Punkt ist wirklich relevant. Im Falle des Gleitfliesen-Puzzles gibt es in der Tat nicht viele Transpositionen, und der kürzeste Zyklus besteht aus 12 Bewegungen, so dass die Anzahl der Wiedererweiterungen nicht so groß ist. Alle diese zusammenstellen, IDA $ ^ * $ ist eine Killermaschine für alle Größen des Gleitfliesen-Puzzles.

    Trotz aller Vorteile ist es jedoch zwar nicht praktisch an diesen Anwendungen, die eine große Anzahl von Transpositionen aufweisen. Es gab verschiedene Versuche, diese Schwierigkeit zu überwinden

Mit begrenztem Erfolg siehe zum Beispiel:

Dow, S. Alex;Korf, Richard E. Verdoppelung der Vermeidung in der Tiefe-ersten Suche mit Anwendungen an der Baumwidhö.Internationale gemeinsame Konferenz zur künstlichen Intelligenz, 480-485, 2009.

hoffe das hilft,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top