/* EQUILPLOT.GPR: program to plot equilibriun of prisoner's dilemma game John Rust, University of Maryland, November 2005 */ library pgraph; pqgwin many; #include setup.gpr; nplot=50; x=seqa(0,1/nplot,nplot+1); y=zeros(rows(x),1); y1=y; y2=y; xa=1; xb=1; i=1; do until i > rows(x); {y[i],df}=br2_a(xa,xb,x[i]); {y1[i],df}=br_b(y[i],xb); {y1[i],df}=br_a(y1[i],xa); {y2[i],df}=br_a(x[i],xa); i=i+1; endo; graphset; fonts("simplex simgrma"); _pdate=""; _pgrid=0|0; _pltype=6|3|6|1; _plwidth=5|5; xtics(0,1,.1,0); ytics(0,1,.1,0); axmargin(1,3.25,1,1); title("Bayesian Nash Equilibria\LPrisoner's Dilemma Game x]a[="$+ ftos(xa,"-*.*lf",4,2)$+" x]b[="$+ftos(xb,"-*.*lf",4,2)); xlabel("Probability prisoner a confesses"); ylabel("Probability prisoner a confesses"); _plegctl=1~4~.55~.15; _plegstr="45 degree line\000\202l\201[2]]a]\000\202l\201[4]]a[\000\202l\201]b["; #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Equilibrium of Prisoner's Dilemman Game",""); call WinSetActive(wxy); #ENDIF xy(x,x~y~y1~y2); #IFUNIX call WinSetActive(1); #ENDIF y=zeros(rows(x),1); y1=y; i=1; do until i > rows(x); {y[i],df}=br_b(x[i],xb); y1[i]=ibr_a(x[i],xa); i=i+1; endo; {pa,pb}=equil(xa,xb); graphset; fonts("simplex simgrma"); _pdate=""; _pgrid=0|0; _pltype=6|6; _plwidth=5|5; xtics(0,1,.1,0); ytics(0,1,.1,0); axmargin(1,3.25,1,1); title("Bayesian Nash Equilibria\LPrisoner's Dilemma Game x]a[="$+ ftos(xa,"-*.*lf",4,2)$+" x]b[="$+ftos(xb,"-*.*lf",4,2)); xlabel("Probability prisoner a confesses"); ylabel("Probability prisoner b confesses"); _plegctl=1~6~.05~.75; _plegstr="\202l\201]b[\000\202l\201]a["; _pline=(1~3~pa~0~pa~pb~1~4~3); _pline=_pline|(1~3~0~pb~pa~pb~1~4~3); #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Equilibrium of Prisoner's Dilemman Game",""); call WinSetActive(wxy); #ENDIF xy(x,y~y1); #IFUNIX call WinSetActive(1); #ENDIF yy=zeros(rows(x),1); yy1=zeros(rows(x),1); i=1; do until i > rows(x); yy[i]=eu_a(1,xa,x[i]); yy1[i]=eu_a(0,xa,x[i]); i=i+1; endo; graphset; _pdate=""; _pgrid=0|0; _pltype=6|3; _plwidth=5|5; title("Expected Payoffs to Prisoner A\LPrisoner's Dilemma Game x]a[="$+ ftos(xa,"-*.*lf",4,2)$+" x]b[="$+ftos(xb,"-*.*lf",4,2)); xlabel("Probability prisoner b confesses"); ylabel("Expected utility for prisoner A"); _plegstr="Confess\000Don't Confess"; _plegctl=2~5~1~1; #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Expected Payoffs in Prisoner's Dilemma Game",""); call WinSetActive(wxy); #ENDIF scale(x,yy~yy1); xy(x,yy~yy1); #IFUNIX call WinSetActive(1); #ENDIF yy=zeros(rows(x),1); yy1=zeros(rows(x),1); i=1; do until i > rows(x); yy[i]=eu_b(1,xb,x[i]); yy1[i]=eu_b(0,xb,x[i]); i=i+1; endo; graphset; _pdate=""; _pgrid=0|0; _pltype=6|3; _plwidth=5|5; xtics(0,1,.1,0); title("Expected Payoffs to Prisoner B\LPrisoner's Dilemma Game x]a[="$+ ftos(xa,"-*.*lf",4,2)$+" x]b[="$+ftos(xb,"-*.*lf",4,2)); xlabel("Probability prisoner a confesses"); ylabel("Expected utility for prisoner B"); _plegstr="Confess\000Don't Confess"; _plegctl=2~5~1~1; #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Expected Payoffs in Prisoner's Dilemma Game",""); call WinSetActive(wxy); #ENDIF scale(x,yy~yy1); xy(x,yy~yy1); #IFUNIX call WinSetActive(1); #ENDIF z=zeros(rows(x),rows(x)); z1=zeros(rows(x),rows(x)); i=1; do until i > rows(x); j=1; do until j > rows(x); {pa,pb}=equil(x[i],x[j]); z[i,j]=pa; z1[i,j]=pb; j=j+1; endo; i=i+1; endo; graphset; _pdate=""; _pgrid=0|0; _pltype=6|6; _plwidth=5|5; xtics(0,1,.1,0); ytics(0,1,.1,0); ztics(.5,1,.1,0); title("Equilibrium Probability A confesses\LPrisoner's Dilemma Game"); xlabel("Prisoner a's x]a[ value"); ylabel("Prisoner b's x]b[ value"); #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Expected Payoffs in Prisoner's Dilemma Game",""); call WinSetActive(wxy); #ENDIF surface(x',x,z'); #IFUNIX call WinSetActive(1); #ENDIF graphset; _pdate=""; _pgrid=0|0; _pltype=6|6; _plwidth=5|5; xtics(0,1,.1,0); ytics(0,1,.1,0); ztics(.5,1,.1,0); title("Equilibrium Probability B confesses\LPrisoner's Dilemma Game"); xlabel("Prisoner a's x]a[ value"); ylabel("Prisoner b's x]b[ value"); #IFUNIX let cv = 100 100 640 480 0 0 1 6 15 0 0 2 2; wxy = WinOpenPQG(cv,"Expected Payoffs in Prisoner's Dilemma Game",""); call WinSetActive(wxy); #ENDIF surface(x',x,z1'); #IFUNIX call WinSetActive(1); #ENDIF