%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Example to illustrate computation of Nash equilibria of
% finite two player nonzero sum "bimatrix" games. If you run
% the program multiple times, with the J1 and J2 definition lines 
% appropriately commented out below, you can see cases where there are
% zero, one, or more than one Nash equilibrium.  Now, the program
% provides one example where there are two Nash solutions.
%
% Author: K. Passino
% Version: 2/2/02
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all

% Set the number of different possible values of the decision variables

m=5; % If change will need to modify specific J1, J2 value chosen below
n=3; 

% Set the payoff matrices J1(i,j) and J2(i,j):

%J1=round(10*rand(m,n)-5*ones(m,n)) % Make it random integers between -5 and +5
%J2=round(10*rand(m,n)-5*ones(m,n)) % Make it random integers between -5 and +5

% One set of payoff matrices that gives two Nash equilibria:

J1 =[-1     5    -3;
    -2     5     1;
     4     3    -2;
    -5    -1     5;
     3     0     2]


J2 =[-1     2    -3;
     2    -3     1;
    -2     3     1;
    -1     1    -1;
     4    -4     1]

% Compute the Nash equilibria:

flag=0; % Flag for saying if there is no Nash equilibria

for i=1:m	
    for j=1:n	
		if J1(i,j)<=min(J1(:,j)) & J2(i,j)<=min(J2(i,:)), % Conduct two inequality tests
			display('Nash equilibrium and outcome:') % If satisfied, then diplay solution
			i
			j
			J1(i,j) 
			J2(i,j)
			flag=1; % Indicates that there was one Nash equilibrium (or more)
		end
    end
end

if flag==0
	display('There were no Nash equilibria')
end

%-------------------------------------
% End of program
%-------------------------------------

