5

Ich spiele mit der Implementierung eines Junction-Tree-Algorithmus für die Propagierung von Glauben in einem Bayes-Netzwerk. Ich kämpfe ein wenig mit dem Triangulieren des Graphen, damit die Verzweigungsbäume gebildet werden können.Allgemeiner Algorithmus zum Triangulieren eines ungerichteten Graphen?

Ich verstehe, dass das Finden der optimalen Triangulation NP-vollständig ist, aber können Sie mich auf einen Allzweckalgorithmus hinweisen, der zu einer 'gut genug' Triangulation für relativ einfache Bayes'sche Netzwerke führt?

Dies ist eine Lernübung (Hobby, keine Hausaufgabe), daher ist mir die Komplexität von Raum und Zeit egal, solange der Algorithmus in einem ungerichteten Graphen einen triangulierten Graphen ergibt. Letztendlich versuche ich zu verstehen, wie genaue Inferenzalgorithmen funktionieren, bevor ich überhaupt versuche, irgendeine Annäherung durchzuführen.

Ich bin in Python mit NetworkX basteln, aber jede Pseudo-Code-Beschreibung eines solchen Algorithmus mit typischen Graph Traversal Terminologie wäre wertvoll.

Danke!

Antwort

3

Wenn Xi eine mögliche variable (Knoten) wird dann gelöscht werden,

  • S (i) wird die Größe der Clique durch Löschen dieser Variable
  • C (i) erstellt wird das Summe der Größe der Cliquen des Subgraphen von Xi und seinen benachbarten Knoten gegeben

Heuristic:

jeweils ein Variable Xi unter dem Satz von möglichen Variablen wählen zu de leted mit minimalen S (i)/C (i)

Referenz: Heuristic Algorithms for the Triangulation of Graphs

+1

Wenn Sie sagen, "Größe der Clique (n)", meinen Sie die Variablen, die Sie bereits miteinander aufgrund angeschlossen haben eine Löschung? I.e. Wenn ein Graph eine 5-Clique enthält, erkennt Ihre Methode dies bei der ersten Iteration oder behandelt sie zunächst alle Variablen als 1-Cliquen? Ich möchte vermeiden, eine Methode zu nennen, die jedes Mal, wenn ich C (i) berechnen muss, maximale Cliquen findet. – user

Verwandte Themen