热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

零基础入门神经网络Matlab学习笔记

零基础快速入门Matlab神经网络,以通俗易懂的原理讲解并配套实战源码。包含RBF、BP、自组织竞争、SOM、Hopfield、SVM及粒子群(PSO)

零基础快速入门Matlab神经网络,以通俗易懂的原理讲解并配套实战源码。包含RBF、BP、自组织竞争、SOM、Hopfield、SVM及粒子群(PSO)等神经网络的讲解。初学神经网络推荐。具体视频及源码、PPT已上传,下载请见:

https://download.csdn.net/download/qq_32809093/12008338

1 神经网络的6个基本问题

神经网络就是一个黑盒子,谁也不能保证其能百分百准确,所以如果系统要求百分百准确率,则不要使用神经网络进行控制

回归就是个预测

左边为预测,有三个数据表示其由三个组成部分组成,每次仅改变单个数据,每个组成部分比重相同(此都为1/3)

右边为存储,每次仅改变单个数据,每个组成部分比重不同

有监督(supervised):输入输出一一对应。例如:BP网络(输入输出都有

无监督(unsupervised):只有输入,其目的为发掘输入数据的内在联系

离线网络:需要先设计好网络,然后通过数据对网络进行训练后,再使用此网络

在线网络:可以边使用边训练网络(前期由于数据量少效果可能不是很好)


2 RBF神经网络


RBF网络本意:把输入的数据从一个空间转换到另外一个空间

神经网络:只知道数据,不知道模型,要做一个网络,来模拟这个模型

数学回归:知道带参数的数学函数表达式,通过数据带入,可求出具体函数表达式

RBF网络程序1:使用随机生成数据,实现回归公式(使用newrb生成网络)

clc;
clear;
close all;

%产生输入,输出
ld=400; %学习数据的个数
%产生一个两维(对应x1、x2)的,共2*100个位于0-1之间的随机数据(或理解为100个二维数据)
x=rand(2,ld); % 0-1
x=(x-0.5)*1.5*2; % -1.5-1.5(改变x的取值范围,利于观察)
%提取产生的输入数据
x1=x(1, : );% x1为x的第一行
x2=x(2, : );% x2为x的第二行
F=20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);%产生输出数据

%创建并训练网络
net=newrb(x,F);%创建RBF网络,其自己会进行训练

%generate the testing data 产生模拟数据
interval=0.1; %间隔为0.1
[i, j]=meshgrid(-1.5:interval:1.5);%产生间隔为0.1,且位于-1.5-1.5之间的二维方框数据i和j,
row=size(i);
tx1=i(:);%将i转换成一维数据tx1
tx1=tx1';
tx2=j(:);%将j转换成一维数据tx2
tx2=tx2';
tx=[tx1;tx2];%将x1,x2合并转换为输入tx

%testing 画出模拟函数
ty=sim(net,tx);%将tx带入网络进行模拟,输出为ty

v=reshape(ty,row);
figure
subplot(1,3,2)
mesh(i,j,v);%绘制i,j输入对应输出v曲线
zlim([0,60])

%plot the original function 画出原函数
interval=0.1;
[x1, x2]=meshgrid(-1.5:interval:1.5);
F = 20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);%F为理想输出
subplot(1,3,1)
mesh(x1,x2,F);%绘制x1,x2输入对应输出F曲线
zlim([0,60])

%plot the error 画出偏差
subplot(1,3,3)
mesh(x1,x2,F-v);%绘制x1,x2输入对应输出F-v曲线。F-v为理想输出与神经网络之间的误差
zlim([0,60])

RBF网络程序2:使用随机生成数据,实现回归公式(使用newrbe生成网络)

%Generate some training data
clc;
clear;
interval=0.01;
x1=-1.5:interval:1.5;
x2=-1.5:interval:1.5;
F = 20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);
net=newrbe([x1;x2],F)%创建并训练网络

ty=sim(net,[x1;x2]);%将tx带入网络进行模拟,输出为ty
figure
plot3(x1,x2,F,'g');%plot the original function 画出原函数
figure
plot3(x1,x2,ty,'b');%testing 画出模拟函数


3 BP神经网络


神经网络:怎么利用机器语言模仿人脑,来做决定的过程

理性世界:每一件事情的发生,都是由于其他事情造成的

所有控制、预测、统计都可以使用神经网络。

w1、w2权重的调整是减少误差的过程

一层网络可能不能进行非线性分类,所以引入多层神经网络

BP(Backpropagation):从后往前来更新权重

BP网络程序:对人脸角度进行预测

%function mytest()
%一共有15张人脸图片,每张图片提取八个数据,T为对应方向输出
clc;
images=[ ];  
M_train=3;%表示人脸
N_train=5;%表示方向   分别为(左110   左中101   中001    右中110   右101)
sample=[];  
pixel_value=[];
sample_number=0;

  for j=1:N_train
      for i=1:M_train
    str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。
    img= imread(str);  
    [rows cols]= size(img);%获得图像的行和列值。
     img_edge=edge(img,'Sobel');

    
     %由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好
     
     sub_rows=floor(rows/6);%最接近的最小整数,分成6行
     sub_cols=floor(cols/8);%最接近的最小整数,分成8列
     sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度
    
     sample_number=sample_number+1;
     for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i 
           block_num=subblock_i;
           pixel_value(sample_number,block_num)=0;  
            for ii=sub_rows:(2*sub_rows)
             for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
                 pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);          
             end
            end     
     end  
  end
  end
  %将特征值转换为小于1的值
 max_pixel_value=max(pixel_value);
  max_pixel_value_1=max(max_pixel_value); 
  for i=1:3
      mid_value=10^i;
      if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
         multiple_num=1/mid_value; 
         pixel_value=pixel_value*multiple_num; 
         break;
      end
  end     
  

% T 为目标矢量 
    t=zeros(3,sample_number);
    %因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间
    for i=1:sample_number
        % if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
        if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
            t(1,i)=1;
        end    
        %if((mod(i,5)==2)||(mod(i,5)==4)) 
        if((i>3)&&(i<=6))||((i>9)&&(i<=12))
            t(2,i)=1;
        end        
        %if((mod(i,5)==3)||(mod(i,5)==0)) 
        if((i>6)&&(i<=9))||((i>12)&&(i<=15))
            t(3,i)=1;
        end           
    end  
    
    
   

% NEWFF——生成一个新的前向神经网络 
% TRAIN——对 BP 神经网络进行训练 
% SIM——对 BP 神经网络进行仿真 

%  定义训练样本 
% P 为输入矢量 
P=pixel_value&#39;
% T 为目标矢量 
T=t
size(P)
size(T)
% size(P)
% size(T)


%  创建一个新的前向神经网络  
net_1=newff(minmax(P),[10,3],{&#39;tansig&#39;,&#39;purelin&#39;},&#39;traingdm&#39;)%P为输入矩阵,minmax(P)为找出P的最大值与最小值作为输入数据的范围
%输出层为3(输出层有三个神经元),有一个中间层(隐藏层),此隐藏层有10个神经元
%若为[10,10,3],则为两个中间层,且每层10个神经元
%  当前输入层权值阈值 
inputWeights=net_1.IW{1,1} 
inputbias=net_1.b{1} 

                
%  当前网络层权值和阈值 
layerWeights=net_1.LW{2,1} 
layerbias=net_1.b{2} 

       

%  设置训练参数
net_1.trainParam.show = 50; 
net_1.trainParam.lr = 0.05; 
net_1.trainParam.mc = 0.9; 
net_1.trainParam.epochs = 10000; %每训练1000次显示一次结果
net_1.trainParam.goal = 1e-3; %训练误差要求0.001

%  调用 TRAINGDM 算法训练 BP 网络
[net_1,tr]=train(net_1,P,T); 

%  对 BP 网络进行仿真
A = sim(net_1,P); 
%  计算仿真误差  
E = T - A; 
MSE=mse(E) 

%随机举一个图片提取的8个数据代入网络判断(代入第一张图片数据)
x=[0.87 1.43 0.91 3.19 0.55 0 0.1 0]&#39;;
sim(net_1,x)

可见其接近1 0 0 所以朝向为左。


4 自组织竞争网络及其matlab的实现


调整当前目录,导入基因数据txt文档

 

 


5 SOM神经网络理论及其Matlab实现


6 离散Hopfield神经网络(DHNN)及其MATLAB实现

Hopfield是循环的,有反馈的闭环的网络

 

数字模型程序:

%0~9的数字模型
% 每个稳态由10*10的矩阵构成,该矩阵用于模拟阿拉伯数字点阵。
% 即将数字划分成10*10方阵,有数字的部分用1表示,空白处用-1表示
zero=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
ZERO=imresize(zero,20);%对图像zero进行绘制并放大20倍
subplot(2,5,1)
imshow(ZERO)

One=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1];
 OnE=imresize(one,20);
 subplot(2,5,2)
 imshow(ONE)
 
 two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 TWO=imresize(two,20);
 subplot(2,5,3)
 imshow(TWO)
 
 three=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 THREE=imresize(three,20);
 subplot(2,5,4)
 imshow(THREE)
 
 four=[-1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1];
 FOUR=imresize(four,20);
 subplot(2,5,5)
 imshow(FOUR)
 
 five=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 FIVE=imresize(five,20);
 subplot(2,5,6)
 imshow(FIVE)
 
 six=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 SIX=imresize(six,20);
 subplot(2,5,7)
 imshow(SIX)

 seven=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1];
 SEVEN=imresize(seven,20);
 subplot(2,5,8)
 imshow(SEVEN)
 
 eight=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
        -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
        -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
EIGHT=imresize(eight,20);
subplot(2,5,9)
imshow(EIGHT)

nine=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 NINE=imresize(nine,20);
 subplot(2,5,10)
 imshow(NINE)

数字识别程序:

% ------------------------standard number array-----------------------
%标准数字数组
One=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1];
 
two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];


  
%   ----------------------plot standard number figure----------------- 
%绘制标准数字
 OnE=imresize(one,20);
 subplot(3,2,1)%subplot(m,n,p)在一个图像窗口切成m*n个小图像,其中此处显示第一个图像one(p从左到右从上到下增大)
 imshow(ONE)
 title(&#39;stand number&#39;)
 
 TWO=imresize(two,20);
 subplot(3,2,2)
 imshow(TWO)
 title(&#39;stand number&#39;)
 
%  ----------------------create hopfield net--------------------------
%生成hopfield网络
 T=[one;two]&#39;;
 net=newhop(T);

 % -----------------------noise array(rand noise)-----------------
 %随机加入噪声
            rand(&#39;state&#39;,0);%初始化随机发生器
            for i=1:100
                a=rand;%产生0~1的随机数
                if a<0.1%加入10%的干扰,如果参数随机数小于0.1则标准数字取反
                   one(i)=-one(i);
                   two(i)=-two(i);
                end
            end
            no1=one;%噪声矩阵no1
            no2=two;
 
%  -------------------------plot noisy figure---------------
%绘制噪声数字
 subplot(3,2,3)
 NO1=imresize(no1,20);
 imshow(NO1)
 title(&#39;noisy number&#39;)


 subplot(3,2,4)
 NO2=imresize(no2,20);
 imshow(NO2)
 title(&#39;noisy number&#39;)


 
% --------------------------plot identify figure--------------
 
noise1={(no1)&#39;};%将矩阵no1进行转置得到noise1
tu1=sim(net,{10,10},{},noise1);%将noise1通过神经网络仿真得到tu1
tu1{10}&#39;
subplot(3,2,5)
imshow(imresize(tu1{10}&#39;,20))%对图像tul取转置后进行绘制并放大20倍
title(&#39;identify number&#39;)

noise2={(no2)&#39;};
tu2=sim(net,{10,10},{},noise2);
tu2{10}&#39;
subplot(3,2,6)
imshow(imresize(tu2{10}&#39;,20))
title(&#39;identify number&#39;)

 

tu1{10}&#39;矩阵:

tu2{10}&#39;矩阵:

当干扰为5%

当干扰为10%

当干扰为20%

 


7 连续Hopfield神经网络(CHNN)及其MATLAB实现


Hopfield网络求解TSP问题的仿真程序:chap8_5.m

% TSP Solving by Hopfield Neural Network

%function TSP_hopfield()
clear all;
close all;

% step 1 设置相关参数
A=1.5;
D=1;
u0=0.02;
step=0.01;

% step 2 读取8.txt中8个城市的坐标,计算各个城市之间的距离
N=8;
citys=load(&#39;8.txt&#39;);
Initial_Length=Initial_RouteLength(citys);        % 计算初始路径长度

DistanceCity=dist(citys,citys&#39;);%每个城市与其它城市之间距离矩阵DistanceCity(1-1 1-2 ... 1-8)1-2指城市1与城市2之间的距离
%citys为8行*2列   citys&#39;为2行*8列                                                                    % (2-1  2-2 ... 2-8)
% step 3 初始化神经元输入                                                                              % (8-1  8-2 ... 8-8)                                                      
u=2*rand(N,N)-1;%产生随机数u范围为-1~1
U=0.5*u0*log(N-1)+u;%神经网络输入U
V=(1+tanh(U/u0))/2;%神经网络输出V

for k=1:1:2000%迭代次数2000步
    times(k)=k;
    
%     step 4 计算dU
    dU=DeltaU(V,DistanceCity,A,D);
    
%     step 5 及时更新U
    U=U+dU*step;
    
%     step 6 计算神经元输出V
    V=(1+tanh(U/u0))/2;
    
%     step 7 计算能量函数
    E=Energy(V,DistanceCity,A,D);
    Ep(k)=E;
    
%     step 8 检查路径合法性
    [V1,CheckR]=RouteCheck(V);
end

% step 9
if (CheckR==0)
    Final_E=Energy(V1,DistanceCity,A,D);   %最优能量
    Final_Length=Final_RouteLength(V1,citys);       % 计算最终路径长度
    disp(&#39;迭代次数&#39;);k


    disp(&#39;寻优路径矩阵:&#39;);V1


    disp(&#39;最优能量函数:&#39;);Final_E


    disp(&#39;初始路程:&#39;);Initial_Length


    disp(&#39;最短路程:&#39;);Final_Length


    PlotR(V1,citys);    % 寻优路径作图函数
else
    disp(&#39;寻优路径无效&#39;);
end

%绘制能量函数
figure(2);
plot(times,Ep,&#39;r&#39;);
title(&#39;Energy Function Change&#39;);
xlabel(&#39;k&#39;);
ylabel(&#39;E&#39;);


能量函数随迭代次数的变化:

能量函数随时间单调下降,E的最小点对应问题的最优解

初始路径及优化后的路径:

初始路径:1-2-3-4-5-6-7-8-1     优化路径:5-6-4-7-1-8-3-2-5

注:由于网络输入U初始选择的随机性,可能会导致初始化的寻优路径无效,当寻优失败时,需要重新运行优化程序。(90%以上可收敛得到最优解)

改变初试坐标:


8 SVM神经网络理论实际应用


9 粒子群算法(PSO)实现函数极值优化

POS程序:

%% 清空环境
clc
clear

%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;

maxgen=200;   % 进化次数  
sizepop=20;   %种群规模

Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;

%% 产生初始粒子和速度
for i=1:sizepop
    %随机产生一个种群
    pop(i,:)=5*rands(1,2);    %初始种群
    V(i,:)=rands(1,2);  %初始化速度
    %计算适应度
    fitness(i)=fun(pop(i,:));   %染色体的适应度
end

%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;    %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值

%% 迭代寻优
for i=1:maxgen
    
    for j=1:sizepop
        
        %速度更新
        V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        V(j,find(V(j,:)>Vmax))=Vmax;
        V(j,find(V(j,:)         
        %种群更新
        pop(j,:)=pop(j,:)+0.5*V(j,:);
        pop(j,find(pop(j,:)>popmax))=popmax;
        pop(j,find(pop(j,:)

        
        %自适应变异
        if rand>0.8
            k=ceil(2*rand);
            pop(j,k)=rand;
        end
      
        %适应度值
        fitness(j)=fun(pop(j,:));
        
        
        %个体最优更新
        if fitness(j)             gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
        end
        
        %群体最优更新
        if fitness(j)             zbest = pop(j,:);
            fitnesszbest = fitness(j);
        end
        
    end
    yy(i)=fitnesszbest;    
        
end

%% 结果分析
plot(yy)
title([&#39;适应度曲线  &#39; &#39;终止代数=&#39; num2str(maxgen)]);
xlabel(&#39;进化代数&#39;);ylabel(&#39;适应度&#39;);

zbest


10 LibSVM工具箱的下载、安装、使用教程


推荐阅读
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 本文详细介绍了如何在项目中引入和配置KindEditor网页编辑器,包括脚本引用、初始化编辑器以及文件上传功能的实现。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 宏基因组学经典文献重现(一):利用ggplot2进行散点图可视化分析
    宏基因组学经典文献重现(一):利用ggplot2进行散点图可视化分析 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文详细介绍了 HTML 中 a 标签的 href 属性的多种用法,包括实现超链接、锚点以及调用 JavaScript 方法。通过具体的示例和解释,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
林小琳LLL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有