当前位置:首页 » 操作系统 » 自适应遗传算法代码

自适应遗传算法代码

发布时间: 2022-05-14 19:34:03

1. 关于自适应遗传算法的交叉操作

不是随机选择的,是有规律的选,一般是等间隔选择,例如两个相邻的个体。

如图红色是一种选择方式:1&2, 3&4, 5&6, 7&8, 9&10

蓝色也是一种选择方式:1&6, 2&7, 3&8, 4&9, 5&10

当然,也要尽量避免相同个体交叉。

2. 染色体个数的多少对遗传算法优化的结果是否有影响

自适应遗传算法

上回文说到基于误差梯度下降的BP网络算法容易陷入局部极小,通常的改进方法先使用遗传算法生成比较好的权重值,再交给神经网络训练。

遗传算法随着进化的进行,其选择率、交叉算子、变异率应该是动态改变的。

编码方式

在使用BP网络进行文本分类时,大都是采用实数编码,把权值设为[0,1]上的实数,这是因为要使用权值调整公式要求权值是实数。但是在使用遗传算法优化这些权值时,完全可以把它们编码为整数。比如设为[1,64]上的整数,一个权值只有64种选择,而[0,1]上的实数有无穷多个,这样既可以缩小搜寻的范围,同时也加大了搜寻的步长。毕竟BP网络中很多个极小点,使用遗传的目的只是在全局找个一个比较优的解,进一步的精确寻优交给BP神经网络来做。

选择算子

在进化初期我们应该使用较小的选择压力,以鼓励种群向着多样化发展;在进化后期个体差异不大,适应度都很高,这时应增大选择压力以刺激进化速度。可以使用模拟退火(SA,simulated annealing)来决定选择率,即我们以一定的概率来接收不好的个体:

这是模拟退火的原始表达式,意思是说在金属退火的过程中,其能量在降低(<0),我们以的概率接收本次变化,显然当温度T越低时,接收概率越大,温度T越高时,接收概率越小,k是常数。对应到遗传算法,就是当种群平均适应值越低时,接收劣等个体的概率越高,当种群平均适应值越高时,接收劣等个体的概率越小。

另外M.Srinivas提出当群体适应度比较集中时,使交叉概率增大;当群体适应度比较分散时,使交叉概率减小。种群适应度分散与否通过最大、最小和平均适应度来衡量。

选择算子是保证遗传算法能找到近优解的唯一手段,当染色体唯度很高时,遗传算法很难找到较好的解。这是因为最开始生成的初始种群适应度都极其的低,个体之间(适应度)差异不大,如果使用锦标赛选择法则跟随机选择无异,即使使用赌轮法选择到最优个体的概率会大增加,但是最优个体也不比最劣个体好到哪儿去,最优个体也不含有优良的基因片段。所以对于高维数据,在进化初期主要靠交叉进行全局搜索来搜寻较优的个体。

交叉算子

交叉实际上就是在进行全局搜索,所以遗传算法不过是穷举算法的一个变种。在进化初期,种群多样性高,采用单点交叉就可以获得较广的搜索空间;在进化后期,个体差异不大,需要采用多点交叉,或者有人采用变异交叉点的方法。

当发现种群的适应度操持不变时,可能已经进入了局部最优,应该变异交叉点,大步跨出当前的小山峰。

由于要保留精英个体,所以交叉要以一定的概率进行。随着进化的进行,交叉率应逐渐降低趋于某个值,以避免算法不收敛。

变异算子

直观上对好的个体应施以较小的变异率,对劣等个体应施以较大的变异率。

当发现种群的适应度在降低时应增大变异率。

另外M.Srinivas提出当群体适应度比较集中时,使变异概率增大;当群体适应度比较分散时,使变异概率减小。种群适应度分散与否通过最大、最小和平均适应度来衡量。

下面的代码是用遗传算法来为BP网络寻找比较好的初始解。但是遗传算法根本就没有起到作用,因为我的神经网络输入层1000个节点,隐藏层20个节点,这就2万个权值了,也就是说染色体的长度在2万维以上,用遗传算法根本就找不到较优解,它始终是在随机地遍历,一点儿没有想“进化”的意思。

3. 大家好,请问谁有基于matlab的遗传算法源代码,很需要呀

function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P)
%--------------------------------------------------------------------------
% JSPGA.m
% 车间作业调度问题遗传算法
%--------------------------------------------------------------------------
% 输入参数列表
% M 遗传进化迭代次数
% N 种群规模(取偶数)
% Pm 变异概率
% T m×n的矩阵,存储m个工件n个工序的加工时间
% P 1×n的向量,n个工序中,每一个工序所具有的机床数目
% 输出参数列表
% Zp 最优的Makespan值
% Y1p 最优方案中,各工件各工序的开始时刻,可根据它绘出甘特图
% Y2p 最优方案中,各工件各工序的结束时刻,可根据它绘出甘特图
% Y3p 最优方案中,各工件各工序使用的机器编号
% Xp 最优决策变量的值,决策变量是一个实数编码的m×n矩阵
% LC1 收敛曲线1,各代最优个体适应值的记录
% LC2 收敛曲线2,各代群体平均适应值的记录
% 最后,程序还将绘出三副图片:两条收敛曲线图和甘特图(各工件的调度时序图)

%第一步:变量初始化
[m,n]=size(T);%m是总工件数,n是总工序数
Xp=zeros(m,n);%最优决策变量
LC1=zeros(1,M);%收敛曲线1
LC2=zeros(1,N);%收敛曲线2

%第二步:随机产生初始种群
farm=cell(1,N);%采用细胞结构存储种群
for k=1:N
X=zeros(m,n);
for j=1:n
for i=1:m
X(i,j)=1+(P(j)-eps)*rand;
end
end
farm=X;
end

counter=0;%设置迭代计数器
while counter

%第三步:交叉
newfarm=cell(1,N);%交叉产生的新种群存在其中
Ser=randperm(N);
for i=1:2:(N-1)
A=farm;%父代个体
B=farm;
Manner=unidrnd(2);%随机选择交叉方式
if Manner==1
cp=unidrnd(m-1);%随机选择交叉点
%双亲双子单点交叉
a=[A(1:cp,:);B((cp+1):m,:)];%子代个体
b=[B(1:cp,:);A((cp+1):m,:)];
else
cp=unidrnd(n-1);%随机选择交叉点
a=[A(:,1:cp),B(:,(cp+1):n)];%双亲双子单点交叉
b=[B(:,1:cp),A(:,(cp+1):n)];
end
newfarm=a;%交叉后的子代存入newfarm
newfarm=b;
end
%新旧种群合并
FARM=[farm,newfarm];

%第四步:选择复制
FITNESS=zeros(1,2*N);
fitness=zeros(1,N);
plotif=0;
for i=1:(2*N)
X=FARM;
Z=COST(X,T,P,plotif);%调用计算费用的子函数
FITNESS(i)=Z;
end
%选择复制采取两两随机配对竞争的方式,具有保留最优个体的能力
Ser=randperm(2*N);
for i=1:N
f1=FITNESS(Ser(2*i-1));
f2=FITNESS(Ser(2*i));
if f1<=f2
farm=FARM;
fitness(i)=FITNESS(Ser(2*i-1));
else
farm=FARM;
fitness(i)=FITNESS(Ser(2*i));
end
end
%记录最佳个体和收敛曲线
minfitness=min(fitness)
meanfitness=mean(fitness)
LC1(counter+1)=minfitness;%收敛曲线1,各代最优个体适应值的记录
LC2(counter+1)=meanfitness;%收敛曲线2,各代群体平均适应值的记录
pos=find(fitness==minfitness);
Xp=farm;

%第五步:变异
for i=1:N
if Pm>rand;%变异概率为Pm
X=farm;
I=unidrnd(m);
J=unidrnd(n);
X(I,J)=1+(P(J)-eps)*rand;
farm=X;
end
end
farm=Xp;

counter=counter+1
end

%输出结果并绘图
figure(1);
plotif=1;
X=Xp;
[Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif);
figure(2);
plot(LC1);
figure(3);
plot(LC2);

4. 求遗传算法(GA)C语言代码

.----来个例子,大家好理解..--
基于遗传算法的人工生命模拟
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<time.h>
#include<string.h>
#include "graph.c"
/* 宏定义 */
#define TL1 20 /* 植物性食物限制时间 */
#define TL2 5 /* 动物性食物限制时间 */
#define NEWFOODS 3 /* 植物性食物每代生成数目 */
#define MUTATION 0.05 /* 变异概率 */
#define G_LENGTH 32 /* 个体染色体长度 */
#define MAX_POP 100 /* 个体总数的最大值 */
#define MAX_FOOD 100 /* 食物总数的最大值 */
#define MAX_WX 60 /* 虚拟环境的长度最大值 */
#define MAX_WY 32 /* 虚拟环境的宽度最大值 */
#define SX1 330 /* 虚拟环境图左上角点x坐标 */
#define SY1 40 /* 虚拟环境图左上角点y坐标 */
#define GX 360 /* 个体数进化图形窗口的左上角点X坐标 */
#define GY 257 /* 个体数进化图形窗口的左上角点Y坐标 */
#define GXR 250 /* 个体数进化图形窗口的长度 */
#define GYR 100 /* 个体数进化图形窗口的宽度 */
#define GSTEP 2 /* 个体数进化图形窗口的X方向步长 */
#define R_LIFE 0.05 /* 初期产生生物数的环境比率 */
#define R_FOOD 0.02 /* 初期产生食物数的环境比率 */
#define SL_MIN 10 /* 个体寿命最小值 */
/* 全局变量 */
unsigned char gene[MAX_POP][G_LENGTH]; /* 遗传基因 */
unsigned char iflg[MAX_POP]; /* 个体死活状态标志变量 */

5. TSP遗传算法的求问!!!!

知道每个城市间距离就可以了,先把40乘40的距离矩阵列到excel里面,然后套入经典的遗传算法代码中运行就可以了。 软件中的Lingo有经典的tsp代码,下载破解版的lingo,然后运行就可以了。那个经典代码只能解决小规模的tsp,大规模的tsp需要用智能算法。100个城市只需要2分钟。40个只要几秒。 你可以到网上搜代码。

6. 自适应遗传算法优化svr的代码怎么写

都是有两种调用方法,一种图形界面的,这个从开始菜单

7. 遗传算法具体应用

1、函数优化

函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。

2、组合优化

随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在目前的计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。

此外,GA也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。

3、车间调度

车间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。

从最初的传统车间调度(JSP)问题到柔性作业车间调度问题(FJSP),遗传算法都有优异的表现,在很多算例中都得到了最优或近优解。


(7)自适应遗传算法代码扩展阅读:

遗传算法的缺点

1、编码不规范及编码存在表示的不准确性。

2、单一的遗传算法编码不能全面地将优化问题的约束表示出来。考虑约束的一个方法就是对不可行解采用阈值,这样,计算的时间必然增加。

3、遗传算法通常的效率比其他传统的优化方法低。

4、遗传算法容易过早收敛。

5、遗传算法对算法的精度、可行度、计算复杂性等方面,还没有有效的定量分析方法。

8. 求基于遗传算法的IEEE

遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。

一.进化论知识

作为遗传算法生物背景的介绍,下面内容了解即可:

种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。

个体:组成种群的单个生物。

基因 ( Gene ) :一个遗传因子。

染色体 ( Chromosome ) :包含一组的基因。

生存竞争,适者生存:对环境适应度高的、牛B的个体参与繁殖的机会比较多,后代就会越来越多。适应度低的个体参与繁殖的机会比较少,后代就会越来越少。

遗传与变异:新个体会遗传父母双方各一部分的基因,同时有一定的概率发生基因变异。

简单说来就是:繁殖过程,会发生基因交叉( Crossover ) ,基因突变 ( Mutation ) ,适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。

二.遗传算法思想

借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取) ;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

编码:需要将问题的解编码成字符串的形式才能使用遗传算法。最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。例如,问题的解是整数,那么可以将其编码成二进制位数组的形式。将0-1字符串作为0-1背包问题的解就属于二进制编码。

遗传算法有3个最基本的操作:选择,交叉,变异。

选择:选择一些染色体来产生下一代。一种常用的选择策略是 “比例选择”,也就是个体被选中的概率与其适应度函数值成正比。假设群体的个体总数是M,那么那么一个体Xi被选中的概率为f(Xi)/( f(X1) + f(X2) + …….. + f(Xn) ) 。比例选择实现算法就是所谓的“轮盘赌算法”( Roulette Wheel Selection ) ,轮盘赌算法的一个简单的实现如下:

轮盘赌算法
/*
* 按设定的概率,随机选中一个个体
* P[i]表示第i个个体被选中的概率
*/
int RWS()
{
m = 0;
r =Random(0,1); //r为0至1的随机数
for(i=1;i<=N; i++)
{
/* 产生的随机数在m~m+P[i]间则认为选中了i
* 因此i被选中的概率是P[i]
*/
m = m + P[i];
if(r<=m) return i;
}
}

交叉(Crossover):2条染色体交换部分基因,来构造下一代的2条新的染色体。例如:

交叉前:

00000|011100000000|10000

11100|000001111110|00101

交叉后:

00000|000001111110|10000

11100|011100000000|00101

染色体交叉是以一定的概率发生的,这个概率记为Pc 。

变异(Mutation):在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm 。例如:

变异前:

000001110000000010000

变异后:

000001110000100010000

适应度函数 ( Fitness Function ):用于评价某个染色体的适应度,用f(x)表示。有时需要区分染色体的适应度函数与问题的目标函数。例如:0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不一定适合。适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数。

三.基本遗传算法的伪代码

基本遗传算法伪代码
/*
* Pc:交叉发生的概率
* Pm:变异发生的概率
* M:种群规模
* G:终止进化的代数
* Tf:进化产生的任何一个个体的适应度函数超过Tf,则可以终止进化过程
*/
初始化Pm,Pc,M,G,Tf等参数。随机产生第一代种群Pop

do
{
计算种群Pop中每一个体的适应度F(i)。
初始化空种群newPop
do
{
根据适应度以比例选择算法从种群Pop中选出2个个体
if ( random ( 0 , 1 ) < Pc )
{
对2个个体按交叉概率Pc执行交叉操作
}
if ( random ( 0 , 1 ) < Pm )
{
对2个个体按变异概率Pm执行变异操作
}
将2个新个体加入种群newPop中
} until ( M个子代被创建 )
用newPop取代Pop
}until ( 任何染色体得分超过Tf, 或繁殖代数超过G )

四.基本遗传算法优化

下面的方法可优化遗传算法的性能。

精英主义(Elitist Strategy)选择:是基本遗传算法的一种优化。为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中。

插入操作:可在3个基本操作的基础上增加一个插入操作。插入操作将染色体中的某个随机的片段移位到另一个随机的位置。

五. 使用AForge.Genetic解决TSP问题

AForge.NET是一个C#实现的面向人工智能、计算机视觉等领域的开源架构。AForge.NET中包含有一个遗传算法的类库。

AForge.NET主页:http://www.aforgenet.com/

AForge.NET代码下载:http://code.google.com/p/aforge/

介绍一下AForge的遗传算法用法吧。AForge.Genetic的类结构如下:

图1. AForge.Genetic的类图

下面用AForge.Genetic写个解决TSP问题的最简单实例。测试数据集采用网上流传的中国31个省会城市的坐标:

1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975

操作过程:

(1) 下载AForge.NET类库,网址:http://code.google.com/p/aforge/downloads/list

(2) 创建C#空项目GenticTSP。然后在AForge目录下找到AForge.dll和AForge.Genetic.dll,将其拷贝到TestTSP项目的bin/Debug目录下。再通过“Add Reference...”将这两个DLL添加到工程。

(3) 将31个城市坐标数据保存为bin/Debug/Data.txt 。

(4) 添加TSPFitnessFunction.cs,加入如下代码:

TSPFitnessFunction类
using System;
using AForge.Genetic;

namespace GenticTSP
{
/// <summary>
/// Fitness function for TSP task (Travaling Salasman Problem)
/// </summary>
public class TSPFitnessFunction : IFitnessFunction
{
// map
private int[,] map = null;

// Constructor
public TSPFitnessFunction(int[,] map)
{
this.map = map;
}

/// <summary>
/// Evaluate chromosome - calculates its fitness value
/// </summary>
public double Evaluate(IChromosome chromosome)
{
return 1 / (PathLength(chromosome) + 1);
}

/// <summary>
/// Translate genotype to phenotype
/// </summary>
public object Translate(IChromosome chromosome)
{
return chromosome.ToString();
}

/// <summary>
/// Calculate path length represented by the specified chromosome
/// </summary>
public double PathLength(IChromosome chromosome)
{
// salesman path
ushort[] path = ((PermutationChromosome)chromosome).Value;

// check path size
if (path.Length != map.GetLength(0))
{
throw new ArgumentException("Invalid path specified - not all cities are visited");
}

// path length
int prev = path[0];
int curr = path[path.Length - 1];

// calculate distance between the last and the first city
double dx = map[curr, 0] - map[prev, 0];
double dy = map[curr, 1] - map[prev, 1];
double pathLength = Math.Sqrt(dx * dx + dy * dy);

// calculate the path length from the first city to the last
for (int i = 1, n = path.Length; i < n; i++)
{
// get current city
curr = path[i];

// calculate distance
dx = map[curr, 0] - map[prev, 0];
dy = map[curr, 1] - map[prev, 1];
pathLength += Math.Sqrt(dx * dx + dy * dy);

// put current city as previous
prev = curr;
}

return pathLength;
}
}
}

(5) 添加GenticTSP.cs,加入如下代码:

GenticTSP类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

using AForge;
using AForge.Genetic;

namespace GenticTSP
{
class GenticTSP
{

static void Main()
{
StreamReader reader = new StreamReader("Data.txt");

int citiesCount = 31; //城市数

int[,] map = new int[citiesCount, 2];

for (int i = 0; i < citiesCount; i++)
{
string value = reader.ReadLine();
string[] temp = value.Split(' ');
map[i, 0] = int.Parse(temp[0]); //读取城市坐标
map[i, 1] = int.Parse(temp[1]);
}

// create fitness function
TSPFitnessFunction fitnessFunction = new TSPFitnessFunction(map);

int populationSize = 1000; //种群最大规模

/*
* 0:EliteSelection算法
* 1:RankSelection算法
* 其他:RouletteWheelSelection 算法
* */
int selectionMethod = 0;

// create population
Population population = new Population(populationSize,
new PermutationChromosome(citiesCount),
fitnessFunction,
(selectionMethod == 0) ? (ISelectionMethod)new EliteSelection() :
(selectionMethod == 1) ? (ISelectionMethod)new RankSelection() :
(ISelectionMethod)new RouletteWheelSelection()
);

// iterations
int iter = 1;
int iterations = 5000; //迭代最大周期

// loop
while (iter < iterations)
{
// run one epoch of genetic algorithm
population.RunEpoch();

// increase current iteration
iter++;
}

System.Console.WriteLine("遍历路径是: {0}", ((PermutationChromosome)population.BestChromosome).ToString());
System.Console.WriteLine("总路程是:{0}", fitnessFunction.PathLength(population.BestChromosome));
System.Console.Read();

}
}
}

网上据称这组TSP数据的最好的结果是 15404 ,上面的程序我刚才试了几次最好一次算出了15402.341,但是最差的时候也跑出了大于16000的结果。

我这还有一个版本,设置种群规模为1000,迭代5000次可以算出15408.508这个结果。源代码在文章最后可以下载。

总结一下使用AForge.Genetic解决问题的一般步骤:

(1) 定义适应函数类,需要实现IFitnessFunction接口

(2) 选定种群规模、使用的选择算法、染色体种类等参数,创建种群population

(3)设定迭代的最大次数,使用RunEpoch开始计算

9. 求自适应遗传算法的MATLAB代码 要谢菲尔德遗传算法工具箱的

都是有两种调用方法,一种图形界面的,这个从开始菜单,然后工具,然后从里面找神经网络neuralnetwork,遗传算法工具是全局优化工具箱里面的,globaloptimization。 另外一种通过命令行调用,这个需要你理解你都要做...

10. 遗传算法的matlab代码实现是什么

遗传算法我懂,我的论文就是用着这个算法,具体到你要遗传算法是做什么?优化什么的。。。我给你一个标准遗传算法程序供你参考:
该程序是遗传算法优化BP神经网络函数极值寻优:
%% 该代码为基于神经网络遗传算法的系统极值寻优
%% 清空环境变量
clc
clear

%% 初始化遗传算法参数
%初始化参数
maxgen=100; %进化代数,即迭代次数
sizepop=20; %种群规模
pcross=[0.4]; %交叉概率选择,0和1之间
pmutation=[0.2]; %变异概率选择,0和1之间

lenchrom=[1 1]; %每个变量的字串长度,如果是浮点变量,则长度都为1
bound=[-5 5;-5 5]; %数据范围

indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体
avgfitness=[]; %每一代种群的平均适应度
bestfitness=[]; %每一代种群的最佳适应度
bestchrom=[]; %适应度最好的染色体

%% 初始化种群计算适应度值
% 初始化种群
for i=1:sizepop
%随机产生一个种群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%计算适应度
indivials.fitness(i)=fun(x); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色体
avgfitness=sum(indivials.fitness)/sizepop; %染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[avgfitness bestfitness];

%% 迭代寻优
% 进化开始
for i=1:maxgen
i
% 选择
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 变异
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);

% 计算适应度
for j=1:sizepop
x=indivials.chrom(j,:); %解码
indivials.fitness(j)=fun(x);
end

%找到最小和最大适应度的染色体及它们在种群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次进化中最好的染色体
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;

avgfitness=sum(indivials.fitness)/sizepop;

trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度
end
%进化结束

%% 结果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('适应度曲线','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
axis([0,100,0,1])
disp('适应度 变量');
x=bestchrom;
% 窗口显示
disp([bestfitness x]);

热点内容
259pp页面访问升级 发布:2024-05-05 21:47:51 浏览:88
迅雷阻止上传 发布:2024-05-05 21:26:19 浏览:913
数据库运维题 发布:2024-05-05 21:21:47 浏览:961
RM魔塔编程 发布:2024-05-05 21:21:47 浏览:285
matlab获取文件夹 发布:2024-05-05 21:12:24 浏览:291
一根式算法 发布:2024-05-05 21:12:23 浏览:955
php无刷新 发布:2024-05-05 21:08:11 浏览:982
搭建一个流媒体服务器 发布:2024-05-05 20:40:59 浏览:667
2017中超数据库 发布:2024-05-05 20:37:25 浏览:379
编程包游戏 发布:2024-05-05 20:25:00 浏览:609