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); }
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); }
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); }