Hallo Manf,Zitat:
Kannst Du Dir vorstellen, wenn die Systemumgebung entsprechend leistungsfähig ist, den Weg zur Lösung der gesamten Aufgabe in nur einer einzigen Kommandozeile zusammenzufassen?
Manfred
mein Ansatz war eigentlich ein bisschen mit Neuronen zu spielen und den Rechner die Lösung "erlernen" zu lassen.
Der Aufwand der Berechnung wurde dadurch nicht, wie bei Deiner Vorstellung, optimiert und bis zu einer einzigen Komandozeile komprimiert, sonder ganz im Gegenteil...
Ich habe mir in einer Datenbank mal zwei Tabellen gebaut:Zitat:
AlexAtRobo:
Kannst du Deine Programmlösung näher beschreiben? Klingt interessant.
1. Eine Tabelle "Neuronen", sie beinhaltet im wesentlichen die ID (laufende Numerierung) eines Neuron, dessen Schwellenwert (initialisiert mit 1) und Ausgangszustand (initialisiert mit 0).
Ferner habe ich noch ein Feld für einen Zwischenwert der Summierung, ein Typ- und Beschreibungsfeld, welche zur besseren Dokumentation dienen.
2. Eine Tabelle "Netz", welche die eigentliche Verknüpfung der Neuronen untereinander beinhaltet.
Sie hat die Felder EingangsID,AusgangsID und Gewichtung.
Es wurde dann für jeden Wert einer Kategorie aus der Aufgabenstellung ein Neuron angelegt. (ID = 1 ->norwegische Person, 2 -> dänische Person, 25 -> Bier Getränk) sie wurden neben der Beschreibung mit dem Typ "Eingangsneuron" gekennzeichnet.
Die fünf Häuser habe ich von links nach rechts als "Ausgangsneuronen" deklariert.
Jetzt kam das Netz:
Für jedes "Ausgangsneuron" wurde noch ein Neuron pro Kategorie hinzu gefügt und in der "Netztabelle" verknüpft.
Also ID von Neuron "Haus1 Person" mit ID von Ausgangsneuron "Haus1" und Gewichtung "1".
Dann die Netzverknüpfungen von je einem Eingangsneuron auf ein entsprechendes "Zwischenneuron". Also "norwegische Person" mit "Person Haus1", "dänische Person" mit "Person Haus1", "norwegische Person" mit "Person Haus2", etc.
Das erste! Netz war geknüpft.
Nun wurde gerechnet.
Um heraus zu bekommen wo z.B. der Norweger wohnt, muß nur das Neuron "Norweger" erstmal auf TRUE -> Ausgang = 1 gesetzt werden.
Die erste Phase der Berechnung ist die gewichtete Summierung aller Neuroneneingänge pro Neuron.
Die Eingangsneuronen haben keine verknüpften Eingänge, also keine Berechnung.
Das Neuron "Person Haus1" hat z.B. die Summe aller Personen, da der "Norweger" eine Person ist, den Ausgangsstatus 1 hat und mit der Gewichtung 1 (1*1=1) bewertet ist, ist das Ergebnis der Summe = 1 und wird im Feld Zwischensumme gespeichert.
Phase 2 (nach allen Summierungen) vergleicht pro Neuron die Zwischensumme mit dem Schwellenwert und setzt den Ausgang.
Neuron "Person Haus1" Zwischensumme "1" >= Vergleichswert "1" also Ausgang "1".
Jetzt wird das Ganze nochmal gemacht, um die Daten in der nächste "Ebene", den Ausgängen zu sammeln. (So häufig, wie es Ebenen gibt, in diesem Fall nur 2)
Dann werden die "Ergebnisse" der ersten Berechnung gegen die Aufgabenstellungen geprüft.
Also kann der Norweger in Haus1 sein ?
Zum Schluß der Lerneffekt (Zuckerprot und Peitsche)
Wenn nichts dagegenspricht, wird die Gewichtung des Norwegers im Neuron "Person Haus1" erhöht, wenn aber nur eine Bedingung nicht stimmt, wird sie verringert.
Und wieder von vorne, jetzt das Ganze mal mit 'nem Bierchen.
Nun ja, das war das erste Netz und die erste Viertelstunde meiner Programmierung...
War das bis dahin einigermaßen verständlich ?
Bei einer Sache hatte ich komische Ergebnisse.
Wie interpretiert Ihr die Aussage:
"4. Das grüne Haus steht links vom weißen Haus. "
Unmittelbar neben oder irgendwo links (X=Y-1 oder X<Y)?
P.S. Mein Roboter ist in zwischen zwar auch mein PC, aber ich stelle trotzdem noch eine Behauptung auf:
Mindestens 98 % der Roboter sind nicht in der Lage dieses Rätsel zu lösen. O:)