5

Ich habe jetzt in den letzten 3 Monaten an einem Fuzzy Logic SDK gearbeitet, und es kommt zu dem Punkt, an dem ich anfangen muss, die Engine stark zu optimieren. Wie bei den meisten "Utility" - oder "Bedarf" -basierten AI-Systemen funktioniert mein Code, indem er verschiedene Werbungen auf der ganzen Welt platziert, diese Werbungen mit den Attributen verschiedener Agenten vergleicht und die Werbungen auf einem Pro Agent "bewertet" Grundlage] entsprechend.Mithilfe von maschinellem Lernen den Zusammenbruch und die Stabilisierung komplexer Systeme vorhersagen?

Dies wiederum erzeugt stark repetitive Graphen für die meisten Simulationen mit einem einzelnen Agens. Wenn jedoch verschiedene Agenten berücksichtigt werden, wird das System sehr komplex und drastisch schwieriger für meinen Computer zu simulieren (Da Agenten Werbung untereinander austauschen können, wird ein NP Algorithmus erstellt).

Unten: Beispiel der repetitiveness Systeme berechnet gegen 3-Attribut auf einem einzigen agenten:

Top: Beispiel des Systems berechnet gegen 3 Attribute und 8 Mittel:

exp-system

(Zusammenbruch am Anfang und Wiederherstellung kurz danach. Dies ist das beste Beispiel, das ich produzieren könnte, das auf ein Bild passen würde, da die Wiederherstellungen im Allgemeinen sehr langsam sind)

Wie Sie aus beiden Beispielen sehen können, ist das System immer noch sehr repetitiv und verbraucht daher wertvolle Rechenzeit, selbst wenn die Agentenanzahl zunimmt.

Ich habe versucht, das Programm so zu rearchitekturieren, dass die Aktualisierungsfunktion in Zeiträumen mit hoher Wiederholungsrate nur fortlaufend das Liniendiagramm wiederholt.

Während es sicherlich möglich ist für meinen Fuzzy-Logik-Code vorherzusagen, einen Kollaps und/oder eine Stabilisierung des Systems zu berechnen, ist es extrem belastend für meine CPU. Ich denke, maschinelles Lernen wäre der beste Weg, um dies zu tun, da es scheint, dass, wenn das System erst einmal eingerichtet wurde, Perioden der Instabilität immer ungefähr gleich lang sind (sie treten jedoch bei "halb" auf) zufällige Zeiten, ich sage halb, da es normalerweise leicht erkennbar ist durch verschiedene Muster, die auf dem Graphen gezeigt sind, aber, wie die Länge der Instabilität, variieren diese Muster stark von Aufbau zu Aufbau.

Offensichtlich, wenn die instabilen Perioden alle die gleiche Zeitlänge, sobald ich weiß, wann das System zusammenbricht, ist es sehr leicht herauszufinden, wann es ein Gleichgewicht erreichen wird.

Eine Randnotiz über dieses System, sind nicht alle Konfigurationen 100% stabil in Zeiten der Wiederholung.

Es ist sehr deutlich in der Grafik dargestellt:

exception

So müsste die Maschine Lernlösung, die eine Art und Weise zwischen „Pseudo“ zusammenbricht, und voll kollabiert zu unterscheiden.

Wie lebensfähig wäre die Verwendung einer ML-Lösung? Kann jemand Algorithmen oder Implementierungsansätze empfehlen, die am besten funktionieren?

Bei den verfügbaren Ressourcen wird der Scoring-Code überhaupt nicht gut zu parallelen Architekturen zugeordnet (aufgrund der reinen Verbindungen zwischen Agenten), wenn ich also ein oder zwei CPU-Threads für diese Berechnungen verwenden muss . (Ich würde es vorziehen, keine GPU dafür zu verwenden, da die GPU mit einem nicht verwandten Nicht-AI-Teil meines Programms besteuert wird).

Während dies höchstwahrscheinlich keinen Unterschied macht, hat das System, auf dem der Code ausgeführt wird, 18 GB RAM während der Ausführung übrig. Daher wäre die Verwendung einer potenziell höchst datenabhängigen Lösung sicherlich machbar. (Obwohl ich es lieber vermeiden würde, wenn es nicht notwendig ist)

+0

Also anstatt das Experiment zu tun, wollen Sie es durch eine Schätzung ersetzen, wie es aussehen könnte? – ziggystar

+0

Ja, genau das möchte ich machen. –

+0

Das klingt wie eine böse Idee. Wenn du irgendwie daraus folgern könntest, dass dein System periodisch vom Wissen seiner internen Arbeitsweise abhängt, wäre das in Ordnung. Aber einige Ausgaben zu betrachten und zu vermuten, dass es wahrscheinlich auf diese Weise weitergeht, scheint fehlerhaft zu sein. – ziggystar

Antwort

2

Ja, ich bin mir auch unsicher, ob es einen besseren Platz auf StackExchange für dieses Thema, aber ich werde es versuchen, da ich einige Erfahrung in diesem Bereich habe.

Dies ist ein Problem, das häufig bei der Entwicklung von Steuerungssystemen auftritt. Es wird oft als Black-Box-Zeitreihenmodellierungsproblem bezeichnet. Es ist eine "Black Box" in dem Sinne, dass Sie nicht wissen, was genau drin ist. Sie geben ihm einige Eingaben und Sie können einige Ausgaben messen. Angesichts einer ausreichenden Datenmenge, eines ausreichend einfachen Systems und einer geeigneten Modellierungstechnik ist es oft möglich, das Verhalten des Systems zu approximieren.

Viele Modellierungstechniken drehen sich darum, eine bestimmte diskrete Anzahl vergangener Eingaben und/oder Messungen zu nehmen und zu versuchen, vorherzusagen, was die nächste Messung in der Zeit sein wird. Dies wird oft als autoregressive model bezeichnet.

Abhängig von der Komplexität des Systems, das Sie versuchen zu modellieren, könnte eine nonlinear autoregressive exogenous model eine bessere Wahl sein. Dies könnte die Form eines neuronalen Netzes oder radial basis function annehmen, das wiederum die vergangenen n Messungen in der Zeit als Eingaben nimmt und eine Vorhersage der nächsten Messung als eine Ausgabe ergibt.

Wenn Sie Ihre Daten betrachten und ähnliche Techniken anwenden, können einfache Modelle des Schwingungsverhaltens leicht erstellt werden. In Bezug auf Ihre Kollaps- oder Pseudokollapsmodellierung denke ich, dass dies möglicherweise durch Verwendung eines ausreichend komplexen Modells erfasst werden könnte, aber möglicherweise schwieriger ist.

Nehmen wir ein einfaches Beispiel, um zu zeigen, wie Sie ein autoregressives Modell eines oszillatorischen Verhaltens erstellen können.

Für ein System, werden wir eine einfache Sinuswelle mit einer Frequenz, und ein wenig Gaußsche Rauschen hinzugefügt nehmen. Dies kann x, etwas Frequenz \omega und Gaußsche Rauschen wie unten mit einer Messung dargestellt wird \phi einige an diskreter Zeitpunkt k.

x_k = sin(\omega t_k) + \phi_k

dies, können wir Messungen für ein paar Sekunden an Daten erzeugen. Mit diesem erstellen wir dann einen Datensatz bestehend aus 2 Arrays. Die erste enthält Sätze von historischen Messungen G für jeden Zeitschritt und die zweite enthält die Messung zu einem beliebigen Zeitpunkt H.

Wenn wir ein lineares Modell aus der wikipedia article verwenden, können die Parameter b für das autoregressive Modell dann mit linearer Regression unter Verwendung der linear least squares method gefunden werden.

H = Gb

b = (G^T G)^{-1} G^T H

die Ergebnisse dieses Modell direkt zu dem Datensatz Vergleich, ist es ganz einfach, genaue Ergebnisse für dieses Spielzeug Problem zu erhalten. Wenn nur ein Schritt in der Zukunft vorhergesagt werden muss und reale Messungen erneut gesammelt werden, bevor die nächste Vorhersage gemacht wird, akkumuliert sich der Fehler in den Vorhersagen nicht. Dies wird manchmal als Open-Loop-Vorhersage bezeichnet.

open loop predictions from AR model

A loop Prädiktion geschlossen ist, wo man das Modell nur eine Anfangsmessung ergeben. Danach verwenden Sie Ihre eigenen Vorhersagen als Eingabe für nachfolgende Vorhersagen. Rauschen in den Vorhersagen kann sich akkumulieren, wodurch die Langzeitvorhersage ungenau wird. Obwohl diese langfristigen Vorhersagen möglicherweise ungenau sind, bedeutet dies nicht, dass die Ergebnisse nicht ähnlich oder gut genug sind. Ich spielte ein wenig mit dem Spielzeugsystem oben, und meine Closed-Loop-Vorhersagen tendierten dazu, die Amplitude zu unterschätzen und führten oft zu einer abklingenden Oszillation der richtigen Frequenz.

closed loop predictions from AR model

Wenn Probleme wie diese auftreten, könnten Sie mehr historische Proben als Eingaben für Ihr Modell, geben sie mehr Trainingsdaten hinzufügen oder ein nichtlineares Modell verwenden.

In dem obigen Spielzeugproblem wird nur ein Wert modelliert. In Ihren Grafiken scheint es, dass es mehrere "Kanäle" von Daten von Agenten gibt und dass sie in irgendeiner Weise miteinander interagieren. Um dieses Verhalten zu modellieren, können Sie n historische Werte von jedem Kanal als Eingaben in Ihr Modell einschließen und die Ausgaben Vorhersagen für jeden Kanal haben.

Bitte lassen Sie mich wissen, wenn ich das in irgendeiner Weise klären kann, um Ihr Problem besser anzugehen. Ich kann den Matlab-Code, den ich bei dem Spielzeugproblem verwendet habe, auch teilen, wenn Interesse besteht.

+0

Ich glaube nicht, dass irgendwelche Klarstellungen erforderlich sind: D. Mit meiner eigenen Methode, die ich oben unter Verwendung von Markov-Ketten beschrieben habe, hatte ich immer noch das Problem, bei Kollapsen nicht von Pseudo-Zusammenbrüchen zu Vollkommenen unterscheiden zu können. Ich weiß, dass Sie gesagt haben, dass das viel komplexer wäre, aber können Sie mir irgendwelche Wege empfehlen, sich dem zu nähern? –

+0

Nun hängt es wirklich sehr davon ab, was Sie versuchen zu modellieren, um wie viel komplexer es wäre. Leider, ohne es wirklich zu versuchen, ist es schwer zu bestimmen, ob etwas mehr als ein lineares Modell benötigt wird. Ein weiterer zu berücksichtigender Faktor ist, ob Sie daran interessiert sind, das tatsächliche Verhalten zu modellieren oder etwas "nah genug" zu modellieren. Wenn Sie nur "nah genug" wollen, wird es viel einfacher. – kerblogglobel

+0

Auch diese Modelle sind nur so gut wie die Daten, mit denen Sie sie trainieren.Wenn Sie hoffen, das vollständige Kollaps- und Pseudo-Kollaps-Verhalten zu reproduzieren, ist es wichtig, Beispiele für beide in Ihrem Trainingsdatensatz zu haben. – kerblogglobel

0

Ich kam zu dem Schluss, dass der beste Weg dies zu tun wäre, eine Markov-Kette zu verwenden. Anstatt eine zu verwenden, um eine Reihe von Attributen zu speichern, speichere ich die Wahrscheinlichkeit der nächsten Werbung, die der Agent auswählen wird.

Also, wenn ich esse, gibt es eine 15% ige Chance, dass ich als nächstes schlafen werde. Dann, wenn ich schlafe, besteht eine 70% ige Chance, dass ich morgens zur Arbeit gehe. Offensichtlich, nur rand() zwischen Iterationen

Verwandte Themen