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); }
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); }
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); }