Ich verwende den GlobalSearch Solver und habe das Problem mit createOptimProblem definiert. Dort habe ich die NB als Parameter 'c' übergeben und hierzu entsprechend umformuliert, z.B. so:
Code:
c = [X(20) - (100 - max([max(X(1:3))max(X(5:7))max(X(10:17))]);...]
Weitere Gleichheits-NB werden mit "ceq" übergeben, diese sind nicht-linear.
Das von GlobalSearch gelieferte Ergebnis erfüllt die in 'ceq' enthaltenen NB, nicht jedoch die mit min() und max() formulierten NB in 'c'. Liegt dies daran, dass lineare NB evtl. nicht mit 'c' sondern mit 'Aineq' und 'bineq' übergeben werden müssen? Oder können min() und max() nicht zur Formulierung von NB genutzt werden?
poste doch bitte den tatsächlichen Code statt solcher Schnipsel.
Zitat:
Liegt dies daran, dass lineare NB evtl. nicht mit 'c' sondern mit 'Aineq' und 'bineq' übergeben werden müssen?
Lineare NB sollten auch als solche angegeben werden. Deine Ungleichungen sind aber nicht linear.
Was ist denn die Rückmeldung von GlobalSearch? Falls diese besagt, dass ein Minimum gefunden wurde, dann wurden die Gleichungen wohl falsch übergeben. Genaueres kann man aber nur sagen, wenn man den tatsächlichen Code sieht.
GlobalSearch stopped because it analyzed all the trial points.
27 out of 62 local solver runs converged with a positive local solver exit flag.
Xgs = (hier der Ergebnisvektor)
fval_gs = (hier der Wert der ZF)
exitflag =
2
output =
funcCount: 175106
localSolverTotal: 62
localSolverSuccess: 27
localSolverIncomplete: 11
localSolverNoSolution: 24
message: 'GlobalSearch stopped because it analyzed all the trial points.
In meinem zweiten Post haben sich lediglich die Zahlen und Indizes geändert, von der Struktur her ist die Ungleichung aus meinem ersten Post jedoch gleich der 3. Ungleichung in 'c' in 'prog_constraint'. Wenn ich wie von dir vorgeschlagen Xgs in prog_constraint einsetze, erhalte ich tatsächlich Nullen (abgesehen von der Toleranz):
Die ersten beiden Ungleichungen sind auch erfüllt, jedoch nicht die 3. und die 4. Die Ausgabe in 'cineq' scheint jedoch nur zwei statt vier Elemente zu enthalten, irgendwo liegt also ein Programmierfehler vor?
Auf interior-point werde ich umstellen, danke für den Tipp!
Die Ausgabe in 'cineq' scheint jedoch nur zwei statt vier Elemente zu enthalten, irgendwo liegt also ein Programmierfehler vor?
Davon ist auszugehen, ja.
Wenn ich die von dir gepostete prog_constraint teste, bekomme ich für c auch einen Vektor mit 4 Elementen zurück. Ich vermute also mal, dass du auch da anderen Code verwendest?
komisch, ich verwende den Code genau so wie gepostet. Kann es damit zusammenhängen, dass ich in 'ceq' 2 nicht-lin. Gleichungen definiere? Überträgt sich die Dimension von 'ceq' in irgendeiner Form auf 'c'?
Kann es damit zusammenhängen, dass ich in 'ceq' 2 nicht-lin. Gleichungen definiere? Überträgt sich die Dimension von 'ceq' in irgendeiner Form auf 'c'?
Nein, und nein.
Grüße,
Harald
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.