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

📄 sima1.m

📁 BP神经网络算法,采用遗传算法训练具有7个隶属函数的FNN控制器权值的程序等
💻 M
字号:
function [nw,a1,i] = sima1(w,p,lr,rho,pf)
%SIMA1    ART1 simulation function.
%	  Each input vector is presented to the network one at a time.
%         (See COMPET, HARDLIM)
% 
%         [NW,A1,i] = SIMA(W,P,lr,rho,pf)
%           W   - S2xS1 weight matrix of learned (row) vectors.
%           P   - S1xQ matrix of input vectors.
%           lr  - the learning rate.
%           rho - the vigilance parameter.
%           pf  - (Optional) Printing flag. Any value of pf
%                 enables printing of events.
%         Returns:
%           NW - the new weight matrix.
%           A1 - the vectors recalled on layer 1.
%           i  - the winning neurons in layer 2.

%         M.H. Beale & H.B. Demuth, 1-31-92
%         Copyright (c) 1992 by the MathWorks, Inc.

if nargin < 4 | nargin > 5
  error('Wrong number of input arguments.');
  end

[R,Q] = size(p);
[S2,S1] = size(w);
if R ~= S1
   error ('P should have as many rows as W has columns.');
   end

% NETWORK PARAMETERS
nw = w;
W1 = nw';
W2 = normr(w);

% INITIALIZE RETURN VARIABLES
a1 = zeros(S1,Q);
i = zeros(1,Q);

% PRESENT EACH NON-ZERO INPUT VECTOR
for q=1:Q
  if any(p(:,q) ~= 0)

    % SET ALL LAYER 2 BIASES TO 1
    B2 = zeros(S2,1);

    % REPEAT UNTIL: LAYERS 1 & 2 RESONATE
    done = 0;
    while ~done
      
      % INITIALLY A1 = P, CALCULATE WINNING NEURON IN A2
      A2 = compet(W2*p(:,q)+B2);
      i(q) = find(A2 == 1);

      % RECALCULATE A1 WITH FEEDBACK FROM A2
      a1(:,q) = (p(:,q) & W1(:,i(q)));

      % RESET NEURON FIRES IF NEW A1 TO DIFFERENT FROM P
      reset = hardlim(rho*sum(p(:,q))-sum(a1(:,q)));

      % IF RESET NEURON FIRES TAKE WINNING NEURON IN A2 OUT OF COMPETITION
      if reset
        B2(i(q)) = -10;
        if nargin == 5
          fprintf('Vector %0.f resets layer-2 neuron %0.f.\n',q,i(q));
          end

        % IF ALL NEURONS IN A2 OUT OF COMPETITION ADD NEURON TO LAYER 2
        if all(B2 == -10)
          if nargin == 5
             fprintf('New Layer-2 neuron created.\n',q);
          end
          nw = [nw; ones(1,S1)];
          W2 = normr(nw);
          W1 = nw';
          B2 = [B2; 0];
          S2 = S2 + 1;
       end

      % IF RESET NEURON DOES NOT FIRE: LAYERS 1 & 2 RESONATE 
      else
        if nargin == 5
           fprintf('Vector %0.f resonates Layer-2 neuron %0.f.\n',q,i(q));
        end
        done = 1;
     end
  end

    % LEARNING TAKES PLACE DURING RESONATION
    nntwarn off;
    %if A2==1
       
       dW = learnk(nw,p(:,q),A2,lr);
       nw = nw + dW;
     %  end
    
    W1 = nw';
    W2 = normr(nw);
 end
    if nargin == 5 
       disp('')
    end
 end

⌨️ 快捷键说明

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