public void ActivationTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);
            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                true, false));
            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                true, false));
            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i*3);
                tp[1] = 2.0 + (i*3);
                tp[2] = 3.0 + (i*3);
            }

            temporal.Generate();

            IEnumerator<IMLDataPair> itr = temporal.GetEnumerator();

            // set 0
            itr.MoveNext();
            IMLDataPair pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(0.75, Math.Round(pair.Input[0]*4.0)/4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[1]*4.0)/4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[2]*4.0)/4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[3]*4.0)/4.0);
        }
Example #2
0
        public void ActivationTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);

            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                true, false));
            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                true, false));
            temporal.AddDescription(new TemporalDataDescription(new ActivationTANH(), TemporalDataDescription.Type.Raw,
                                                                false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i * 3);
                tp[1] = 2.0 + (i * 3);
                tp[2] = 3.0 + (i * 3);
            }

            temporal.Generate();

            IEnumerator <IMLDataPair> itr = temporal.GetEnumerator();

            // set 0
            itr.MoveNext();
            IMLDataPair pair = itr.Current;

            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(0.75, Math.Round(pair.Input[0] * 4.0) / 4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[1] * 4.0) / 4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[2] * 4.0) / 4.0);
            Assert.AreEqual(1.0, Math.Round(pair.Input[3] * 4.0) / 4.0);
        }
        private static void CreateEvaluationSet(string @fileName)
        {
            List<double> Opens = SuperUtils.QuickParseCSV(fileName, "Open", 1200, 1200);
            List<double> High = NetworkUtility.QuickParseCSV(fileName, "High", 1200, 1200);
            List<double> Low = NetworkUtility.QuickParseCSV(fileName, "Low", 1200, 1200);
            List<double> Close = NetworkUtility.QuickParseCSV(fileName, "Close", 1200, 1200);
            List<double> Volume = NetworkUtility.QuickParseCSV(fileName, 5, 1200, 1200);
            TemporalMLDataSet superTemportal = new TemporalMLDataSet(100, 1);

            double[] Ranges = NetworkUtility.CalculateRanges(Opens.ToArray(), Close.ToArray());

            superTemportal = NetworkUtility.GenerateTrainingWithPercentChangeOnSerie(100, 1, Opens.ToArray(),
                                                                                                  Close.ToArray(), High.ToArray(), Low.ToArray(), Volume.ToArray());

            IMLDataPair aPairInput = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Opens.ToArray()), NetworkUtility.CalculatePercents(Opens.ToArray()), 100, 1);
            IMLDataPair aPairInput3 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Close.ToArray()), NetworkUtility.CalculatePercents(Close.ToArray()), 100, 1);
            IMLDataPair aPairInput2 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(High.ToArray()), NetworkUtility.CalculatePercents(High.ToArray()), 100, 1);
            IMLDataPair aPairInput4 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Volume.ToArray()), NetworkUtility.CalculatePercents(Volume.ToArray()), 100, 1);
            IMLDataPair aPairInput5 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Ranges.ToArray()), NetworkUtility.CalculatePercents(Ranges.ToArray()), 100, 1);
            List<IMLDataPair> listData = new List<IMLDataPair>();
            listData.Add(aPairInput);
            listData.Add(aPairInput2);
            listData.Add(aPairInput3);
            listData.Add(aPairInput4);
            listData.Add((aPairInput5));


            var minitrainning = new BasicMLDataSet(listData);

            var network = (BasicNetwork)CreateElmanNetwork(100, 1);
            double normalCorrectRate = EvaluateNetworks(network, minitrainning);

            double temporalErrorRate = EvaluateNetworks(network, superTemportal);

            Console.WriteLine("Percent Correct with normal Data Set:" + normalCorrectRate + " Percent Correct with temporal Dataset:" +
                      temporalErrorRate);





            Console.WriteLine("Paused , Press a key to continue to evaluation");
            Console.ReadKey();
        }
Example #4
0
        public void HiLowTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);

            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i * 3);
                tp[1] = 2.0 + (i * 3);
                tp[2] = 3.0 + (i * 3);
            }

            temporal.HighSequence = 8;
            temporal.LowSequence  = 2;
            temporal.Generate();

            Assert.AreEqual(10, temporal.InputNeuronCount);
            Assert.AreEqual(1, temporal.OutputNeuronCount);
            Assert.AreEqual(7, temporal.CalculateActualSetSize());

            IEnumerator <IMLDataPair> itr = temporal.GetEnumerator();

            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;

            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(7.0, pair.Input[0]);
            Assert.AreEqual(8.0, pair.Input[1]);
            Assert.AreEqual(10.0, pair.Input[2]);
            Assert.AreEqual(11.0, pair.Input[3]);
            Assert.AreEqual(13.0, pair.Input[4]);
            Assert.AreEqual(14.0, pair.Input[5]);
            Assert.AreEqual(16.0, pair.Input[6]);
            Assert.AreEqual(17.0, pair.Input[7]);
            Assert.AreEqual(19.0, pair.Input[8]);
            Assert.AreEqual(20.0, pair.Input[9]);
            Assert.AreEqual(24.0, pair.Ideal[0]);
        }
Example #5
0
        public void FormatTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);

            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.DeltaChange, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.PercentChange, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i * 3);
                tp[1] = 2.0 + (i * 3);
                tp[2] = 3.0 + (i * 3);
            }

            temporal.Generate();

            IEnumerator <IMLDataPair> itr = temporal.GetEnumerator();

            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;

            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(3.0, pair.Input[0]);
            Assert.AreEqual(1.5, pair.Input[1]);
            Assert.AreEqual(3.0, pair.Input[2]);
            Assert.AreEqual(0.6, pair.Input[3]);
            Assert.AreEqual(3.0, pair.Input[4]);
            Assert.AreEqual(0.375, pair.Input[5]);
            Assert.AreEqual(3.0, pair.Input[6]);
            Assert.AreEqual(0.25, Math.Round(pair.Input[7] * 4.0) / 4.0);
            Assert.AreEqual(3.0, pair.Input[8]);
            Assert.AreEqual(0.25, Math.Round(pair.Input[9] * 4.0) / 4.0);
            Assert.AreEqual(18.0, pair.Ideal[0]);
        }
Example #6
0
 /// <summary>
 ///     Generates a temporal data set with a given double serie.
 ///     uses Type percent change.
 /// </summary>
 /// <param name="inputserie">The inputserie.</param>
 /// <param name="windowsize">The windowsize.</param>
 /// <param name="predictsize">The predictsize.</param>
 /// <returns></returns>
 public static TemporalMLDataSet GenerateTrainingWithPercentChangeOnSerie(double[] inputserie, int windowsize,
                                                                          int predictsize)
 {
     var result = new TemporalMLDataSet(windowsize, predictsize);
     var desc = new TemporalDataDescription(TemporalDataDescription.Type.PercentChange, true, true);
     result.AddDescription(desc);
     for (int index = 0; index < inputserie.Length - 1; index++)
     {
         var point = new TemporalPoint(1) {Sequence = index};
         point.Data[0] = inputserie[index];
         result.Points.Add(point);
     }
     result.Generate();
     return result;
 }
        public IMLDataSet GenerateTraining()
        {
            var result = new TemporalMLDataSet(WindowSize, 1);

            var desc = new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, true);
            result.AddDescription(desc);

            for (int year = TrainStart; year < TrainEnd; year++)
            {
                var point = new TemporalPoint(1) { Sequence = year };
                point.Data[0] = _normalizedSunspots[year];
                result.Points.Add(point);
            }

            result.Generate();

            return result;
        }
 /// <summary>
 /// Generates a temporal data set with a given double serie or a any number of double series , making your inputs.
 /// uses Type percent change.
 /// </summary>
 /// <param name="windowsize">The windowsize.</param>
 /// <param name="predictsize">The predictsize.</param>
 /// <param name="inputserie">The inputserie.</param>
 /// <returns></returns>
 public static TemporalMLDataSet GenerateTrainingWithPercentChangeOnSerie(int windowsize, int predictsize, params double[][] inputserie)
 {
     TemporalMLDataSet result = new TemporalMLDataSet(windowsize, predictsize);
     TemporalDataDescription desc = new TemporalDataDescription(TemporalDataDescription.Type.PercentChange, true,
                                                                true);
     result.AddDescription(desc);
     foreach (double[] t in inputserie)
     {
         for (int j = 0; j < t.Length; j++)
         {
             TemporalPoint point = new TemporalPoint(1);
             point.Sequence = j;
             point.Data[0] = t[j];
             result.Points.Add(point);
         }
         result.Generate();
         return result;
     }
     return null;
 }
        public void BasicTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i*3);
                tp[1] = 2.0 + (i*3);
                tp[2] = 3.0 + (i*3);
            }

            temporal.Generate();

            Assert.AreEqual(10, temporal.InputNeuronCount);
            Assert.AreEqual(1, temporal.OutputNeuronCount);
            Assert.AreEqual(10, temporal.CalculateActualSetSize());

            IEnumerator<IMLDataPair> itr = temporal.GetEnumerator();
            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(1.0, pair.Input[0]);
            Assert.AreEqual(2.0, pair.Input[1]);
            Assert.AreEqual(4.0, pair.Input[2]);
            Assert.AreEqual(5.0, pair.Input[3]);
            Assert.AreEqual(7.0, pair.Input[4]);
            Assert.AreEqual(8.0, pair.Input[5]);
            Assert.AreEqual(10.0, pair.Input[6]);
            Assert.AreEqual(11.0, pair.Input[7]);
            Assert.AreEqual(13.0, pair.Input[8]);
            Assert.AreEqual(14.0, pair.Input[9]);
            Assert.AreEqual(18.0, pair.Ideal[0]);

            // set 1
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(4.0, pair.Input[0]);
            Assert.AreEqual(5.0, pair.Input[1]);
            Assert.AreEqual(7.0, pair.Input[2]);
            Assert.AreEqual(8.0, pair.Input[3]);
            Assert.AreEqual(10.0, pair.Input[4]);
            Assert.AreEqual(11.0, pair.Input[5]);
            Assert.AreEqual(13.0, pair.Input[6]);
            Assert.AreEqual(14.0, pair.Input[7]);
            Assert.AreEqual(16.0, pair.Input[8]);
            Assert.AreEqual(17.0, pair.Input[9]);
            Assert.AreEqual(21.0, pair.Ideal[0]);

            // set 2
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(7.0, pair.Input[0]);
            Assert.AreEqual(8.0, pair.Input[1]);
            Assert.AreEqual(10.0, pair.Input[2]);
            Assert.AreEqual(11.0, pair.Input[3]);
            Assert.AreEqual(13.0, pair.Input[4]);
            Assert.AreEqual(14.0, pair.Input[5]);
            Assert.AreEqual(16.0, pair.Input[6]);
            Assert.AreEqual(17.0, pair.Input[7]);
            Assert.AreEqual(19.0, pair.Input[8]);
            Assert.AreEqual(20.0, pair.Input[9]);
            Assert.AreEqual(24.0, pair.Ideal[0]);

            // set 3
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(10.0, pair.Input[0]);
            Assert.AreEqual(11.0, pair.Input[1]);
            Assert.AreEqual(13.0, pair.Input[2]);
            Assert.AreEqual(14.0, pair.Input[3]);
            Assert.AreEqual(16.0, pair.Input[4]);
            Assert.AreEqual(17.0, pair.Input[5]);
            Assert.AreEqual(19.0, pair.Input[6]);
            Assert.AreEqual(20.0, pair.Input[7]);
            Assert.AreEqual(22.0, pair.Input[8]);
            Assert.AreEqual(23.0, pair.Input[9]);
            Assert.AreEqual(27.0, pair.Ideal[0]);
        }
        public void FormatTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.DeltaChange, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.PercentChange, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp[0] = 1.0 + (i*3);
                tp[1] = 2.0 + (i*3);
                tp[2] = 3.0 + (i*3);
            }

            temporal.Generate();

            IEnumerator<IMLDataPair> itr = temporal.GetEnumerator();
            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(3.0, pair.Input[0]);
            Assert.AreEqual(1.5, pair.Input[1]);
            Assert.AreEqual(3.0, pair.Input[2]);
            Assert.AreEqual(0.6, pair.Input[3]);
            Assert.AreEqual(3.0, pair.Input[4]);
            Assert.AreEqual(0.375, pair.Input[5]);
            Assert.AreEqual(3.0, pair.Input[6]);
            Assert.AreEqual(0.25, Math.Round(pair.Input[7]*4.0)/4.0);
            Assert.AreEqual(3.0, pair.Input[8]);
            Assert.AreEqual(0.25, Math.Round(pair.Input[9]*4.0)/4.0);
            Assert.AreEqual(18.0, pair.Ideal[0]);
        }
        public static BasicMLDataSet CreateEvaluationSetAndLoad(string @fileName, int startLine, int HowMany, int WindowSize, int outputsize)
        {
            List<double> Opens = NetworkUtility.QuickParseCSV(fileName, "Open", startLine, HowMany);
            List<double> High = NetworkUtility.QuickParseCSV(fileName, "High", startLine, HowMany);
            List<double> Low = NetworkUtility.QuickParseCSV(fileName, "Low", startLine, HowMany);
            List<double> Close = NetworkUtility.QuickParseCSV(fileName, "Close", startLine, HowMany);
            List<double> Volume = NetworkUtility.QuickParseCSV(fileName, 5, startLine, HowMany);


            TemporalMLDataSet superTemportal = new TemporalMLDataSet(WindowSize, outputsize);

            double[] Ranges = NetworkUtility.CalculateRanges(Opens.ToArray(), Close.ToArray());




            superTemportal = NetworkUtility.GenerateTrainingWithPercentChangeOnSerie(100, 1, Opens.ToArray(),
                                                                                                  Close.ToArray(), High.ToArray(), Low.ToArray(), Volume.ToArray());

            IMLDataPair aPairInput = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Opens.ToArray()), NetworkUtility.CalculatePercents(Opens.ToArray()), WindowSize, outputsize);
            IMLDataPair aPairInput3 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Close.ToArray()), NetworkUtility.CalculatePercents(Close.ToArray()), WindowSize, outputsize);
            IMLDataPair aPairInput2 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(High.ToArray()), NetworkUtility.CalculatePercents(High.ToArray()), WindowSize, outputsize);
            IMLDataPair aPairInput4 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Volume.ToArray()), NetworkUtility.CalculatePercents(Volume.ToArray()), WindowSize, outputsize);
            IMLDataPair aPairInput5 = SuperUtils.ProcessPair(NetworkUtility.CalculatePercents(Ranges.ToArray()), NetworkUtility.CalculatePercents(Ranges.ToArray()), WindowSize, outputsize);
            List<IMLDataPair> listData = new List<IMLDataPair>();
            listData.Add(aPairInput);
            listData.Add(aPairInput2);
            listData.Add(aPairInput3);
            listData.Add(aPairInput4);
            listData.Add((aPairInput5));


            var minitrainning = new BasicMLDataSet(listData);
            return minitrainning;
        }
        public void HiLowTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp.Data[0] = 1.0 + (i*3);
                tp.Data[1] = 2.0 + (i*3);
                tp.Data[2] = 3.0 + (i*3);
            }

            temporal.HighSequence = 8;
            temporal.LowSequence = 2;
            temporal.Generate();

            Assert.AreEqual(10, temporal.InputNeuronCount);
            Assert.AreEqual(1, temporal.OutputNeuronCount);
            Assert.AreEqual(7, temporal.CalculateActualSetSize());

            IEnumerator<IMLDataPair> itr = temporal.GetEnumerator();
            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(7.0, pair.Input.Data[0]);
            Assert.AreEqual(8.0, pair.Input.Data[1]);
            Assert.AreEqual(10.0, pair.Input.Data[2]);
            Assert.AreEqual(11.0, pair.Input.Data[3]);
            Assert.AreEqual(13.0, pair.Input.Data[4]);
            Assert.AreEqual(14.0, pair.Input.Data[5]);
            Assert.AreEqual(16.0, pair.Input.Data[6]);
            Assert.AreEqual(17.0, pair.Input.Data[7]);
            Assert.AreEqual(19.0, pair.Input.Data[8]);
            Assert.AreEqual(20.0, pair.Input.Data[9]);
            Assert.AreEqual(24.0, pair.Ideal.Data[0]);
        }
Example #13
0
        public IMLDataSet GenerateTraining()
        {
            var result = new TemporalMLDataSet(WindowSize, 1);
            var desc = new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, true);
            result.AddDescription(desc);

            for (int i = WindowSize; i < _normalizedTrainingData.Length; i++)
            {
                var point = new TemporalPoint(1) {Sequence = i};
                point.Data[0] = _normalizedTrainingData[i];
                result.Points.Add(point);
            }
            result.Generate();
            return result;
        }
        public void BasicTemporal()
        {
            var temporal = new TemporalMLDataSet(5, 1);

            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, true, false));
            temporal.AddDescription(new TemporalDataDescription(TemporalDataDescription.Type.Raw, false, true));
            for (int i = 0; i < 10; i++)
            {
                TemporalPoint tp = temporal.CreatePoint(i);
                tp.Data[0] = 1.0 + (i * 3);
                tp.Data[1] = 2.0 + (i * 3);
                tp.Data[2] = 3.0 + (i * 3);
            }

            temporal.Generate();

            Assert.AreEqual(10, temporal.InputNeuronCount);
            Assert.AreEqual(1, temporal.OutputNeuronCount);
            Assert.AreEqual(10, temporal.CalculateActualSetSize());

            IEnumerator <IMLDataPair> itr = temporal.GetEnumerator();

            itr.MoveNext();
            // set 0
            IMLDataPair pair = itr.Current;

            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(1.0, pair.Input.Data[0]);
            Assert.AreEqual(2.0, pair.Input.Data[1]);
            Assert.AreEqual(4.0, pair.Input.Data[2]);
            Assert.AreEqual(5.0, pair.Input.Data[3]);
            Assert.AreEqual(7.0, pair.Input.Data[4]);
            Assert.AreEqual(8.0, pair.Input.Data[5]);
            Assert.AreEqual(10.0, pair.Input.Data[6]);
            Assert.AreEqual(11.0, pair.Input.Data[7]);
            Assert.AreEqual(13.0, pair.Input.Data[8]);
            Assert.AreEqual(14.0, pair.Input.Data[9]);
            Assert.AreEqual(18.0, pair.Ideal[0]);

            // set 1
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(4.0, pair.Input.Data[0]);
            Assert.AreEqual(5.0, pair.Input.Data[1]);
            Assert.AreEqual(7.0, pair.Input.Data[2]);
            Assert.AreEqual(8.0, pair.Input.Data[3]);
            Assert.AreEqual(10.0, pair.Input.Data[4]);
            Assert.AreEqual(11.0, pair.Input.Data[5]);
            Assert.AreEqual(13.0, pair.Input.Data[6]);
            Assert.AreEqual(14.0, pair.Input.Data[7]);
            Assert.AreEqual(16.0, pair.Input.Data[8]);
            Assert.AreEqual(17.0, pair.Input.Data[9]);
            Assert.AreEqual(21.0, pair.Ideal.Data[0]);

            // set 2
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(7.0, pair.Input.Data[0]);
            Assert.AreEqual(8.0, pair.Input.Data[1]);
            Assert.AreEqual(10.0, pair.Input.Data[2]);
            Assert.AreEqual(11.0, pair.Input.Data[3]);
            Assert.AreEqual(13.0, pair.Input.Data[4]);
            Assert.AreEqual(14.0, pair.Input.Data[5]);
            Assert.AreEqual(16.0, pair.Input.Data[6]);
            Assert.AreEqual(17.0, pair.Input.Data[7]);
            Assert.AreEqual(19.0, pair.Input.Data[8]);
            Assert.AreEqual(20.0, pair.Input.Data[9]);
            Assert.AreEqual(24.0, pair.Ideal.Data[0]);

            // set 3
            itr.MoveNext();
            pair = itr.Current;
            Assert.AreEqual(10, pair.Input.Count);
            Assert.AreEqual(1, pair.Ideal.Count);
            Assert.AreEqual(10.0, pair.Input.Data[0]);
            Assert.AreEqual(11.0, pair.Input.Data[1]);
            Assert.AreEqual(13.0, pair.Input.Data[2]);
            Assert.AreEqual(14.0, pair.Input.Data[3]);
            Assert.AreEqual(16.0, pair.Input.Data[4]);
            Assert.AreEqual(17.0, pair.Input.Data[5]);
            Assert.AreEqual(19.0, pair.Input.Data[6]);
            Assert.AreEqual(20.0, pair.Input.Data[7]);
            Assert.AreEqual(22.0, pair.Input.Data[8]);
            Assert.AreEqual(23.0, pair.Input.Data[9]);
            Assert.AreEqual(27.0, pair.Ideal.Data[0]);
        }