我使用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会很快收敛吗?
发布于 2016-04-28 00:37:07
您不能告诉fminsearch只考虑整数。该算法不适用于离散优化,一般情况下比连续优化困难得多。
如果整数参数的可信值相对较少,则可以对它们进行循环,但这可能太昂贵了。或者,您可以编写自己的一维离散优化函数,并让它为它所尝试的整数参数的每个值调用fminsearch。(例如,您可以模拟一些标准的一维连续优化算法,并且只要找到一个参数值,比如说,比它的两个邻居都要好的参数值,就可以返回。)您很可能能够使此函数适应您正在试图解决的特定问题。
发布于 2016-04-28 04:21:59
正如@Gareth McCaughan所说,您不能告诉fminsearch将搜索空间限制为整数。如果要搜索能够处理此类问题的求解器,则需要搜索“混合整数规划”。混合整数用于部分连续整数规划。而“编程”是用于优化的行话(令人毛骨悚然的名称,但就像QWERTY键盘一样,我们被它困住了)。
请注意,整数规划通常是NP难的!更大的问题可能是完全难以解决的。
发布于 2017-03-24 13:31:27
在我处理的案例中,我寻找一个满足条件的向量索引。向量索引是正整数.我所做的fminsearch的解决方法是错误函数的插值。假设,fminsearch建议5.1267作为新索引。我计算了索引5和6的误差函数,并给出了一个插值。这导致了稳定和令人满意的结果。
@plr-magdeburg.de
https://stackoverflow.com/questions/36903101
复制相似问题