Ejemplo n.º 1
0
        private double GetPredictedVelocity(HistoryKind historyKind, NormalizedBurndownHistory normalizedHistory, bool ignoreNonWorkingdays)
        {
            int nDays = Project.GetProject(MainProjectID).AverageVelocitySpan;

            if (cache.predictedVelocityCache != null && cache.predictedVelocityCache[(int)historyKind].ContainsKey(nDays))
            {
                return(cache.predictedVelocityCache[(int)historyKind][nDays]);
            }
            double   weightedValueSum = 0;
            double   weightedDaysSum  = 0;
            int      iDay             = nDays;
            DateTime day = DateTime.Now.Date;

            if (ignoreNonWorkingdays && !Project.IsWorkingDay(day))
            {
                day = Project.GetPreviousWorkingDay(day);
            }
            DateTime previousDay = day.AddDays(-1);

            if (ignoreNonWorkingdays && !Project.IsWorkingDay(previousDay))
            {
                previousDay = Project.GetPreviousWorkingDay(previousDay);
            }
            for (int i = 0; i < nDays; i += 1)
            {
                if (previousDay < normalizedHistory.Start)
                {
                    break;
                }
                double velocityOneDay = normalizedHistory.ValueAt(previousDay.Date) - normalizedHistory.ValueAt(day.Date);
                weightedValueSum += velocityOneDay * iDay;
                weightedDaysSum  += iDay;
                iDay             -= 1;
                day         = previousDay;
                previousDay = previousDay.AddDays(-1);
                if (ignoreNonWorkingdays && !Project.IsWorkingDay(previousDay))
                {
                    previousDay = Project.GetPreviousWorkingDay(day);
                }
            }
            double prediction = 0;

            if (weightedDaysSum > 0)
            {
                prediction = weightedValueSum / weightedDaysSum;
            }

            if (cache.predictedVelocityCache == null)
            {
                cache.predictedVelocityCache = new Dictionary <int, double> [3];
                for (int i = 0; i < cache.predictedVelocityCache.Length - 1; i += 1)
                {
                    cache.predictedVelocityCache[i] = new Dictionary <int, double>();
                }
            }
            cache.predictedVelocityCache[(int)historyKind].Add(nDays, prediction);
            return(prediction);
        }
Ejemplo n.º 2
0
        private double GetPredictedVelocity(HistoryKind historyKind, NormalizedBurndownHistory normalizedHistory, bool ignoreNonWorkingdays)
        {
            int nDays = Project.GetProject(MainProjectID).AverageVelocitySpan;
            if (cache.predictedVelocityCache != null && cache.predictedVelocityCache[(int)historyKind].ContainsKey(nDays))
                return cache.predictedVelocityCache[(int)historyKind][nDays];
            double weightedValueSum = 0;
            double weightedDaysSum = 0;
            int iDay = nDays;
            DateTime day = DateTime.Now.Date;
            if (ignoreNonWorkingdays && !Project.IsWorkingDay(day))
                day = Project.GetPreviousWorkingDay(day);
            DateTime previousDay = day.AddDays(-1);
            if (ignoreNonWorkingdays && !Project.IsWorkingDay(previousDay))
                previousDay = Project.GetPreviousWorkingDay(previousDay);
            for (int i = 0; i < nDays; i += 1)
            {
                if (previousDay < normalizedHistory.Start)
                    break;
                double velocityOneDay = normalizedHistory.ValueAt(previousDay.Date) - normalizedHistory.ValueAt(day.Date);
                weightedValueSum += velocityOneDay * iDay;
                weightedDaysSum += iDay;
                iDay -= 1;
                day = previousDay;
                previousDay = previousDay.AddDays(-1);
                if (ignoreNonWorkingdays && !Project.IsWorkingDay(previousDay))
                    previousDay = Project.GetPreviousWorkingDay(day);
            }
            double prediction = 0;
            if (weightedDaysSum > 0)
                prediction =  weightedValueSum / weightedDaysSum;

            if (cache.predictedVelocityCache == null)
            {
                cache.predictedVelocityCache = new Dictionary<int, double>[3];
                for (int i = 0; i < cache.predictedVelocityCache.Length - 1; i += 1)
                    cache.predictedVelocityCache[i] = new Dictionary<int, double>();
            }
            cache.predictedVelocityCache[(int)historyKind].Add(nDays, prediction);
            return prediction;
        }