数学建模(2)——改进的遗传算法(GA)
来源:互联网 发布:航拍视频软件 编辑:程序博客网 时间:2024/06/06 07:47
改进的遗传算法
基于上一篇文章的遗传算法,在交叉和变异算子上进行改进
交叉算子
配对方式
在上一节中,父代个体按照顺序依次两两配对,在此,先将父代以适应度函数(目标函数)值进行排序,目标函数值小的与小的配对,大的与大的配对。
交叉点的选取
上一节中随机产生交叉点,在此,使用Logistics混沌序列确定交叉点位置。即取一个(0,1)区间上的随机数作为初值,然后利用x(n)=4*x(n-1)(1-x(n-1))迭代产生一个(0,1)区间的混沌值,保存以上混沌值作为产生下一代交叉项的混沌迭代初值,再把这个值分别乘以100再加上2,最后取整作为交叉点,得到整个混沌序列,互换交叉点的基因,形成新的子代,仅仅更换部分点基因,没有连成片段,改动较小,这样可以避免遗传算法在组合优化应用中产生的寻优抖振问题。
变异算子
上一节中,随机产生三个2~101之间的整数u、v、w,随后把把u,v之间(包括u和v)的基因段插到w后面进行换位变异。在此,首先根据给定的变异率,随机选取两个2~101之间的整数,对这两个数对应位置的基因进行变异,把这两个基因替换成利用混沌序列产生的新的基因值,从而得到新的染色体,进行移位变异。(数学建模算法与应用第二版称之为移位变异,第一版改进的遗传算法中却还是沿用的换位变异)
交叉变异代码
(在此只贴出交叉变异的代码,可以直接替换上一章交叉变异部分的代码)
%遗传算法实现过程 A=J; for k=1:dai %产生 0~1 间随机数列进行编码 B=A; %交配产生子代 B for i=1:2:w ch0=rand;ch(1)=4*ch0*(1-ch0); %产生混沌序列的初始值 for j=2:50 ch(j)=4*ch(j-1)*(1-ch(j-1)); %产生混沌序列 end ch=2+floor(100*ch); %产生交叉点 temp=B(i,ch); B(i,ch)=B(i+1,ch); B(i+1,ch)=temp; %交叉 end %变异产生子代 C by=[ ]; %为了防止下面产生空地址,这里先初始化 while ~~isempty(by) by=find(rand(1,w)<0.1);%产生变异操作地址 end num1=length(by); C=A(by,:);%产生变异操作的初始染色体 ch2=rand;%产生混沌序列的初始值 for t=2:2*num1 ch2(t)=4*ch2(t-1)*(1-ch2(t-1));%产生混沌序列 end for j=1:num1 bw=sort(2+floor(100*rand(1,2)));%随机产生变异操作的两个地址 C(j,bw)=ch2([j,j+1]);%对bw处的两个基因发生了变异 endG=[A;B;C];
阅读全文
0 0
- 数学建模(2)——改进的遗传算法(GA)
- 数学建模(1)——遗传算法(GA)
- 《Matlab在数学建模中的应用》笔记4-遗传算法(GA)
- 遗传算法(GA)
- 遗传算法(GA)的matlab实现
- 机器学习基础—— 遗传算法(GA)
- 遗传算法(GA)干货
- 遗传算法(GA)的C语言实现
- 遗传算法(2):对适应度函数的改进
- 机器学习基础(四十六)—— 遗传算法(GA)
- 《Matlab在数学建模中的应用》杂谈——梦的解析与遗传算法的联系
- 遗传算法(二)改进:自适应、遗传退火算法
- 【建模必备】遗传算法的基本原理与步骤(选择)
- 【建模必备】遗传算法的基本原理与步骤(交叉)
- 【建模必备】遗传算法的基本原理与步骤(变异)
- MATLAB数学建模(9)-遗传算法工具
- 【人工智能】遗传算法(GA)入门—以求解一元函数最大值的优化问题为例
- 遗传算法(GA)
- ZooKeeper系列
- PHP发送短信验证码
- 【QT】float double的范围与精度及Qt中的qfloat16
- redis for mac make安装
- 移动端分辨率与单位转换
- 数学建模(2)——改进的遗传算法(GA)
- Ubuntu下redis安装及其操作
- java enum枚举类型 之 括号赋值
- ubuntu16.04安装Android7
- 定时器&&三次握手&&滑动窗口&&DNS
- 基于HtmlUnit实现简单登录、页面跳转以及获取有用数据部分代码示例(示例网站:大润发)
- Redis整合Spring结合使用缓存实例
- 1001.A+B和C
- scala中String的单引号和三引号的区别?