function slide=demohop1
% This is a slideshow file for use with playshow.m and makeshow.m
% To see it run, type 'playshow demohop1', 

% Copyright (c) 1992-1998 by The MathWorks, Inc.
% $Revision: 1.13 $  $Date: 1998/06/11 16:23:40 $

if nargout<1,
  playshow demohop1
else
  %========== Slide 1 ==========

  slide(1).code={
   'slideData=nnslides(''start'',slideData,''A Two Neuron Hopfield Network'');' };
  slide(1).text={
   'NEWHOP  - Creates a Hopfield network.',
   'SIM   - Simulates a neural  network.',
   '',
   'A Hopfield network consisting of two neurons is designed with two stable equilibrium points and simulated using the above functions.'};

  %========== Slide 2 ==========

  slide(2).code={
   'slideData=nnslides(''blank'',slideData);',
   'T = [+1 -1;   -1 +1];' };
  slide(2).text={
   'We would like to obtain a Hopfield network that has the two stable points defined by the two target (column) vectors in T.',
   '>> T = [+1 -1;',
   '            -1 +1];',
   ''};

  %========== Slide 3 ==========

  slide(3).code={
   'slideData=nnslides(''axes'',slideData);',
   'cla;',
   'plot(T(1,:),T(2,:),''r*'')',
   'axis([-1.1 1.1 -1.1 1.1])',
   'title(''Hopfield Network State Space'')',
   'xlabel(''a(1)'');',
   'ylabel(''a(2)'');' };
  slide(3).text={
   'Here is a plot where the stable points are shown at the corners.  All possible states of the 2-neuron Hopfield network are contained within the plots boundaries.',
   '>> plot(T(1,:),T(2,:),''r*'')',
   '>> axis([-1.1 1.1 -1.1 1.1])',
   '>> title(''Hopfield Network State Space'')',
   '>> xlabel(''a(1)''); ylabel(''a(2)'');',
   ''};

  %========== Slide 4 ==========

  slide(4).code={
   ' net=newhop(T);' };
  slide(4).text={
   'The function NEWHOP creates Hopfield networks given the stable points T.',
   '>> net=newhop(T);',
   ''};

  %========== Slide 5 ==========

  slide(5).code={
   ' [Y,Pf,Af] = sim(net,2,[],T);' };
  slide(5).text={
   'First we check that the target vectors are indeed stable. We check this by giving the target vectors to the Hopfield network.  It should return the two targets unchanged, and indeed it does:',
   '>> [Y,Pf,Af] = sim(net,2,[],T);  Y',
   'Y =',
   '     1    -1',
   '    -1     1',
   ''};

  %========== Slide 6 ==========

  slide(6).code={
   'cla;',
   'plot(T(1,:),T(2,:),''r*'')',
   'axis([-1.1 1.1 -1.1 1.1])',
   'a = {rands(2,1)};',
   '[y,Pf,Af] = sim(net,{1 20},{},a);' };
  slide(6).text={
   'Here we define a random starting point and simulate the Hopfield network for20 steps. It should reach one of its stable points.',
   '',
   '>> a = {rands(2,1)};',
   '>> [y,Pf,Af] = sim(net,{1 20},{},a);',
   ''};

  %========== Slide 7 ==========

  slide(7).code={
   'cla;',
   'plot(T(1,:),T(2,:),''r*'')',
   'axis([-1.1 1.1 -1.1 1.1])',
   'record=[cell2mat(a) cell2mat(y)];',
   'start=cell2mat(a);',
   'hold on',
   'plot(start(1,1),start(2,1),''bx'',record(1,:),record(2,:))',
   '' };
  slide(7).text={
   'We can make a plot of the Hopfield networks activity.',
   '>> record=[cell2mat(a) cell2mat(y)];',
   '>> start=cell2mat(a);',
   '>> hold on',
   '>> plot(start(1,1),start(2,1),''bx'',record(1,:),record(2,:))',
   '',
   'Sure enough, the network ends up in either the upper-left or lower right corners of the plot.',
   ''};

  %========== Slide 8 ==========

  slide(8).code={
   'color = ''rgbmy'';',
   'for i=1:25',
   '   a = {rands(2,1)};    [y,Pf,Af] = sim(net,{1 20},{},a);',
   '   record=[cell2mat(a) cell2mat(y)];  start=cell2mat(a);',
   '   plot(start(1,1),start(2,1),''kx'',record(1,:),record(2,:),color(rem(i,5)+1))',
   '   drawnow',
   'end' };
  slide(8).text={
   'We repeat the simulation for 25 more initial conditions.',
   '',
   'Note that if the Hopfield network starts out closer to the upper-left, it will go to the upper-left, and vise versa. This ability to find the closest memory to an initial input is what makes the Hopfield network useful.',
   ''};
end