Beispiel #1
0
 override public void PrepareReplication()
 {
     base.PrepareReplication();
     // Setup component for the next replication
     _generatorTrvaniaPrechoduVysetrenie = new OSPRNG.UniformContinuousRNG(40, 90, (MySim as VacCenterSimulation).GeneratorNasad);
     _generatorTrvaniaPrechoduOckovanie  = new OSPRNG.UniformContinuousRNG(20, 45, (MySim as VacCenterSimulation).GeneratorNasad);
     _generatorTrvaniaPrechoduCakaren    = new OSPRNG.UniformContinuousRNG(45, 110, (MySim as VacCenterSimulation).GeneratorNasad);
     _generatorTrvaniaPrechoduJedalen    = new OSPRNG.UniformContinuousRNG(70, 200, (MySim as VacCenterSimulation).GeneratorNasad);
     _generatorTrvaniaPrechoduPrirpavna  = new OSPRNG.UniformContinuousRNG(10, 18, (MySim as VacCenterSimulation).GeneratorNasad);
 }
 override public void PrepareReplication()
 {
     base.PrepareReplication();
     // Setup component for the next replication
     _generatorTrvania = new OSPRNG.UniformContinuousRNG(140, 220, (MySim as VacCenterSimulation).GeneratorNasad);
 }
Beispiel #3
0
        /**
         * Pred replikaciou sa naplni parovacia halda, z ktorej su vyberane casy prichdovo. V pripade ak nie je zvolena moznost skorsich prichodov, je
         * pomocou multipliera generovany cas prichodu pacienta bez skorsieho prichodu. V pripade ak vyjde, ze v nahodnom pokuse, ze dany pacient sa nedostvil
         * tak sa multiplier zvysi o 1 a po tom co dojde k neuspesnemu nahodnemu pokusu je multiplierom vynasobeny casovy rozostup medzi pacientami a je
         * aktualizovany cas objednania.
         */
        override public void PrepareReplication()
        {
            base.PrepareReplication();
            // Setup component for the next replication
            var sim = MySim as VacCenterSimulation;

            _generatorPravdepodobnosti = new OSPRNG.UniformContinuousRNG(0, 1, sim.GeneratorNasad);
            _haldaPrichodov            = new PairingHeap <double, double>();
            MyAgent.VygenerujNepridenych();

            double casObjednania = 0;

            int    multiplier = 1;
            double casPrichodu;
            double casovyRozostup = 0;

            if (sim.AktualneParametreSimulacie.SpecialnePrichody)
            {
                double pravdepodobnost;

                _generatorPravdepodobnostiSpecifickehoPrichodu = new OSPRNG.UniformContinuousRNG(0, 1, sim.GeneratorNasad);
                _generatorPravdepodobnostiDostaveniaVCas       = new OSPRNG.UniformContinuousRNG(0, 1, sim.GeneratorNasad);
                _generatoryPrichodov = new OSPRNG.UniformContinuousRNG[] { new OSPRNG.UniformContinuousRNG(20 * 60, 60 * 60, sim.GeneratorNasad),
                                                                           new OSPRNG.UniformContinuousRNG(1 * 60, 20 * 60, sim.GeneratorNasad),
                                                                           new OSPRNG.UniformContinuousRNG(60 * 60, 80 * 60, sim.GeneratorNasad),
                                                                           new OSPRNG.UniformContinuousRNG(80 * 60, 240 * 60, sim.GeneratorNasad), };
                for (int i = 0; i < MyAgent.PocetObjednanychPacientov; ++i)
                {
                    multiplier = 1;
                    while (_generatorPravdepodobnosti.Sample() < MyAgent.PocetNepridenychPacientov / (double)MyAgent.PocetObjednanychPacientov)
                    {
                        ++multiplier;
                    }
                    casovyRozostup = multiplier * MyAgent.CasMedziPrichodmi;
                    if (casovyRozostup + casObjednania > sim.CasPrevadzkyVSekundach)
                    {
                        return;
                    }

                    casObjednania += casovyRozostup;

                    if (!(_generatorPravdepodobnostiDostaveniaVCas.Sample() < 0.1))
                    {
                        pravdepodobnost = _generatorPravdepodobnostiSpecifickehoPrichodu.Sample();
                        casPrichodu     = DajCasPrichodu(casObjednania, pravdepodobnost);
                    }
                    else
                    {
                        casPrichodu = casObjednania;
                    }

                    _haldaPrichodov.Insert(casPrichodu, casPrichodu);

                    if (casObjednania > sim.CasPrevadzkyVSekundach)
                    {
                        return;
                    }
                }
            }
            else
            {
                for (int i = 0; i < MyAgent.PocetObjednanychPacientov; ++i)
                {
                    multiplier = 1;
                    while (_generatorPravdepodobnosti.Sample() < MyAgent.PocetNepridenychPacientov / (double)MyAgent.PocetObjednanychPacientov)
                    {
                        ++multiplier;
                    }
                    casovyRozostup = multiplier * MyAgent.CasMedziPrichodmi;
                    if (casovyRozostup + casObjednania > sim.CasPrevadzkyVSekundach)
                    {
                        return;
                    }
                    casObjednania += casovyRozostup;
                    _haldaPrichodov.Insert(casObjednania, casObjednania);
                    if (casObjednania > sim.CasPrevadzkyVSekundach)
                    {
                        return;
                    }
                }
            }
        }