private void StartButton_Click(object sender, EventArgs e) { int expCount = (int)ExperimentCountNumeric.Value; if (expCount <= 0) { MessageBox.Show("Количество повторов экспериментов должно быть больше 0.", "Улучшение графика", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } ImprovementData = new GraphImprovementParamsData(Graphs_comboBox.SelectedIndex, expCount); DialogResult = DialogResult.OK; Close(); }
bool CheckParametersValid(GraphImprovementParamsData paramsData, int metricsCount) { if (paramsData == null) { return(false); } if (paramsData.MetricIndex < 0 || paramsData.MetricIndex > metricsCount - 1) { CallbackUi.ShowError("Улучшение графика", "Такого графика не существует."); return(false); } if (paramsData.ExperimentCount <= 0) { CallbackUi.ShowError("Улучшение графика", "Количество повторов экспериментов должно быть больше 0."); return(false); } return(true); }
public void MakeGraphImprovement() { ParametersContainer parameters; QueuePlaceGradientData gradient; if (!CheckParametersValid(parameters = CallbackUi.GetDiagramParameters()) || !CheckParametersValid(gradient = CallbackUi.GetQueuePlaceGradientData())) { return; } var metrics = GetMetrics(parameters.ChannelCount, gradient.MaxQueueCapacity).ToArray(); GraphImprovementParamsData improvementData = CallbackUi.GetGraphImprovementParams(metrics.Select(metric => metric.Name).ToArray()); if (!CheckParametersValid(improvementData, metrics.Length)) { return; } Metric usedMetric = metrics[improvementData.MetricIndex]; InteractiveDiagram intDiag = GraphicsFactory.CreateInteractiveGraph(usedMetric.Name); double[] heightsSum = null; CallbackUi.LockInterface(); for (int i = 0; i < improvementData.ExperimentCount; i++) { List <TimeDiagram> diagrams = new List <TimeDiagram>(gradient.MaxQueueCapacity - gradient.MinQueueCapacity + 1); for (parameters.QueueCapacity = gradient.MinQueueCapacity; parameters.QueueCapacity <= gradient.MaxQueueCapacity; parameters.QueueCapacity++) { CallbackUi.ShowText($"Эксперимент { i + 1} из {improvementData.ExperimentCount}.\nМоделирование процесса: {parameters.QueueCapacity - gradient.MinQueueCapacity + 1} из {gradient.MaxQueueCapacity - gradient.MinQueueCapacity + 1}..."); ProcessModeller modeller = new ProcessModeller(parameters); try { diagrams.Add(modeller.CreateDiagram()); } catch { CallbackUi.HideText(); CallbackUi.UnlockInterface(); CallbackUi.ShowError("Улучшение графика", "При моделировании процесса возникло исключение." /* + ex.Message*/); } } var heights = ReportTool.GetHeights(diagrams, usedMetric); if (heightsSum == null) { heightsSum = heights.ToArray(); } else { heightsSum = heightsSum.Zip(heights, (a, b) => a + b).ToArray(); } intDiag.BeginInteractiveLine(i); intDiag.AddPoints(heights, gradient.MinQueueCapacity); intDiag.AddLineMetadata($"Эксперимент { i + 1 }"); intDiag.CompleteLine(); } CallbackUi.HideText(); CallbackUi.UnlockInterface(); intDiag.BeginLine(1); intDiag.AddPoints(heightsSum.Select(height => height / improvementData.ExperimentCount), gradient.MinQueueCapacity); intDiag.AddLineMetadata($"Сумма { improvementData.ExperimentCount } графиков"); intDiag.CompleteLine(); intDiag.SetLayer(0); CallbackUi.InteractiveDiagram = intDiag; intDiag.ViewUpdated += CallbackUi.InvalidateDiagramView; intDiag.GoToEnd(); }