Пример #1
0
        public int ComputeProbabilisticDestinationFloor(int currentFloor, int floorBound)
        {
            double[] distrib = new double[floorBound + 1];
            ProbabilityHelper.SetUniformDistribution(distrib);
            int expected = currentFloor + RelativeFloor;

            if (expected <= floorBound && expected >= 0)
            {
                distrib[expected] = SuccessProb;
                ProbabilityHelper.NormalizePdf(distrib, 0);
            }
            ProbabilityHelper.PdfToCdf(distrib);
            return(ProbabilityHelper.Sample(distrib));
        }
Пример #2
0
        /// <summary>
        /// Получить вероятностный индекс класса по распределению из матрицы ошибок
        /// </summary>
        /// <param name="trueClassName">Истинное название класса</param>
        /// <returns></returns>
        public int GetProbabalisticClassIndex(string trueClassName)
        {
            int trueClassIndex = Array.IndexOf(KnownClasses, trueClassName);

            if (trueClassIndex == -1)
            {
                trueClassIndex = Array.IndexOf(KnownClasses, ModelBase.UnknownClassName);
            }

            double[] distrib = new double[KnownClasses.Length];
            for (int i = 0; i < KnownClasses.Length; i++)
            {
                distrib[i] = ConfusionMatrix[trueClassIndex, i];
            }
            ProbabilityHelper.NormalizePdf(distrib, 0);
            ProbabilityHelper.PdfToCdf(distrib);
            return(ProbabilityHelper.Sample(distrib));
        }
Пример #3
0
        public Dictionary <string, double> Measure(ModelBase model, int orientation)
        {
            double[] distrib = new double[KnownClasses.Length];

            if (new Random().NextDouble() < SuccessProb)
            {
                //Нормальная работа камеры
                var   obj            = _world.Find(model);
                int   absOrientation = MathHelper.GetOneTurn(obj.Orientation + orientation);
                Point point          = obj.Point + new Point(absOrientation);

                string seenClass = _world.FindOrDefault(point)?.Model.Class;
                if (seenClass == null)
                {
                    seenClass = ModelBase.EmptyClassName;
                }

                //Превращение точного прогноза в вероятностное
                int probClassIndex = GetProbabalisticClassIndex(seenClass);

                //Составление распределения вероятности по предполагаемому классу
                for (int i = 0; i < KnownClasses.Length; i++)
                {
                    distrib[i] = ConfusionMatrix[i, probClassIndex];
                }
                ProbabilityHelper.NormalizePdf(distrib, 0);
            }
            else
            {
                //Сбой камеры - вероятность распределяется случайно
                ProbabilityHelper.SetRandomDistribution(distrib);
            }

            //Запись предсказания в словарь
            var prediction = new Dictionary <string, double>();

            for (int i = 0; i < KnownClasses.Length; i++)
            {
                prediction.Add(KnownClasses[i], distrib[i]);
            }
            return(prediction);
        }