예제 #1
0
 /// <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;
 }
예제 #2
0
        /// <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();
            }
        }