Exemple #1
0
        private void GenerateSingleGame(int pl1, int pl2)
        {
            bool       Solvable = false;
            SingleGame G        = new SingleGame();

            while (!Solvable)
            {
                Random R = new Random((int)DateTime.Now.Ticks);

                int InD = R.Next(2, S[pl1]);
                Thread.Sleep(SleepTime);
                List <List <double> > A = GenerateMatrix(S[pl1], S[pl2], InD);

                InD = R.Next(2, S[pl2]);
                Thread.Sleep(SleepTime);
                //List<List<Double>> T = GenerateMatrix(Database.G.S[pl2], Database.G.S[pl1], InD);
                List <List <double> > B = Matrix.Transp(GenerateMatrix(S[pl2], S[pl1], InD));

                G              = new SingleGame(A, B);
                G.pl1          = pl1;
                G.FirstPlayer  = pl1.ToString();
                G.pl2          = pl2;
                G.SecondPlayer = pl2.ToString();
                Solvable       = G.Solve();
            }
            SingleGames.Add(G);
        }
Exemple #2
0
        private double VariablesInitialization(List <int> RowIndexes, List <int> ColumnIndexes)
        {
            SingleGame D = this.Dominate(RowIndexes, ColumnIndexes);

            n = D.A.Count;
            m = D.A[0].Count;
            //Duplicating to save data
            for (int i = 0; i < n; i++)
            {
                Ac.Add(new List <double>());
                Bc.Add(new List <double>());
                for (int j = 0; j < m; j++)
                {
                    Ac[i].Add(D.A[i][j]);
                    Bc[i].Add(D.B[i][j]);
                }
            }

            //Finding max element
            double d = Ac[0][0];

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    d = Math.Max(d, Ac[i][j]);
                    d = Math.Max(d, Bc[i][j]);
                }
            }
            d++;

            //Creating modified arrays
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Ac[i][j] = d - Ac[i][j];
                    Bc[i][j] = d - Bc[i][j];
                }
            }
            Ac = Matrix.Transp(Ac);

            for (int i = 0; i < n; i++)
            {
                Xo.Add(0);
                Lb.Add(0);
                P.Add(new List <string>());
                for (int j = 0; j < n; j++)
                {
                    P[i].Add("");
                    if (i == j)
                    {
                        Bc[i].Add(1);
                    }
                    else
                    {
                        Bc[i].Add(0);
                    }
                }
            }
            for (int i = 0; i < m; i++)
            {
                Yo.Add(0);
                La.Add(0);
                Q.Add(new List <string>());
                for (int j = 0; j < m; j++)
                {
                    Q[i].Add("");
                    if (i == j)
                    {
                        Ac[i].Add(1);
                    }
                    else
                    {
                        Ac[i].Add(0);
                    }
                }
            }
            return(d);
        }
Exemple #3
0
        private SingleGame FormCoalitionsSingleGame(List <int> C1, List <int> C2,
                                                    int Player1Index, int Player2Index)
        {
            SingleGame G = new SingleGame();

            G.FirstPlayer = "{";
            for (int i = 0; i < C1.Count; i++)
            {
                G.FirstPlayer += (C1[i] + 1);
                if (i != C1.Count - 1)
                {
                    G.FirstPlayer += ",";
                }
                else
                {
                    G.FirstPlayer += "}";
                }
            }
            G.SecondPlayer = "{";
            for (int i = 0; i < C2.Count; i++)
            {
                G.SecondPlayer += (C2[i] + 1);
                if (i != C2.Count - 1)
                {
                    G.SecondPlayer += ",";
                }
                else
                {
                    G.SecondPlayer += "}";
                }
            }
            G.pl1 = Player1Index;
            G.pl2 = Player2Index;
            int n = 1, m = 1;

            for (int pl1 = 0; pl1 < C1.Count; pl1++)
            {
                n *= S[C1[pl1]];
            }
            for (int pl2 = 0; pl2 < C2.Count; pl2++)
            {
                m *= S[C2[pl2]];
            }

            List <List <int> > index = new List <List <int> >();

            index.Add(new List <int>());
            index.Add(new List <int>());
            for (int i = 0; i < C1.Count; i++)
            {
                index[0].Add(0);
            }
            for (int i = 0; i < C2.Count; i++)
            {
                index[1].Add(0);
            }

            for (int i = 0; i < n; i++)
            {
                G.A.Add(new List <double>());
                G.B.Add(new List <double>());

                for (int j = 0; j < m; j++)
                {
                    double vA = 0, vB = 0;
                    for (int p = 0; p < C1.Count; p++)
                    {
                        for (int q = 0; q < C2.Count; q++)
                        {
                            if (C1[p] > C2[q])
                            {
                                vA += FindGame(this, C2[q], C1[p]).A[index[1][q]][index[0][p]];
                                vB += FindGame(this, C2[q], C1[p]).B[index[1][q]][index[0][p]];
                            }
                            else
                            {
                                vA += FindGame(this, C1[p], C2[q]).A[index[0][p]][index[1][q]];
                                vB += FindGame(this, C1[p], C2[q]).B[index[0][p]][index[1][q]];
                            }
                        }
                    }
                    G.A[i].Add(vA);
                    G.B[i].Add(vB);
                    IncrementIndexes(index[1], C2);
                }
                for (int j = 0; j < C2.Count; j++)
                {
                    index[1][j] = 0;
                }
                IncrementIndexes(index[0], C1);
            }
            return(G);
        }