matlab最优化问题的函数fminbnd,fmincon,globalsearch,(multistart)(全局最优)(优化算法对比分析包括fit)

上一个博文中介绍了globalsearch和multistart的异同,以及选择时的参考,本文着重介绍multistart。

④multistart(全局最优)(找多个局部最小值)

下面这个例子在globalsearch中使用过,在这里可以只是换一下符号,再次使用。可以看出两个函数设置基本相同。
实例(六驼峰最小值问题)

rng default  %对于再现性 
gs = multistart ;
fun6 = @(x)(4 * x(1)^ 2  -  2.1 * x(1)^ 4 + x(1)^ 6/3 ...
    + x(1)* x(2) -  4 * x(2)^ 2 + 4 * x(2)^ 4);
problem = createOptimProblem('fmincon','x0',[ -  1,2],... 
    'objective',fun6,'lb',[ -  3,-3],'ub',[3,3]) ;
[x,fval]  = run(gs,problem)

另一种表示
构造函数

function f = fun6(x)
f = (4 * x(1)^ 2  -  2.1 * x(1)^ 4 + x(1)^ 6/3 ...
        + x(1)* x(2) -  4 * x(2)^ 2 + 4 * x(2)^ 4);
end

主优化程序

x0=[-1,2];
LB=[-3,-3];
UB=[3,3];
f = @(data)fun6(data);
problem = createOptimProblem('fmincon','objective',f,'x0',x0,'lb',LB,'ub',UB,'options',optimset('Algorithm','SQP','DISP','none');
gs = multistart;
[x,fval] = run(gs,problem);

算法比较

在fminbnd,fmincon,globalsearch,multistart,fit比较
fminbnd首先被淘汰,它只适合单参数求解,并且函数必须连续,对于简单数学问题还好,当然简单数学也不用matlab

第二个淘汰
fmincon和fit
我测试了一下,两个求得的结果相同,也就是说两个所用的优化方法基本是一致的,我不知道这个猜测是否准确,大家也可以自己测试一下。
网上说fit(用L-M 列文伯格-马夸尔特算法)算法,我自己亲自进去了函数内部看了下,它是通过构造海森矩阵等一系列工作进行求解的,把函数的拟合放在矩阵中,进行矩阵求解。
这两个算法都是局部最优,很容易受起始点选取影响。

最后说globalsearch和multistart
globalsearch直接是多个随机点,也就是有多个起始点,然后选取出最好的起始点,利用fmincon进行求解,这样避免了一个起始点陷入局部最优的情况。
multistart准确来说是用了更多的起始点,并且每个起始点都进行了求解,内部优化函数可以不局限于fmincon。
globalsearch比multistart快狠多,而且并不能说进行更多求解的multistart一定比globalsearch的结果好,因为两者都很有可能随机点落到最优点附近,也可能谁也没落到其中,要看谁好,就看谁更有可能落入最优点附近。

如果你机器好,可以并行,那么推荐multistart
如果你机器差,那么还是用globalsearch,多用几次,可能有一次刚好落到最优点。

开启multistart多核并行

%% Parallel Version
matlabpool open 4 %开启四个matlab并行计算
ms.UseParallel = 'always' %开启并行计算
tic
[bp,fvalp,exitflagp,outputp,solutionsp] = run(ms, problem, 1000);
 toc
matlabpool close

这里的1000代表有1000个起始点

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值