Exemple #1
0
        private double CalculateNextX(Random rnd, DoubleSeries s, PFSeriesConfig c, Function f, string fHead, long i)
        {
            double t            = i / c.TimeQuotient;
            var    arg          = ConfigurationParser.ParseArgument("t", t);
            var    periodicPart = ConfigurationParser.ComputeFunction(fHead, f, arg);

            var ar_part_drivers = 0.0;
            var ma_part_drivers = 0.0;

            lock (seriesDict)
                CalculateDriverParts(c.Drivers, out ar_part_drivers, out ma_part_drivers);

            var et = rnd.NextGaussian_BoxMuller(c.Mean, c.StdDev); // next noise
            var xt = c.C + periodicPart + ar_part_drivers + ma_part_drivers + et;

            lock (seriesDict) {
                if (s.X.Count > MAX_BUFFER_SIZE)
                {
                    s.X.RemoveAt(0);
                }
                s.X.Add(xt);
            }

            return(xt);
        }
Exemple #2
0
        private double CalculateNextXSimple(Random rnd, DoubleSeries s, PFSeriesConfig c, Function f, string fHead, long i)
        {
            double t   = i / c.TimeQuotient;
            var    arg = ConfigurationParser.ParseArgument("t", t);
            var    xt  = ConfigurationParser.ComputeFunction(fHead, f, arg);

            s.X.Add(xt);
            return(xt);
        }
Exemple #3
0
        private void StreamSeries(StreamingJob job, PFSeriesConfig c)
        {
            DateTime dtts  = new DateTime(1000, 1, 1, 0, 0, 0, 0);
            string   fHead = $"PF({string.Join(",", c.Arguments)})";
            Function f     = ConfigurationParser.ParseFunction(fHead, c.Expression);

            for (long i = 0; true; i++)
            {
                job.Token.ThrowIfCancellationRequested();

                double xt = 0.0;
                lock (seriesDict)
                    xt = CalculateNextX(rnd, series, c, f, fHead, i);

                if (c.Export && i > c.Delay)
                {
                    double outlierCandidate = rnd.NextDouble();
                    if (outlierCandidate < c.OutlierRatio3s)
                    {
                        xt = GenerateOutlier(rnd, xt, series.X, 3, 4);
                    }
                    else if (outlierCandidate < c.OutlierRatio2s)
                    {
                        xt = GenerateOutlier(rnd, xt, series.X, 2, 3);
                    }

                    // string timestamp = DateTime.Now.ToString(DATETIME_FORMAT); // v1
                    string timestamp = dtts.ToString(generatorConfig.DateTimeFormat); // v2
                    var    msg       = JsonConvert.SerializeObject(GenerateMessage(c, group, timestamp, xt));
                    job.Client.Publish(config.Topic, Encoding.UTF8.GetBytes(msg));
                    Thread.Sleep(c.Interval);
                    dtts = dtts.AddMilliseconds(c.Interval); // v2
                }
                else if (i > c.Delay)
                {
                    Thread.Sleep(c.Interval);
                }
            }
        }