public void SimpleSlidingParameters()
        {
            var list = new List <double>(20);

            for (int i = 0; i < 20; i++)
            {
                list.Add(i);
            }

            var input = new SlidingWindowMLDataProvider(list, 10, -5, 3);

            Assert.AreEqual(6, input.Count);
            Assert.AreEqual(0.0, input[0, 0]);
            Assert.AreEqual(0.0, input[0, 5]);
            Assert.AreEqual(4.0, input[0, 9]);
            Assert.AreEqual(17.0, input[6, 4]);
            Assert.AreEqual(0.0, input[6, 9]);

            input.PadWithNearest = true;
            Assert.AreEqual(19.0, input[6, 9]);
            Assert.AreEqual(19.0, input[6, 90]);             // no range error presently

            input.DefaultPadValue = -1.0;
            input.PadWithNearest  = false;
            Assert.AreEqual(-1.0, input[0, 0]);
            Assert.AreEqual(-1.0, input[6, 9]);
        }
        public void BasicSlidingSineSignal()
        {
            var listSize  = 30 * 200;
            var inputList = new List <double>(listSize);
            var idealList = new List <double>(listSize);
            var rand      = new Random(23);

            for (int i = 0; i < listSize; i++)
            {
                idealList.Add(Math.Sin(Math.PI * 2.0 * i / 30));
                inputList.Add(idealList[idealList.Count - 1] + (rand.NextDouble() - 0.5) * 0.1);
            }

            var input = new SlidingWindowMLDataProvider(inputList, 10, 0, 1);
            var ideal = new SlidingWindowMLDataProvider(idealList, 2, 11, 1);             // predecit the eleventh, twelth item from the ten previous to it
            var ds    = new DynamicMLDataSet(input, ideal);

            Assert.AreEqual(10, input.WindowSize);
            Assert.AreEqual(10, ds.InputSize);
            Assert.AreEqual(2, ds.IdealSize);
            Assert.AreEqual(listSize, ds.Count);

            var network = new BasicNetwork();

            network.AddLayer(new BasicLayer(ds.InputSize));
            network.AddLayer(new BasicLayer(ds.InputSize + 3));
            network.AddLayer(new BasicLayer(ds.IdealSize));
            network.Structure.FinalizeStructure();
            network.Reset(42);

            var trainer = new Encog.Neural.Networks.Training.Propagation.Resilient.ResilientPropagation(network, ds);

            int maxIteration = 300;
            int iteration    = 0;

            do
            {
                trainer.Iteration();
                Debug.WriteLine(++iteration + ": Error = " + trainer.Error);
            } while(trainer.Error > 0.001 && maxIteration > iteration);

            Assert.IsTrue(iteration < maxIteration);
        }
        public void SimpleSlidingGap()
        {
            var list = new List <double>(20);

            for (int i = 0; i < 20; i++)
            {
                list.Add(i);
            }

            var input = new SlidingWindowMLDataProvider(list, 12, 0, 1, 4);

            Assert.AreEqual(20, input.Count);
            Assert.AreEqual(3, input.Size);
            Assert.AreEqual(0.0, input[0, 0]);
            Assert.AreEqual(4.0, input[0, 1]);
            Assert.AreEqual(8.0, input[0, 2]);
            Assert.AreEqual(1.0, input[1, 0]);

            Assert.AreEqual(19.0, input[19, 0]);
            Assert.AreEqual(0.0, input[19, 1]);
        }
        public void BasicSlidingSineSignal()
        {
            var listSize = 30 * 200;
            var inputList = new List<double>(listSize);
            var idealList = new List<double>(listSize);
            var rand = new Random(23);
            for(int i = 0; i < listSize; i++)
            {
                idealList.Add(Math.Sin(Math.PI * 2.0 * i / 30));
                inputList.Add(idealList[idealList.Count - 1] + (rand.NextDouble() - 0.5) * 0.1);
            }

            var input = new SlidingWindowMLDataProvider(inputList, 10, 0, 1);
            var ideal = new SlidingWindowMLDataProvider(idealList, 2, 11, 1); // predecit the eleventh, twelth item from the ten previous to it
            var ds = new DynamicMLDataSet(input, ideal);

            Assert.AreEqual(10, input.WindowSize);
            Assert.AreEqual(10, ds.InputSize);
            Assert.AreEqual(2, ds.IdealSize);
            Assert.AreEqual(listSize, ds.Count);

            var network = new BasicNetwork();
            network.AddLayer(new BasicLayer(ds.InputSize));
            network.AddLayer(new BasicLayer(ds.InputSize + 3));
            network.AddLayer(new BasicLayer(ds.IdealSize));
            network.Structure.FinalizeStructure();
            network.Reset(42);

            var trainer = new Encog.Neural.Networks.Training.Propagation.Resilient.ResilientPropagation(network, ds);

            int maxIteration = 300;
            int iteration = 0;
            do
            {
                trainer.Iteration();
                Debug.WriteLine(++iteration + ": Error = " + trainer.Error);
            } while(trainer.Error > 0.001 && maxIteration > iteration);

            Assert.IsTrue(iteration < maxIteration);
        }
        public void SimpleSlidingGap()
        {
            var list = new List<double>(20);
            for(int i = 0; i < 20; i++) list.Add(i);

            var input = new SlidingWindowMLDataProvider(list, 12, 0, 1, 4);

            Assert.AreEqual(20, input.Count);
            Assert.AreEqual(3, input.Size);
            Assert.AreEqual(0.0, input[0, 0]);
            Assert.AreEqual(4.0, input[0, 1]);
            Assert.AreEqual(8.0, input[0, 2]);
            Assert.AreEqual(1.0, input[1, 0]);

            Assert.AreEqual(19.0, input[19, 0]);
            Assert.AreEqual(0.0, input[19, 1]);
        }
        public void SimpleSlidingParameters()
        {
            var list = new List<double>(20);
            for(int i = 0; i < 20; i++) list.Add(i);

            var input = new SlidingWindowMLDataProvider(list, 10, -5, 3);

            Assert.AreEqual(6, input.Count);
            Assert.AreEqual(0.0, input[0, 0]);
            Assert.AreEqual(0.0, input[0, 5]);
            Assert.AreEqual(4.0, input[0, 9]);
            Assert.AreEqual(17.0, input[6, 4]);
            Assert.AreEqual(0.0, input[6, 9]);

            input.PadWithNearest = true;
            Assert.AreEqual(19.0, input[6, 9]);
            Assert.AreEqual(19.0, input[6, 90]); // no range error presently

            input.DefaultPadValue = -1.0;
            input.PadWithNearest = false;
            Assert.AreEqual(-1.0, input[0, 0]);
            Assert.AreEqual(-1.0, input[6, 9]);
        }