Пример #1
0
        public MaximumChangeRatios GetMaximumChangeRatios(double[][] array)
        {
            var result = new MaximumChangeRatios {
                Down = double.MinValue, Up = double.MinValue
            };

            for (var i = 0; i < array.Length - 1; i++)
            {
                var diff     = CalculatePercentChange(array[i][3], array[i + 1][3]);
                var checksum = array[i + 1][3] - array[i][3];
                //  down
                if (checksum < 0)
                {
                    if (result.Down < Math.Abs(diff))
                    {
                        result.Down = Math.Abs(diff);
                    }
                }
                //  up
                else
                {
                    if (result.Up < diff)
                    {
                        result.Up = diff;
                    }
                }
            }
            return(result);
        }
Пример #2
0
        public double[][] GenerateNextStagePopulation <TDistribution>(double[][] current, int k, int n, MaximumChangeRatios ratios, IHiddenMarkovModel <TDistribution> model)
            where TDistribution : IDistribution
        {
            var dic = new SortedList <double, double[]>();

            for (var j = 0; j < current.Length; j++)
            {
                var h = HeuristicFunction(current[j], model);
                if (dic.Count < k)
                {
                    dic.Add(h, current[j]);
                }
                else
                {
                    if (dic.Keys[dic.Count] < h)
                    {
                        dic.Remove(dic.Keys[dic.Count]);
                        dic.Add(h, current[j]);
                    }
                }
            }

            current = (from e in dic select e.Value).ToArray();
            current = ExpandCurrentPopulation(current, n, ratios.Down, ratios.Up);
            return(current);
        }
Пример #3
0
        public double[][] Search <TDistribution>(double[][] population, int k, int n, int numberOfIterations, MaximumChangeRatios ratios, IHiddenMarkovModel <TDistribution> model)
            where TDistribution : IDistribution
        {
            var current = ExpandCurrentPopulation(population, n, ratios.Down, ratios.Up);;

            for (var i = 0; i < numberOfIterations; i++)
            {
                var next = GenerateNextStagePopulation(current, k, n, ratios, model);
                current = next;
            }

            return(current);
        }