2

我正在使用 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 在这种情况下会快速收敛吗?

4

3 回答 3

3

你不能说fminsearch只考虑整数。它使用的算法不适合离散优化,一般来说离散优化要比连续优化难很多。

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

于 2016-04-28T00:37:07.567 回答
1

在我处理的案例中,我寻找了一个满足条件的向量索引。向量索引是正整数。我所做的 fminsearch 的解决方法是错误函数的插值。假设 fminsearch 建议将 5.1267 作为新索引。然后我计算了索引 5 和 6 的误差函数并给出了插值。这导致了稳定和令人满意的结果。

Holger.Lindow@plr-magdeburg.de

于 2017-03-24T13:31:27.773 回答
1

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

请注意,尽管整数编程通常是 NP 难的!更大的问题可能完全难以解决。

于 2016-04-28T04:21:59.757 回答