如何让fminsearch只搜索整数?

时间:2016-04-28 00:16:37

标签: matlab fminsearch

我正在使用Matlab的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只考虑正整数?

其次,如果我的第三个参数初始化为10但实际最佳值为100,那么fminsearch在这种情况下会快速收敛吗?

3 个答案:

答案 0 :(得分:2)

你不能告诉fminsearch只考虑整数。它使用的算法不适合离散优化,这通常比连续优化要困难得多。

如果整数参数只有相对较少的合理值,你可以将它们全部循环,但这可能太贵了。或者你可以编写自己的一维离散优化函数,并为它尝试的整数参数的每个值调用fminsearch。 (例如,你可以模仿一些标准的一维连续优化算法,只要你发现一个比两个邻居更好的参数值就返回。)你很可能能够适应这个功能解决了您试图解决的特定问题。

答案 1 :(得分:1)

正如@Gareth McCaughan所说,你不能告诉fminsearch将搜索空间限制为整数。如果要搜索可以处理此类问题的求解器,则需要搜索“混合整数编程”。混合整数用于部分连续,部分整数编程。 “编程”是优化的行话(名字令人费解,但就像QWERTY键盘一样,我们坚持使用它。)

请注意,虽然整数编程通常是NP难的!较大的问题可能完全难以处理。

答案 2 :(得分:0)

在我处理的情况下,我寻找一个满足a的矢量索引 条件。 vector-Index是正整数。 我做的fminsearch的解决方法是错误函数的插值。假设,fminsearch建议将5.1267作为新索引。比我计算了索引5和6的误差函数并给出了插值。这导致了稳定和令人满意的结果。

Holger.Lindow@plr-magdeburg.de