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

quadprog in Simulink; Fehler bei Erhöhung der Beschränkung

 

Waldemar
Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 05.02.2013, 19:44     Titel: quadprog in Simulink; Fehler bei Erhöhung der Beschränkung
  Antworten mit Zitat      
Hallo,

ich verwende quadprog in folgender Form in einer in Simulink eingebetteten Funktion (MP-Regler):

Code:
DELTA_u=zeros(l*Hu,1);
eml.extrinsic('quadprog');
eml.extrinsic('optimset');
optopt2=optimset('LargeScale','off','Algorithm','interior-point-convex','Display','off');
DELTA_u=quadprog(Htrans,Gtrans,Acons,bcons,[],[],[],[],[],optopt2);
.

Damit versuche ich in einem Modellbasierten-Prädiktiven-Regler (MP-Regler) die optimalen Stellgrößenänderungen zu berechnen!

Werden (nur) die Beschränkungen der Stellgrößen in quadprog berücksichtigt (Acons(18,9), bcons(18,1)) klappt alles wunderbar!
Berücksichtige ich zusätzlich die Beschränkungen für die Regelgrößen (Acons(420,9), bcons(420,1)) läuft die Simulation an (bis zum 12 Abtastschritt=0.66sec (diskrete Simulation)) , bricht allerdings dann ab un meldet folgenden Fehler:

Code:
MATLAB Function Runtime Error: Size mismatch for MATLAB expression 'quadprog'. Expected = 9x1 Actual = 0x0 Block MPC (#85) While executing: none
.

Hab es mal mit:
Code:

probiert, allerdings tritt der Fehler zur gleichen Zeit (t=0.66sec/12Abtastschritt) auf!?


Hat jemand vielleicht eine Idee, wie ich den Fehler eliminieren kann?
Wäre über Hilfe - wie immer - sehr dankbar!

MfG, Waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.02.2013, 21:08     Titel:
  Antworten mit Zitat      
Hallo,

ist DELTA_u das Rückgabeargument der MATLAB Function?

Schau doch mal, ob du das Problem außerhalb von Simulink nachstellen kannst. Ich kann mir vorstellen, dass das die Sache deutlich vereinfacht.

Alternativ: lass mal den Strichpunkt hinter quadprog weg und schau, was du da als Rückgabe bekommst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 05.02.2013, 23:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

schön, dass es dich gibt!Wink

Zitat:
ist DELTA_u das Rückgabeargument der MATLAB Function?

DELTA_u wird innerhalb des Simulink-Modells an eine andere eingebettete Funktion weitergeleitet!

Zitat:
Schau doch mal, ob du das Problem außerhalb von Simulink nachstellen kannst. Ich kann mir vorstellen, dass das die Sache deutlich vereinfacht.

Kann mir nicht vorstellen, dass ich quadprog auch außerhalb des Simulink-Modells berechnen kann!?

Zitat:
Alternativ: lass mal den Strichpunkt hinter quadprog weg und schau, was du da als Rückgabe bekommst.

Hab es mal mit dem Debugger probiert..nichts auffälliges!
Komisch nur, dass es immer zur gleichen Zeit passiert, oder?


Was kann hinter so einem Fehler stehen?
Sind es zu viele Nebenbedingungen?

MfG, Waldemar

PS: Anbei das gesamte Simulationsumfeld...mgl.weise hilft's, da das ganze mittlerweile ziemlich komplex geworden ist!

Optimierung.mdl
 Beschreibung:

Download
 Dateiname:  Optimierung.mdl
 Dateigröße:  183 KB
 Heruntergeladen:  418 mal
Opt_SimAufruf.m
 Beschreibung:

Download
 Dateiname:  Opt_SimAufruf.m
 Dateigröße:  2.03 KB
 Heruntergeladen:  404 mal
Optimierung_patternsearch.m
 Beschreibung:

Download
 Dateiname:  Optimierung_patternsearch.m
 Dateigröße:  4.9 KB
 Heruntergeladen:  410 mal

_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2013, 10:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
DELTA_u wird innerhalb des Simulink-Modells an eine andere eingebettete Funktion weitergeleitet!

Und was passiert dort? Bist du sicher, dass das Problem an quadprog liegt?

Zitat:
Kann mir nicht vorstellen, dass ich quadprog auch außerhalb des Simulink-Modells berechnen kann!?

du brauchst ja nur zu schauen, was deine Eingänge für die MATLAB Function sind, wenn es zur Fehlermeldung kommt.
Dann verwendest du den Code aus der MATLAB Function als normale Funktion, rufst diese mit diesen Eingabeargumenten auf. Meine Vermutung ist, dass die Funktion dann [] statt eines Vektors zurückgibt. Wieso das so ist, sollte sich auf diese Weise leichter herausfinden lassen.

Zitat:
Komisch nur, dass es immer zur gleichen Zeit passiert, oder?

Finde ich nicht. Wenn das selbe Programm mehrfach läuft, sollte es auch immer dasselbe machen. Wenn es also an einer Stelle in ein Problem läuft, sollte es immer in dieses Problem laufen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 08.02.2013, 20:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

habe mir die Matrizen, die quadprog zur Berechnung des Minimums brauchst (vor dem Fehler) ausgelesen und quadprog im Command Window ausprobiert!

(Ausschnitt Command Window:)
Code:
>> load AconsMITregel.mat
load bconsMITregel.mat
load GtransMITregel.mat
load HtransMITregel.mat

optopt2=optimset('LargeScale','off','Algorithm','interior-point-convex','Display','off');    
DELTA_U=quadprog(Htrans,Gtrans,Acons,bcons,[],[],[],[],[],optopt2)

DELTA_U =

     []

>>


Ohne die Vorgabe eines Algorithmus, ergibt sich folgendes Bild im Command Window:

Code:
>> load AconsMITregel.mat
load bconsMITregel.mat
load GtransMITregel.mat
load HtransMITregel.mat

   
DELTA_U=quadprog(Htrans,Gtrans,Acons,bcons,[],[],[],[],[])
Warning: Trust-region-reflective algorithm does not solve this type of problem, using active-set
algorithm. You could also try the interior-point-convex algorithm: set the Algorithm option to
interior-point-convex and rerun. For more help, see Choosing the Algorithm in the documentation.
> In quadprog at 371
Exiting: the constraints are overly stringent;
 no feasible starting point found.

DELTA_U =

    7.4768
    7.4768
   52.5232
         0
         0
         0
         0
         0
         0

>>


Jetzt weiß ich zumindest, wo der Fehler steckt.

Hab es mal in dieser Variante in mein Simulink-Modell eingesetzt,...die Simulation lief durch, allerdings war die Regelung nicht zu gebrauchen.

Gibt es vielleicht einen anderen QP-Solver, der mit diesen Nebenbedingungen umgehen könnte?
Falls nicht, gibt es unter Matlab einen anderen Lösungsweg für dieses Problem?

MfG, Waldemar

PS: Nochmals danke für deine Tipps, Harald.
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.02.2013, 22:41     Titel:
  Antworten mit Zitat      
Hallo,

was wird angezeigt, wenn du interior-point convex nimmst und 'Display' auf 'iter' setzt oder zumindest nicht ausschaltest?

Ist sicher, dass die Nebenbedingungen nicht widersprüchlich zu einander sind?

Andere algorithmische Möglichkeiten sind mir nicht bekannt. Es könnte höchstens helfen, einen Startwert anzugeben - wenn sich das ganze über die Zeit nicht dramatisch ändert, dann beispielsweise die Lösung aus der vorherigen Iteration.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 16.02.2013, 15:26     Titel:
  Antworten mit Zitat      
Hallo Harald,

für meine Zwecke - die Berücksichtigung nur der Stellgrößenbeschränkungen reicht aus - liefert quadprog die gewünschten Ergebnisse, so dass ich - hauptsächlich aus Zeitmangel - an diesem Problem nicht weiter geforscht hatte.

Jedenfalls vielen Dank für deine Hilfe...hatte enorm weiter geholfen.

MfG, Waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 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.