投影寻踪 遗传算法MATLAB程序
clc
clear
close all
Alpha=0.1;
X=load('d:\data.txt');
for k=1:21
eval(sprintf('syms a%d',k));
end
a=[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21];
[n,p]=size(X);
x=zeros(n,p);
Xjmax=max(X);
Xjmin=min(X);
for i=1:n
x(i,:)=(X(i,:)-Xjmin)./(Xjmax-Xjmin);
end
%构造投影指标
for i=1:n
Z(i)=sum(a.*x(i,:));
end
%计算投影指标函数
meanZ=mean(Z);
Sa=0;
for k=1:n
sa=(Z(i)-meanZ).^2;
Sa=Sa+sa;
Sa=sqrt(Sa/n);
end
R=Alpha*Sa;
Da=0;
for k=1:n
rik=abs(Z(i)-Z(k));
%if R>rik
Da=Da+rik;
%end
end
Qa=Sa*Da;
%选择操作
function ret =select(individuals,sizepop)
individuals.fitness=1./(individuals.fitness);
sumfitness=sum(individuals.fitness);
sumf=individuals./fitness;
index=[];
for i =1:sizepop
pick=rand;
while pick==0
pick=rand;
end
for j =1:sizepop
pick =pick-sumf(j);
if pick<0
index=[index j];
break;
end
end
end
indivlduals.chrom=indivuduals.chrom(index,:);
individuals.fitness=individuals.fitness(index);
ret=individuals;
%交叉操作
function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)
for i=1:sizepop
pick = rand(1,2);
while prod(pick)==0
pick=rand(1,2);
end
index=ceil(pick.*sizepop);
pick=rand;
while pick==0
pick=rand;
end
if pick>pcross
continue;
end
flag=0; while flag==0
pick=rand;
while pick==0
pick=rand;
end
pos=ceil(pick.*sum(lenchrom));
pick=rand;
v1=chrom(index(1),pos);
v2=chrom(index(2),pos);
chrom(index(1),pos)=pick*v2+(1-pick)*v1;
chrom(index(2),pos)=pick*v1+(1-pick)*v2;
flag1=test(lenchrom,bound,chrom(index(1),:),fcode);
flag2=test(lenchrom,bound,chrom(index(2),:),fcode);
if flag1*flag2==0
flag=0;
else flag=1;
end
end
end
ret= chrom;
% 变异操作
function ret=Mutation(pmutation,lenchrom,chrom,sizepoppop,bound)
pick=rand;
while pick==0
pick=rand;
end
index=ceil(pick*sizepop);
pick=rand;
if pick>pmutation
continue;
end
flag=0;
while flag==0
pick =rand;
while pick==0
pick=rand;
end
pos=ceil(pick*sum(lenchrom));
v=chrom(i,pos); v1=v-bound(pos,1);
v2=bound(pos,2)-v;
pick=rand;
if pick>0.5
delta=v2*(1-pick^((1-pop(1)/pop(2))^2));
chrom(i,pos)=v+delta;
else
delta=v1*(1-pick^((1-pop(1)/pop(2))^2));
chrom(i,pos)=v-delta;
end
flag=test(lenchrom,bound,chrom(1,:),fcode);
end
end
end
ret=chrom;
end
end
主函数
clc
clear
maxgen=200;
sizepop=20;
pcross=[0.6];
pmutation=[0.01];
lenchrom=[1 1 1 1 1];
bound=[0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi;];
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
avgfitness=[];
bestfitness=[];
bestchrom=[];
for i =1:sizepop
individuals.chrom(1,:)=code(lenchrom,bound);
x=individuals.chrom(i,:);
individuals,fitness(i)=fun(x);
end
[bestfitness, bestindex]=max(individuals.fitness); bestchrom=individuals.chrom(bestindex,:);
avgfitness=sum(individuals.fitness)/sizepop;
trace=[];
for i=1:maxgen
individuals=Select(individuals,sizepop);
avggitness=sum(individuals.fitness)/sizepop;
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound);
if mod(i,10)==0
individuals.chrom=nonlinear(individuals.chrom,sizepop);
end
for j=1:sizepop
x=individuals.chrom(j,:);
individuals.fitness(j)=fun(x);
end
[newbestfitness,newbestindex]=max(individuals.fitness);
if bestfitness>newbestfitness;
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
avgfitness=suindividuals.fitness/sizepop;
trace=[trace;avgfitness bestfitness];
end
完整的遗传算法函数Matlab程序
完整的遗传算法函数Matlab程序
遗传算法是一种模拟自然进化过程的算法,通过遗传代数操作来搜索最优解。它是一种优化算法,可以用于解决复杂问题,例如函数优化、组合优化、机器学习等。在Matlab中,遗传算法可以通过使用内置函数进行实现,也可以编写自己的遗传算法函数。以下是一个完整的遗传算法函数Matlab程序的示例:
function [x_best, f_best] = GA(fit_func, nvars)
% fit_func: 适应度函数句柄
% nvars: 变量个数
% 遗传算法参数设置
pop_size = 100; % 种群大小
prob_crossover = 0.8; % 交叉概率
prob_mutation = 0.02; % 变异概率
max_gen = 1000; % 最大迭代次数
% 初始化种群
pop = rand(pop_size, nvars);
for i = 1:max_gen
% 计算适应度
for j = 1:pop_size
fitness(j) = feval(fit_func, pop(j,:));
end
% 找到最优个体
[f_best, best_idx] = max(fitness);
x_best = pop(best_idx,:);
% 交叉操作
for j = 1:2:pop_size
if rand < prob_crossover
% 随机选择父代
idx_parent1 = randi(pop_size);
遗传算法的原理及MATLAB程序实现.
1 遗传算法的原理
1.1 遗传算法的基本思想
遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。
遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。
计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。
1.2 遗传算法的特点
1.2.1 遗传算法的优点
遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点:
1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。
matlab - 遗传算法工具箱函数及实例讲解
matlab - 遗传算法工具箱函数及实例讲解
matlab遗传算法工具箱函数及实例讲解
最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。还好用遗传算法的工具箱予以实现了,期间也遇到了许多问题。首先,我们要熟悉遗传算法的基本原理与运算流程。
基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程:
Step 1:对遗传算法的运行参数进行赋值。
参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。
Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设
置变量的取值范围。
Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入 适应度函数 计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。 Step 6:按变异概率执行离散变异操作。
Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。
其次,运用遗传算法工具箱。
运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库 。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算
matlab遗传算法 算例
下面是一个使用MATLAB实现的基本遗传算法算例。本例用于解决简单的优化问题:寻找函数f(x) = x^2在[-10,10]范围内的最小值。
```matlab
定义问题参数
PopSize = 100; 种群数量
Genes = -10:0.1:10; 基因范围
FitnessFunc = @(x) -x.^2; 适应度函数 (这里为了方便,使用了-x^2,即求最大值,实际应用中应改为-f(x))
MaxGen = 50; 最大迭代次数
初始化种群
Pop = zeros(PopSize, length(Genes));
for i = 1:PopSize
Pop(i,:) = rand(1,length(Genes))*2*Genes - Genes; 随机产生初始种群
end
开始迭代
for gen = 1:MaxGen
计算当前种群适应度
Fitness = FitnessFunc(Pop);
[BestFit, Index] = max(Fitness); 找到最佳适应度
BestFitPos = Pop(Index,:); 找到最佳适应度对应的基因
选择(轮盘赌选择)
NewPop = zeros(PopSize, length(Genes));
SumFitness = sum(Fitness);
RandomFitness = rand(PopSize,1)*SumFitness; 随机生成每个个体的"随机适应度"
for i = 1:PopSize
[~, Index] = min(RandomFitness); 用随机适应度进行选择(越小被选中概率越大)
NewPop(i,:) = Pop(Index,:); 将选择出的个体放入新种群
matlab遗传算法实例
matlab遗传算法实例
以MATLAB遗传算法实例为题,我们将介绍遗传算法的基本概念和在MATLAB中的实现方法。遗传算法是一种基于进化思想的优化算法,通常用于求解最优化问题。
遗传算法的基本思想是通过模拟自然选择和遗传机制来搜索最优解。它模拟了生物进化过程中的遗传、交叉和变异等过程,通过不断进化产生更好的解。遗传算法包括三个基本操作:选择、交叉和变异。选择操作根据个体适应度选择优秀个体,交叉操作通过交换基因信息产生新个体,变异操作在个体基因中引入随机扰动。
在MATLAB中,我们可以使用遗传算法工具箱来实现遗传算法。首先,我们需要定义问题的目标函数和约束条件。目标函数是我们要最小化或最大化的函数,约束条件是问题的限制条件。然后,我们需要设置遗传算法的参数,包括种群大小、迭代次数、交叉概率和变异概率等。接下来,我们可以使用遗传算法工具箱提供的函数来运行遗传算法,并获取最优解。
下面我们以一个简单的函数优化问题为例来演示如何使用MATLAB中的遗传算法工具箱。假设我们要求解以下函数的最小值:
f(x) = x^2 - 4x + 4
我们需要定义目标函数和约束条件。在MATLAB中,我们可以使用函数句柄来表示目标函数和约束条件。对于上述函数,我们可以定义目标函数如下:
objFunc = @(x) x^2 - 4*x + 4
接下来,我们需要设置遗传算法的参数。假设我们使用了50个个体,迭代100次,交叉概率为0.8,变异概率为0.1,可以使用以下代码设置参数:
options = gaoptimset('PopulationSize', 50, 'Generations',
100, 'CrossoverFraction', 0.8, 'MutationFcn',
{@mutationadaptfeasible, 0.1})
我们可以使用MATLAB提供的遗传算法函数ga来运行遗传算法,并获取最优解。代码如下:
遗传算法MATLAB仿真程序
1 / 5 %
function [pso F] = PSO_2D()
% FUNCTION PSO --------USE Particle Swarm Optimization Algorithm
%global present;
% close all;
pop_size = 10; % pop_size 种群大小
part_size = 2; % part_size 粒子大小,
** =n-D
gbest = zeros(1,part_size+1); % gbest 当前搜索到的最小的值
max_gen = 80; % max_gen 最大迭代次数
region=zeros(part_size,2); % 设定搜索空间范围
region=[-3,3;-3,3]; %
**每一维设定不同范围
rand('state',sum(100*clock)); % 重置随机数发生器状态
arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化,rand()的范围为0~1
v=ini_v(pop_size,part_size); % 初始化当前速度
pbest = zeros(pop_size,part_size+1); % pbest 粒子以前搜索到的最优值,最后一列包括这些值的适应度
w_max = 0.9; % w_max 权系数最大值
w_min = 0.4;
v_max = 2; %
使用MATLAB遗传算法工具实例(详细)(精编文档).doc
【最新整理,下载后即可编辑】 【最新整理,下载后即可编辑】
最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search
Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。
本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。
8.1 遗传算法与直接搜索工具箱概述
本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。
8.1.1 工具箱的特点
GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。
使用语句
type function_name
就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。
工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用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)), :);
% 适应度函数
function f = evaluate_fitness(population)
f = zeros(size(population));
for i = 1:size(population, 1)
遗传算法matlab实现源程序
...
. .
. 资料 . .. 附页:
一.遗传算法源程序:
clc;
clear;
population;
%评价目标函数值
for uim=1:popsize
vector=population(uim,:);
obj(uim)=hanshu(hromlength,vector,phen);
end ... .
.
. 资料 . .. %obj
%min(obj)
clear uim;
objmin=min(obj);
for sequ=1:popsize
if obj(sequ)==objmin
opti=population(sequ,:);
end
end
clear sequ;
fmax=22000;
%==
for gen=1:maxgen
%选择操作
%将求最小值的函数转化为适应度函数
for indivi=1:popsize
obj1(indivi)=1/obj(indivi);
end
clear indivi;
%适应度函数累加总合
total=0; ... .
遗传算法的MATLAB实现实例(精编文档).doc
【最新整理,下载后即可编辑】 【最新整理,下载后即可编辑】
遗传算法(Genetic Algorithm)的MATLAB应用实例
To use Optimization Toolbox software, you need to
1 Define your objective function in the MATLAB language, as a
function file or anonymous function.
2 Define your constraint(s) as a separate file or anonymous function.
首先建立目标函数的M文件;
例1:如目标函数 min 100(x2−x12)+(1−x1)2 ;
Function File for Objective Function
A function file is a text file containing MATLAB commands with
the extension .m. Create a new function file in any text editor, or use
the built-in MATLAB Editor as follows:
(1)At the command line enter:
edit (想要建立的.m文件的文件名)
The MATLAB Editor opens.
(2) In the editor enter:
function f = rosenbrock(x)
f = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
(3) Save the file by selecting File > Save.
把M文件保存在MATLAB默认的工作目录中;在命令行中输入命令:cd ,就可以得到MATLAB默认的工作目录。
