|
|
GA-Toolbox: Ganza Zahlen als Constraint definieren |
|
kub |

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 08:15
Titel: GA-Toolbox: Ganza Zahlen als Constraint definieren
|
 |
Hallo zusammen,
ich habe eine Frage zur implementierung von Constraints in der GA-Toolbox.
Und zwar möchte ich für eine Optimierungsvariable nur ganze Zahlen (oder ganze Zahlen +/- eine gewisse Toleranz) zulassen. Das wäre theoretisch über den Modulo-Operator möglich, indem ich für die Variable x1 mod(x1,1)<0.01 definiere. Damit würde ich für x1 ganze Zahlen mit einer Toleranz von 0.01 zulassen.
Meine Frage lautet nun, wie ich das am besten implementiere, bzw. ob es überhaupt möglich ist?
Danke und Grüße
kub
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.495
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 08:36
Titel:
|
 |
Hallo,
Diese Möglichkeit ist insofern schlecht, als es durch das unstetige Verhalten sehr schwierig für eine Population sein wird, sich daran anzupassen.
Wenn es sich bei den ganzzahligen Variablen um nur eine handelt, würde ich die Zielfunktion mit round(x1) auswerten und round(x1) als letztliches Ergebnis betrachten.
Gefahr: x1 muss stark mutieren, um überhaupt andere Werte anzunehmen.
Workaround: round(x1*10) und entsprechend round(x1*10) als Ergebnis betrachten.
Noch sauberer ist es natürlich, die Variablen explizit einzuschränken. Dazu müsste man allerdings eigene creation, mutation und crossover functions schreiben und immer sicherstellen, dass da am Ende ganzzahlige Variablen rauskommen, wo es gewünscht ist. Damit ist also ein gewisser Aufwand verbunden.
Grüße,
Harald
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 08:50
Titel:
|
 |
Ja es handelt sich nur um eine Variable (von insgesamt 10), die möglichst ganzzahlige Werte annehmen soll.
Kann ich round(x1) denn in den Constraints definieren oder muss es in der Optimierungsroutine selbst implementiert werden? Wenn als Constraint, wäre ich für ein Beispiel dankbar, da ich noch relativ unerfahren in Matlab bin.
kub
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.495
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:04
Titel:
|
 |
Hallo,
ich würde es nicht in den Constraints, sondern direkt in der Fitnessfunktion umsetzen. Wenn du also sqrt(1 + x1^2) minimieren willst, würde ich stattdessen sqrt(1 + round(x1)^2) minimieren. Und wenn als Ergebnis für x1 5,3 rauskommt, würde ich das als 5 interpretieren. Falls es Constraints gibt, die sich auf x1 beziehen, müssten die ebenso umgesetzt werden.
Aber damit ein wenig vorsichtig sein, weil das ein Workaround ist.
Welche Werte sind denn sinnvoll für die ganzzahlige Variable?
Aus Neugierde würde mich auch mal der Hintergrund des ganzen interessieren.
Grüße,
Harald
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:11
Titel:
|
 |
Das implementieren in der Fitnessfunktion is etwas schwierig, da es sich um Radiale Basisfunktionen handelt. Da müsste ich mich mal hineinknien, und schauen ob es möglich ist.
Der Hintergrund ist folgender:
Ich optimiere eine elektrische Maschine, indem ich mehrere Zielgrößen, wie Drehmoment etc., mit Hilfe von Radialen Basisfunktionen zunächst approximiere und den Optimierungsalgorithmus auf diese Funktion anwende. Das Problem ist, dass einer der Parameter die Windungszahl der Maschine ist, welche natürlich nur ganzzahlige Werte annehmen kann. Bisher habe ich den resultierenden Wert im nachhinein gerundet, was allerdings die Genauigkeit des Ergebnisses verschlechtert.
Grüße,
kub
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.495
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:21
Titel:
|
 |
In welcher Größenordnung ist die Windungszahl? Gibt es da obere und untere Schranken?
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:24
Titel:
|
 |
Ja es gibt Schranken und der Bereich liegt etwa bei 10-20.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.495
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:34
Titel:
|
 |
Es mag nicht der eleganteste Weg sein, aber spricht etwas dagegen, die Windungszahl fest anzunehmen und dann die restlichen Parameter zu optimieren? Also
Grüße,
Harald
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:49
Titel:
|
 |
Würde auch gehen. Diesen (Um-)Weg will ich aber vermeiden. Außerdem verwende ich eine Mehrzieloptimierung und die Pareto-Front hätte dann nicht mehr unterschiedliche Windungszahlen.
Ich versuche mal die Rundungsbedingung zu implementieren.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.495
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 09:56
Titel:
|
 |
Vielleicht kannst du ja eine andere Funktion zwischenschalten, die das runden übernimmt, um nicht zuviel Aufwand zu treiben
Grüße,
Harald
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 10:00
Titel:
|
 |
Das ist eine gute Idee. Werde ich mal versuchen. Mal sehen, ob es den Algorithmus nicht verwirft, wenn man die Parameterwerte ändert.
|
|
|
kub |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 29.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.07.2009, 12:59
Titel:
|
 |
Also das zwischenschalten der Rundungs-Funktion klappt prima.
Bei den Ergebnissen ist allerdings darauf zu achten, dass der Optimierer die nicht gerundeten Paremeter ausgiebt (da er ja von der Rundungsoperation nichts weiß). Die Ergebnisse entsprechen ihrerseits jedoch den gerundeten Parametern.
Vielen Dank für die Hilfe!
Grüße
kub
|
|
|
|
|
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 - 2025
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.
|
|