|
|
Simulated Annealing mit Randbedingungen? |
|
DeepFritz |
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 31.05.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2017, 17:14
Titel: Simulated Annealing mit Randbedingungen?
|
|
|
|
|
Hallo zusammen,
ich nutze den Simulated Annealing Algorithmus der Optimization-Toolbox.
Ich habe schon gesehen, dass man den Suchraum durch Upper- und Lower Bounds eingrenzen kann. Da jede Evaluierung meiner Zielfunktion extrem aufwendig ist, würde ich diese Einschränkung gerne durch eine Randbedingung erweitern. Mir ist nämlich bekannt, dass die Variablen des Problems sinnvollerweise nur Werte in aufsteigender Reihenfolge annehmen können.
Wenn ich also drei Variablen a, b und c habe, dann muss immer gelten: a>b>c
Diese Möglichkeit scheint die Toolbox merkwürdigerweise nicht vorzusehen (anders als z.B. beim Genetischen Algorithmus). Gibt es da irgendeinen Trick, wie ich sie doch noch einbauen kann?
Ich hatte schon überlegt, Lösungen, die diese Randbedingung verletzen einfach "nachträglich" in der Objective Function auszusortieren, diesen Lösungen also einfach ohne Berechnung einen schlechten Fitnesswert zuzuweisen. Das Problem das ich damit sehe ist, dass die Temperatur dann auch sinkt, wenn tatsächlich gar kein Lösungskandidat berechnet wurde. Habt ihr da evtl. eine Idee?
|
|
|
|
|
DeepFritz |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 31.05.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.09.2017, 12:01
Titel:
|
|
|
|
|
Ich habe das Problem gelöst. Wenn man sich die Quelltexte der Toolbox ansieht, kann man erkennen, dass eine spätere Erweiterung um Randbedingungen an einigen Stellen durchaus schon vorgesehen ist. An einigen anderen Stellen fehlt die Umsetzung aber noch.
Prinzipiell ist eine saubere Lösung, d.h. die Erweiterung der Toolbox um Randbedingungen für Simulated Annealing, durchaus machbar.
Sie schien mir nach einigem Herumprobieren aber den Aufwand nicht Wert zu sein. Ich habe daher eine "quick and dirty" Lösung gewählt:
Der eigentliche Würfelprozess, in dem neue Lösungskandidaten erzeugt werden, findet in der jeweiligen Annealingmethode statt. Ich verwende Fast Annealing. Hierzu wird die Funktion "annealingfast.m" aufgerufen, die sich in
..\MATLAB\R20xxb\toolbox\globaloptim\globaloptim
befindet.
Hier habe ich einfach eine While-Schleife um den Würfel herumgelegt, in der ich meine Randbedingungen formuliert habe. Es wird jetzt also einfach so oft neu gewürfelt, bis zufällig ein Ergebnis herauskommt, das alle Randbedingungen erfüllt.
Ein rechnerischer Mehraufwand ist dadurch in meinem Fall nicht spürbar.
Nachteil dieser schnellen Lösung ist natürlich, dass das Ding jetzt nur noch funktioniert, wenn man die Randbedingungen im Quelltext anpasst. Das stört mich aber erstmal nicht.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|