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个起始点

  • 16
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab中可以使用不同的函数来求解最优化问题,具体使用哪个函数取决于问题的类型和约束条件。一些常用的函数包括: 1. linprog函数用于解决线性规划问题。它的语法是[x,fval,exitflag,output]=linprog(f,A,b,Aeq,beq,lb,ub),其中f是目标函数的系数,A和b是不等式约束的系数矩阵和常数向量,Aeq和beq是等式约束的系数矩阵和常数向量,lb和ub是变量的上下界。 2. quadprog函数用于解决二次规划问题。它的语法是[x,fval,exitflag,output]=quadprog(H,f,A,b,Aeq,beq,lb,ub),其中H是二次目标函数的Hessian矩阵,其他参数的含义与linprog函数相同。 3. fminbnd函数用于一元无约束优化计算。它的语法是[x,fval]=fminbnd(fun,x1,x2,options),其中fun是目标函数的句柄,x1和x2是搜索区间的上下界,options是优化选项。 4. fmincon函数用于求解带约束的优化问题。它的语法是[x,fval,exitflag,output]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq、lb、ub是约束矩阵和向量,nonlcon是非线性约束函数的句柄,options是优化选项。 5. fseminf函数用于求解半定规划和二次半定规划问题。它的语法是[x,fval,exitflag,output]=fseminf(fun,x0,A,b,Aeq,beq,LB,UB,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq是约束矩阵和向量,LB和UB是变量的下界和上界,options是优化选项。 6. fminmax函数用于求解最小最大化问题。它的语法是[x,fval,exitflag,output]=fminmax(fun,x0,A,b,Aeq,beq,lb,ub,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq、lb、ub是约束矩阵和向量,options是优化选项。 通过选择适当的函数和参数,可以根据具体的优化问题来求解最优解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Matlab 最优化求解](https://blog.csdn.net/weixin_46649908/article/details/118420583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [matlab求解最优化问题(数学建模)](https://blog.csdn.net/wmx1117/article/details/106612537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值