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); }
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(); }
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]); }
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]); }
/// <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]); }
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]); }