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
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.
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. Formore help, see Choosing the Algorithm in the documentation.
> In quadprog at 371
Exiting: the constraints are overly stringent;
no feasible starting point found.
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.
_________________
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.
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
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.