2016-04-28 17 views
1

私は、機能を最小限に抑えるためのMatlabのfminsearch方法を使用しています:fminsearchに整数だけを検索させる方法は?

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) 

最小化は二つのパラメータを超えています。すなわち1,2,3、...

にはどうすれば正の整数のみを考慮にfminsearchを伝えることができ、

は今、私は三番目のパラメータを最小限にしたいと思いますが、このパラメータは、正の整数値を取ることができますか?

第3のパラメータが10に初期化されますが、実際の最良値が100の場合、fminsearchはこのような場合に高速に収束しますか?

答えて

2

fminsearchには整数だけを考えるように指示することはできません。それが使用するアルゴリズムは、離散最適化には適していません。一般に、連続最適化よりもはるかに困難です。

整数パラメータには妥当な値が比較的少ない場合は、すべてをループすることができますが、それは高価すぎる可能性があります。あるいは、独自の1次元離散最適化関数を調理して、それが試みる整数パラメータの各値に対してfminsearchを呼び出させることもできます。 (例えば、いくつかの標準的な1次元連続最適化アルゴリズムを模倣して、隣人よりも優れたパラメータ値を見つけたらすぐに戻ることができます)。この関数を特定の問題に適応させることは可能かもしれませんあなたは解決しようとしています。

+0

整数を連続最適化の問題から分離することは素晴らしいようです。他の1DまたはnD離散最適化手順が分かりますか? – machinery

+0

たくさんあります。あなたの特定のニーズに合うものがあれば、私は分かりません。離散的な最適化については、[Wikipediaのページ](https://en.wikipedia.org/wiki/Discrete_optimization)から始めましょう。 –

1

@Gareth McCaughanによると、fminsearchに検索スペースを整数に制限するよう指示することはできません。このタイプの問題を処理できるソルバーを検索する場合は、「混合整数プログラミング」を検索する必要があります。混合整数は、部分連続、部分整数プログラミング用です。そして、 "プログラミング"は最適化のための専門用語である(ひどく混乱する名前ですが、QWERTYキーボードのように、私たちはそれに固執しています)。

整数プログラミングは一般的にNP-hardですが、注意してください!より大きな問題は完全に難しいかもしれません。

0

私が扱った側では、 の条件を満たしているベクターインデックスを探しました。 ベクトルインデックスはポシティブ整数です。 私がしたfminsearchの回避策は、error-functionの補間です。 fminsearchは新しいインデックスとして5.1267を提案すると仮定します。私はインデックス5と6の誤差関数を計算し、補間を戻しました。これは安定した満足のいく結果につながりました。

[email protected]

関連する問題