动机
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 ub