Sie können die minimale Anzahl von Gates in einem mehrstufigen Netzwerk nur finden, indem Sie ein ganzzahliges Programmierproblem lösen [oder Äquivalente, siehe unten]. Dieses Problem ist NP-vollständig, daher nur praktisch, um bis zu einem Dutzend Tore oder so zu lösen.
Es gibt Approximationsmethoden, die Ihnen nicht die Mindestanzahl geben, aber in Bezug auf den Zeitaufwand besser nachvollziehbar sind ... Dies ist ein großes Thema für sich, im Grunde das gesamte Gebiet der mehrstufigen Optimierung. Eine [kostenlose] Übersicht können Sie hier lesen .
Für kleine NAND-Netzwerke (bis zu 4 Variablen) wurde das Problem durch umfassende Aufzählung (oder gleichwertige Methoden) vollständig gelöst. Es gibt eine relativ neue [2009] Doktorarbeit von Elizabeth Ann Ernst, die die alten Ergebnisse zusammenfasst und erweitert. Ernst verwendet Branch-and-Bound, was die erschöpfende Methode in der Praxis verbessert, jedoch nicht asymptotisch. Sie merkt auch an, dass andere implizite Aufzählungsmethoden wie Integer-Programmierung oder CSP (Constraint-Zufriedenheit, gelöst über SAT) in der Praxis schlechter abschneiden.
Sie hat offensichtlich eine Software für ihre Methode geschrieben (genannt BESS), aber ich bin mir nicht sicher, ob sie irgendwo öffentlich verfügbar ist. Der vollständige Text ihrer Arbeit ist bei umich frei verfügbar . Und tatsächlich haben Sie den minimalen Ausdruck für xor mit 2 Eingängen gefunden (Ihren zweiten offensichtlich), den unten hervorgehobenen:
Sie verglich auch die genauen Ergebnisse (für NANDs) mit denen des heuristischen Optimierers von ABC .
ABC konnte ein optimales Netzwerk für 340 von 4.043 Funktionen erstellen, bei denen das optimale Netzwerk bekannt ist. Für jene Funktionen, bei denen ABC kein optimales Netzwerk erzeugte, war es durchschnittlich 36% größer als das optimale Netzwerk [.]
Es gibt (offensichtlich) einige [größere] Netzwerke, für die BESS nicht fertig war, aber das Auffinden einer Obergrenze zuließ (an dem Punkt, an dem die Suche abgebrochen wurde). Für diese hat sich ABC recht gut geschlagen [gut in Bezug auf die gefundenen Grenzen], wie Sie aus der 2. Grafik unten sehen können.