|
|
[Optimization Toolbox] fmincon beenden bei bestimmtem Fehler |
|
lumbricus |
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 06.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.12.2010, 15:32
Titel: [Optimization Toolbox] fmincon beenden bei bestimmtem Fehler
|
|
hey zusammen,
ich optimiere eine funktion die einen Fehler angibt über 12 parameter, heißt:
[Corr,rms_dev,exit,output]=fmincon(@(Corr)Recalc2(datensatz,Corr),Corr0,A,b,Aeq,beq,lb,ub,nonlcon,options);
rms_dev ist mein fehler. ich möchte gerne über eine gui den fehler vorgeben, bei der die optimierung abgebrochen werden soll. Wie bekomme ich das hin?
habe versucht per
options = optimset('TolFun', ##)
das irgendwie hinzubekommen aber damit erziele ich nicht die ergebnisse die ich mir vorstelle.
bis jetzt funktionieren die abbruch kriterien 'MaxIter' und 'MaxFunEvals'
schon mal danke!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.12.2010, 19:32
Titel:
|
|
Hallo,
du denkst vielleicht an 'TolX'.
Ansonsten ist "nicht die Ergebnisse bekommen, die man sich vorstellt" doch eine seeehr vage Problembeschreibung.
Grüße,
Harald
|
|
|
lumbricus |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 06.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.12.2010, 09:26
Titel:
|
|
sorry wenn ich mich nicht genau genug ausgedrückt habe,
rms_dev ist mein fehler, also eine funktion die mir einen wert liefert
ich möchte jetzt angeben, dass sobald der fehler zb. unter 5 geht die optimierung abgebrochen wird.
dies passiert bei mir weder mit den optionen TolFun und TolX. wobei meiner meinung nach Toleranz der funktion das richtige für mein problem wäre.
ich gebe zb. TolFun=5, aber die optimierung läuft weit unter 5 weiter.
So klarer?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 09.12.2010, 20:02
Titel:
|
|
Hallo,
versuch mal, 'Display' auf 'Iter' zu setzen und den Output reinzukopieren.
Grüße,
Harald
|
|
|
lumbricus |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 06.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.12.2010, 11:46
Titel:
|
|
|
|
|
hey,
eingestellte options...rest weggelassen zwecks übersicht:
options =
Display: 'iter'
MaxFunEvals: []
MaxIter: []
TolFun: 5
das ist was die optimierung auspuckt (exitflag und output noch ausgegeben):
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In fmincon at 271
In gui>opti_Callback at 2192
In gui_mainfcn at 75
In gui at 43
max Directional First-order
Iter F-count f(x) constraint Step-size derivative optimality Procedure
0 13 27.0274 -0.03258
1 27 19.0855 -0.01629 0.5 15.8 246
2 40 8.33494 0 1 -7.95 9.47
Optimization terminated: first-order optimality measure less than options.TolFun
and maximum constraint violation is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1 2
7 3
4
5
6
8
10
11
12
exit =
1
output =
iterations: 2
funcCount: 40
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 1.9918
cgiterations: []
message: [1x143 char]
das ist der fehler den die optimierung zurückgibt:
rms_dev =
8.3349
meiner meinung nach sollte die optimierung erst beendet werden wenn rms_dev unter 5 ist. oder bin ich da schief gewickelt?
danke für dein bemühen harald!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.12.2010, 22:22
Titel:
|
|
Hallo,
weitere Frage: bei welchem f-Wert liegt das (tatsächliche) Minimum?
Ersatzweise Tolfun mal sehr klein machen (1e-3 oder so).
Grüße,
Harald
|
|
|
lumbricus |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 06.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2010, 13:22
Titel:
|
|
|
|
|
hey,
über das 'tatsächliche' minimum kann ich keine aussage treffen, da uns dieser nicht bekannt ist. Bei einer 12-Dimensionalen optimierung gestaltet sich das abschätzen vom minimum ziemlich komplex
das ist was die optimierung bei einem fehlern von 1e-3 auspuckt.
options =
Display: 'iter'
MaxFunEvals: []
MaxIter: []
TolFun: 1.000000000000000e-003
TolX: []
FunValCheck: []
OutputFcn: []
ActiveConstrTol: []
BranchStrategy: []
DerivativeCheck: []
Diagnostics: []
DiffMaxChange: []
DiffMinChange: []
GoalsExactAchieve: []
GradConstr: []
GradObj: []
Hessian: []
HessMult: []
HessPattern: []
HessUpdate: []
InitialHessType: []
InitialHessMatrix: []
Jacobian: []
JacobMult: []
JacobPattern: []
LargeScale: []
LevenbergMarquardt: []
LineSearchType: []
MaxNodes: []
MaxPCGIter: []
MaxRLPIter: []
MaxSQPIter: []
MaxTime: []
MeritFunction: []
MinAbsMax: []
NodeDisplayInterval: []
NodeSearchStrategy: []
NonlEqnAlgorithm: []
NoStopIfFlatInfeas: []
PhaseOneTotalScaling: []
Preconditioner: []
PrecondBandWidth: []
RelLineSrchBnd: []
RelLineSrchBndDuration: []
ShowStatusWindow: []
Simplex: []
TolCon: []
TolPCG: []
TolRLPFun: []
TolXInteger: []
TypicalX: []
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In fmincon at 271
In gui>opti_Callback at 2192
In gui_mainfcn at 75
In gui at 43
??? Error using ==> finitedifferences
Distance between lower and upper bounds, in dimension 9 is too small to compute
finite-difference approximation of derivative. Increase distance between these
bounds to be at least 2e-008.
149 error('optimlib:finitedifferences:DistanceTooSmall', ...
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 13.12.2010, 15:15
Titel:
|
|
Hallo,
die Fehlermeldung (es sieht jedenfalls wie eine aus) ist interessant. Das könntest du auch direkt an Mathworks melden.
Zum Problem an sich: die Rede ist von "first order optimality measure", was wohl nicht genau das gleiche wie das von dir beabsichtigte Fehlermaß ist. In der Hilfe wird dazu folgende Referenz angegeben:
[31] Nocedal, J. and S. J. Wright. Numerical Optimization, Second Edition. Springer Series in Operations Research, Springer Verlag, 2006.
In dem, was du kopiert hast, steht auch mal firstorderopt = 1.9918, und das wäre ja nun < 5.
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|