예제 #1
0
        private void GenerateBtn_Click(object sender, EventArgs e)
        {
            HMM_QPN Model = new HMM_QPN(filestr);
            int     seq_length;

            if (int.TryParse(textBox3.Text, out seq_length))
            {
                if (Model.IsCorrect() == 1)
                {
                    panel1.Enabled   = false;
                    textBox1.Enabled = false;
                    DateTime startTime = DateTime.Now;
                    DateTime endTime;
                    Model.StartGenerator(seq_length, HSMPQApplication.Mode.Release, HSMPQApplication.PRNGMode.Random);
                    endTime = DateTime.Now;
                    TimeSpan employedTime = endTime - startTime;
                    lbEmployedTime.Text = "Время, затраченное на генерацию " + employedTime.ToString();
                    panel1.Enabled      = true;
                    textBox1.Enabled    = true;
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        StreamReader f   = File.OpenText("res.txt");
                        string       Buf = f.ReadToEnd();
                        StreamWriter sw  = new StreamWriter(File.Create(saveFileDialog1.FileName));
                        sw.Write(Buf);
                        sw.Close();
                        f.Close();
                    }
                }
                else if (Model.IsCorrect() == 3)
                {
                    MessageBox.Show("Для параметров не выполняются необходимые условия стохастичности");
                }
                else if (Model.IsCorrect() == 4)
                {
                    MessageBox.Show("Для параметров не выполняются необходимые условия адаптированности");
                }
                else if (Model.IsCorrect() == 0)
                {
                    MessageBox.Show("Размерности вводимых параметров не соответствуют");
                }
                else if (Model.IsCorrect() == 2)
                {
                    MessageBox.Show("Не все параметры заданы");
                }
            }
            else
            {
                MessageBox.Show("Введите длину последовательости ошибок");
            }
        }
예제 #2
0
        public void IsCorrectTest()
        {
            string  filename = string.Empty;          // TODO: инициализация подходящего значения
            HMM_QPN target   = new HMM_QPN(filename); // TODO: инициализация подходящего значения
            int     expected = 0;                     // TODO: инициализация подходящего значения
            int     actual;

            actual = target.IsCorrect();
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Проверьте правильность этого метода теста.");
        }
예제 #3
0
        private void btOMCCalculateProbability_Click(object sender, EventArgs e)
        {
            if (lbOMCModelPath.Text != "" && lbOMCSequencePath.Text != "" && tbOMCSegmentLength.Text != "" && tbOMCSequenceLength.Text != "")
            {
                int     segmentSize    = Int32.Parse(tbOMCSegmentLength.Text);  //добавить проверку
                int     sequenceLength = Int32.Parse(tbOMCSequenceLength.Text); //добавить проверку
                HMM_QPN Model          = new HMM_QPN(lbOMCModelPath.Text);
                if (Model.IsCorrect() == 1)
                {
                    int[] res = new int[sequenceLength + 1];
                    try
                    {
                        res = HMM_PSM.GetOutputSequence(lbOMCSequencePath.Text, sequenceLength);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Желаемая длина последовательности превышает размер файла");
                        return;
                    }
                    ModelObject         model         = new ModelObject(lbOMCModelPath.Text, Model);
                    SequenceObject      sequence      = new SequenceObject(lbOMCSequencePath.Text, res);
                    OneModelComputation computor      = new OneModelComputation(model, sequence, segmentSize, sequenceLength);
                    List <double>       probabilities = computor.compute();

                    string s = "Model: " + model.ModelName + "\r\n Sequence: " + sequence.SequenceName + "\r\n Sequence length: " + sequenceLength + "\r\n Segment size: " + segmentSize + "\r\n";
                    for (int i = 0; i < probabilities.Count(); i++)
                    {
                        s += probabilities.ElementAt(i) + ",";
                    }
                    OutStreamer os = new OutStreamer("omc.txt", FileOpenMode.RewriteMode);

                    os.StringToFile(s);
                    if (saveFileDialogExperiment.ShowDialog() == DialogResult.OK)
                    {
                        StreamReader f   = File.OpenText("omc.txt");
                        string       Buf = f.ReadToEnd();
                        StreamWriter sw  = new StreamWriter(File.Create(saveFileDialogExperiment.FileName));
                        sw.Write(Buf);
                        sw.Close();
                        f.Close();
                    }
                }
                else
                {
                    MessageBox.Show("Модель некорректна");
                }
            }
            else
            {
                MessageBox.Show("Не все параметры заданы");
            }
        }
예제 #4
0
 public List <ModelObject> getModelsList()
 {
     if (this.modelsFolderPath == null)
     {
         return(null);
     }
     try
     {
         string[] files = Directory.GetFiles(this.modelsFolderPath);
         if (files == null && files.Length == 0)
         {
             return(null);
         }
         List <ModelObject> result = new List <ModelObject>();
         for (int i = 0; i <= files.Length; i++)
         {
             try
             {
                 HMM_QPN Model = new HMM_QPN(files[i]);
                 if (Model.IsCorrect() == 1)
                 {
                     result.Add(new ModelObject(files[i], Model));
                 }
             }
             catch
             {
                 //TODO do smth or change try to if
             }
         }
         return(result);
     }
     catch
     {
         return(null);
     }
 }
예제 #5
0
        private void CountProbBtn_Click(object sender, EventArgs e)
        {
            HMM_QPN Model = new HMM_QPN(label1.Text);

            if (Model.IsCorrect() == 1)
            {
                int smbnubmer = 10;
                if (textBox2.Text != "")
                {
                    try
                    {
                        smbnubmer = int.Parse(textBox2.Text);
                    }
                    catch (Exception)
                    {
                    }
                }
                ;
                int[] res = new int[smbnubmer + 1];
                try
                {
                    res = HMM_PSM.GetOutputSequence(label2.Text, smbnubmer);
                }
                catch (Exception)
                {
                    MessageBox.Show("Желаемая длина последовательности превышает размер файла");
                    return;
                }
                panel3.Enabled = false;

                if (radioButton1.Checked)
                {
                    //try
                    //{
                    Likelihood lk = new Likelihood(res, Model);
                    //label3.Text = lk.Probability(res.Length - 1).ToString();
                    label3.Text = lk.FullProbability(res.Length - 1).ToString();

                    //}
                    //catch (Exception)
                    //    { MessageBox.Show("В процессе расчета возникла ошибка!"); };
                    panel3.Enabled = true;
                }
                else
                {
                    if (radioButton2.Checked)
                    {
                        LikelihoodSimple lk = new LikelihoodSimple(res, Model);
                        //label3.Text = lk.Probability(res.Length - 1).ToString();
                        label3.Text    = lk.Probability(res.Length - 1).ToString();
                        panel3.Enabled = true;
                    }
                    else
                    {
                        if (tbSegmentNumber.Text != "")
                        {
                            int segment_size = 0;
                            if (Int32.TryParse(tbSegmentNumber.Text, out segment_size))
                            {
                                LikelihoodSplit ls     = new LikelihoodSplit(segment_size);
                                double []       result = ls.calculateSplitedLikelihood(Model, res);
                                double          total  = 0;
                                tbSplitResultDetails.Text = "";
                                for (int i = 0; i < result.Length; i++)
                                {
                                    tbSplitResultDetails.Text += "P[O(" + i * segment_size + "," + ((i + 1) * segment_size) + ")] = " + result[i] + "\r\n";
                                    total += result[i];
                                }
                                label3.Text    = (total / result.Length).ToString();
                                panel3.Enabled = true;
                            }
                            else
                            {
                                MessageBox.Show("Размер сегмента разбиения должен быть целым");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Задайте размер сегмента разбиения");
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Модель задана некорректно");
            }
        }