Exemple #1
0
        // Идеальное количество людей для остановки без округления
        public static double GetAvg(int PassengerCount, double PeakTime, double PeakWidth, int Minute, int StationCount)
        {
            LogisticDistribution logis = new LogisticDistribution(PeakTime, PeakWidth);

            double res = PassengerCount * logis.ProbabilityDensity(Minute) / StationCount;

            logis = null;
            return(res);
        }
Exemple #2
0
        // Округленное количество людей для одной остановки с рандомом
        public static int Get(int PassengerCount, double PeakTime, double PeakWidth, int Minute, int StationCount)
        {
            LogisticDistribution logis = new LogisticDistribution(PeakTime, PeakWidth);

            double value = PassengerCount * logis.ProbabilityDensity(Minute) * 2.02 * RNG.NextDouble() / StationCount;

            int res = (int)Math.Round(value);

            IdealSum += value;
            RealSum  += res;

            if (Math.Abs(RealSum - IdealSum) >= 1)
            {
                int corr = (int)(Math.Floor(Math.Abs(RealSum - IdealSum)) * Math.Sign(RealSum - IdealSum));
                IdealSum -= RealSum - corr;
                RealSum   = 0;
                res      -= corr;
            }

            logis = null;
            return(res);
        }