⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lregulationnew.m

📁 氧乐果控制过程
💻 M
字号:
% function [sys,x0]=lregulation(t,x,u,flag)
% global ke kec ku n s uu;
% 
% s=0;
% if flag==0
% sys=[0;0;3;2;0;1]
% x0=[]
% n=0
% ke=1 
% kec=1
% ku=1
% uu=[]
% % u(2)
% elseif flag==3
%   u(2)
%   n=n+1
%   uu(n)=n
% t
% if abs(u(2))>0.2 | abs(u(1))>0.1
% %     sys(1)=0.4*ke*u(2);
% %     sys(2)=0.02*kec*u(1);
% %     sys(3)=ku+14;
% sys(1)=1
% sys(2)=2
% sys(3)=3
% 
% elseif abs(u(2))>0.1 | abs(u(1))>0.04
% %     sys(1)=0.5*ke*u(2);
% %     sys(2)=0.27*kec*u(1);
% %     sys(3)=ku+12;
% sys(1)=1
% sys(2)=2
% sys(3)=3
% 
% else
% %     sys(1)=0.8*ke*u(2);
% %     sys(2)=0.6*kec*u(1);
% %     sys(3)=ku;
% sys(1)=1
% sys(2)=2
% sys(3)=3
% 
% end
% else
%     sys=[];
% end
%a,b,c为KP,KI,KD的变化范围;popsize为群体规模;lchrom为表示(KP,KI,KD)的染色体串长度;maxgen为进化的最大代数
%pcross为交叉概率;pmutation为变异概率;min为上一代最小适应度;max为最大适应度;minpp为适应度最小个体的序号;
%maxpp为适应度最大个体的序号;
function [sys,x0]=gen1(t,x,u,flag)
% global a b oldpop newpop popsize lchrom maxgen pcross pmutation fitu;
% global min max minpp maxpp k;

if flag==0
sys=[0;0;3;2;0;1]
x0=[]
% %******************************参数初始化************************************
% a=[0 0 0];
% b=[10 10 10];
% popsize=6;
% lchrom=18;
% lc=lchrom/3;
% % maxgen=10;
% pcross=[0.6 0.6 0.6];
% pmutation=0.02;
% gen=0;
% k=1;
% %********************************群体的初始化*******************************%
% for k=1:popsize
% oldpop{k}.chrom=randint(1,18);
% oldpop{k}.dvalue=decode(oldpop{k}.chrom);
% kp=oldpop{k}.dvalue(1);
% ki=oldpop{k}.dvalue(2);
% kd=oldpop{k}.dvalue(3);
% oldpop{k}.fitness=0;                %计算每个个体的适应度%
% oldpop{k}.parent1=0;
% oldpop{k}.parent2=0;
% oldpop{k}.xsite=0;
% % aa=oldpop{k}.fitness;
% end
% statistics(oldpop)
% %**************************************************************************

elseif flag==3
% 
% %***************************遗传操作***************************
% % function generation(u)
% % global oldpop popsize newpop jcross
% % j=1;
% % while(j<popsize)
% mate1=select;
% mate2=select;
% 
% % crossover(oldpop{mate1}.chrom,oldpop{mate2}.chrom,j);
% %*********************交叉操作*****************************
% % function crossover(parent1,parent2,k)
% % global pcross lchrom jcross newpop;
% %*******************判断是否交叉***************************
% for i=1:3
%     pp=rand;
% %************************确定交叉位置************************
%    if (pp<pcross(i))
%        jcross(i)=randint(1,1,[lc*(i-1)+1,lc*i]);
%     else
%        jcross(i)=lchrom/(4-i);
%    end
% %**********************进行交叉与变异操作*********************
%    if(jcross(i) ~= lchrom/(4-i))
%        for j=(lc*(i-1)+1):jcross(i)
%      newpop{k}.chrom(j)=mutation(oldpop{mate1}.chrom(j));
%      newpop{k+1}.chrom(j)=mutation(oldpop{mate2}.chrom(j));
%        end
%        for j=jcross(i):lc*i
%      newpop{k}.chrom(j)=mutation(oldpop{mate2}.chrom(j));
%      newpop{k+1}.chrom(j)=mutation(oldpop{mate1}.chrom(j));   
%        end
%    else
%        for j=(lc*(i-1)+1):lc*i
%      newpop{k}.chrom(j)=mutation(oldpop{mate1}.chrom(j));
%      newpop{k+1}.chrom(j)=mutation(oldpop{mate2}.chrom(j));
%        end
%     end
%  %*************************************************************
% end
%  %*************************************************************
% newpop{k}.dvalue=decode(newpop{k}.chrom);
% newpop{k}.fitness=objfun(u(2));
% newpop{k}.parent1=mate1;
% % disp('aaa');
% % a=newpop{j}.parent1
% newpop{k}.parent2=mate2;
% newpop{k}.xsite=jcross;
% 
% newpop{k+1}.dvalue=decode(newpop{k+1}.chrom);
% newpop{k+1}.fitness=objfun(u(2));
% newpop{k+1}.parent1=mate1;
% newpop{k+1}.parent2=mate2;
% newpop{k+1}.xsite=jcross;

sys(1)=1
sys(2)=2
sys(3)=3


% sys(1)=(newpop{k}.dvalue(1)+ newpop{k+1}.dvalue(1))/2;
% sys(2)=(newpop{k}.dvalue(2)+ newpop{k+1}.dvalue(2))/2;
% sys(3)=(newpop{k}.dvalue(3)+ newpop{k+1}.dvalue(3))/2;
% k=k+2;
% end
% end
%***************************************************************
% if mod(k,50)==0
%     k=0;
% % while(gen<maxgen)
%     gen=gen+1;
%     oldmax=max;
%     oldmaxpp=maxpp;
%     statistics(newpop);
% %   disp('aaaaaaaaaaa')
% %     max
% %     maxpp
%     if(max<oldmax)
%         newpop{minpp}.chrom=oldpop{oldmaxpp}.chrom;
%         newpop{minpp}.dvalue=oldpop{oldmaxpp}.dvalue;
%         newpop{minpp}.fitness=oldpop{oldmaxpp}.fitness;
%         statistics(newpop);
%     end
%     for k=1:popsize
%     oldpop{k}.chrom=newpop{k}.chrom;
%     end
% end
else
    sys=[];



% 
% %*********************译码*************************************
% function dval=decode(x)
% global a b ;
% m=[0 0 0];
% for i=1:3
%     for j=1:6
%     m(i)=m(i)+x((i-1)*6+j)*(2^(6-j));
%     end
% end
% for i=1:3
%     dval(i)=a(i)+m(i)*(b(i)-a(i))/(2^6-1);
% end
% end
% %**************************************************************
% 
% 
% %***************************适应度函数**************************
% function fit=objfunc(c)
% fit=1/c
% end
% %***************************适应度函数**************************
% 
% %***************************选择操作****************************
% function rs=select
% global oldpop popsize;
% index(1)=randint(1,1,[1,popsize]);
% index(2)=randint(1,1,[1,popsize]);
% if (oldpop{index(1)}.fitness > oldpop{index(2)}.fitness)
%     rs=index(1);
% else
%     rs=index(2);
% end    
% end
% %***************************************************************
% 
% %*******************群体适应度计算******************************
% function statistics(pop)
% global newpop oldpop popsize min max maxpp minpp;
% sumfitness=pop{1}.fitness;
% min=pop{1}.fitness;
% max=pop{1}.fitness;
% maxpp=1;
% minpp=1;
% for j=1:popsize
% sumfitness=sumfitness+pop{j}.fitness;
%     if (pop{j}.fitness>max)
%         max=pop{j}.fitness;
%         maxpp=j;
%     end
%     if(pop{j}.fitness<min)
%         min=pop{j}.fitness;
%         minpp=j;
%     end
% end
% avg=sumfitness/popsize;
% end
% %************************************************************
end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -