GA(遗传算法)的Matlab程序原理(from:六分之一工作室)

z=f(x,y)

1、 编码(解决初始化种群),先创建一个数组pop(popsize stringlenth)有popsize表示染色体个数列stringlenth的前 一部分代表x的染色体,后一部分代表y的染色体。计算x,y染色体对所对应的十进制数值并记数组pop的第 stringlenth+1,stringlenth+2列,计算f(x,y)的值并计为数组pop的第stringlenth+3列,计算每个染色体的 复制概率并计为数组pop的第stringlenth+4列

function[pop1 f d pe stringlenth]=initialize(popsize stringlenth pop),

pop=round(rand(popsize stringlenth)),

pop(.stringlenth+1=((2.^(size(pop(.1.stringlenth1).2)-1.-1.0)*pop(.1.stringlenth)).*( )/(2.^stringlenth1-1)+ ),

pop(.stringlenth+3)=fun(pop(.stringlenth+1)pop(.stringlenth+2)),

pop(.stringlenth+4)=pop(.stringlenth+4)=pop(.stringlenth+3)./sum(pop(.stringlenth+3)), 
其中fun(x)为目标函数的matlab.m文件.

2、确保复制过程中染色体个数保持不变的情况下确定每个染色体复制数,如果是某一染色体的复制数为负数,则令此染色体的复制数为0,复制概率为止的染色体的复制数根据其占正值总体的比率来确定,复制数=比率 popsize

pop(.stringlenth+5)=round(pop. Stringlenth+4).*popsize),

A=sort(pop(.stringlenth+5)),

b=sum(A((11-a).10),(其中a为复制概率为正值的染色体个数)

pop(.stringlenth+6)=round(pop(.stringlenth+5)./b).*popsize).

pop(.stringlenth+6)表示每个染色体复制数.

3、染色体复制数,根据每个染色体的复制数重新创建新的染色体数组pop1

function[parent1 parent2 stringlenth]=parent(f d pop stringlenth),

Ci=repmat(pop(i 1. stringlenth)[pop(i stringlenth+6)1 1]).(i=1 2 …popsize)

pop1=[C1] [C2] … [Cpopsize],

pop1=round([C1] [C2] … [Cpopsize]). 
每个初始染色体按其复制数进行复制.

4、选择父代进行父叉,在数组pop1中随机地使各染色体两两配对,作为父代进行父叉,创建新的数组child1和child2父叉点cpoint随机选取父叉概率pc根据实际情况人为选取

function[child1 child2 pm parent stringlenth]=crossover(parent1 parent2 pc stringlenth ),

f=round(9*rand(1.10))+1,

d=[1 2 3 4 5 6 7 8 9 10],

parent1=pop1(f.),parent2=pop1(d.),

if(randcpoint=round(rand*(stringlenth-2))+1,

child1=[parent1(.1.cpoint)][parent2(.cpoint+1. stringlenth)],

child2=[parent2(.1.cpoint)][parent1(.cpoint+1. stringlenth)],

else

child1=parent1,

child2=parent2.

5、染色体变异 随机选取染色体中某一个或几个基因进行变异创建新的数组child作为父代

function[child]=mutation(parent pm),

parent=child,

if(randmpoint=round(rand*(stringlenth-1))+1,

child=parent,

child(.mpoint)=abs(parent(.mpoint)-1),

else

child=parent,

end

6、保留上一代的优良染色体作为部分初始值和随机染色体组成新的染色体组

function[pop2 m W]=best(child child1 child2 pop),

Q1=child(.stringlenth+3),

for i=1.10

if(Q1(i)>(max(Q1)-0.0001))

q1=i,

end 
end

W=round(9.*rand(1 4)+1,

pop2(W 1. stringlenth+3)=[child(q1.)child(q2.).child2(q3.).pop(q4 1. stringlenth+3)],

m=max([max(Q1)max(Q2)max(Q3)max(Q4)]),

end

其中m为最好染色体值,循环执行上述程序即可

关于2元约束问题先根据约束力方程求解2元函数fun1(x)再只需要将单约束程序中的y的下限b2换成fun1(x)即可,因为这样能限制当x取值后y的取值。多元多约束程序和2元多约束程序一样,只不过多开辟空间而已。

GA(遗传算法)的Matlab程序原理(from:六分之一工作室)

时间: 2024-12-24 22:23:41

GA(遗传算法)的Matlab程序原理(from:六分之一工作室)的相关文章

【二】遗传算法(GA)的MATLAB实现

essay from:https://wenku.baidu.com/view/ce45bbf44693daef5ef73df3.html 一.MATLAB编程实现GA 二.MATLAB函数调用实现GA 三.遗传算法的工具箱实现GUI 直接在命令行输入optimtool即可调用

聚类——WKFCM的matlab程序

聚类--WKFCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类--WKFCM文章中已介绍了WKFCM算法的理论知识,现在用matlab进行实现,下面这个例子是用FCM初始化聚类中心,也可以随机初始化聚类中心. 1.matlab程序 WKFCM_main.m %function [ave_acc_WKFCM,max_acc_WKFCM,min_acc_WKFCM,ave_iter_WKFCM,ave_run_time]=

matlab 程序发布

将matlab程序发布为可执行程序包 说明,这种可执行程序包可以在没有安装matlab的计算机上运行. 1. 打开Applicaiton Compler 如果下拉列表中没有这个APPLICATIONDEPLOYMENT的话,可能是没有安装此组件.请通过添加Addons的方式,或者利用Matlab的安装程序安装. 在matlab 命令窗口中可以输入 deploytool 打开Application Compiler窗口. 2. 添加相关文件,并给出描述. 在打开的Application Compi

求解轨道力学二体意义下的Lambert方程(兰伯特方程)的Matlab程序

轨道力学中二体问题下求解兰伯特方程需要解决一个迭代问题. 这是一个老外写的,有很多注释,相信大家应该能看懂,经实际检测,切实可用 function [v1,v2]=solve_lambert(r1,r2,t,GM,lw,N,branch) %This routine implements a new algorithm that solves Lambert's problem. The %algorithm has two major characteristics that makes it

蚁群算法 matlab程序(已执行)

下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) %%------------------------------------------------------------------------- %% 主

二值法方法综述及matlab程序

在某些图像处理当中一个关键步是二值法,二值化一方面能够去除冗余信息,另一方面也会使有效信息丢失.所以有效的二值化算法是后续的处理的基础.比如对于想要最大限度的保留下面图的中文字,以便后续的定位处理. 二值化算法包括全局二值化和局部二值化, 全局二值化具有速度快但效果相对差的特点, 局部二值化算法具有速度慢效果好的特点. 原图 全局阈值              方法一:直接采用im2bw ;手动阈值 方法二:迭代法求阈值 迭代式阈值选取的基本思路是:首先根据图像中物体的灰度分布情况,选取一个近似

非均匀B样条拟合MATLAB程序

直接上代码,多的不再说了. %------------------非均匀B样条拟合MATLAB程序----------------- clear k=3; x=load('data.txt'); [n,m]=size(x); %-----------弦长参数化-------------------------------------- u(k+n)=0; for i=1:n-1 u(k+i+1)=u(k+i)+sqrt((x(i+1,1)-x(i,1))^2+(x(i+1,2)-x(i,2))^

MATLAB神经网络原理与实例精解视频教程

教程内容:<MATLAB神经网络原理与实例精解>随书附带源程序.rar9.随机神经网络.rar8.反馈神经网络.rar7.自组织竞争神经网络.rar6.径向基函数网络.rar5.BP神经网络.rar4.线性神经网络.rar3.单层感知器.rar2.MATLAB函数与神经网络工具箱.rar11.神经网络应用实例.rar10.用GUI设计神经网络.rar1.神经网络概述与MATLAB快速入门.rar下载地址:http://www.fu83.cn/thread-323-1-1.html

[zz]求一维序列的信息熵(香浓熵)的matlab程序实例

对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵.    但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的,不会是(0-255)这么确定,如果进行域值变换,使其转换到一个整数范围的话,就会丢失数据,请高手指点,怎么计算. 比如数字信号是x(n),n=1~N(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第      一块,10~20的第二块,以此类推.这之前需要对x(n)做