%MA40128 Game Theory Project- G.Taylor %reads in player's own moves, opponents moves and a strategy. %Returns 1 to cooperate or 0 to defect. %Strategies implemented- % 1= always defect % 2= always cooperate % 3= Tit-for-tat % 4= GRIM (defect forever if opponent ever defects) % 5= Soton Master % 6= Soton Slave % Any other input implements RANDOM- 50% chance of either. function x=play(player,opp,strategy) SotonM=[1,0,1,1,0,1,1,1]; SotonS=[0,1,0,0,1,0,0,0]; if(strategy==1) %always defect x=0; elseif(strategy==2) %always cooperate x=1; elseif(strategy==3) %titfortat if(length(opp)==0) x=1; else x=opp(length(opp)); end elseif(strategy==4) %GRIM if(length(opp)==0) x=1; else if(sum(opp)0) if(opp(1:length(opp))==SotonS(1:length(opp))) %Opponent has so far signalled correctly as a slave x=SotonM(length(player)+1); %Give the next signal elseif(opp(1:length(opp))==SotonM(1:length(opp))) %Opponent has so far signalled as a master x=SotonM(length(player)+1); %Give the next signal else x=0; %Otherwise, cease signalling and sabotage opponent end else if(opp(1:8)==SotonS) %found a slave x=0; %exploit elseif(opp(1:8)==SotonM) %found another master x=1; %cooperate else x=0; %Not a Soton program; sabotage end end elseif(strategy==6) %Soton slave if(length(opp)==0) x=SotonS(1); elseif(length(opp)<8&&length(opp)>0) if(opp(1:length(opp))==SotonS(1:length(opp))) %Opponent has so far signalled correctly as a slave x=SotonS(length(player)+1); %Give the next signal elseif(opp(1:length(opp))==SotonM(1:length(opp))) %Opponent has so far signalled as a master x=SotonS(length(player)+1); %Give the next signal else x=0; %Otherwise, cease signalling and sabotage opponent end else if(opp(1:8)==SotonS) %found a slave x=1; %cooperate elseif(opp(1:8)==SotonM) %found a master x=1; %self-sacrifice else x=0; %Not a Soton program; sabotage end end else %50/50 s=randn; if(s<0) x=0; else x=1; end end