2016-04-28 10 views
1

Ich verwende die fminsearch Methode von Matlab eine Funktion zu minimieren:Wie lassen sich mit fminsearch nur ganze Zahlen durchsuchen?

c = cvpartition(200,'KFold',10); 
minfn = @(z)kfoldLoss(fitcsvm(cdata,grp,'CVPartition',c,... 
    'KernelFunction','rbf','BoxConstraint',exp(z(2)),... 
    'KernelScale',exp(z(1)))); 
opts = optimset('TolX',5e-4,'TolFun',5e-4); 
[searchmin fval] = fminsearch(minfn,randn(2,1),opts) 

Die Minimierung über zwei Parameter ist.

Nun würde Ich mag einen dritten Parameter zu minimieren, aber diese Parameter nur positive ganzzahlige Werte annehmen, das heißt 1,2,3, ...

Wie kann ich sagen fminsearch nur positive ganze Zahlen in Betracht ziehen?

Zweitens, wenn mein dritter Parameter auf 10 initialisiert wird, aber der tatsächliche beste Wert 100 ist, konvergiert fminsearch in solchen Fällen schnell?

Antwort

2

Sie können fminsearch nicht angeben, nur ganze Zahlen zu berücksichtigen. Der Algorithmus, den er verwendet, ist nicht für eine diskrete Optimierung geeignet, die im Allgemeinen viel schwieriger ist als eine kontinuierliche Optimierung.

Wenn es nur relativ wenige plausible Werte für Ihre Integer-Parameter gibt, könnten Sie sie einfach durchlaufen, aber das könnte zu teuer sein. Oder Sie könnten Ihre eigene 1-dimensionale diskrete Optimierungsfunktion erstellen und sie für jeden Wert des Integer-Parameters, den sie versucht, fminsearch aufrufen. (Sie könnten z. B. einen standardmäßigen 1-dimensionalen kontinuierlichen Optimierungsalgorithmus imitieren und einfach zurückkehren, sobald Sie einen Parameterwert gefunden haben, der besser ist als seine beiden Nachbarn.) Möglicherweise können Sie diese Funktion an das spezielle Problem anpassen du versuchst zu lösen.

+0

die ganze Zahl von der kontinuierlichen Optimierungsproblem Die Trennung scheint groß. Kennen Sie andere 1D oder nD diskrete Optimierungsverfahren? – machinery

+0

Es gibt viele. Ob es Ihren speziellen Bedürfnissen entspricht, weiß ich nicht. Sie könnten zB mit der [Wikipedia-Seite] (https://en.wikipedia.org/wiki/Discrete_optimization) zur diskreten Optimierung beginnen. –

1

Wie @Gareth McCaughan sagte, können Sie fminsearch nicht sagen, den Suchraum auf Ganzzahlen zu beschränken. Wenn Sie nach Solver suchen möchten, die mit dieser Art von Problem umgehen können, möchten Sie nach "mixed integer programming" suchen. Gemischte ganze Zahl ist für Teil kontinuierliche, Teil ganzzahlige Programmierung. Und "Programmierung" ist Jargon für die Optimierung (schrecklich verwirrender Name, aber wie die QWERTY-Tastatur, wir sind dran fest).

Beachten Sie jedoch, dass Ganzzahl-Programmierung im Allgemeinen NP-schwer ist! Größere Probleme können völlig unlösbar sein.

0

In der Seite, die ich behandelt habe, suchte ich nach einem Vektorindex, der einen Zustand erfüllt. Der Vektorindex ist postive Ganzzahl. Der Workaround für fminsearch, den ich gemacht habe, war eine Interpolation der Fehlerfunktion. Angenommen, fminsearch schlägt 5.1267 als neuen Index vor. Dann berechnete ich die Fehlerfunktion für die Indizes 5 und 6 und gab eine Interpolation zurück. Dies führte zu stabilen und befriedigenden Ergebnissen.

[email protected]

Verwandte Themen