一、简介

遗传算法的应用步骤
遗传算法GA是基于进化和遗传理论而提出来的全局寻优方法。
简单遗传算法解决问题的基本步骤如下:
(1)初始化:随机生成N个个体作为初始群体P(0),该种群就是目标函数可行解的一个集合。设置进化代数计数器归零,设置最大进化代数iter_max;
(2)个体评价:将初始种群代入目标函数中,根据适应度函数计算当前群体中各个种群的适应度;
(3)终止条件判断:给出终止条件,判断算法是否满足终止条件,若满足则转到(8);
(4)选择运算:对初始群体执行选择操作,优良的个体被大量复制,劣质的个体复制的少甚至被淘汰;
(5)交叉运算:以交叉概率来进行交叉运算;
(6)变异运算:以变异概率来进行交叉运算;
(7)群体P(t)经过选择运算、交叉运算、变异运算之后,得到由N个新个体构成的下一代群体P(t+1),则转(2),否则转(4);
(8)不断的进化,最终会得到目标函数中,适应度最高的个体,将其作为问题的最优解或满意解输出,终止计算。

二、源代码

clc
clear
%-------------------------------基于遗传算法的资源配置主函数-----------------------------%参数定义
maxgen=200;                         %进化代数,即迭代次数
sizepop=10;                        %种群规模
%AimFunc=StrAimFunc;                 %目标函数(本算法以目标函数值为适应度)
%fselect='roulette';                 %染色体的选择方法,您可以选择:锦标赛法- 'tournament';轮盘赌法-'roulette'
%fcode='float';                       %编码方法,您可以选择:浮点法-'float';grey法则--'grey';二进制法-'binary'
pcross=[0.7];                       %交叉概率选择,0和1之间
%fcross='float';                   %交叉方法选择,您可以选择: 浮点交叉-'float';单点交叉-'simple';均匀交叉-'uniform'
pmutation=[0.1];                    %变异概率选择,0和1之间
%fmutation='float';                 %变异方法选择,您可以选择:浮点法-'float';单点法-'simple';lenchrom=[15];          %每个变量的字串长度,如果是浮点变量,则长度都为1for i=1:sizepop%随机产生一个种群individuals.chrom(i,:)=Code(lenchrom);   %编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量)%x=Decode(lenchrom,bound,individuals.chrom(i,:),fcode);%解码(binary和grey的解码结果为一个二进制串,float的解码结果为一个实数向量)%计算适应度%修改处%individuals.fitness(i)=AimFunc(x,heli,id_data,0);[individuals.fitness(i),T(i),Q(i),C(i),R(i)]=fitness(individuals.chrom(i,:));   %染色体的适应度
end%找最好的染色体
[bestfitness bestindex]=max(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:);  %最好的染色体
Tbest=T(bestindex);
Qbest=Q(bestindex);
Cbest=C(bestindex);
Rbest=R(bestindex);
avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度
trace=[avgfitness bestfitness,Tbest,Qbest,Cbest,Rbest];
kbest=1;% % 进化开始
for i=1:maxgeni% 选择individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop;%交叉individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop);% 变异individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop);% 计算适应度 for jj=1:sizepop[individuals.fitness(jj),T(jj),Q(jj),C(jj),R(jj)]=fitness(individuals.chrom(jj,:));   end%找到最小和最大适应度的染色体及它们在种群中的位置[newbestfitness,newbestindex]=max(individuals.fitness);[worestfitness,worestindex]=min(individuals.fitness);% 代替上一次进化中最好的染色体if bestfitness<newbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);Tbest=T(newbestindex);Qbest=Q(newbestindex);Cbest=C(newbestindex);Rbest=R(newbestindex);kbest=i;endindividuals.chrom(worestindex,:)=bestchrom;individuals.fitness(worestindex)=bestfitness;avgfitness=sum(individuals.fitness)/sizepop;trace=[trace;avgfitness bestfitness,Tbest,Qbest,Cbest,Rbest]; %记录每一代进化中最好的适应度和平均适应度
end%画出适应度曲线
figure(1);
[r c]=size(trace);
plot([1:r]',trace(:,2));
title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
axis([1,maxgen,240,320])
该函数用于对个体进行变异
%pmutation:变异概率 lenchrom:个体长度  chrom:种群  sizepop:种群规模
%ret:变异后的种群
function ret=Mutation(pmutation,lenchrom,chrom,sizepop)for i=1:sizepop%判断是否变异pick=rand;if pick>pmutationcontinue;endpick=rand;if pick==0pick=rand;endindex=ceil(pick*sizepop);    %变异位置pos=ceil(pick*lenchrom);  %选择变异位置if chrom(index,pos)==0chrom(index,pos)=1;elsechrom(index,pos)=0;end

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社

【优化求解】基于matlab遗传算法求解资源配置优化问题【含Matlab源码 436期】相关推荐

  1. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  2. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  3. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  4. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  5. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  6. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  7. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  8. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  9. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  10. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

最新文章

  1. 性能测试二十八:环境部署之Dubbo部署
  2. jquery选择器:与、或逻辑
  3. ionic4集成高德地图踩坑(二)
  4. 华为云Volcano:让企业AI算力像火山一样爆发
  5. 遇上DG挖矿病毒的处理记录
  6. daad转换器实验数据_实验十一DAAD转换器.doc
  7. asp.net中时间差的问题
  8. pygame 文字输入交互_如何在pygame中创建交互式对象?
  9. android传感器测试工具,传感器测试工具
  10. linux V4L2子系统——v4l2架构(7)之V4L2应用编程
  11. 思科设备升级IOS系统的几种方法
  12. Java,图片在table中显示并缩放2.0
  13. 服务器装win10系统很卡,笔记本电脑安装win10系统后变很卡很慢的解决方法
  14. 推荐一款自动更新 Docker 镜像与容器的神器 Watchtower
  15. 声扬科技声纹识别技术,为工商银行构建多模态反欺诈能力
  16. VUE调用WEB3.0实现代币查询,批量转账功能
  17. 等待时间 single-task message
  18. 对于配置JAVA_HOME
  19. Typora自定义样式--你值得拥有自己的styles
  20. MQTT-java使用说明

热门文章

  1. 用Python爬虫爬取“女神吧”上的照片。
  2. java常见类型的转化以及风险
  3. Ghost命令使用方法
  4. Android2.0以后读取通讯录中电话号码的改变
  5. 一种常见(粒度,统计值)报表的实现方案
  6. ESP8266(3)
  7. 深度学习caffe:权值初始化
  8. Atitit 操作系统原理索引 目录 1. 操作系统原理(cpu,process,mem,file,device mana) 1 1.1. 第1章 操作系统概述 1 2. 处理器管理 2 2.1.
  9. atitit 文件搜索 映象文件夹结构模式.docxAtitit 百度网盘 文件 与跨机器 文件 搜索 查询 检索 解决方案 最小化索引法 映象文件夹结构模式. 1. 生成文件夹 结构信息 1
  10. Atitit 如何设置与安放知识的trap陷阱  知识聚合 rss url聚合工具 以及与trap的对比