WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierung mit Matlab (allgemeine Diskussion)

 

MaD

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2008, 15:44     Titel:
  Antworten mit Zitat      
Hallo,


ich benutze für meine Optimierungsaufgabe die fmincon Funktion ... das Problem ist jedoch das er meine Nebenbedingung nicht erfüllt und folgende Fehlermeldung ausgibt "No active inequalities"

muss ich diese Nebenbedingungen explizit aktivieren?

Liebe Grüße

MaD


Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 17.12.2008, 17:08     Titel:
  Antworten mit Zitat      
Hallo MaD,

"no active inequalities" bedeutet, dass keine der Ungleichungs-Nebenbedingungen mit Gleichheit erfüllt ist. Mit einer Aktivierung hat das nichts zu tun.

Was meinst Du genau mit "er erfüllt meine Nebenbedingung nicht"? Sind es lineare oder nichtlineare NB? Sind alle verletzt oder nur bestimmte? In welcher Größenordnung sind die NB verletzt (im Vergleich zur Größenordnung der NB selbst und im Vergleich zur Zielfunktion)?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MaD

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2008, 17:32     Titel:
  Antworten mit Zitat      
Hi Bijick

erstmal danke für die schnelle antwort

ich kann dir ja mal mein problem schildern ... ich habe ein fertiges simulinkmodell aus dem ich mithilfe eines m-files meine zielgröße auslese

diese zielgröße soll minimiert werden und ich möchte die optimalen parameter erhalten ... die nebenbedingung ist das eine ungleichung (regeldifferenz e<=const) erfüllt sein soll

und ich verstehe das nun als laie so, dass er mir nur die optimalen parameter sucht, die diese nebenbedingung erfüllen oder seh ich das falsch?

jedoch wenn ich das optimierungsskript starte wird diese nebenbedingung nicht eingehalten, dh die regeldifferenz wird größer als die von mir vorgegebene grenze

ich kenne mich noch nicht so gut in der matlabprogrammierung aus Wink nur als hinweis

Viele Grüße

Mad
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 18.12.2008, 11:42     Titel:
  Antworten mit Zitat      
Hallo MaD,

dass Du Probleme mit der Matlab-Programmierung hast, ist kein Problem, dafür bin ich ja da. Wink Allerdings sind einige meiner Fragen noch offen.

Zum Beispiel kann es leicht passieren, dass eine Nebenbedingung (die man ganz strikt eingehalten braucht) durch das Verfahren in einer geringen Größenordnung verletzt wird. Das kommt daher, dass der Gewinn in der Zielgröße gegen die Verletzung der Nebenbedingung abgewogen wird. Als Beispiel: Die Zielgröße kann von 10 auf 5 minimiert werden - dabei ändert sich der Wert der Nebenbedingung von 0.05 auf 0.06, wodurch sie verletzt wird. Durch die verschiedenen Größenordnungen gewichtet Matlab aber den Gewinn in der Zielgröße stärker. Abhilfe kann eine reine Skalierung sein. Multipliziere die gesamte Nebenbedingung mit 100, sodass sie die gleiche Größenordnung hat wie die Zielgröße. Dann wird alles angemessen gewichtet.
Manchmal hilft auch ein Puffer: Verkleinere die Schranke const etwas. Dann werden Verletzungen stärker bestraft.

Eine Frage hab ich noch: Ist denn der Startwert zulässig, das heißt erfüllt der die Nebenbedingung? (Erkennbar an der Meldung "infeasible start point" bei Unzulässigkeit) Falls der Startwert schon schlecht ist, gelingt es manchmal gar nicht, in den zulässigen Bereich zu kommen, und es sollten andere Startwerte probiert werden, die zulässig sind.

Manchmal liegt aber auch ein ganz anderes Problem vor: Der angegebene Zielfunktionswert oder die maximale Nebenbedingungsverletzung in der Ausgabe im Command Window sehen gut aus, lassen sich aber nicht reproduzieren, wenn man den Optimalwert selbst auswertet. Das kann natürlich einerseits an einem Fehler im Programm liegen, andererseits war es für mich auch schon manchmal schier unerklärlich. Geholfen hat dann ein Ablauf von fmincon im debug-Modus mit schrittweiser Optimierung (warum auch immer).

Das sind jetzt viele verschiedene Ansätze. Welcher davon hilft (und ob überhaupt) hängt ganz von Deinem Problem ab.

Herzliche Grüße
Bijick
_________________

>> why

Zuletzt bearbeitet von Bijick am 18.12.2008, 17:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MaD

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2008, 16:58     Titel:
  Antworten mit Zitat      
Hallo Bijick,

das Problem mit der Größenordnung dürfte eigentlich nicht der Fall sein, da ich die Größen vorher schon Skaliere, so dass sie alle im gleichen Wertebereich liegen.

Der Startwert ist auch zulässig!

Mein Problem ist ja eher, dass er die Nebenbedingung bei der Optimierung gar nicht berücksichtigt zumindest sieht es für mich so aus. Ich poste dir mal meine m-Files vlt siehst du den Fehler ja dann auf anhieb.

Nebenbedingung
function [c, ceq] = nonlcon(E)

c = [E-5];
ceq = [];

Optimierung
function P_opt = Optimierer
P0 = [2.5 3.0];

options = optimset('Display','iter','LargeScale','off');
P = fmincon(@Kst,P0,...
[],[],[],[],...
[2.1 2.1],[6 6],...
@nonlcon,options);

Ich hoffe, dass hilft erstmal weiter. Mit dem debug-Modus kenne ich mich gar nicht aus, wie könnte ich fmincon darin starten?

Viele Grüße

MaD
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 18.12.2008, 17:52     Titel:
  Antworten mit Zitat      
Hallo MaD,

das war eine gute Idee von Dir, den Code zu posten. Der Fehler liegt hier in der Funktion nonlcon. Die muss mit genau den selben Parametern aufgerufen werden wie die Zielgröße Kst. Also:

Code:
function [c, ceq] = nonlcon(P)

E = ...   % Funktion von P(1) und P(2)
c = [E-5];
ceq = [];


Klappt das?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MaD

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2008, 14:16     Titel:
  Antworten mit Zitat      
Hallo Bijick,

eine kurze Zwischenfrage habe ich da noch und zwar muss die Nebenbedingung von den gleichen Parametern abhängen? Gibt es da keine Möglichkeit eine Größe einzubeziehen, die nichts mit der Optimierungsaufgabe an sich zu tun hat?

Viele Grüße

MaD
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 19.12.2008, 16:49     Titel:
  Antworten mit Zitat      
Hallo MaD,

Zielfunktion und Nebenbedinung müssen von denselben Variablen (bei Dir: Parametern) abhängen, alles andere ist unlogisch. Was allerdings funktioniert, ist, die drei Parameter P = [P(1), P(2), E] zu verwenden und aus Ihnen den neuen Parametervektor zu bauen. Die Zielfunktion Kst könnte dann E ignorieren, nonlcon könnte die Ps ignorieren:

Code:
function [c, ceq] = nonlcon(P)

E = P(3);
c = [E-5];
ceq = [];


Aber hängt nicht E tatsächlich von den Ps ab?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MaD

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2008, 15:32     Titel:
  Antworten mit Zitat      
Die Parameter P(1) und P(2) sind bei mir Schaltgrenzen, die der Optimierer verändern darf.

Nur das E ist eine Geschwindigkeitsdifferenz, die aus der Wahl der Parameter resultiert und diese würde ich gerne mit Hilfe der Nebenbedingung beschränken, so dass es keine zu großen Abweichungen von meinem Sollverlauf bei der Optimierung gibt. Ich kann den physikalischen Zusammenhang zwischen den Schaltgrenzen und dem E nicht explizit angeben. E kann auch nicht als eine Art Parameter vorgegeben werden, da diese Geschwindigkeitsdifferenz aus dem simulierten Modell resultiert ...

bin ich da mit dieser Nebenbedingung auf dem falschen Weg oder ist das auch möglich?

weil was ich bis jetzt alles ausprobiert habe führt nicht zu dem Ziel ... denn die eigentliche Aufgabe des Optimieres soll sein, dass er die Schaltgrenzen variieren darf bis er sein Optimum gefunden hat, aber diese Geschwindigkeitsdifferenz auf jedenfall einhalten muss.

Viele Grüße

MaD
 
-horn-
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2009, 17:22     Titel:
  Antworten mit Zitat      
moien,

ich missbrache mal diesen thread Smile.
ich habe mir den thread hier soweit durchgelesen und dabei festgestellt, dass man zur lösung seiner optimierprobleme mit matlab schon ein wenig erfahrung mit matlab haben muss.
ich habe bis jetzt nur mit simulink gearbeitet, um während meines studiums eine regelungstechnikaufgabe zu lösen. dazu brauchte ich aber den matlab-anteil nicht, sondern konnte eigentlich alles direkt mit simulink erstellen.

nun würde ich gerne ein optimierungsproblem lösen und stehe gerade davor mir etwas selber mit java zu programmieren oder es mit matlab zu machen.
nur bin ich bei matlab ein purer anfänger und würde nun gerne von euch wissen, wie man am effektivsten in matlab einsteigen kann und sich selber peu a peu die grundlagen beibringt und das aber dann alles in hinsicht schnellstmöglich zu den optmierungsaufgaben zu kommen (also was matlab da bietet, wie man dieses aufruft und nutzt).

hat da jemand einsteigertipps für mich?

würde mich sehr freuen Smile

grüße, Andreas

PS: nun dürfen steine auf mich neuling geworfen werden Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 15.04.2009, 10:37     Titel:
  Antworten mit Zitat      
Hallo horn,

weder hast Du den Thread missbraucht, noch werden hier Steine auf Neulinge geworfen. Smile

Für Einsteigertipps zu Matlab empfehle ich mal die Link-Tipps von nschlange. Insbesondere das Matlab-Tutorial mit Beispielcode hier gefällt mir gut.

Wenn Du Dein Optimierungsproblem kurz beschreibst, kann ich Dir vielleicht schon sagen, wie die Erfolgsaussichten mit Matlab stehen. Wichtig sind die Art der Zielfunktion (linear? nichtlinear?), Anzahl der Variablen und die Art der Nebenbedingungen (keine? Schranken? Lineare oder nichtlineare NB?) Weiterhin ist wichtig, ob ein bestimmter Algorithmus verwendet werden soll.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
-horn-
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2009, 23:22     Titel:
  Antworten mit Zitat      
Bijick hat Folgendes geschrieben:
Hallo horn,

weder hast Du den Thread missbraucht, noch werden hier Steine auf Neulinge geworfen. Smile

Für Einsteigertipps zu Matlab empfehle ich mal die Link-Tipps von nschlange. Insbesondere das Matlab-Tutorial mit Beispielcode hier gefällt mir gut.

Wenn Du Dein Optimierungsproblem kurz beschreibst, kann ich Dir vielleicht schon sagen, wie die Erfolgsaussichten mit Matlab stehen. Wichtig sind die Art der Zielfunktion (linear? nichtlinear?), Anzahl der Variablen und die Art der Nebenbedingungen (keine? Schranken? Lineare oder nichtlineare NB?) Weiterhin ist wichtig, ob ein bestimmter Algorithmus verwendet werden soll.

Herzliche Grüße
Bijick


moien,

hui, dann bin ich ja erleichtert Smile

also, ganz grob zusammengefasst handeltes sich um die bewegungsgleichung einer rakete.
anfangsbedingung kann man geben (senkrechter start wie man das kennt und schubvektor direkt in flugrichtung), endbedingung ist dann zielhöhe und bei einer kreisbahn als orbit dann die passende geschwindigkeit und winkel zum horizont (0 grad).

als variierbare stellgröße wäre das der schubvektor.

um das nicht zu schwer zu haben nur auf einer 2d ebene.

ich bin mir nicht ganz sicher, aber ich meine, dass es nicht lineare gleichungen sind und diese nicht genau lösbar sind, da diese gekoppelt sind.

als agorithmus, hmm, also ich habe mir zb just bisektion mit java programmiert und monte carlo schwebt mir vor. die komplette kombinatorik zu machen wäre ja sehr sehr langwierig. was matlab so bietet kann ich ja wie gesagt nicht sagen, deswegen bin ich da Smile

grüße, Andreas
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 18.04.2009, 11:41     Titel:
  Antworten mit Zitat      
Hallo Andreas,

wenn ich das richtig verstehe, handelt es sich also um ein System von nichtlinearen Gleichungen in Abhängigkeit von zwei oder drei Variablen ("Schubvektor"), stimmt's?

Das kann man in Matlab mit
Code:

lösen; allerdings nur, wenn man die Optimierungs-Toolbox hat. Der Schwierigkeitsgrad erscheint mir eher gering (vielleicht gibt's aber Tücken im Detail, das müsste man sehen), eine eigene Programmierung wäre wahrscheinlich aufwändiger. Allgemein müsstest Du Dein Gleichungssystem in die Form F(x) = 0 bringen, wobei x der Schubvektor ist und F ein Vektor von Funktionen.

Wennn Du zur Umsetzung weitere Fragen hast, eröffne lieber ein neues Thema im Forum "Toolboxen". Allgemeinere Fragen beantworte ich gerne auch hier.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2009, 17:25     Titel: fminsearch
  Antworten mit Zitat      
Hallo alle zusammen.

Mein Problem hängt mit fminsearch zusammen. Die Frage ist nun, warum die Parametersuche für eine Funktion, wie im Minimalbeispiel beschrieben, nicht funktioniert.

Liegt es an der Definition der Funktion?

Minimalbeispiel:
Code:

img1 = [4 2 3 4 5; 2 3 4 5 6; 1 2 3 4 7];
img2 = [5 4 3 2 2; 6 5 4 3 2; 7 4 3 2 3];

myfun = @(x) bildDiff(img1, img2,x);

options = optimset('Display','iter')
%options = optimset('Display','iter','DiffMaxChange', 2, 'DiffMinChange', 1)

img1
img2
x0 = [3, 5];

parameterMinimum = fminsearch(myfun,x0,options)

% Fullsearch.
for i = 1:3
    for j = 1:5
        D(i,j) = myfun([i,j]);
    end
end
D

function y = bildDiff(img1, img2, x)
x = round(x);
y = sum(sum((img1(1:x(1),1:x(2))-img2(1:x(1),1:x(2))).^2));
 


Natürlich könnte ich einfach die Indices vom Minimum von D bestimmen und hätte dann auch meine Parameter, aber ich würde gern verstehen aus welchem Grund die Parametersuche für diese Definition nicht funktioniert.

Liegt es womöglich daran, dass die Schrittweite für x zu gering ist?

Vielen Dank und schöne Grüße

Tobi
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 13.08.2009, 14:40     Titel: Re: fminsearch
  Antworten mit Zitat      
Hallo Tobi,

Du vermutest richtig.

Tobi hat Folgendes geschrieben:
Liegt es womöglich daran, dass die Schrittweite für x zu gering ist?


Daran liegt es. Man erkennt es daran, dass sich die Werte in der Spalte "min f(x)" nicht ändern. In der Funktion fminsearch.m findet man die Zeilen

Code:
% Continue setting up the initial simplex.
% Following improvement suggested by L.Pfeffer at Stanford
usual_delta = 0.05;             % 5 percent deltas for non-zero terms
zero_term_delta = 0.00025;      % Even smaller delta for zero elements of x
...


Die zuerst berechneten Punkte des Simplex weichen jeweils um 5% vom gewählten Startpunkt ab, bei Dir also

Code:
[3;5], [3.15;5], [3;5.25]


Gerundet ist das immer derselbe Punkt.

Einen Lösungsansatz habe ich so spontan leider nicht.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.