/// <summary> /// Provede novou inicializaci vsech globalnich promennych v teto tride, ktere slouzi pro vypocet zateze /// na vyuku konkretni SRA a to vcetne "zameny" samotne SRA, kterou budeme analyzovat. /// Netyka se tridy pro vypocet celkove zateze! /// </summary> /// <param name="sra">SRA, kterou chceme analyzovat.</param> private void CleanInit(SRA sra) { roakIdnoToStartTimes = new Dictionary <int, List <int> >(); noStudentsOnSRAHour = new Dictionary <int, int>(); roakIdnoSharedUtility = new Dictionary <int, Dictionary <string, double> >(); roakIdnoRepetition = new Dictionary <int, int>(); this.sra = sra; }
/// <summary> /// Provede analyzu zateze na vyuku zadane SRA. /// Vysledek akumulujeme do onusDistribution. /// </summary> /// <param name="sra">SRA, kterou chceme analyzovat.</param> public void AnalyzeSRA(SRA sra) { CleanInit(sra); // Pro analyzu kazde SRA je treba si vycistit promenne if (sra.Predmety.Any(predmet => predmet.IsAtypical)) { if (sra.Predmety.Count > 1) { // Pocitame zatez pro atypipicke i radne predmety, ktere jsou sdruzene do jedne SRA // Budeme resit tak, ze si vsechny RA v SRA projedeme a zpracujeme jako samostatne rozvrhove akce, // tj. bez sdileni zateze. // TODO: Tady muze vzniknout chyba, ktera ovlivni vypocet zateze! if (sra.Predmety.Any(predmet => !predmet.IsAtypical)) { // Pocitame zatez v pripade, ze v SRA jsou alespon dva predmety, // kde alespon jeden je atypicky a alespon jeden je radny // TODO: Jak resit vypocet zateze v tomto pripade? Zatim zatez nezapocitavam! // Zatim si jen vypisu, ktere to jsou foreach (Predmet p in sra.Predmety) { if (!p.IsAtypical) { Debug.WriteLine(string.Format("Predmet {0}/{1} je radny predmet a je v SRA uveden s atypickymi predmety.", p.Katedra, p.Zkratka)); } } } else { // Pocitame zatez v pripade, ze v SRA jsou alespon dva predmety a vsechny jsou atypicke foreach (RozvrhovaAkce ra in sra.VnoreneAkce) { // musim si vycistit globalni promene // ComputeSimpleATYPOnusDistribution do nich totiz opakovane zapisuje a potrebuje je "prazdne" CleanInit(sra); ComputeSimpleATYPOnusDistribution(ra); // Spoctu zatez na vyuku kazde akce zvlast } } } else { // Pocitam zatez pro atypicky predmet, ktery je v SRA sam ComputeSimpleATYPOnusDistribution(sra.VnoreneAkce[0]); } } else { // Pocitam zatez pro radny predmet SetRoakIdnoToStartTimes(); SetNoStudentsOnSRAHour(); SetRoakIdnoRepetition(); SetRoakIdnoSharedUtility(); ComputeOnusDistribution(); } }