Ameisen in Matlab < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Der Ameisenalgorithmus ist ja ein bekanntes Verfahren zur Optimierung von div Verfahren oder zum Lösen von Problemen (Handelsreisender etc).
Um eine solche Optimierung zu realisieren würde ich gerne Matlab verwenden.
Leider habe ich bisher nur wenig Erfahrung (hauptsächlich Auswertung von Messdaten etc.) mit ML, weshalb ich etwas "Starthilfe" benötigen würde.
Zu Beginn würde ich gerne das Auffinden von Futterstellen und die danach erfolgende Optimierung des Weges durch die Durftstoffkonzentration die die Arbeiter hinterlassen realisieren.
Leider happert es bei der Umsetzung :(
Könnte mir hier jemand zur Hand gehen? Natürlich freue ich mich auch über halbfertige/fertige Codes oder Codeschnipsel.
so habe ich mir das vorgestellt:
eine Anzahl von Futterstellen wird per Radomfunktion auf dem Gebiet verteilt. Vom "Bau" ausgehend werden zum Zeitpunkt 0 eine Anzahl von Ameisen (etwa 2) ausgesand. Diese klappern so lange die Umgebung ab, bis ihre derzeitige Position mit einer Futterstelle eine gewisse Nähe (Differenz der Koordinaten klein) aufweist, dann kehrt das Programm den Weg (Wegvektor) um -> die Ameise krabbelt in den Bau zurück und legt dabei an Schnittpunkten Duftmarken ab.
(Jede nun ausschwärmede Ameise orientiert sich an vorhandenen Duftstellen um die Futterstelle zu finden...)
Lg
Chris
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:51 Mo 02.06.2008 | Autor: | BKM |
Hallo.
Kannst Du uns hier einmal dein Anfänge reinstellen? Dann können wir uns schon mal das Mathematische Gerüst ansehen und Dir für die Umsetzung Hilfe geben.
Beste grüße
|
|
|
|
|
was bisher funktioniert ist das Aufsuchen der attraktivsten Koordinate bei Pheromonspuren
mein Problem ist das der Kontrolle der Gesamtfunktion:
ich möchte die Ameisen in Zeitschritten "aussenden", und zwar eine gewisse Anzahl (etwa 5) auf einmal.
Jede Ameise wird durch eine Matrix mit 100x2 Einträgen (die den Wegkoordinaten entsprechen) ausgestattet. 100 ist sozusagen die "Lebensdauer" der Krabbler.
die Ameisen haben 2 "Missionen":
i) hast du kein Futter dann krabble los in die Richtung der höchsten Pheromonkonzentration. Ist kein Pheromon in Sichtweite krabble in beliebige Richtung. Speichere deine Position ab
ii) hast du Futter gefunden arbeite deine Positionsdatenbank rückwärts ab und setze Pheromone bis du im Bau bist.
danach Reset und neu ausschwärmen.
nur wie muss ich die Steuerkonstrukte wählen, damit die Ameisen "gleichzeitig" einen Schritt gehen und dann ihre Agenden checken? Sonst funktioniert die Idee nämlich nicht, da ja die Optimierung auf die "Dichte" des Pheromons aufbaut....
lg
Chris
PS: vielleicht ist die Idee ganz falsch, dann sagt es bitte :D
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 22:32 Di 03.06.2008 | Autor: | chrisi99 |
for iter=1:iter_max
for k=1:ants_max
k %zeigt aktuell abgearbeitete Ameise
if iter<=iter_max %solange die Grenze der Iteration nicht überschritten wird
if food==0
%Ameise trägt kein Futter
elseif food==1
%Die Ameise kehrt zum Nest zurück und setzt Pheromonmarkierungen
else
%Die Ameise stirbt
end
k=k+1;
else
iter=1;
break;
end
end
iter %zeigt aktuellen Iterationsschritt
iter=iter+1;
end
Es funktioniert noch nicht so wirklich... kann mir jemand helfen?
Weiters habe ich noch ein Problem, weil ich ja bei gefundenem Futter "umdrehe" und die Ameisen ins Nest zurück schicken will... hat hier jemand eine Idee?
lg
Chris
|
|
|
|
|
Hallo,
ich habe mich ein bisschen mit deiner Aufgabe beschäftigt und bin auf einige Schwierigkeiten gestoßen, die man ggf. durch geeignete Modellierung meistern könnte.
Am besten wäre es, wenn du ein Modell einer Ameise entwerfen würdest mit allen Informationen, die sie so mit sich trägt, also z.B.:
zurückgelegt Route, aktueller Routenpunkt, aktueller Zustand, Schrittweite (immer gleich oder zufällig erzeugt?), Sichtweite (auf Futter oder Pheromone), Strategie, ...
Hier bietet sich die objektorientierte Programmierung an, für die Matlab gewisse Befehle bereithält. Vielleicht wirfst du einen Blick auf die Hilfe zu "class" und schaust dir die dort angegebenen Links zu objektorientierter Programmierung an.
Entsprechend solltest du die Karte modellieren mit:
Grenzen, Nestposition (z.B. als Bezugspunkt (0/0)), Futterpositionen, Pheromonpositionen und -konzentrationen.
Auf dem Hinweg müsstest du dann immer die Felder der Ameise aktualisieren und auf dem Rückweg zusätzlich die der Karte. Das Karten-Update könnte aber getrennt stattfinden, so dass alle Ameisen mit demselben Kartenzustand arbeiten würden.
Wenn du diesen Weg einschlagen willst, könnte ich dir evtl. programmiertechnisch unter die Arme greifen, aber es bleiben noch Probleme wie:
- Wie merkt die Ameise, dass sie nicht zwischen zwei starken Pheromonpunkten hin- und herwandert?
- Ist eine kartesische Karte die geeignete Darstellung? Ich habe Algorithmen dieser Art immer nur auf Graphen gesehen...
- Sollte man sich für das Pheromschnüffeln nicht etwas Flexibleres einfallen lassen wie z.B., dass eine Ameise mit einer best. Wahrscheinlichkeit zur stärksten Konzentration wandert, aber nicht 100%ig?
Mach dir ein paar Gedanken und melde dich wieder.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:20 Mi 04.06.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:22 Di 03.06.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|