示例#1
0
        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();
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }