怎么用matlab求解非线性最优化问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用matlab求解非线性最优化问题相关的知识,希望对你有一定的参考价值。

参考技术A 在MATLAB的M文件编辑窗口中编入目标函数(obj_fun.m)以及非线性的约束条件(nl_con_fun.m)的M文件。在MATLAB的命令窗口中输入所需参数:A=[…];B=[…];Aeq=[…];Beq=[…];LB;UB以及X0等。最后在命令窗口中输入命令:
[x,obj_value,EXITFLAG]=FMINCON('obj_fun',X0,A,B,Aeq,Beq,LB,UB,'nl_con_fun');
如果 (EXITFLAG<=0),则原问题不可行或无解。如果 (EXITFLAG>0),则x与obj_value分别为最优解和目标函数的最优值。
参考技术B 用粒子群算法,你直接把问题说出来吧。用非线性函数描述。 参考技术C 加qq说

单目标优化求解基于matlab非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)含Matlab源码 1665期

一、非线性权重的自适应鲸鱼算法

随着现实生活中待优化问题的复杂度增加,种群优化算法得到迅速发展。目前,各种鲸鱼优化算法被提出,但是在不断提高精度的同时,却增加了算法的复杂性。针对鲸鱼优化算法(WOA)收敛速度慢、求解精度低的问题,在优化算法性能的基础上保留鲸鱼优化算法结构简单的特点,提出了基于非线性权重的自适应鲸鱼优化算法(NWAWOA)。通过非线性权重S1和S2对鲸鱼优化算法三个阶段的位置更新公式采用两种不同的加权策略,在平衡算法全局搜索与局部开发能力的同时,加快收敛速度、提高求解精度。在10个经典测试函数上的实验表明,改进的算法与经典粒子群算法(PSO)、WOA、WOAWC算法、EWOA算法相比具有较好的收敛速度、求解精度和稳定性,同时算法结构简单,易于学习。

1 自适应权重
鲸鱼优化算法与其他群体智能算法一样,平衡全局搜索和局部开发能力十分重要。权重对鲸鱼优化算法有重要作用,权重较大时,收敛速度较快,算法搜索的范围较大;权重较小时,搜索更加细致,不易错过最优解。

在鲸鱼优化算法中引入非线性权重S1和S2(如图1所示),分别对当前最优位置和包围步长进行自适应调整,具体计算公式如下:

其中,γ为S1和S2的变化范围取值,取γ=0.5;λ为S1和S2的取值步长,取λ=1。

图1 自适应权重S1和S2
将权重S1和S2引入到式(2)和式(5)中,如下所示:

笔者认为将权重S1引入到位置上,不符合智能优化的初衷,改进公式如下:

螺旋式位置更新公式即:

由图1可以看出,S1随迭代次数增加呈非线性递增,使种群能充分向最优位置移动;而S2随迭代次数增加呈非线性递减,在后期有较小步长而加快收敛速度。在平衡全局搜索和局部开发能力的同时,提高求解精度、加快收敛速度。

2 算法流程
改进的鲸鱼优化算法,对三个阶段的位置更新公式采取了不同的加权策略:在包围捕食和搜寻食物阶段,即p<0.5,非线性减小的权重S2仅对距离数据加权;在泡网攻击阶段的螺旋式更新位置,即p≥0.5,非线性增加的权重S1不仅对距离数据加权而且对位置加权。鲸鱼算法流程如图2所示。

图2 NWAWOA算法流程

二、部分源代码

clear all 
clc
SearchAgents_no=30; % Number of search agents 种群数量
Function_name='F4'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) 设定适应度函数
Max_iteration=500; % Maximum numbef of iterations 设定最大迭代次数

% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);  %设定边界以及优化函数
%原始鲸鱼算法
[Best_score,Best_pos,WOA_cg_curve]=WOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); %开始优化
%改进鲸鱼算法
[Best_score1,Best_pos1,WOA_cg_curve1]=NWAWOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); %开始优化


figure('Position',[269   240   660   290])
%Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

%Draw objective space
subplot(1,2,2);
semilogy(WOA_cg_curve,'Color','g','linewidth',1.5)
hold on
semilogy(WOA_cg_curve1,'Color','r','linewidth',1.5);
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
legend('WOA','NWAWOA');
axis tight
grid on
box on
display(['The best solution obtained by WOA is : ', num2str(Best_pos)]);
display(['The best optimal value of the objective funciton found by WOA is : ', num2str(Best_score)]);

        
display(['The best solution obtained by NWAWOA is : ', num2str(Best_pos1)]);
display(['The best optimal value of the objective funciton found by NWAWOA is : ', num2str(Best_score1)]);



三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]赵传武,黄宝柱,阎跃观,代文晨,张建.一种非线性权重的自适应鲸鱼优化算法[J].计算机技术与发展,2020,30(10):7-13.

以上是关于怎么用matlab求解非线性最优化问题的主要内容,如果未能解决你的问题,请参考以下文章

用matlab求解一些简单问题!

如果用lingo软件可以进行求解,那么用MATLAB可以实现吗

单目标优化求解基于matlab非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)含Matlab源码 1665期

Matlab算法粒子群算法求解二维线性优化问题(附MATLAB代码)

单目标优化求解基于matlab遗传算法求解非线性目标函数最小值问题含Matlab源码 1574期

如何用Matlab求有限制条件的目标函数的最小值求解一个优化问题(目标函数非线性,约束函数线性)?