全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
4917 1
2011-03-07
MATLAB2009a命令流:
ST=[5.22  4.02  11.88  1350.00  412.31
5.80  7.96  38.07  3602.00  376.83
0.81  8.31  17.73  1476.00  830.06
5.85  5.27  41.19  444.00  975.70
4.05  1.58  43.32  3122.00  1493.32
0.62  6.54  46.86  1558.00  745.65
1.78  4.58  28.98  966.00  751.00
3.50  7.47  6.96  1616.00  343.51
6.13  3.25  15.69  386.00  1000.00
6.18  7.22  56.76  528.00  935.95
1.01  5.21  11.07  3770.00  591.61
6.21  3.67  51.51  3826.00  2137.76
6.13  2.13  34.26  2300.00  849.12
3.11  1.58  61.74  238.00  1144.55
5.12  4.88  6.63  938.00  611.56
0.91  8.15  28.50  1412.00  777.82
2.70  8.07  8.34  3286.00  624.50
5.86  7.20  59.67  60.00  1300.00
5.07  2.53  2.22  172.00  1216.55
6.14  7.23  48.45  676.00  822.19
4.20  2.74  51.00  2596.00  937.55
0.23  7.31  54.09  2928.00  550.45
5.44  1.82  6.99  2592.00  987.93
5.98  6.46  25.92  1804.00  170.00
4.35  7.69  17.55  2188.00  245.76 ];
for m = 1:25
STAR(m,1:5)=ST(m,1:5);
end
%%对25组数据进行RBF拟合
p1=STAR(:,1:4);%训练样本的输入单元
t1=STAR(:,5);%训练样本的输出单元
P=p1';T=t1';%转置
[p,pp] = mapminmax(P);%数据归一化
[t,tt] = mapminmax(T);%数据归一化
spread=1;
goal=1e-5;
df=1;
mn=40;
net=newrb(p,t,goal,spread,mn,df);
%%%%%%%%%%%%%%%%%遗传算法
fit = @(x) sim(net,x);
options = gaoptimset('Generations',100,'PopulationSize',20,...
    'CrossoverFraction', 0.8, 'ParetoFraction', 0.5);
[x fval] = ga(fit,4, [], [], [], [], [-1;-1;-1;-1], [1;1;1;1]);
x;
在最后遗传算法时总是说:
??? Error using ==> network.sim at 178
Inputs are incorrectly sized for network.
Matrix must have 4 rows.
以及一大堆错误了
求大侠们帮帮忙
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-7-25 19:13:16
%**********************%主函数*****************************************
function main()
global chrom lchrom oldpop newpop varible fitness  popsize  sumfitness %定义全局变量
global pcross pmutation temp bestfit maxfit gen bestgen length epop  efitness val varible2 varible1
global maxgen po pp mp np val1
length=18;
lchrom=30;         %染色体长度
popsize=30;        %种群大小
pcross=0.6;        %交叉概率
pmutation=0.01;     %变异概率
maxgen=1000;        %最大代数
mp=0.1;            %保护概率
%
initpop;              % 初始种群
%
for gen=1:maxgen
    generation;
end
%
best;
bestfit       % 最佳个体适应度值输出
bestgen       % 最佳个体所在代数输出
x1= val1(bestgen,1)
x2= val1(bestgen,2)
gen=1:maxgen;
figure
plot(gen,maxfit(1,gen));  % 进化曲线
title('精英保留');
%
%**********************  产生初始种群  ************************************
%
function initpop()
global lchrom oldpop popsize
oldpop=round(rand(popsize,lchrom));   %生成的oldpop为30行12列由0,1构成的矩阵
                                      %其中popsize为种群中个体数目lchrom为染色体编码长度
                                   
%
%*************************%产生新一代个体**********************************
%
function generation()
global epop oldpop popsize mp
objfun;                   %计算适应度值
n=floor(mp*popsize);  %需要保留的n个精英个体
for i=1:n
    epop(i,:)=oldpop((popsize-n+i),:);
   % efitness(1,i)=fitness(1,(popsize-n+i))
end
select;                    %选择操作
crossover;
mutation;
elite;      %精英保留

%
%************************%计算适应度值************************************
%
function objfun()
global lchrom oldpop fitness popsize chrom  varible varible1 varible2 length
global maxfit gen epop mp val1
a1=-3; b1=3;
a2=-2;b2=2;
fitness=0;
for i=1:popsize
   %前一未知数X1
if length~=0
    chrom=oldpop(i,1:length);% before代表节点位置
c=decimal(chrom);
   varible1(1,i)=a1+c*(b1-a1)/(2.^length-1); %对应变量值

%后一未知数
    chrom=oldpop(i,length+1:lchrom);% before代表节点位置
c=decimal(chrom);
    varible2(1,i)=a2+c*(b2-a2)/(2.^(lchrom-length)-1); %对应变量值
else
     chrom=oldpop(i,:);
     c=decimal(chrom);
     varible(1,i)=a1+c*(b1-a1)/(2.^lchrom-1);  %对应变量值
end
%两个自变量
fitness(1,i)=4*varible1(1,i)^2-2.1*varible1(1,i)^4+1/3*varible1(1,i)^6+varible1(1,i)*varible2(1,i)-4*varible2(1,i)^2+4*varible2(1,i)^4;
%fitness(1,i) = 21.5+varible1(1,i)*sin(4*pi*varible1(1,i))+varible2(1,i) *sin(20*pi*varible2(1,i));
%一个自变量
%fitness(1,i) = 20*cos(0.25*varible(1,i))-12*sin(0.33*varible(1,i))+40  %个体适应度函数值
end  
lsort;                          % 个体排序
maxfit(1,gen)=max(fitness);        %求本代中的最大适应度值maxfit

val1(gen,1)=varible1(1,popsize);
  val1(gen,2)=varible2(1,popsize);
%************************二进制转十进制**********************************
%
function c=decimal(chrom)
c=0;
for j=1:size(chrom,2)
    c=c+chrom(1,j)*2.^(size(chrom,2)-j);
end
%
%************************* 个体排序 *****************************
% 从小到大顺序排列
%
function lsort()
global popsize fitness oldpop  epop efitness mp val varible2 varible1
for i=1:popsize
    j=i+1;
    while j<=popsize
        if fitness(1,i)>fitness(1,j)   
            tf=fitness(1,i);            % 适应度值
            tc=oldpop(i,:);            % 基因代码
            fitness(1,i)=fitness(1,j);     % 适应度值互换
            oldpop(i,:)=oldpop(j,:);     % 基因代码互换
            fitness(1,j)=tf;
            oldpop(j,:)=tc;
        end
        j=j+1;
    end
    val(1,1)=varible1(1,popsize);
    val(1,2)=varible2(1,popsize);
end

%*************************转轮法选择操作**********************************
%
function select()
global fitness popsize sumfitness oldpop temp mp np
sumfitness=0;                       %个体适应度之和
for i=1:popsize               % 仅计算(popsize-np-mp)个个体的选择概率
    sumfitness=sumfitness+fitness(1,i);
end
%
for i=1:popsize              % 仅计算(popsize-np-mp)个个体的选择概率
    p(1,i)=fitness(1,i)/sumfitness;       % 个体染色体的选择概率
end
%
q=cumsum(p);                      % 个体染色体的累积概率(内部函数),共(popsize-np-mp)个
%
b=sort(rand(1,popsize));          % 产生(popsize-mp)个随机数,并按升序排列。mp为保护个体数
j=1;
k=1;
while j<=popsize      % 从(popsize-mp-np)中选出(popsize-mp)个个体,并放入temp(j,:)中;
    if b(1,j)<q(1,k)
       temp(j,:)=oldpop(k,:);
       j=j+1;
    else
       k=k+1;
    end
end
%
j=popsize+1;              % 从统一挪过来的(popsize-np-mp)以后个体——优秀个体中选择
for i=(popsize+1):popsize      % 将mp个保留个体放入交配池temp(i,:),以保证群体数popsize
    temp(i,:)=oldpop(j,:);
    j=j+1;
end
%
%**************************%交叉操作***************************************
%
function crossover()
global temp popsize pcross lchrom mp
n=floor(pcross*popsize);           %交叉发生的次数(向下取整)
if rem(n,2)~=0                          % 求余
    n=n+1;                              % 保证为偶数个个体,便于交叉操作
end
%
j=1;
m=0;
%
% 对(popsize-mp)个个体将进行随机配对,满足条件者将进行交叉操作(按顺序选择要交叉的对象)
%
for i=1:popsize  
    p=rand;                            % 产生随机数
    if p<pcross                         % 满足交叉条件
        parent(j,:)=temp(i,:);              % 选出1个父本
        k(1,j)=i;
        j=j+1;                         % 记录父本个数
        m=m+1 ;                      % 记录杂交次数
        if (j==3)&(m<=n)               % 满足两个父本(j==3),未超过交叉次数(m<=n)
            pos=round(rand*(lchrom-1))+1;    % 确定随机位数(四舍五入取整)
            for i=1:pos
                child1(1,i)=parent(1,i);
                child2(1,i)=parent(2,i);
            end
            for i=(pos+1):lchrom
                child1(1,i)=parent(2,i);
                child2(1,i)=parent(1,i);
            end
            i=k(1,1);
            j=k(1,2);
            temp(i,:)=child1(1,:);
            temp(j,:)=child2(1,:);
            j=1;            
        end
    end
end
%
%****************************%变异操作*************************************
%
function mutation()
global popsize lchrom pmutation temp newpop oldpop mp
m=lchrom*popsize;               % 总的基因数
n=round(pmutation*m);                % 变异发生的次数
for i=1:n                             % 执行变异操作循环
    k=round(rand*(m-1))+1;           %确定变异位置(四舍五入取整)
    j=ceil(k/lchrom);                  % 确定个体编号(取整)
    l=rem(k,lchrom);                  %确定个体中变位基因的位置(求余)
    if l==0
       temp(j,lchrom)=~temp(j,lchrom);  % 取非操作
    else
       temp(j,l)=~temp(j,l);            % 取非操作
    end
end
for i=1:popsize
    oldpop(i,:)=temp(i,:);   %产生新的个体
end
%
%*********************%精英选择%*******************************************
%
function elite()
global epop oldpop mp popsize
objfun;                   %计算适应度值                       
n=floor(mp*popsize);  %需要保留的n个精英个体
for i=1:n
    oldpop(i,:)=epop(i,:);
   % efitness(1,i)=fitness(1,(popsize-n+i))
end;

%
%*********************%最佳个体********************************************
%
function best()
global maxfit bestfit gen maxgen bestgen
bestfit=maxfit(1,1);
gen=2;
while gen<=maxgen
      if bestfit<maxfit(1,gen)
         bestfit=maxfit(1,gen);
         bestgen=gen;
     end
     gen=gen+1;
end
%**************************************************************************
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群