// Construction de la Bataille des Sexes bayesienne
double pBos = 0.7;
double[] bosPayoffs(string[] types, string[] actions)
{
string t2 = types[1];
string a1 = actions[0], a2 = actions[1];
if (a1 == a2)
{
if (a1 == "O")
return t2 == "O" ? new[]{2.0, 1.0} : new[]{2.0, 0.0};
else
return t2 == "F" ? new[]{1.0, 2.0} : new[]{1.0, 0.0};
}
return new[]{0.0, 0.0};
}
var bosGame = new BayesianGame(
name: "BoS with Uncertainty",
players: new[]{"J1", "J2"},
types: new Dictionary<string,string[]>{{"J1",new[]{"N"}},{"J2",new[]{"O","F"}}},
prior: new Dictionary<string,double>{{"N|O", pBos}, {"N|F", 1-pBos}},
actions: new Dictionary<string,string[]>{{"J1",new[]{"O","F"}},{"J2",new[]{"O","F"}}},
payoffs: bosPayoffs
);
DisplayBayesianGame(bosGame);
("Probabilite que J2 prefere Opera : p = " + FI(pBos, "F2")).Display();
// Enumeration des equilibres bayesiens de Nash
var bneResults = new List<string>();
bneResults.Add("Recherche des equilibres bayesiens de Nash");
bneResults.Add(new string('=', 50));
int nBne = 0;
foreach (var a1 in bosGame.Actions["J1"])
foreach (var a2O in bosGame.Actions["J2"])
foreach (var a2F in bosGame.Actions["J2"])
{
var strat = new Dictionary<string,Dictionary<string,string>>{
{"J1", new Dictionary<string,string>{{"N", a1}}},
{"J2", new Dictionary<string,string>{{"O", a2O},{"F", a2F}}}};
if (IsBayesianNashEquilibrium(bosGame, strat))
{
nBne++;
double u1 = ComputeExpectedPayoff(bosGame, "J1", "N", a1, strat);
double u2O = ComputeExpectedPayoff(bosGame, "J2", "O", a2O, strat);
double u2F = ComputeExpectedPayoff(bosGame, "J2", "F", a2F, strat);
bneResults.Add("");
bneResults.Add("BNE #" + nBne + ":");
bneResults.Add(" J1 joue " + a1);
bneResults.Add(" J2 type O joue " + a2O);
bneResults.Add(" J2 type F joue " + a2F);
bneResults.Add(" Gains esperes : J1=" + FI(u1,"F2") + ", J2(O)=" + FI(u2O,"F2") + ", J2(F)=" + FI(u2F,"F2"));
}
}
bneResults.Add("");
bneResults.Add("Total : " + nBne + " equilibre(s) bayesien(s) de Nash en strategies pures.");
string.Join("\n", bneResults).Display();