Matlab 如何让fminsearch只搜索整数?

Matlab 如何让fminsearch只搜索整数?,matlab,fminsearch,Matlab,Fminsearch,我使用Matlab的方法最小化一个函数: 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); [sea

我使用Matlab的方法最小化一个函数:

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

<如何告诉fmin搜索只考虑正整数?< /p>

第二,如果我的第三个参数被初始化为10,但实际的最佳值为100,那么fmin搜索在这种情况下会收敛得很快吗?

你不能告诉<代码> fmin Stestue/Cuth>只考虑整数。它使用的算法不适用于离散优化,一般来说,离散优化比连续优化困难得多


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

正如@Gareth McCaughan所说,您不能告诉fminsearch将搜索空间限制为整数。如果您想搜索能够处理这类问题的解算器,您需要搜索“混合整数规划”。混合整数是指部分连续、部分整数规划。而“编程”是优化的行话(这个名字让人非常困惑,但就像QWERTY键盘一样,我们一直在使用它)


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

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


霍尔格。Lindow@plr-将整数从连续优化问题中分离出来似乎很好。你知道其他一维或一维离散优化程序吗?有很多。我不知道是否有适合你特殊需要的。比如说,你可以从离散优化开始。