public void SolveGame(GamePosition gp_input) { gp.N = gp_input.N; gp.Strategies = gp_input.Strategies; gp.payoffs = gp_input.payoffs; gp.AdParamValues = gp_input.AdParamValues; for (int i = 0; i < gp.N; i++) { gp.V.Add(new List <double>()); gp.LHStrategy.Add(new List <List <double> >()); gp.OptimalStrategy_R.Add(new List <List <double> >()); for (int j = 0; j < gp.N; j++) { gp.V[i].Add(0); gp.LHStrategy[i].Add(new List <double>()); gp.OptimalStrategy_R[i].Add(new List <double>()); } } gp.Utility.Clear(); for (int i = 0; i < gp.N; i++) { gp.Utility.Add(new List <List <List <double> > >()); for (int j = 0; j < gp.N; j++) { gp.Utility[i].Add(new List <List <double> >()); } } for (int i = 0; i < gp.N; i++) { for (int j = 0; j < gp.N; j++) { gp.Utility[i].Add(new List <List <double> >()); if (i < j) { GameTheory.LemkeHowson LH = new GameTheory.LemkeHowson(gp.Strategies[i], gp.Strategies[j]); gp.CalculatePayoffsValues(); LH.A = gp.CreateUtilityPayoffMatrix(i, j); LH.B = gp.CreateUtilityPayoffMatrix(j, i); gp.Utility[i][j] = LH.A; gp.Utility[j][i] = LH.B; //DebugForm d = new DebugForm(LH.A, LH.B); //d.ShowDialog(); LH.salvation(); gp.V[i][j] = LH.prize_1; gp.V[j][i] = LH.prize_2; if ((LH.prize_1 == 0) && (LH.prize_2 == 0)) { System.Windows.Forms.MessageBox.Show ("Lemke-Howson got into endless loop. /nAlgorithm is not optimal"); this.Close(); } else { for (int k = 0; k < gp.Strategies[i]; k++) { gp.LHStrategy[i][j].Add(0); gp.OptimalStrategy_R[i][j].Add(0); } for (int k = 0; k < gp.Strategies[j]; k++) { gp.LHStrategy[j][i].Add(0); gp.OptimalStrategy_R[j][i].Add(0); } for (int k = 0; k < LH.strat1.Count; k++) { gp.LHStrategy[i][j][k] = LH.strat1[k]; gp.OptimalStrategy_R[i][j][k] = LH.strat1[k]; } for (int k = 0; k < LH.strat2.Count; k++) { gp.LHStrategy[j][i][k] = LH.strat2[k]; gp.OptimalStrategy_R[j][i][k] = LH.strat2[k]; } } } } } gp.defined = true; show_result(); menuStrip1.Show(); }