public void Test_BrojRundiNaOsnovuSistemaIBrojaIgraca(string sistem, int brojIgraca, int ocekivano) { Sistem_Takmicenja d = new Sistem_Takmicenja { Opis = sistem }; //obzirom da se ne koristi baza za ovu funckiju moze se slobodno poslati null vrijednost InitTakmicenja x = new InitTakmicenja(null); int rezultat = x.pomocnaFunkcijaIzracunajRunde(d, brojIgraca).BrojRundi; Assert.AreEqual(ocekivano, rezultat); }
public List <(Prijave prijava, double vjerovatnoca)> PredictWinners(int takmId) { var takmicenje = db.Takmicenja .Include(x => x.Sistem) .Where(x => x.ID == takmId).FirstOrDefault(); if (takmicenje == null) { throw new UserException("Takmicenje ne postoji u bazi."); } ValidirajPredictWinners(takmicenje); List <(Prijava prijava, int Elo)> PrijaveLista = GetPrijaveSaElom(takmId); double [,] MatricaVjerovatnoca = new double[PrijaveLista.Count, PrijaveLista.Count]; for (int i = 0; i < PrijaveLista.Count - 1; i++) { for (int j = i + 1; j < PrijaveLista.Count; j++) { double vjerovatnocaA = eloCalculator.GetVjerovatnoca(PrijaveLista[i].Elo, PrijaveLista[j].Elo); double vjerovatnocaB = eloCalculator.GetVjerovatnoca(PrijaveLista[j].Elo, PrijaveLista[i].Elo); MatricaVjerovatnoca[i, j] = vjerovatnocaA; MatricaVjerovatnoca[j, i] = vjerovatnocaB; } } int brojRundi = initTakmicenja.pomocnaFunkcijaIzracunajRunde(takmicenje.Sistem, PrijaveLista.Count).BrojRundi; //RED SE ODNOSI NA SLOTNUM - 1 DAKLE NIJE PO RANKU SORTIRANO NEGO KAKO UTAKMICE IDU double[,] VjerovatnocePobjedeRunde = new double[PrijaveLista.Count, brojRundi]; List <(Prijava pr, double vjerovatnoca)> finalnaLista = new List <(Prijava pr, double vjerovatnoca)>(); for (int r = 0; r < brojRundi; r++) { for (int i = 0; i < PrijaveLista.Count; i++) { double vjerovatnocaProslu = GetProsluVjerovatnocu(i, r - 1, VjerovatnocePobjedeRunde); int v = GetSlotNumber(i + 1, r + 1) - 1; int u = v + (int)Math.Round(Math.Pow(2, r)) - 1; double suma = 0; for (int k = v; k <= u; k++) { suma += (MatricaVjerovatnoca[i, k] * GetProsluVjerovatnocu(k, r - 1, VjerovatnocePobjedeRunde)); } suma *= vjerovatnocaProslu; VjerovatnocePobjedeRunde[i, r] = suma; if (r == brojRundi - 1) { finalnaLista.Add((PrijaveLista[i].prijava, suma)); } } } finalnaLista = finalnaLista.OrderByDescending(x => x.vjerovatnoca).ToList(); var povratna = new List <(Prijave prijava, double vjerovatnoca)>(); for (int i = 0; i < 3; i++) { if (i >= finalnaLista.Count) { break; } var prijavaMap = mapko.Map <Prijave>(finalnaLista[i].pr); povratna.Add((prijavaMap, finalnaLista[i].vjerovatnoca));