遗传算法经典MATLAB代码

合集下载

利用MATLAB编制的遗传算法代码

利用MATLAB编制的遗传算法代码

function gaTSP

CityNum=30;

[dislist,Clist]=tsp(CityNum);

inn=100; %初始种群大小¡

gnmax=1000; %最大概率

pc=0.8; %交叉概率

pm=0.8; %变异概率

%产生初始种群

for i=1:inn

s(i,:)=randperm(CityNum);

end

[f,p]=objf(s,dislist);

gn=1;

while gn<gnmax+1

for j=1:2:inn

seln=sel(s,p); %选择操作

scro=cro(s,seln,pc); %交叉操作

scnew(j,:)=scro(1,:);

scnew(j+1,:)=scro(2,:);

smnew(j,:)=mut(scnew(j,:),pm); %变异操作

smnew(j+1,:)=mut(scnew(j+1,:),pm);

end

s=smnew; %产生了新的种群

[f,p]=objf(s,dislist); %计算新种群的适应度%记录当前代最好和平均的适应度

[fmax,nmax]=max(f);

ymean(gn)=1000/mean(f);

ymax(gn)=1000/fmax;

%记录当前代的最佳个体

x=s(nmax,:);

drawTSP(Clist,x,ymax(gn),gn,0);

gn=gn+1;

%pause;

end

gn=gn-1;

figure(2);

plot(ymax,'r'); hold on;

plot(ymean,'b');grid;

title('ËÑË÷¹ý³Ì');

用MATLAB实现遗传算法程序

用MATLAB实现遗传算法程序

用MATLAB实现遗传算法程序

一、本文概述

遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。

本文旨在介绍如何使用MATLAB实现遗传算法程序。MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。

通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。

二、遗传算法基础

遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学

机制的优化搜索算法。它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。

在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。

matlab遗传算法两个变量范围

matlab遗传算法两个变量范围

matlab遗传算法两个变量范围

一、遗传算法概述

遗传算法是一种通过模拟生物进化过程进行优化的算法。它基于遗传学的思想,通过模拟生物的选择、交叉和变异等操作,逐步寻找最优解。遗传算法包含三个基本操作:选择、交叉和变异。选择操作通过适应度函数对个体进行评估,并选择适应度较高的个体作为父代,用于产生下一代个体。交叉操作通过交换父代个体的基因片段,产生新的个体。变异操作则对个体的基因进行随机变化,增加种群的多样性。

二、MATLAB遗传算法

MATLAB提供了丰富的遗传算法工具箱,便于开发者使用遗传算法解决各类优化问题。在使用MATLAB进行遗传算法优化时,需要确定待优化问题的变量范围。变量范围是指变量的取值范围,通过限制变量的取值范围,可以缩小搜索空间,提高算法的效率。

三、确定变量范围的重要性

在遗传算法中,变量范围的确定对优化结果具有重要影响。如果变量范围设置不当,可能导致算法陷入局部最优解,无法找到全局最优解。因此,确定合适的变量范围是进行遗传算法优化的关键步骤之一。

四、变量范围的确定方法

确定变量范围的方法有多种,可以根据具体问题的特点和要求选择合适的方法。常用的方法包括:经验法、试错法和数学建模法。

经验法是一种基于经验和实践的确定变量范围的方法。通过对问题的理解和对变量的分析,结合实际应用经验,确定变量的合理范围。这种方法简单直观,但可能会受到主观因素的影响。

试错法是一种通过试验和调整的方法来确定变量范围。首先根据经验或初步分析,给定一个初始范围,然后进行优化计算,观察优化结果的稳定性和收敛性,根据结果进行范围的调整。通过多次试验和调整,逐步确定合适的变量范围。

遗传算法优化的matlab案例

遗传算法优化的matlab案例

遗传算法优化的matlab案例

以下是一个简单的遗传算法优化的Matlab 案例:

假设我们想找到一个函数f(x) 的最大值,其中x 的取值范围为[0,10]。我们可以使用遗传算法来找到最大值。

步骤如下:

1. 定义适应度函数

我们可以使用f(x) 来定义适应度函数。在这个例子中,我们使用函数f(x) = x^2。在Matlab 中,我们可以这样定义适应度函数:

function y = fitness(x)

y = x.^2;

end

2. 定义遗传算法参数

我们需要定义一些遗传算法的参数,如种群大小、交叉概率、变异概率等。在这个例子中,我们定义种群大小为50,交叉概率为0.8,变异概率为0.1。

pop_size = 50; % 种群大小

crossover_rate = 0.8; % 交叉概率

mutation_rate = 0.1; % 变异概率

3. 执行遗传算法优化

我们可以使用Matlab 自带的ga 函数来执行遗传算法优化。我们需要传入适应度函数、变量的取值范围等参数。

lb = 0; % 变量下限

ub = 10; % 变量上限

nvars = 1; % 变量个数

options =

gaoptimset('Display','iter','PopulationSize',pop_size,'CrossoverFraction',c rossover_rate,'MutationFcn',@mutationadaptfeasible,'MutationRate',mut ation_rate,'StallGenLimit',50); % 遗传算法参数

遗传算法matlab代码

遗传算法matlab代码

function youhuafun

D=code;

N=50; % Tunable

maxgen=50; % Tunable

crossrate=0.5; %Tunable

muterate=0.08; %Tunable

generation=1;

num = length(D);

fatherrand=randint(num,N,3);

score = zeros(maxgen,N);

while generation<=maxgen

ind=randperm(N-2)+2; % 随机配对交叉

A=fatherrand(:,ind(1:(N-2)/2));

B=fatherrand(:,ind((N-2)/2+1:end));

% 多点交叉

rnd=rand(num,(N-2)/2);

ind=rnd tmp=A(ind);

A(ind)=B(ind);

B(ind)=tmp;

% % 两点交叉

% for kk=1:(N-2)/2

% rndtmp=randint(1,1,num)+1;

% tmp=A(1:rndtmp,kk);

% A(1:rndtmp,kk)=B(1:rndtmp,kk);

% B(1:rndtmp,kk)=tmp;

% end

fatherrand=[fatherrand(:,1:2),A,B];

% 变异

rnd=rand(num,N);

ind=rnd [m,n]=size(ind);

tmp=randint(m,n,2)+1;

tmp(:,1:2)=0;

fatherrand=tmp+fatherrand;

fatherrand=mod(fatherrand,3);

遗传算法matlab程序代码

遗传算法matlab程序代码

遗传算法matlab程序代码

遗传算法是一种优化算法,用于在给定的搜索空间中寻找最优解。在Matlab中,可以通过以下代码编写一个基本的遗传算法:% 初始种群大小

Npop = 100;

% 搜索空间维度

ndim = 2;

% 最大迭代次数

imax = 100;

% 初始化种群

pop = rand(Npop, ndim);

% 最小化目标函数

fun = @(x) sum(x.^2);

for i = 1:imax

% 计算适应度函数

fit = 1./fun(pop);

% 选择操作

[fitSort, fitIndex] = sort(fit, 'descend');

pop = pop(fitIndex(1:Npop), :);

% 染色体交叉操作

popNew = zeros(Npop, ndim);

for j = 1:Npop

parent1Index = randi([1, Npop]);

parent2Index = randi([1, Npop]);

parent1 = pop(parent1Index, :);

parent2 = pop(parent2Index, :);

crossIndex = randi([1, ndim-1]);

popNew(j,:) = [parent1(1:crossIndex),

parent2(crossIndex+1:end)];

end

% 染色体突变操作

for j = 1:Npop

mutIndex = randi([1, ndim]);

mutScale = randn();

遗传算法的MATLAB程序实例

遗传算法的MATLAB程序实例

遗传算法的法式实例之迟辟智美创作

如求下列函数的最年夜值

f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]

一、初始化(编码)

initpop.m函数的功能是实现群体的初始化,popsize暗示群体的年夜小,chromlength暗示染色体的长度(二值数的长度),长度年夜小取决于变量的二进制编码的长度(在本例中取10位).代码:

%Name: initpop.m

%初始化

function pop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength));

% rand随机发生每个单位为{0,1} 行数为popsize,列数为chromlength的矩阵,

% roud对矩阵的每个单位进行圆整.这样发生的初始种群.

二、计算目标函数值

1、将二进制数转化为十进制数(1)

代码:

%Name: decodebinary.m

%发生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制

function pop2=decodebinary(pop)

[px,py]=size(pop); %求pop行和例数

for i=1:py

pop1(:,i)=2.^(py-1).*pop(:,i);

py=py-1;

end

pop2=sum(pop1,2); %求pop1的每行之和

2、将二进制编码转化为十进制数(2)

decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint暗示待解码的二进制串的起始位置.(对多个变量而言,如有两个变量,采纳20为暗示,每个变量10为,则第一个变量从1开始,另一个变量从11开始.本例为1),参数1ength暗示所截取的长度(本例为10).代码: %Name: decodechrom.m

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB实现

主要参考书:

MATLAB 6.5 辅助优化计算与设计飞思科技产品研发中⼼编著电⼦⼯业出版社2003.1

遗传算法及其应⽤陈国良等编著

⼈民邮电出版社1996.6

主要内容:

遗传算法简介

遗传算法的MATLAB实现

应⽤举例

在⼯业⼯程中,许多最优化问题性质⼗分复杂,很难⽤

传统的优化⽅法来求解.⾃1960年以来,⼈们对求解这类难

解问题⽇益增加.⼀种模仿⽣物⾃然进化过程的、被称为“

进化算法(evolutionary algorithm)”的随机优化技术在解这

类优化难题中显⽰了优于传统优化算法的性能。⽬前,进化

算法主要包括三个研究领域:遗传算法、进化规划和进化

策略。其中遗传算法是迄今为⽌进化算法中应⽤最多、⽐较

成熟、⼴为⼈知的算法。

⼀、遗传算法简介

遗传算法(Genetic Algorithm, GA)最先是由美国Mic-

hgan⼤学的John Holland于1975年提出的。遗传算法是

模拟达尔⽂的遗传选择和⾃然淘汰的⽣物进化过程的计算

模型。它的思想源于⽣物遗传学和适者⽣存的⾃然规律,

是具有“⽣存+检测”的迭代过程的搜索算法。遗传算法

以⼀种群体中的所有个体为对象,并利⽤随机化技术指

导对⼀个被编码的参数空间进⾏⾼效搜索。其中,选择、

交叉和变异构成了遗传算法的遗传操作;参数编码、初始

群体的设定、适应度函数的设计、遗传操作设计、控制参

数设定等5个要素组成了遗传算法的核⼼内容。

遗传算法的基本步骤:

遗传算法是⼀种基于⽣物⾃然选择与遗传机理的随机

搜索算法,与传统搜索算法不同,遗传算法从⼀组随机产

遗传算法matlab源代码

遗传算法matlab源代码

方案一的程序编码

函数主文件:

function[Xp,LC1,LC2,LC3]=CLBGA8(M,Pm) %%%陈璐斌编程,解决VRP问题(带时间窗)%%输入参数

%M遗传进化迭代次数

%Pm变异概率

%%输出参数

%Xp最优个体

%LC1目标收敛曲线

%LC2平均适应度收敛曲线

%LC3最优适应度收敛曲线

%%%变量初始化

Xp=zeros(1,5);

LC1=zeros(1,M);

LC2=zeros(1,M);

LC3=zeros(1,M);

Best=inf;

%%编码方式-第一步:产生初始种群

N=10;%N 种群规模

farm=cell(1,N);%存储种群的细胞结构

k=1;

while (N-k>=0)

G=randperm(5);%产生5个客户的全排列

farm{k}=G;

k=k+1;

end

%%%进化迭代计数器

counter=1;

while counter<=M

%%第二步:交叉

%交叉采用双亲双子单点交叉

N=10;%种群规模

newfarm=cell(1,2*N-4);%存储子代的细胞结构Ser=randperm(N);%两两随机配对表生成

for i=1:(N-2)%避免交叉概率为1 A=farm{Ser(i)};

B=farm{Ser(i+1)};%取出父代

P0=unidrnd(5);%随机选择交叉点aa=zeros(1,5);

bb=zeros(1,5);

A_=A;

B_=B;

for ii=1:5-P0

aa(ii)=B(P0+ii);

end

for ii=1:5-P0

for iiii=1:5

if(B(P0+ii)==A_(iiii))

使用MATLAB遗传算法工具实例

使用MATLAB遗传算法工具实例

使用MATLAB遗传算法工具实例

MATLAB中提供了一种用于优化问题的遗传算法工具箱,可以帮助用

户通过遗传算法来寻找最优解。下面是一个示例,展示了如何使用MATLAB遗传算法工具箱解决一个简单的优化问题。

假设我们要求解以下函数的最大值:f(x)=x^2,其中x的取值范围在[-10,10]之间。

首先,我们需要定义适应度函数,即用来评估个体适应度的函数。在

本例中,适应度函数可以直接使用目标函数,即f(x)=x^2、在MATLAB中,我们可以使用函数句柄来定义适应度函数:

```matlab

function fitness = fitnessFunction(x)

fitness = x^2;

end

```

接下来,我们需要配置遗传算法的参数。我们可以使用`gaoptimset`

函数来创建一个参数结构体,并设置算法的各个参数:

```matlab

options = gaoptimset('PopulationSize', 50, 'Generations', 100, 'FitnessLimit', 1e-6, 'StallGenLimit', 10);

```

上述代码将设置种群大小为50,迭代次数为100,适应度极限为1e-6(即当适应度较小时停止迭代),最大迭代代数为10(即如果连续10代迭代没有改进,则停止迭代)。

接下来,我们需要调用`ga`函数来运行遗传算法并求解最优解。我们可以使用以下代码来实现:

```matlab

```

最后,我们可以打印出最优解及其目标函数值:

```matlab

disp(['Optimal solution: x = ' num2str(x) ', f(x) = '

matlab遗传算法求多元方程系数

matlab遗传算法求多元方程系数

matlab遗传算法求多元方程系数

在MATLAB中,可以使用遗传算法求解多元方程的系数。以下是一个简单的示例:

1.首先,定义目标函数和约束条件。例如,求解以下多元方程组的系数:

```

x1+2*x2-3*x3=1

2*x1+x2+3*x3=2

-x1+x2-x3=0

```

2.然后,编写遗传算法的代码。这里我们使用MATLAB内置的`gamultiobj`函数。

```matlab

%定义目标函数

fun=@(x)[x(1)+2*x(2)-3*x(3)-1;...

2*x(1)+x(2)+3*x(3)-2;...

-x(1)+x(2)-x(3)];

%定义变量范围

lb=[-10,-10,-10];%下界

ub=[10,10,10];%上界

%设置遗传算法参数

options=optimoptions('gamultiobj','Display','iter');

%运行遗传算法

[x,fval]=gamultiobj(fun,3,[],[],[],[],[],[],[],[],[],[],lb,ub, options);

```

3.最后,输出结果。

```matlab

disp('最优解:');

disp(x);

disp('目标函数值:');

disp(fval);

```

这个示例将求解给定的多元方程组,并输出最优解和目标函数值。注意,这里的变量范围和目标函数可能需要根据实际情况进行调整。

遗传算法精英保留策略 matlab

遗传算法精英保留策略 matlab

遗传算法精英保留策略 matlab

在遗传算法中,精英保留策略是指在每一代进化过程中,保留上一代中表现最优秀的个体,以保证优秀基因的传递和保留。实现精英保留策略的MATLAB代码如下:

```

function [newPopulation] = elitePreservation(oldPopulation, eliteIndividuals)

% 输入参数:

% oldPopulation:上一代的种群

% eliteIndividuals:精英个体的数量

% 根据适应度对种群进行排序

oldPopulation = sortPopulation(oldPopulation);

% 选择精英个体

elite = oldPopulation(1:eliteIndividuals);

% 根据适应度从高到低排序,删除多余个体

elite = sortPopulation(elite, 'descend');

elite = elite(1:eliteIndividuals);

% 将精英个体和其余个体合并为新一代种群

newPopulation = [elite;

oldPopulation(eliteIndividuals+1:end)];

end

function [sortedPopulation] = sortPopulation(population, sortDirection)

% 输入参数:

% population:待排序的种群

% sortDirection:排序方向,'ascend'表示适应度从低到高排序,'descend'表示适应度从高到低排序(可选参数,默认为'ascend') if nargin < 2

遗传算法matlab代码

遗传算法matlab代码

function youhuafun

D=code;

N=50; % Tunable

maxgen=50; % Tunable

crossrate=0.5; %Tunable

muterate=0.08; %Tunable

generation=1;

num = length(D);

fatherrand=randint(num,N,3);

score = zeros(maxgen,N);

while generation<=maxgen

ind=randperm(N-2)+2; % 随机配对交叉

A=fatherrand(:,ind(1:(N-2)/2));

B=fatherrand(:,ind((N-2)/2+1:end));

% 多点交叉

rnd=rand(num,(N-2)/2);

ind=rnd tmp=A(ind);

A(ind)=B(ind);

B(ind)=tmp;

% % 两点交叉

% for kk=1:(N-2)/2

% rndtmp=randint(1,1,num)+1;

% tmp=A(1:rndtmp,kk);

% A(1:rndtmp,kk)=B(1:rndtmp,kk);

% B(1:rndtmp,kk)=tmp;

% end

fatherrand=[fatherrand(:,1:2),A,B];

% 变异

rnd=rand(num,N);

ind=rnd [m,n]=size(ind);

tmp=randint(m,n,2)+1;

tmp(:,1:2)=0;

fatherrand=tmp+fatherrand;

fatherrand=mod(fatherrand,3);

遗传算法GA的MATLAB代码

遗传算法GA的MATLAB代码

MATLAB实现算法代码:GA(遗传算法)——整数编码

function [BestGene,aa] = GA(MaxGeneration,GeneSize,GeneNum,pcross,pmute,minGene,maxGene)

Parent = Init(GeneSize,GeneNum,minGene,maxGene);

[BestGene,Parent] = KeepBest(Parent);

aa = [];

for i = 1:MaxGeneration

[i 1/value(BestGene)]

Child = chose(Parent);

Child = cross(Child,pcross);

Child = mute(Child,pmute,maxGene);

[BestGene,Parent] = KeepBest(Child);

aa = [aa;value(BestGene)];

end

function GeneInit = Init(GeneSize,GeneNum,minGene,maxGene)

GeneInit = [];

for i = 1:GeneSize

x = []; x = ceil(rand(1,GeneNum).*(maxGene-minGene)) + minGene;

GeneInit = [GeneInit;x];

end

GeneInit = [GeneInit;x];

function Child = chose(Parent)

GeneSize = size(Parent,1);

遗传算法matlab代码

遗传算法matlab代码

遗传算法matlab代码

以下是一个简单的遗传算法的MATLAB 代码示例:

matlab复制代码

% 遗传算法参数设置

pop_size = 50; % 种群大小

num_vars = 10; % 变量数目

num_generations = 100; % 进化的代数

mutation_rate = 0.01; % 变异率

crossover_rate = 0.8; % 交叉率

% 初始化种群

population = rand(pop_size, num_vars);

% 开始进化

for i = 1:num_generations

% 计算适应度

fitness = evaluate_fitness(population);

% 选择操作

selected_population = selection(population, fitness);

% 交叉操作

offspring_population = crossover(selected_population,

crossover_rate);

% 变异操作

mutated_population = mutation(offspring_population,

mutation_rate);

% 生成新种群

population = [selected_population; mutated_population];

end

% 选择最优解

best_solution = population(find(fitness == max(fitness)), :);

% 适应度函数

matlab遗传算法实例

matlab遗传算法实例

matlab遗传算法实例

Matlab遗传算法实例

引言:

遗传算法是一种模拟自然进化过程的优化算法,它通过模拟优胜劣汰、基因交叉和变异等自然选择机制,来寻找问题的最优解。在Matlab中,我们可以利用遗传算法工具箱来快速实现遗传算法,并解决各种实际问题。本文将介绍一个基于Matlab的遗传算法实例,以帮助读者更好地理解和应用遗传算法。

一、问题描述

假设我们要在一个由0和1组成的二进制串中寻找最优解。具体而言,我们定义了一个目标函数,目标函数的输入是一个二进制串,输出是一个实数值。我们的目标是找到一个二进制串,使得目标函数的输出值最大化。

二、遗传算法的基本原理

遗传算法是基于自然进化过程的优化算法,它的基本原理如下:

1. 初始化种群:随机生成一组二进制串作为初始种群。

2. 评估适应度:根据目标函数计算每个个体的适应度值。

3. 选择操作:根据适应度值选择优秀个体作为父代,进行繁殖。

4. 交叉操作:对选出的父代个体进行基因交叉,生成新的子代个体。

5. 变异操作:对子代个体进行基因变异,引入新的基因信息。

6. 更新种群:用子代替换父代,生成新的种群。

7. 终止条件判断:判断是否满足终止条件,若满足则输出最优解,否则返回第3步。

三、Matlab代码实现

以下是一个简单的Matlab代码实例,用于求解上述问题:

```matlab

% 目标函数定义

function y = fitnessFunc(x)

y = sum(x);

end

% 遗传算法主函数

function [bestSolution, bestFitness] = geneticAlgorithm(popSize, numGen, pc, pm)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法实例:

也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。

对于初学者,尤其是还没有编程经验的非常有用的一个文件

遗传算法实例

% 下面举例说明遗传算法%

% 求下列函数的最大值%

% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]%

% 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈。%

% 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其

中 b 是[0,1023] 中的一个二值数。%

% %

%--------------------------------------------------------------------------------------------------------------%

%--------------------------------------------------------------------------------------------------------------%

% 编程

%-----------------------------------------------

% 初始化(编码)

% 函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength 表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。

%遗传算法子程序

%Name:

%初始化

function pop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength)); % rand随机产生每个单元

为{0,1} 行数为popsize,列数为chromlength的矩阵,

% roud对矩阵的每个单元进行圆整。这样产生的初始种群。

% 计算目标函数值

% 将二进制数转化为十进制数(1)

%遗传算法子程序

%Name:

%产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制

function pop2=decodebinary(pop)

[px,py]=size(pop); %求pop行和列数

for i=1:py

pop1(:,i)=2.^(py-i).*pop(:,i);

end

pop2=sum(pop1,2); %求pop1的每行之和

% 将二进制编码转化为十进制数(2)

% 函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

% (对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),

% 参数1ength表示所截取的长度(本例为10)。

%遗传算法子程序

%Name:

%将二进制编码转换成十进制

function pop2=decodechrom(pop,spoint,length)

pop1=pop(:,spoint:spoint+length-1);

pop2=decodebinary(pop1);

% 计算目标函数值

% 函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

%遗传算法子程序

%Name:

%实现目标函数的计算

function [objvalue]=calobjvalue(pop)

temp1=decodechrom(pop,1,10); %将pop每行转化成十进制数

x=temp1*10/1023; %将二值域中的数转化为变量域的数

objvalue=10*sin(5*x)+7*cos(4*x); %计算目标函数值

% 计算个体的适应值

%遗传算法子程序

%Name:

%计算个体的适应值

function fitvalue=calfitvalue(objvalue)

global Cmin;

Cmin=0;

[px,py]=size(objvalue);

for i=1:px

if objvalue(i)+Cmin>0

temp=Cmin+objvalue(i);

else

temp=;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';

% 选择复制

% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。

% 根据方程pi=fi/∑fi=fi/fsum,选择步骤:

% 1)在第t 代,由(1)式计算fsum 和pi

% 2)产生{0,1} 的随机数rand( .),求s=rand( .)*fsum

% 3)求∑fi≥s中最小的k ,则第k 个个体被选中

% 4)进行N 次2)、3)操作,得到N 个个体,成为第t=t+1 代种群

%遗传算法子程序

%Name:

%选择复制

function [newpop]=selection(pop,fitvalue)

totalfit=sum(fitvalue); %求适应值之和

fitvalue=fitvalue/totalfit; %单个个体被选择的概率

fitvalue=cumsum(fitvalue); %如fitvalue=[1 2 3 4],

则cumsum(fitvalue)=[1 3 6 10]

[px,py]=size(pop);

ms=sort(rand(px,1)); %从小到大排列

fitin=1;

newin=1;

while newin<=px

if(ms(newin))

相关文档
最新文档