private void btStartExperiment_Click(object sender, EventArgs e) { if (lbSequencesFolderPath.Text != "" && lbModelsFolderPath.Text != "" && tbExperimentSegmentsLength.Text != "" && tbExperimentSequencesLength.Text != "") { int segmentSize = Int32.Parse(tbExperimentSegmentsLength.Text); //добавить проверку int sequenceLength = Int32.Parse(tbExperimentSequencesLength.Text); //добавить проверку if (segmentSize <= sequenceLength) { CrossModelComputationPreparator preparator = new CrossModelComputationPreparator(lbModelsFolderPath.Text, lbSequencesFolderPath.Text); List <ModelObject> modelsList = preparator.getModelsList(); List <SequenceObject> sequencesList = preparator.getSequencesList(sequenceLength); CrossModelComputation computor = new CrossModelComputation(modelsList, sequencesList, segmentSize); List <CrossModelComputationResultItem> probabilities = computor.compute(); string[,] matr = CrossModelComputation.computationResultsAsMatrix(probabilities); string s = ""; for (int i = 0; i < matr.GetLength(0); i++) { for (int j = 0; j < matr.GetLength(1); j++) { s += matr[i, j] + ","; } s += "\r\n"; } List <CrossModelComputationResultItem> mmis = computor.computeMaximumMutialInformationDistances(probabilities); string[,] matr2 = CrossModelComputation.computationResultsAsMatrix(mmis); string s2 = "\r\n"; for (int i = 0; i < matr2.GetLength(0); i++) { for (int j = 0; j < matr2.GetLength(1); j++) { s2 += matr2[i, j] + ","; } s2 += "\r\n"; } OutStreamer os = new OutStreamer("sas.txt", FileOpenMode.RewriteMode); os.StringToFile(s + s2); if (saveFileDialogExperiment.ShowDialog() == DialogResult.OK) { StreamReader f = File.OpenText("sas.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("Не все параметры заданы"); } }
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("Не все параметры заданы"); } }
public void PQN_Method(int state_nubmer, int period_length, int stop, Mode mode, PRNGMode rndMode) { int L = Ro[state_nubmer].Length; double[] p = new double[period_length];//вероятность ошибки в момент j double[] Fi; if (IfExistsVarPhi(state_nubmer, period_length)) { Fi = VarPhi[state_nubmer][period_length - 1]; } else { Fi = integral(Ro[state_nubmer], L, period_length); VarPhi[state_nubmer][period_length - 1] = Fi; } for (int j = 0; j < period_length; j++) { p[j] = Fi[j] * Per[state_nubmer] * period_length; //Console.WriteLine(p[j].ToString()); } int k = 0; double[] PSmb = MatrToArr(B, state_nubmer);//должен вернуть массив из элементов строки с номером state_nubmer матрицы B while (k < stop) { int OP = BinaryProbabilityMethod(p[k], rndMode); int Prob; if (OP == 1) { Prob = ProbabilityMethod(PSmb, rndMode) + 1; } else { Prob = 0; } OutStreamer OutStream = new OutStreamer("res.txt"); OutStream.SymbolToFile(Prob); if (mode == HSMPQApplication.Mode.Test) { OutStreamer SostStream = new OutStreamer("sost.txt"); SostStream.SymbolToFile(state_nubmer); } k++; } }
public void StartGenerator(int count, Mode mode, PRNGMode rngMode) //будет вызываться от созданного экземпляра и запускать процесс генерации последовательности наблюдений { int n = A.GetLength(0); int state_number = ProbabilityMethod(Pi, rngMode); double[] Farr = ProbabilityFromDistribution(F[state_number]); int period_length = F[state_number][ProbabilityMethod(Farr, rngMode)].value; int stop = (count - period_length >= 0) ? period_length : count; if (File.Exists("res.txt")) { File.Delete("res.txt"); } if (mode == HSMPQApplication.Mode.Test) { if (File.Exists("sost.txt")) { File.Delete("sost.txt"); } if (File.Exists("sostdur.txt")) { File.Delete("sostdur.txt"); //тут будут пары (состояние длительность) } } PQN_Method(state_number, period_length, stop, mode, rngMode); OutStreamer OutStream = new OutStreamer("sostdur.txt"); OutStream.StringToFile(state_number + ";" + period_length); for (int counter = period_length; counter < count; counter++)// counter = period_length { double[] StolbecP = new double[n]; StolbecP = MatrToArr(A, state_number); state_number = ProbabilityMethod(StolbecP, rngMode); Farr = ProbabilityFromDistribution(F[state_number]); period_length = F[state_number][ProbabilityMethod(Farr, rngMode)].value; stop = (count - period_length - counter >= 0) ? period_length : count - counter; OutStream = new OutStreamer("sostdur.txt"); OutStream.StringToFile(state_number + ";" + period_length); PQN_Method(state_number, period_length, stop, mode, rngMode); counter += period_length - 1; } }
public void PQN_Method(int state_nubmer, int period_length, int stop, Mode mode, PRNGMode rndMode) { double[] p = new double[period_length];//вероятность ошибки в момент j int k = 0; double[] PSmb = MatrToArr(B, state_nubmer);//должен вернуть массив из элементов строки с номером state_nubmer матрицы B while (k < stop) { int Prob; Prob = ProbabilityMethod(PSmb, rndMode); OutStreamer OutStream = new OutStreamer("res.txt"); OutStream.SymbolToFile(Prob); if (mode == HSMPQApplication.Mode.Test) { OutStreamer SostStream = new OutStreamer("sost.txt"); SostStream.SymbolToFile(state_nubmer); } k++; } }