matlab遗传算法代码
Ⅰ matlab的遗传算法求解0-1整数规划的程序
x = intlinprog(f,intcon,A,b,Aeq,beq)就可以了毁梁
用法团余培举例:塌唯
Write the objective function vector and vector of integervariables.
f = [-3;-2;-1];
intcon = 3;
Write the linear inequality constraints.
A = [1,1,1];
b = 7;
Write the linear equality constraints.
Aeq = [4,2,1];
beq = 12;
Write the bound constraints.
lb = zeros(3,1);
ub = [Inf;Inf;1]; % Enforces x(3) is binary
Call intlinprog.
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
Ⅱ 在matlab中如何用遗传算法求解函数和的最小值
用遗传算法求已知函数的最小值点的方法:1、首先建立自定义函数,f(x)ga_fun=@(x)11*sin(6*x)+7*cos(5*x);2、其二用ga()函数求解最小值[x,fval,exitflag]=ga(ga_fun,1,[],[],[],[],lb) 3、然后用ezplot()函数或plot()函数,绘出其函数f(x)的图形及最小值点4、运行结果5、执行代码
Ⅲ matlab,遗传算法,求大佬帮忙
用遗传算法求最大值问题,可以这样来解决。
1、将最大值问题转换为最小值问题,即 max Z =- min Z;
2、建立其自定义函数,即
z=-(f1*40^1.5/1+f2*30^1.5/2+f2*20^1.5/2+。。。+f12*127^1.5/2+f12*5^1.5/4)
其中:f1,f2,f3,。。。f11,f12为0,1变量,可以用sign()符号函数来处理。
3、用遗传算法ga()函数求解,使用方法
objectivef=@ga_func;
nvars=12;
[x, fval] =ga(objectivef,nvars)
4、编程运行后得到
f1=1,f2=1,f3=1,f4=0,f5=1,f6=0,f7=1,f8=1,f9=1,f10=1,f11=1,f12=1
Zmax=27329.5018
Ⅳ 遗传算法的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]);
Ⅳ 遗传算法求解超越方程,matlab程序,tanx=1/x, x∈[0,60],需要程序代码
主程序代码如下饥姿。主文件其它代码及调用的其它函数详见私信压缩包。
for n=0:19;
x=linspace(0,60);
y1=tan(x);
y2=1./x;
figure(1);
plot(x,y1,'r',x,y2,'b')
title('函数曲线图')
xlabel('x')
ylabel('y')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%主程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global BitLength %全局变量,计算如果满足求解精度至少需要编码的长度
global boundsbegin %全局变量,自变量的起始点
global boundsend %全局变量,自变量的终止点
bounds=[pi/2*2*n pi/2*(2*n+1)]; %一维自变量的取值范围棚猛
precision=0.0001; %运算精度
boundsbegin=bounds(:,1);
boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体
BitLength=ceil(log2((boundsend-boundsbegin)' ./ precision));
popsize=60; %初始种群大小
Generationnmax=50; %最大代数
pcrossover=0.9999; %交配概率
pmutation=0.0001; %变异概率
population=round(rand(popsize,BitLength)); %初始种群,行代表一个个体,列代表不同个体
%计算适应度
[Fitvalue,cumsump]=fitnessfun(population); %输入群体population,返回适应度Fitvalue和累积概率cumsump
Generation=1;
while Generation<(Generationnmax+1)
for j=1:2:popsize %1对1对的群体进行如下操作(交叉,变异)
%选择
seln=selection(population,cumsump);
%交叉
scro=crossover(population,seln,pcrossover);
scnew(j,:)=scro(1,:);
scnew(j+1,:)=scro(2,:);
%变异
smnew(j,:)=mutation(scnew(j,:),pmutation);
smnew(j+1,:)=mutation(scnew(j+1,:),pmutation);
end
%产生了新的种群
population=smnew;
%计算新种群的适应度
[Fitvalue,cumsump]=fitnessfun(population); %记录当前代最好的适应度和平均适应度
[fmax,nmax]=max(Fitvalue); %最好的适应度为fmax(即函数值最大),其对应的个体为nmax
fmean=mean(Fitvalue); %平均适应度为fmean
ymax(Generation)=fmax; %每代中最好的适应度
ymean(Generation)=fmean; %每代中的平均链肢桥适应度
%记录当前代的最佳染色体个体
x=transform2to10(population(nmax,:));%population(nmax,:)为最佳染色体个体
xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1);
xmax(Generation)=xx;
Generation=Generation+1;
end
Generation=Generation-1;%Generation加1、减1的操作是为了能记录各代中的最佳函数值xmax(Generation)
targetfunvalue=targetfun(xmax);
[Besttargetfunvalue,nmax]=max(targetfunvalue);
Bestpopulation=xmax(nmax)
%绘制经过遗传运算后的适应度曲线
figure(2);
hand1=plot(1:Generation,ymax);
set(hand1,'linestyle','-','linewidth',1,'marker','*','markersize',8)
hold on;
hand2=plot(1:Generation,ymean);
set(hand2,'color','k','linestyle','-','linewidth',1, 'marker','h','markersize',8)
xlabel('进化代数');
ylabel('最大和平均适应度');
xlim([1 Generationnmax]);
legend('最大适应度','平均适应度');
box off;
hold off;
end
%%%%%%%%%%%计算适应度函数%%%%%%%%%%%%%%%%%%%%%%%%
[Fitvalue,cumsump]=fitnessfun(population);
global BitLength
global boundsbegin
global boundsend
popsize=size(population,1); %计算个体个数
for i=1:popsize
x=transform2to10(population(i,:)); %将二进制转换为十进制
%转化为[-2,2]区间的实数
xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1);
Fitvalue(i)=targetfun(xx); %计算函数值,即适应度
end
%给适应度函数加上一个大小合理的数以便保证种群适应值为正数
Fitvalue=Fitvalue'+230; %该处还有一个作用就是决定适应度是有利于选取几个有利个体(加强竞争),海深减弱竞争
%计算选择概率
fsum=sum(Fitvalue) ;
Pperpopulation=Fitvalue/fsum ; %适应度归一化,及被复制的概率
%计算累积概率
cumsump(1)=Pperpopulation(1) ;
for i=2:popsize
cumsump(i)=cumsump(i-1)+Pperpopulation(i); %求累计概率
end
cumsump=cumsump' ; %累计概率
Ⅵ 急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。
function [path,lmin]=ga(data,d) %data为点集,d为距离矩阵,即赋权图
tic
%======================
sj0=data;%开环最短路线
%=================================
% sj0=[data;data(1,:)]; %闭环最短路线
%=========================
x=sj0(:,1);y=sj0(:,2);
N=length(x);
%=========================
% d(N,:)=d(1,:);%闭环最短路线
% d(:,N)=d(:,1);%距离矩阵d
%======================
L=N; %sj0的长度
w=800;dai=1000;
%通过改良圈算法选取优良父代A
for k=1:w
c=randperm(L-2);
c1=[1,c+1,L];
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
end
J(k,c1)=1:L;
end
J=J/L;
J(:,1)=0;J(:,L)=1;
rand('state',sum(clock));
%遗传算法实现过程
A=J;
for k=1:dai %产生0~1 间随机数列进行编码
B=A;
c=randperm(w);
%交配产生子代B
for i=1:2:w
F=2+floor(100*rand(1));
temp=B(c(i),F:L);
B(c(i),F:L)=B(c(i+1),F:L);
B(c(i+1),F:L)=temp;
end;
%变异产生子代C
by=find(rand(1,w)<0.1);
if length(by)==0
by=floor(w*rand(1))+1;
end
C=A(by,:);
L3=length(by);
for j=1:L3
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=floor(1+fix(rand(1,3)*N)); %产生1-N的3个随机数
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=sort(<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>);
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:L]);
end
G=[A;B;C];
<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>=size(G,1);
%在父代和子代中选择优良品种作为新的父代
[<a href="https://www..com/s?wd=dd&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">dd</a>,IX]=sort(G,2);
temp=[];
temp(1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>)=0;
for j=1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>
for i=1:L-1
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
end
end
[DZ,IZ]=sort(temp);
A=G(IZ(1:w),:);
end
path=IX(IZ(1),:)
% for i=1:length(path)
% path(i)=path(i)-1;
% end
% path=path(2:end-1);
lmin=0;l=0;
for j=1:(length(path)-1)
<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>=path(j);t2=path(j+1);
l=d(<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>,t2);
lmin=lmin+l;
end
xx=sj0(path,1);yy=sj0(path,2);
plot(xx,yy,'r-o');
axis equal
toc
Ⅶ MATLAB遗传算法
function ret=Code(lenchrom,bound)
%本函数将变量编码成染色体,用于随机初始化一个种群
% lenchrom input : 染色体长度
% bound input : 变量的取值范围
% ret output: 染色体的编码值
flag=0;
while flag==0
pick=rand(1,length(lenchrom));
ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值
flag=test(lenchrom,bound,ret); %检验染色体的可行性
end
function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)
%本函数完成交叉操作
% pcorss input : 交叉概率
% lenchrom input : 染色体的长度
% chrom input : 染色体群
% sizepop input : 种群规模
% ret output : 交叉后的染色体
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),:)); %检验染色体1的可行性
flag2=test(lenchrom,bound,chrom(index(2),:)); %检验染色体2的可行性
if flag1*flag2==0
flag=0;
else flag=1;
end %如果两个染色体不是都可行,则重新交叉
end
end
ret=chrom;
clc
clear all
% warning off
%% 遗传算法参数
maxgen=50; %进化代数
sizepop=100; %种群规模
pcross=[0.6]; %交叉概率
pmutation=[0.1]; %变异概率
lenchrom=[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)= (x(1)*exp(-(x(1)^2 + x(2)^2)));
%-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289
% 这个是我的测试函数
% 如果有这个函数的话,可以得到最优值
end
%找最好的染色体
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色体
avgfitness=sum(indivials.fitness)/sizepop; %染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[];
%% 进化开始
for i=1:maxgen
% 选择操作
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)=(x(1)*exp(-(x(1)^2 + x(2)^2)));
%-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289
% -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289;
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);
figure
plot([1:r]',trace(:,1),'r-',[1:r]',trace(:,2),'b--');
title(['函数值曲线 ' '终止代数=' num2str(maxgen)],'fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('函数值','fontsize',12);
legend('各代平均值','各代最佳值','fontsize',12);
ylim([-0.5 5])
disp('函数值 变量');
% 窗口显示
disp([bestfitness x]);
Ⅷ matlab 遗传算法
function m_main()
clear
clc
Max_gen=100;% 运行代数
pop_size=100;%种群大小
chromsome=10;%染色体的长度
pc=0.9;%交叉概率
pm=0.25;%变异概率
gen=0;%统计代数
%初始化
init=40*rand(pop_size,chromsome)-20;
pop=init;
fit=obj_fitness(pop);
[max_fit,index_max]=max(fit);maxfit=max_fit;
[min_fit,index_min]=min(fit);best_indiv=pop(index_max,:);
%迭代操作
while gen<Max_gen
gen=gen+1; bt(gen)=max_fit;
if maxfit<max_fit;maxfit=max_fit;pop(index_min,:)=pop(index_max,:);best_indiv=pop(index_max,:);end
best_indiv_tmp(gen)=pop(index_max);
newpop=ga(pop,pc,pm,chromsome,fit);
fit=obj_fitness(newpop);
[max_fit,index_max]=max(fit);
[min_fit,index_min]=min(fit);
pop=newpop;
trace(1,gen)=max_fit;
trace(2,gen)=sum(fit)./length(fit);
end
%运行结果
[f_max gen_ct]=max(bt)%求的最大值以及代数
maxfit
best_indiv
%画图
% bt
hold on
plot(trace(1,:),'.g:');
plot( trace(2,:),'.r-');
title('实验结果图')
xlabel('迭代次数/代'),ylabel('最佳适应度(最大值)');%坐标标注
plot(gen_ct-1,0:0.1:f_max+1,'c-');%画出最大值
text(gen_ct,f_max+1, '最大值')
hold off
function [fitness]=obj_fitness(pop)
%适应度计算函数
[r c]=size(pop);
x=pop;
fitness=zeros(r,1);
for i=1:r
for j=1:c
fitness(i,1)=fitness(i,1)+sin(sqrt(abs(40*x(i))))+1-abs(x(i))/20.0;
end
end
function newpop=ga(pop,pc,pm,chromsome,fit);
pop_size=size(pop,1);
%轮盘赌选择
ps=fit/sum(fit);
pscum=cumsum(ps);%size(pscum)
r=rand(1,pop_size);qw=pscum*ones(1,pop_size);
selected=sum(pscum*ones(1,pop_size)<ones(pop_size,1)*r)+1;
newpop=pop(selected,:);
%交叉
if pop_size/2~=0
pop_size=pop_size-1;
end
for i=1:2:pop_size-1
while pc>rand
c_pt=round(8*rand+1);
pop_tp1=newpop(i,:);pop_tp2=newpop(i+1,:);
newpop(i+1,1:c_pt)=pop_tp1(1,1:c_pt);
newpop(i,c_pt+1:chromsome)=pop_tp2(1,c_pt+1:chromsome);
end
end
% 变异
for i=1:pop_size
if pm>rand
m_pt=1+round(9*rand);
newpop(i,m_pt)=40*rand-20;
end
end