动机
MATLAB经典非线性规划算法大多采用梯度下降的方法进行求解,局部搜索能力较强,但容易掉入局部极值,而遗传算法采用选择、交叉和变异算子进行搜索,全局搜索能力较强,局部搜索能力较弱
打个比方的话,大概就是遗传算法可以看到各个山丘,但它不会去分辨哪个才是最高的,很容易随便选一个就爬上去了。而梯度下降算法视野比较窄,但它会在看到的那些里爬到最高的山上去
如果将二者结合,就很有可能能够得到问题的全局最优解
流程
N是个固定的数,先用遗传算法进行N次迭代(即先找出那些山丘),等到了N次,再用梯度下降算法来在这些山丘里寻求最高的那个
MATLAB代码
clc
clear all
close all
%定义自变量的范围
lbx1=0;ubx1=2.8274;
lbx2=0;ubx2=2.8274;
lbx3=0;ubx3=2.8274;
lbx4=0;ubx4=2.8274;
lbx5=0;ubx5=2.8274;
%% 定义遗传算法参数
NIND=100; %个体数目
MAXGEN=30; %最大遗传代数
PRECI=20; %变量的二进制位数
GGAP=0.95; %代沟
px=0.6; %交叉概率
pm=0.1; %变异概率
trace=zeros(MAXGEN,6); %寻优结果的初始值
FieldD=[PRECI PRECI PRECI PRECI PRECI;lbx1 lbx2 lbx3 lbx4 lbx5;ubx1 ubx2 ubx3 ubx4 ubx5;1 1

本文探讨了遗传算法和非线性规划结合在求解函数极值中的应用。由于遗传算法全局搜索能力强但易陷入局部最优,而梯度下降局部搜索强,二者结合能提高找到全局最优解的可能性。通过MATLAB实现,经过固定次数迭代,遗传算法找出可能的解,然后使用梯度下降算法在这些解中寻找最佳解。实验结果显示,对于简单的函数,直接使用遗传算法也能找到最优值。
最低0.47元/天 解锁文章
769

被折叠的 条评论
为什么被折叠?



