Archiv verlassen und diese Seite im Standarddesign anzeigen : Einem Bot beibringen lernen zu können
5Volt-Junkie
22.10.2012, 23:26
Hallo Community,
ich bin im Moment seit längerem an einem kleinen Projekt dran, das eigentlich eine Eintagsfliege werden sollte. Mittlerweile habe ich das Projekt so lange schleifen lassen, dass da immer mehr Fragen auftauchen und mich auf etwas verrückte Ideen bringen.
Eigentlich wollte ich einen kleinen Roboter bauen, der Hindernissen ausweicht. Alles ganz einfach und ohne großen Aufwand etc.
Dann kam mir die Idee, dass er noch eine Funktion besitzen sollte, zum hellsten bzw. dunkelsten Punkt im Raum zu fahren. Ist ja auch nix Großartiges. Irgendwann mal wird er gegen eine Wand fahren, was auch irgendwie doof ist. Also kam ich auf die Idee beide Funktionen zu verknüpfen. Also würde er zu der Lichtquelle fahren, was in diesem Fall Fenster sein soll und dort vor sich hin fahren ohne irgendwo gegen zu fahren aber auch auf der hellsten Stelle zu bleiben bis irgendwann mal Akku leer wird.
Dieses Verhalten erinnert mich an eine Fliege oder Wespe die in die Wohnung reinfliegt und dann gegen die Glasscheibe schlägt, bis irgendwann mal die totale Erschöpfung kommt. Also nicht viel von Intelligenz zu sehen, sonder alles nur auf einigen Instinkten basiert. Die Instinkte sind ja irgendwie fest eingeprägt und da gibt es wohl nichts zu entscheiden bzw. zu verändern.
Jetzt habe ich irgendwo gelesen, dass Insekten nach mehreren Generationen (z.B. 20 bei Fruchtfliegen) was dazu lernen können, wenn jede Generation dem gleichen ungünstigen (bzw. auch umgekehrt) Effekt ausgesetzt werden.
Nun, ich will keine 20 Generationen von Bots bauen :) Einer reicht hier auch und da bin ich mir auch noch nicht so sicher, ob ich so eine "Lernfähigkeit" nachbilden möchte.
Jetzt stelle ich den kleinen "Insekt" in die Mitte des Raumes und lass ihn losfahren. Ein Instinkt ist fest eingeprägt, nämlich Hindernissen ausweichen. Er soll aber "selbstständig" lernen was für ihn gut ist - hellste oder dunkelste Stelle im Raum. Für den Anfang würde es reichen, dass es nach Anzahl der Hindernisse beurteilt wird, für welche Stelle er sich entscheidet. D.h. wenn der Bot an die dunkelste Stelle im Raum kommt, und dabei weniger Hindernisse im Weg stehen, als in die helle Richtung, würde er sich für die dunkle Stelle entscheiden.
Jetzt sind die "Algorithmiker und KI'ler" unter Euch gefragt, wie man das realisieren könnte.
Ich möchte keine langen Zeilen Code sehen sondern einfach nur Ideen, wie ein Ablauf aussehen könnte, wie ein Bot zu einer Entscheidung kommen könnte ;) Je simpler desto besser. Später könnte man noch die Steilheit des Bodens oder Umgebungstemperatur in die Entscheidung miteinbeziehen.
Bin schon gespannt auf eure Ideen und Feedback.
Danke im Voraus ;)
Hallo!
Ich möchte keine langen Zeilen Code sehen sondern einfach nur Ideen, wie ein Ablauf aussehen könnte, wie ein Bot zu einer Entscheidung kommen könnte ;) Je simpler desto besser.
Mein Spielzeug mit bisher höhster KI bei einfachsten Mitteln: https://www.roboternetz.de/phpBB2/viewtopic.php?t=49233 . ;)
Searcher
23.10.2012, 09:53
Er soll aber "selbstständig" lernen was für ihn gut ist - hellste oder dunkelste Stelle im Raum. Für den Anfang würde es reichen, dass es nach Anzahl der Hindernisse beurteilt wird, für welche Stelle er sich entscheidet. D.h. wenn der Bot an die dunkelste Stelle im Raum kommt, und dabei weniger Hindernisse im Weg stehen, als in die helle Richtung, würde er sich für die dunkle Stelle entscheiden.
Ich denke, daß das intelligente Insekt erstmal Informationen über die Umgebung braucht, um gute Stellen aufzusuchen. Seine "Intelligenz" würde dann darin bestehen, bei wechselnden Umgebungsverhältnissen gute Stellen direkt anzulaufen.
Folgende Idee für den sich wiederholenden Sonneneinfall über einen Tag in einem Zimmer als sich verändernde Umgebungsverhältnisse:
Im ersten Anlauf müßte das Insekt mal seinen Lebensraum erkunden und sehen, was es so alles gibt.
Auf der Erkundungsreise sollte es sich merken können, an welchen Stellen es günstige Lebensbedingungen vorfindet.
Die Stellen sollte es sich nach Wertigkeit abspeichern. zB viel Licht hohe Wertigkeit.
Es stellt sich auf die Stelle mit der höchsten Wertigkeit.
Nach einiger Zeit beginnt es eine neue Erkundung und macht das gleiche nochmal und stellt sich am Ende der zweiten Erkundungsfahrt wieder auf seinen Ausgangspunkt.
Nun versucht es, falls es eine hellere Stelle bei der zweiten Fahrt gefunden hat, diese direkt anzulaufen.
Dabei kommen nun die Hindernisse ins Spiel - die Anzahl muß es sich nun auch merken.
Dann sofort wieder zurück zum Ausgangspunkt und zweithellste Stelle anlaufen, dabei Hindernisse zählen und merken.
So oft wiederholen, bis es sich nicht lohnt, noch weiter zu suchen. Könnte ja sein, daß es die hellste Stelle ohne Hindernisse erreicht.
Nun sucht es die lohnenswerteste Stelle direkt auf, wartet wieder und beginnt danach wieder eine neue Erkundungsfahrt und das Spiel beginnt von vorne.
Irgendwann ist eine Karte mit Punkten entstanden, die er nur noch abfahren muß, wenn es mal wieder auf einem vorher gefunden Punkt gelandet ist. Von da aus sollte es trotzdem nochmal Erkundungsfahrten durchführen, um seine Rückschluß (daß er da schon mal war und der nächste Überlebenspunkt klar ist) zu verifizieren.
Mehr "Intelligenz" müßte es entwickeln, wenn die Verifizierung nicht mit seiner Karte übereinstimmt.
Gruß
Searcher
Geistesblitz
23.10.2012, 19:54
Das hört sich irgendwie auch noch ziemlich "vorprogrammiert" an.
Ich würd mal vorschlagen, sich in genetischen Algorithmen, KI und virtuelle Evoluton einzulesen, schon bei Wikipedia findet man die Grundlagen erklärt. Wenn man die Mechanismen, die dahinter stecken, versteht und sich dann ordentlich Gedanken dazu macht, dann kann man schon ganz tolle Sachen zustandebringen. Ist nur keine leichte Kost, aber andere Wege wird es wohl kaum geben, wenn dein Roboter wirklich lernfähig sein soll.
5Volt-Junkie
23.10.2012, 20:49
Insekten sind ja auch irgendwie "vorprogrammiert";)
Ihre Intelligenz ist ja theoretisch auf eine überschaubare Menge an Transistoren beschränkt. Überschaubar im Vergleich mit der heutigen Technik. D.h. theoretisch ist z.B. schon ein ATmega für diese Anwendung etwas oversized.
Ich bezweifele auch, dass ich bei einem kleinen Bot, etwas derartiges umsetzen möchte. Es sind erst mal nur Gedanken ;) Der kleine Roboter, an dem ich dran bin, soll auch ohne Mikrocontroller laufen. Allein aus diesem Grund würden da keine großen Algorithmen laufen können. :)
Es würde aber immer hin reichen, eine Entscheidungsfunktion zu verleihen. Die Frage ist nur, wie kann man die Hindernisse abzählen und sie vergleichen?
Meine Idee wäre dass nach dem Einschalten ein Timer losläuft und der Roboter in die hellste Richtung fährt. Nach Ablauf dieses Timers merkt er sich die Anzahl der registrierten Hindernisse und fährt in die dunkle Richtung. Er müsste aber mit menschlicher Hilfe auf die Ausgangsstelle gebracht werden.
Den Weg merken geht ja nicht wirklich, da eben kein µC eingesetzt werden sollte :)
schorsch_76
23.10.2012, 20:57
"Eigentlich" sind genau dafür neuronale Netze entwickelt worden. Du hast eine Menge an Eingaben. Den Eingabevektor. Licht, Zeit, was weis ich. Und eine Ausgabevektor. Bsp. Fahre zum hellen Punkt, Fahre zum dunkeln Punkt und anschliessend eine "normale" Statemachine die dann diese Entscheidung umsetzt. Neuronale Netze werden trainiert. Du hast einen Eingabevektor und weist was er dann machen soll. Das kann man ihm anlernen. Je größer das Sampleset ist, meist, umso besser. Es gibt dann allerdings den Fall, dass das Netz alles einfach "auswendig" lernt und nur auf die Samples richtig reagiert, dann gibt es den idealen Fall in dem es lernt zu generalisieren. Bsp. 10:30 und 10:35 sind etwa gleiche Zeiten ;) und dann dieselbe, richtige, Entscheidung trifft.
Zum Traineren unterteilt man deshalb die Samples in bsp. 5 Teilsets. Lernt mit 4en davon und prüft mit dem 5ten die Generalisierung.
Wichtig ist den passenden Eingabevektor zu finden. Nicht zuviel Info und nicht zuwenig. Es muss möglich sein, ohne Intelligenz, daraus eine Entscheidung abzuleiten.
Als ich das erstemal damit "gespielt" habe wurde ich fast erschlagen ;)
Hier hab ich 2 gute Links für dich:
http://de.wikipedia.org/wiki/K%C3%BCnstliches_neuronales_Netz
http://www.dkriesel.com/science/neural_networks
Gruß
Georg
Searcher
24.10.2012, 12:04
Ein paar naive vereinfachte Gedanken:
Ein Insekt hat nur Sensoren, Aktoren und Instinkte. Die Instinkte sind die Festverdrahtung zwischen den beiden. Falls da Lernfähigkeit zwischen Generationen festgestellt werden kann, ist das auf Auslese zurückzuführen, weil von einer Generation zur anderen mal ein Draht zuviel oder zuwenig vererbt wird. Die einen überleben und pflanzen sich fort, die anderen eben nicht. Vielleicht haben die Fruchtfliegen besonders viele umweltbeeinflußte Vererbungsmutationen.
Damit im selben Leben gelernt werden kann, braucht es Speicher in denen Erfahrungen abgelegt werden können. Jede neue Erfahrung wird mit schon gelernten verglichen und das Resultat abgespeichert.
Intelligenz äußert sich darin, daß aufgrund der Resultate gehandelt wird und nicht aufgrund der Festverdrahtung zwischen Sensoren und Aktoren.
Ich geb es total ungern zu, aber bei einem Kleinen Bot ohne µC muß ich da aufgeben.
Einfache Speicher könnte ich mir noch vorstellen, wo zB ein 4017er Dekadenzähler bei Hindernisanstoßimpuls eins weiterzählt. Aber dann die Weiterverarbeitung ...
Gruß
Searcher
Hallo!
Ich stimme meinem Vorredner völlig zu ! :)
Als kleine Erklärung zum meinem Artan ohne jeglicher Elektronik möchte ich nur sagen, dass er einen einfachen mechanischen Algorythmus fest "verdratet" hat. Der permanent unidirektional drehender Motor "sucht" sich ständig eine Richtung, in der er bei kleinsten Widerstand noch fahren kann. Eigentlich besitzt er kein Speicher und somit keine KI, deshalb kann er nix erlernen. ;)
Thomas E.
29.10.2012, 18:19
Ich geb es total ungern zu, aber bei einem Kleinen Bot ohne µC muß ich da aufgeben.
Ein paar Volladdierer, eine ALU und ein kleiner Speicher - alles aus Transistoren oder Relais zusammengebaut. Das wär doch was?
Siehe: http://www.relaiscomputer.de/
PS: Nicht ganz ernst gemeint... ;)
Searcher
29.10.2012, 19:27
Ein paar Volladdierer, eine ALU und ein kleiner Speicher - alles aus Transistoren oder Relais zusammengebaut. Das wär doch was?
Ja !!! :p
Ich habe im letzten Jahrtausend mal in sowas (http://cms.waehlamt.at/v2261/artikel.cfm/207/Waehlsystem-in-ESK-A5-Technik.html) gearbeitet. Die Gestelle waren voll mit sowas (http://www.bayern-online.com/v2261/showdetl.cfm?DID=203&User_ID=15767104&st=543722534&st2=181955158&st3=187669734&CATID=1471&ObjectGroup_ID=5308&OBS=8&Move=Next&count=9&Pcount=87). Dazu brauchte man noch ein Billy Regal von IKEA beladen mit DIN A4 Ordnern voller Unterlagen.
Das könnte man umverdrahten und kräftige Räder finden. Klein ist relativ :lol:
:-)
Gruß
Searcher
5Volt-Junkie
01.11.2012, 23:24
Danke für ein Paar (auch nützliche) Ideen und Links.
ABER... um auf die letzten zwei Beiträge einzugehen....
Ihr habt den Dampfkessel zur Stromversorgung vergessen :p
Searcher
02.11.2012, 08:34
Ihr habt den Dampfkessel zur Stromversorgung vergessen :p
Stimmt. Falls Projekt schon fortgeschritten, noch 'n Anhänger dran :-)
Hallo,
ich denke da mehr daran wie Computer Tic-tac-toe lernen, so sollten Roboter lernen.
Vielleicht nicht zuerst gegen einen ambitionierten Tic-tac-toe Gegner sondern gegen einfache "Natur". (Natur z.B.: besetzt - ohne weitere Strategie - das erste freie Feld.)
Die volle Komplexität soll es ja gar nicht sein, so hieß es ja am Anfang.
Der Roboter fährt also auf ein Ziel zu, beispielsweise auf eine Lichtquelle.
Dabei trifft er auf ein Hindernis, das eben nicht die Lichtquelle verdeckt, aber seinen Weg blockiert.
Es könnte durchsichtig sein oder halb hoch.
Er muss dann eine Entscheidung treffen, nämlich beispielsweise links oder rechts um das Hindernis herumfahren.
Wenn die Hindernisse so aussehen das eine Richtung beim Ausweichen erfolgreicher ist dann kann er sich das merken, aufsummieren über die Anzahl der Versuche und gegebenenfalls die Erfahrung später auch altern lassen.
(Erfolgreicher hieße in dem Fall vielleicht auch schon: er kann nach seitlichem Versatz ein Stück weiter auf die Lichtquelle zufahren.)
In dem Beispiel wäre das System überschaubar.
Der Lernerfolg wäre, Hindernisse sollte man rechts umfahren, nicht links.
Bei geeigneter Umgebung könnte das ein Lernerfolg sein.
Mit Tic-tac-toe kommt eine Fitnessfunktion (hier: drei gleiche in einer Reihe gewinnt) ins Spiel. Und zwar durchaus verzögert. D.h. ich mache ein paar Züge und berechne erst dann die Fitnessfunktion. Das bringt mehr Flexibilität/Freiheit. Will sagen, nicht jede Aktion (jeder Schritt) muß unmittelbar der Zielmaximierung dienen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.