Das Problementsprechende Codierung Particle Swarm Optimization
Ich habe auf Particle Swarm Optimization ein wenig Forschung zu tun, so dass ich sagte, ich es auf die Probe gestellt würde.
Das Problem, das ich zu lösen versuche, ist das Balanced Partition Problem - oder reduziert einfach auf das Subset Sum Problem (wo die Summe die Hälfte aller Zahlen ist).
Es scheint die allgemeine Formel für Geschwindigkeiten für Partikel Aktualisierung ist
aber ich werde nicht für diese Frage zu sehr ins Detail gehen.
Da es keinen PSO-Versuch online für das Subset-Sum-Problem gibt, schaute ich stattdessen auf das Problem des reisenden Verkäufers.
Sie sind Ansatz für die Aktualisierung der Geschwindigkeiten beteiligten Gruppen von besuchten Städten, Subtrahieren voneinander und einige Manipulation daran.
Ich sah keine Beziehung zwischen diesem und der obigen Formel.
Mein Ansatz
So verschrottet ich die Formel und versuchte, meine eigene Herangehensweise an das Subset-Sum Problem.
Ich verwendete im Wesentlichen gbest
und pbest
, um die Wahrscheinlichkeit des Entfernens oder Hinzufügen eines bestimmten Elements zu der Teilmenge zu bestimmen.
also - wenn mein Problemraum ist [1,2,3,4,5]
(Ziel ist 7
oder 8
) und meine aktuellen Teilchen (Subset) hat [1,None,3,None,None]
und die gbest
ist [None,2,3,None,None]
dann gibt es eine höhere Wahrscheinlichkeit des Haltens 3
ist, Hinzufügen 2
und 1
Entfernen , basierend auf
Ich kann Code aber nicht denken, dass es notwendig ist, erhalten Sie die Idee (ich benutze Python BTW - daher None
).
Also im Grunde funktionierte das bis zu einem gewissen Grad, ich bekam anständige Lösungen, aber es war sehr langsam bei größeren Datensätzen und Werten.
Meine Frage
Bin ich das Problem kodieren, und die Teilchen „Geschwindigkeiten“ auf intelligente Weise zu aktualisieren?
Gibt es eine Möglichkeit festzustellen, ob dies korrekt konvergiert?
Gibt es eine Ressource, die ich verwenden kann, um zu lernen, wie konvergente "update" -Formeln für bestimmte Problembereiche erstellt werden?
Vielen Dank im Voraus!
Vielen Dank, was für eine großartige detaillierte Antwort! Ich habe nur ein paar Fragen: Führe ich bei der Fehlerfunktion das Modell an, indem ich sage: Wenn der Fehler kleiner ist als der vorherige, kehren Sie zurück? Ist in diesem Fall die Fehlerfunktion kein Bestandteil der Update-Formel? Wenn du sagst - "Entferne basierend auf diesem Unterschied und den Partikelelementen" im Spiel ".", Bedeutet dies, wie nahe das Partikel an der Lösung ist und wie das Potenzial auf Basis der verbleibenden Zahlen überprüft wird der Satz?Ich bin ein wenig verwirrt hier –
(1) Ja, wenn Sie diese Prüfung machen, wird die Fehlerfunktion Teil des Updates, anstatt eine Vektorisierung Empfehlung. Die Funktion ist mit dem Gradienten in Newtons Methode oder Gradient Descent verwandt. (2) Ja, die Fehlerfunktion/der Gradient soll eine Heuristik (Schätzung) sein, die auf der Basis lokal verfügbarer Informationen suggeriert, wo die Lösung liegt. Es ist durchaus zulässig, sowohl die Differenz (Summe der Elemente im Vergleich zu 7 oder 8) als auch das Potenzial der verbleibenden Mitglieder zu verwenden. Dies wird Ihr Beispielproblem schnell lösen, aber Sie werden den Effekt mit einem größeren Eingabesatz sehen. – Prune
Vielen Dank! –