public void Learn_3statefullyconnectedgraph_aHMMfittedtothedata()
        {
            // Arrange
            int[] symbols = Enumerable.Range(0, 41).ToArray();
            List<int[]> obs = new List<int[]>();
            Random rnd = new Random();

            for (int i = 0; i < 10; i++)
            {
                obs.Add(symbols.OrderBy(x => rnd.Next()).ToArray());
            }

            SequenceData sd = new SequenceData(0);
            sd.AddSequences(obs);
            sd.SaveAddedSequences();
            PadawanLearner pwl = new PadawanLearner();
            pwl.Initialise(null, 0);
            // Act
            pwl.Learn(sd, null, null);
            //pwl.Learn(sd);
            double result = pwl.CalculateProbability(obs[2]);

            // Assert
            Assert.IsTrue(0.9 < result && result < 1.0);
        }
 public Tuple<SequenceData, SequenceData> RandomSplit(double ratio, int random_seed) {
     SequenceData part1 = new SequenceData(NumSymbols);
     SequenceData part2 = new SequenceData(NumSymbols);
     List<int[]> shuffled = sequence_list.Select(e => e).ToList();
     Utilities.Shuffle(shuffled, random_seed);
     int size_part1 = (int)(shuffled.Count * ratio);
     for (int i = 0; i < shuffled.Count; i++) {
         if (i < size_part1)
             part1.AddSequence(shuffled[i]);
         else
             part2.AddSequence(shuffled[i]);
     }
     part1.SaveAddedSequences();
     part2.SaveAddedSequences();
     return new Tuple<SequenceData, SequenceData>(part1, part2);
 }
        public static SequenceData LoadSequences(string file) {
            string[] lines = System.IO.File.ReadAllLines(file);
            //parse number of different symbols
            int num_symbols = Int32.Parse(lines[0].Split(' ')[1]);
            SequenceData seqData = new SequenceData(num_symbols);

            //parse sequences
            for (int i = 1; i < lines.Length; i++) {
                string[] currentSeqStr = lines[i].Split(' ');

                //skip first element on each line, which contains the length of the sequence
                int[] currentSeq = currentSeqStr.Skip(1).Select(p => Int32.Parse(p)).ToArray();
                seqData.AddSequence(currentSeq);
            }
            seqData.SaveAddedSequences();
            return seqData;
        }
        public Tuple<SequenceData, SequenceData> RandomSplit(int trainingDataSize, int validationDataSize, int randomSeed)
        {
            SequenceData trainingData = new SequenceData(NumSymbols);
            SequenceData validaitonData = new SequenceData(NumSymbols);

            List<int[]> shuffled = sequence_list.ToList();
            Utilities.Shuffle(shuffled, randomSeed);

            trainingData.AddSequences(sequence_list.Take(trainingDataSize));
			validaitonData.AddSequences(sequence_list.Skip(sequence_list.Count - validationDataSize).Take(validationDataSize));

            trainingData.SaveAddedSequences();
            validaitonData.SaveAddedSequences();

            return new Tuple<SequenceData, SequenceData>(trainingData, validaitonData);
        }