private void buttonApply_Click(object sender, EventArgs e) { if (MessageBox.Show("Сохранить кластеры?", "Анализ временных рядов", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { var logic = new FuzzyLabelService(); for (int i = 0; i < dataGridView.Rows.Count; ++i) { try { logic.InsertElement(new FuzzyLabelBindingModel { SeriesId = _seriesId, FuzzyLabelType = FuzzyLabelType.ClustFCM, FuzzyLabelName = dataGridView.Rows[i].Cells[0].Value.ToString(), Weigth = Convert.ToInt32( dataGridView.Rows[i].Cells[1].Value), MinVal = Convert.ToDouble(dataGridView.Rows[i].Cells[2].Value), Center = Convert.ToDouble(dataGridView.Rows[i].Cells[3].Value), MaxVal = Convert.ToDouble(dataGridView.Rows[i].Cells[4].Value) }); } catch (Exception ex) { MessageBox.Show("Ошибка при добавлении: " + ex.Message, "Анализ временных рядов", MessageBoxButtons.OK, MessageBoxIcon.Error); } } DialogResult = DialogResult.OK; Close(); } }
private bool CreateFuzzyLabel(string fileName, int seriesId) { lock (createFuzzyLabels) { try { int _countClasters = countCenters; while (true) { var clust = new ModelClustering(fileName, 1, _countClasters); if (clust.Calc()) { var points = clust.Points; var logic = new FuzzyLabelService(); List <FuzzyLabelBindingModel> fuzzyPoints = new List <FuzzyLabelBindingModel>(); for (int i = 0; i < countCenters; ++i) { if (points.Count > 0) { var point = points.First(r => r.X == points.Min(rex => rex.X)); var clustPoints = points.Where(r => r.ClusterIndex == point.ClusterIndex); fuzzyPoints.Add(new FuzzyLabelBindingModel { SeriesId = seriesId, FuzzyLabelType = FuzzyLabelType.ClustFCM, FuzzyLabelName = "Кластер " + (i + 1), Weigth = i + 1, MinVal = clustPoints.Min(rex => rex.X), Center = clust.Centers[(int)point.ClusterIndex].X, MaxVal = clustPoints.Max(rex => rex.X) }); points.RemoveAll(r => r.ClusterIndex == point.ClusterIndex); } else { fuzzyPoints.Add(new FuzzyLabelBindingModel { SeriesId = seriesId, FuzzyLabelType = FuzzyLabelType.ClustFCM, FuzzyLabelName = "Кластер " + (i + 1), Weigth = i + 1, MinVal = 0, Center = 0, MaxVal = 0 }); } } double delta = 5; fuzzyPoints[fuzzyPoints.Count - 1].MaxVal += delta; for (int i = 0; i < fuzzyPoints.Count - 1; ++i) { fuzzyPoints[i].MinVal -= delta; delta = (fuzzyPoints[i + 1].MinVal - fuzzyPoints[i].MaxVal) / 2 + 5; fuzzyPoints[i].MaxVal += delta; logic.InsertElement(fuzzyPoints[i]); } fuzzyPoints[fuzzyPoints.Count - 1].MinVal -= delta; logic.InsertElement(fuzzyPoints[fuzzyPoints.Count - 1]); return(true); } _countClasters--; if (_countClasters < 0) { throw new Exception("Кластеризация не прошла"); } } } catch (Exception ex) { throw new Exception(string.Format("CreateFuzzyLabel {0}: {1}", fileName, ex.Message)); } } }