遗传算法-matlab实现

发布于:2022-12-07 ⋅ 阅读:(740) ⋅ 点赞:(0)

不能找到最优解,但是适用传统方法无法求解问题

具有全局优化性,通用性强

基础概念

1个体

要处理的基本对象、结构

也就是可行解

2 群体

个体的集合

被选定的一组可行解

3 染色体

个体的表现形式

可行解的编码

4 基因

染色体中的元素

编码中的元素

5 基因位

某一基因在染色体中的位置

元素在编码中的位置

6 适应值

个体对于环境的适应程度,或在环境压力下的生存能力

可行解所对应的适应函数值

7 种群

被选定的一组染色体或个体

根据入选概率定出的一组可行解

8 选择

从群体中选择优胜的个体,淘汰劣质个体的操作

保留或复制适应值大的可行解,去掉小的可行解

9 交叉

一组染色体上对应基因段的交换

根据交叉原则产生的一组新解

10 交叉概率

染色体对应基因段交换的概率(可能性大小)

闭区间[0,1]上的一个值,如0.65~0.90

11 变异

染色体水平上基因变化

编码的某些元素被改变

12 变异概率

染色体上基因变化的概率(可能性大小)

开区间(0,1)内的一个值, 如0.001~0.01

13 进化、适者生存

个体进行优胜劣汰的进化,一代又一代地优化

目标函数取到最大值,最优的可行解

流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXgiWCek-1664163534080)(assets/image-20220703142723-ev7up2w.png)]

实现

编码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xomd3e87-1664163534083)(assets/image-20220703143013-xairgy6.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oCP8nFnw-1664163534084)(assets/image-20220703143113-pe6gtny.png)]

初始种群规模

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNNeLluK-1664163534084)(assets/image-20220703143208-iq6ho3l.png)]

设置进化代数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uHrWXOa-1664163534084)(assets/image-20220703143232-yfx4qw8.png)]

设置适应函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WqFsSHR-1664163534085)(assets/image-20220703143422-l0iezf8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RY1tzxo8-1664163534086)(assets/image-20220703143635-zz9m1gf.png)]

目标函数最大或最小化适用正负号解决

部分函数需要适用界限构造法

选择

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZAeR9HN-1664163534086)(assets/image-20220703144216-4fssecr.png)]

交叉

在这里插入图片描述

变异

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VyuMk4Kn-1664163534088)(assets/image-20220703144424-fky0xeo.png)]

停止准则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z55UGQLH-1664163534089)(assets/image-20220703144459-d73ujy6.png)]

函数介绍

函数默认优化为最小值,如果是最大值需要将函数取负数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8dj9O1tq-1664163534090)(assets/image-20220703160420-dmo8f3a.png)]

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,options)
fun:函数句柄;
nvars:变量个数;
A:不等式约束系数矩阵;
b:不等式约束常量向量;
[ ]:等式约束系数矩阵;
[ ]:等式约束常量向量;
lb:变量上限;
ub:变量下限;
nonlcon:非线性约束;
IntCon:整数约束;
options:用options中的值替换默认优化参数,通过optimoptions()获取;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPeybgfB-1664163534091)(assets/image-20220703195429-2cezlsf.png)]

代码实现

求解函数最小值案例

定义优化函数

function y = fitness(x)
%UNTITLED2 此处提供此函数的摘要
%   此处提供详细说明
y = x*sin(10*pi*x)+2; 
end

适用遗传算法函数

nvars = 1;%变量个数
LB = -1;%定义域下限
UB = 2;%定义域上限
T = 100;%进化次数
%配置 设置进化次数 打印进化图像
options1=gaoptimset('Generations',T,'PlotFcns',@gaplotbestf);
[nx,fval,exitflag, output]  = ga(@fitness,nvars,[],[],[],[],LB,UB,[],options1)%调用ga函数

绘图查看优化结果

x=-1:0.01:2; %从-1到2 每隔0.01取一个点绘制图像
y = x.*sin(10*pi*x)+2; 
% ...
plot(x,y);
hold on;
plot(nx,fval,'*');
hold on;
plot(nx,fitness(nx),'*');

完整代码

clear all;
clc;

x=-1:0.01:2; %从-1到2 每隔0.01取一个点绘制图像
y = x.*sin(10*pi*x)+2; 

nvars = 1;%变量个数
LB = -1;%定义域下限
UB = 2;%定义域上限
T = 100;%进化次数
%配置 设置进化次数 打印进化图像
options1=gaoptimset('Generations',T,'PlotFcns',@gaplotbestf);
[nx,fval,exitflag, output]  = ga(@fitness,nvars,[],[],[],[],LB,UB,[],options1)%调用ga函数
plot(x,y);
hold on;
plot(nx,fval,'*');
hold on;
plot(nx,fitness(nx),'*');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yik9vamk-1664163534091)(assets/image-20220706164035-kh0sa6u.png)]

本文含有隐藏内容,请 开通VIP 后查看