PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Machbarkeit von eines Data-Miners.


Marscel
2007-12-04, 14:00:19
Ich hatte heute Nacht eine Idee, die mich seitdem beschäftigt.

Angenommen, ich habe ein Programm, das einen verfügbaren Speicher mit Daten von verschiedenen Typen füllt (von einfachen bit-Flags bis hin zu Matrizen).

Diese Informationen sollen verarbeitet werden. Jetzt möchte ich, dass beliebig viele Data-Miner auf diese zugreifen können. Jeder Miner hat vorgegebene Input-/Outputmöglichkeiten um auf diese Daten mit vollen Rechten zugreifen zu können (also ggf. auch modifizieren können). Jedes Miner-Programm besteht aus einem schwierigerem Teil, dem, der die Daten nach vorgegebenen Mustern analysiert und abhängig davon zur Laufzeit (!) des Miners dessen Operationsfähigkeiten (von denen ich ein Set voll zur Verfügung stelle) erweitern und verändern kann. Letztendlich will ich ein System haben, dass anhand von Wahrscheinlichkeiten "würden -> können" behandeln kann und je nach Input darauf reagieren kann.

Hier eine Skizze dessen:
http://www.pcreact.de/misc/skizze.png

Was ich von euch NICHT wissen will, ist, dass es nicht funktionieren kann oder schwachsinnig vom Konzept ist, ich will damit selber auf die Schnauze fliegen, sollte ich die Zeit finden, es umzusetzen. ;)

Ich dachte da an dynamische Veränderungen des Quellcodes des Reaktionsteils des Miners, der dann zur Laufzeit kompiliert, gelinkt und angwendet wird, sodass es quasi beim Laufen dazulernt bzw. sich erweitert.

Aber konkrete technische Vorschläge? So, dass es auf handelsüblichen x86 Maschinen mit 3GHz auf Windows und/oder Linux realisierbar ist.
- Wie greife ich, wenn ich nicht Schittstellen à la SQL (oder bloß TCP) oder andere Inferprozesskommunikationsprotokolle, auf den Speicher des einen Programms zu? Und zwar typenkorrekt (also über Tabellen oder so)?
Gibts da Standards, Libraries?
- Was kann man sinnvoll für Sprachen bzw. Plattformen nehmen, um zur Laufzeit ein Programm zu modifizieren oder notfalls, zu terminieren, kompilieren und neueinzuklinken, ohne, dass allzu viel Zeit vergeht? Oder doch besser eine VM wie Java?

Ich führ das nachher evtl. weiter aus, ich muss in die Schule zurück. Ich bedanke mich schon mal für Anregungen. :)

Gast
2007-12-05, 19:15:54
Jedes Miner-Programm besteht aus einem schwierigerem Teil, dem, der die Daten nach vorgegebenen Mustern analysiert und abhängig davon zur Laufzeit (!) des Miners dessen Operationsfähigkeiten (von denen ich ein Set voll zur Verfügung stelle) erweitern und verändern kann. Letztendlich will ich ein System haben, dass anhand von Wahrscheinlichkeiten "würden -> können" behandeln kann und je nach Input darauf reagieren kann.Hört sich irgendwie nach machine learning an.
Ja, das geht. ;-)

mfg

Marscel
2007-12-05, 23:49:57
Hört sich irgendwie nach machine learning an.
Ja, das geht. ;-)

mfg

Richtig erraten.

Ich fürchte, ich muss etwas herumprobieren, welche Sprache/Umgebung genutzt werden soll. Fest steht, ich bräuchte ggf eine Menge Mappings/Layer für I/O über Speicher, TCP, SQL, anderes Material. Für ersteres wüsste ich nicht, wie man es mit Python realisiert (ohne neue Extensions zu erstellen), deswegen muss ich wohl weitersuchen.

malte.c
2007-12-06, 01:10:35
Jetzt möchte ich, dass beliebig viele Data-Miner auf diese zugreifen können. [...] Jeder Miner hat vorgegebene Input-/Outputmöglichkeiten um auf diese Daten mit vollen Rechten zugreifen zu können (also ggf. auch modifizieren können). [...]
Ich dachte da an dynamische Veränderungen des Quellcodes des Reaktionsteils des Miners, der dann zur Laufzeit kompiliert, gelinkt und angwendet wird, sodass es quasi beim Laufen dazulernt bzw. sich erweitert.
[...]
- Wie greife ich [...] auf den Speicher des einen Programms zu? Und zwar typenkorrekt (also über Tabellen oder so)?

Voller Speicherzugriff und Typisierung sind meiner Ansicht nach nur sehr schwer vereinbar, da das die Speicherstellen, die die Typ-Informationen beinhalten, von denen, die die Daten enthalten, unterscheiden würde. Wenn dann Dein Data-Miner zur Laufzeit die Bits eines Objekts ändert, die den Typ festlegen, würde das die Typisierung recht komplex gestalten.

Allgemein betrachtet würde ich wohl folgenden Aufbau wählen: Die Data-Miner sind Plugins in einem Data-Miner-Proxy, der wiederum als Debugger am zu untersuchenden Programm hängt. Damit kannst Du praktisch alles modifizieren, was bei der jeweiligen Plattform möglich ist, wobei Du den Proxy dazwischen brauchst, da Du oft nicht beliebig viele Debugger an einen Prozess hängen kannst. Als Sprache für die Plugins würde ich auf etwas VM-basiertes zugreifen, also z.B. C# oder Python, da man in dort sehr schön zur Laufzeit neuen Code erzeugen kann.

Falls Du die Typ-Informationen nur lesen und nicht ändern willst, würde es sich auch anbieten, das zu untersuchende Programm auf einem VM-Ansatz aufzubauen, da dann die Chancen, an die Typ-Informationen heranzukommen, recht gut stehen. Allerdings könnte die VM Dir beim Ändern der Typinformationen das Leben schwer machen, da würde sich eher etwas in Richtung C++ eignen.

ethrandil
2007-12-06, 01:22:35
Also was du da vorhast klingt zwar interessant - wenn du das aber wirklich versuchst zu bauen und auf Bit/Speicherebene und selbstkompilierenden Code runtergehst, wird dein Programm wahrscheinlich unbeherrschbar, die Ergebnisse schwer zu deuten und nichts besonders sinnvolles dabei rauskommen ;-).
Versteh mich nicht falsch - ich sage nicht es geht nicht! Ich denke nur du bekommst genauso gute Ergebnisse mit einem (technisch) etwas konventionelleren Ansatz.

Ich würde mir erstmal folgende Fragen stellen:
* Wozu kann man das gebrauchen?
* Was bringt es, dass ich auf Bitebene arbeite?
* Kann man nicht das Patternmatching formalisieren?
* Kann man nicht mögliche Operationen formalisieren?
* Braucht man so parallele Zugriffsmöglichkeiten, oder reicht es die verschiedenen Miner in einer Schleife nacheinander laufen zu lassen?

-eth