# Neural Networks: A Comprehensive Foundation, 2e book Companion Software

12 Nov 2004 (Updated )

Companion Software for Neural Networks: A Comprehensive Foundation, 2e book

[s, count, M]=hop_test(W,x,update)
```function [s, count, M]=hop_test(W,x,update)

% function [s, count, M]=hop_test(W,x,update)
%
%   s - output state vector
%   count - number of cyckes until stable state is reached
%   M - matrix containing the intermediate network states
%   W - weight matrix
%   x - probe vector
%   update - how often to view the network
%
% Hugh Pasika 1997

% initialize a few variables
[r c]=size(x);  s_prev=x(:);  N=r*c;  count=0; M=zeros(120,1);

% the next 5 lines determine if interim plotting is to be done
if update > 0,
plot='on ';
else
plot='off'; update=1; % set update to prevent divide by zero error later
end

% the upper limit in the loop is arbitrary (you'll never reach it)
while count < 1000,
ind=1; clear ch;

% store the network state
count=count+1;
M(:,count)=s_prev;

% vector will declare which neurons want to change
for j=1:120,
nv(j)=sgn(sum(W(j,:)'.*s_prev));
if abs(nv(j)-s_prev(j)) > 0, ch(ind)=j; ind=ind+1; end;
end

% now, do any neurons want to change? if no, break out of the loop
if ind==1, break; end
% update one neuron
r_ind=ceil(rand(1)*length(ch));  % select one neuron for updating
s_prev(ch(r_ind))=s_prev(ch(r_ind))*(-1);    % update it

% the next 6 lines are more plotting directives to show intermediate stages
if (plot == 'on ') & floor(count/update) == (count/update) ;
hop_plotdig(s_prev,12,10,'Current State');
fprintf(1,'\nThe current iteration is: %4.0f \n',count);
fprintf(1,'Hit any key to continue. \n')
pause
end

end

% more plotting directives
if (plot == 'on '),
hop_plotdig(s_prev,12,10,'Final State');
fprintf(1,'\nTraining stopped after %4.0f iterations.\n',count);
end

% storage of stable state
M(:,count)=s_prev;
s=reshape(s_prev,r,c);
```