博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遗传算法
阅读量:3949 次
发布时间:2019-05-24

本文共 2659 字,大约阅读时间需要 8 分钟。

遗传算法:

一种仿生全局优化算法
模拟生物的遗传进化原理,通过选择、交叉与变异等操作机制,使种群中个体的适应性不断提高。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

matlab代码:

参考博客链接如下(侵删):

主函数:

function main()clear;clc;%种群大小popsize=100;%二进制编码长度chromlength=10;%交叉概率pc = 0.6;%变异概率pm = 0.001;%初始种群pop = initpop(popsize,chromlength); for i = 1:100    %计算适应度值(函数值)    objvalue = cal_objvalue(pop);    fitvalue = objvalue;    %选择操作    newpop = selection(pop,fitvalue);    %交叉操作    newpop = crossover(newpop,pc);    %变异操作    newpop = mutation(newpop,pm);    %更新种群    pop = newpop;    %寻找最优解    [bestindividual,bestfit] = best(pop,fitvalue);    x2 = binary2decimal(bestindividual);    x1 = binary2decimal(newpop);    y1 = cal_objvalue(newpop);    if mod(i,10) == 0        figure;        fplot('10*sin(5*x)+7*abs(x-5)+10',[0 10]);        hold on;        plot(x1,y1,'*');        title(['迭代次数为n=' num2str(i)]);        %plot(x1,y1,'*');    endendfprintf('The best X is --->>%5.2f\n',x2);fprintf('The best Y is --->>%5.2f\n',bestfit);

二进制种群生成函数:

%初始化种群大小%输入变量:%popsize:种群大小%chromlength:染色体长度-->>转化的二进制长度%输出变量:%pop:种群function pop=initpop(popsize,chromlength)pop = round(rand(popsize,chromlength));%rand(3,4)生成3行4列的0-1之间的随机数% rand(3,4)% % ans =% %     0.8147    0.9134    0.2785    0.9649%     0.9058    0.6324    0.5469    0.1576%     0.1270    0.0975    0.9575    0.9706%round就是四舍五入% round(rand(3,4))=% 1 1 0 1% 1 1 1 0% 0 0 1 1%所以返回的种群就是每行是一个个体,列数是染色体长度

二进制转十进制:

%二进制转化成十进制函数%输入变量:%二进制种群%输出变量%十进制数值function pop2 = binary2decimal(pop)[px,py]=size(pop);for i = 1:py    pop1(:,i) = 2.^(py-i).*pop(:,i);end%sum(.,2)对行求和,得到列向量temp = sum(pop1,2);pop2 = temp*10/1023;

适应度函数:

%计算函数目标值%输入变量:二进制数值%输出变量:目标函数值function [objvalue] = cal_objvalue(pop)x = binary2decimal(pop);%转化二进制数为x变量的变化域范围的数值objvalue=10*sin(5*x)+7*abs(x-5)+10;

选择新的个体:

%如何选择新的个体%输入变量:pop二进制种群,fitvalue:适应度值%输出变量:newpop选择以后的二进制种群function [newpop] = selection(pop,fitvalue)%构造轮盘[px,py] = size(pop);totalfit = sum(fitvalue);p_fitvalue = fitvalue/totalfit;p_fitvalue = cumsum(p_fitvalue);%概率求和排序ms = sort(rand(px,1));%从小到大排列fitin = 1;newin = 1;while newin<=px    if(ms(newin))

交叉:

%交叉变换%输入变量:pop:二进制的父代种群数,pc:交叉的概率%输出变量:newpop:交叉后的种群数function [newpop] = crossover(pop,pc)[px,py] = size(pop);newpop = ones(size(pop));for i = 1:2:px-1    if(rand

变异:

%关于编译%函数说明%输入变量:pop:二进制种群,pm:变异概率%输出变量:newpop变异以后的种群function [newpop] = mutation(pop,pm)[px,py] = size(pop);newpop = ones(size(pop));for i = 1:px    if(rand

选择最优个体:

%求最优适应度函数%输入变量:pop:种群,fitvalue:种群适应度%输出变量:bestindividual:最佳个体,bestfit:最佳适应度值function [bestindividual bestfit] = best(pop,fitvalue)[px,py] = size(pop);bestindividual = pop(1,:);bestfit = fitvalue(1);for i = 2:px    if fitvalue(i)>bestfit        bestindividual = pop(i,:);        bestfit = fitvalue(i);    endend

转载地址:http://migwi.baihongyu.com/

你可能感兴趣的文章
java基础知识学习之匿名内部类
查看>>
SSM框架和SSH框架的区别
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
过滤敏感词算法
查看>>
linux学习之shell脚本if判断参数-n,-d,-f等
查看>>
linux学习之windos文件在linux里面乱码解决
查看>>
idea快捷键
查看>>
linux学习之shell遍历数组
查看>>
python函数取参及默认参数使用
查看>>
linux学习之shell中的${},##, %% , :- ,:+, ? 的使用
查看>>
Spring学习之Filter、Interceptor、Aop实现与区别
查看>>
Spring 添加@Autowired注释, 注入对象却为空
查看>>
springSecurity学习
查看>>
通过Java的api操作redis
查看>>
jquery基本选择器
查看>>
linux学习之shell字符串大小写转换
查看>>
Linux下用base64对字符串进行加密解密
查看>>
H5走迷宫小游戏
查看>>
mysql建表 表名与关键字冲突
查看>>
mysql 创建单表外键关联多表
查看>>