ich bin dabei ein Problem mit 2 Optimierungskriterienüber den gamultiobj lösen zu lassen.
Hierbei gibt es ja jetzt eine Einstellung in den Optionen, dass ich mir die Paretofront anzeigen lassen kann. Das habe ich mit " 'PlotFcn',@gaplotpareto " gemacht.
Allerdings würde ich gerne einen Großteil oder alle Ergebnisse anzeigen lassen da ich wissen muss, ob meine Ziele korrelieren oder gegeneinander arbeiten.
Bisher wird mir ja nur die tatsächliche Front angezeigt.
Ich habe schon eine ganze weile in der Hilfe geblättert, aber keine Antwort gefunden.
Ich hoffe ihr könnt mir helfen,
Also ich habe glaube ich alle Plotfcns mittlerweile getestet, aber keine davon zeigt mir einfach nur alle Punkte an, die während der Optimierung gefunden werden.
Und wie ich so eine Funktion selbst schreiben kann, bin ich ehrlich gesagt ratlos, habe mir die Hilfe dazu zwar durchgelesen, aber...
ah hat ein wenig gedauert.
Danke für den Hinweis.
Auch wenn euch das nicht gefallen wird habe ich es über eine globale Variable gelöst.
Diese wird vor dem gamultiobj() Aufruf erzeugt und in der Gütefunktion wird über
EP_fb = [EP_fb; obj] der Funktionswert der Optimierung immer an die vorhandenen Angehängt.
So kann ich danach den Plot manuell erzeugen, was auch von Vorteil ist da bei mir zwei verschiedene Optimierungen nacheinander laufen und ich so beide Kriterienräume plotten kann.
Mit dem PlotFctn wurde die erste Pareto-Front ja immer überschrieben.
eps = 0.05;
nb = max(D_opt.G_PsipDelta_R)>(1+eps)*Psip_max;
delta_max= max(D_opt.G_PsipDelta_R)-Psip_max;
% obj(1)= trapz(abs(dif_psip)); %psip im frequeznbereich ansteigender gerade folge if nb
obj(1) = trapz(abs(dif_psip))/obj_ref(1)+1+delta_max*100;
obj(2)= trapz(abs(dif_ay))/obj_ref(2)+1+delta_max*100; %ay soll const im FB sein
else
obj(1) = trapz(abs(dif_psip))/obj_ref(1);
obj(2)= trapz(abs(dif_ay))/obj_ref(2); %ay soll const im FB sein
end
EP_fb = [EP_fb;obj];
So sieht die Funktion aus, die mein problem optimieren soll. Soweit funktioniert auch die Sammlung der Entwurfspunkte.
Benutze ich allerdings die Parraleltoolbox, also z.B.
So läuft die Optimierung ab.
In den Optionen habe ich 'UseParallel','always' eingestellt, womit eine von mir vorgegebene anzahl an kernen ( matlabpool open x) verwendet wird.
in der globalen Variable soll jedes Ergebnis obj=optimierung_numerisch(...) gespeichert werden. Wenn ich keinen matlabpool geöffnet habe funktioniert das auch, ich erhalte eine Matrix EP_fb(...,2) mit vielen >Zeilen, abhängig von Population und Generationen.
Öffne ich einen Pool mit mehreren Kernen "matlabpool open 6" erhalte ich danach nur eine Zeile, statt mehreren 100.
Hoffentlich hab ich mich diesmal verständlicher ausgedrückt
Da ich keine möglichkeit sehe die Werte außer mit einer globalen Variable, aus dem Optimierungsprozess zu bekommen, wollte ich bei jedem aufruf eine Datei einlesen, und am Ende den eingelesenen Wert + das neue Ergebnis wieder in die Datei schreiben.
Das bedeutet ja eigentlich, dass in der Datei keine Werte enthalten sind oder? Öffne ich danach die EP_fb.csv sind elemente enthalten, diesmal z.B 51 Zeilen.
edit: der Fehler kommt immer zu unterschiedlichen Zeiten, mal ist nichtmal die Erste Generation berechnet, ein anderes mal tritt der Fehler erst bei Generation 4 auf...
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
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.