Exemple #1
0
        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();
        }