private void optimizeBtn_Click(object sender, RoutedEventArgs e) { if (modelRegress == null) { Log.Text = "Регрессионная модель не загружена"; return; } if (modelDescret == null) { Log.Text = "Дискретная модель не загружена"; return; } for (int i = 0; i < modelRegress.x.Count; i++) { if (modelRegress.x[i] != modelDescret.x[i]) { Log.Text = "Дискретная и регрессионная модель используют разные факторы!"; return; } } for (int i = 0; i < modelRegress.y.Count; i++) { if (modelRegress.y[i] != modelDescret.y[i]) { Log.Text = "Дискретная и регрессионная модель используют разные выходные свойства!"; return; } } for (int i = 0; i < modelRegress.y.Count; i++) { if (yOptData[i].val1 == -1) { Log.Text = "Не выбраны оптимальные значения свойств"; return; } } double[] yOpt = new double[modelRegress.y.Count]; for (int i = 0; i < modelRegress.y.Count; i++) { yOpt[i] = yOptData[i].val1; } modelOpt = new CondOptModel(modelRegress, modelDescret, yOpt, Convert.ToDouble(epsgTextBox.Text), Convert.ToDouble(epsxTextBox.Text), Convert.ToInt32(iterTextBox.Text)); technology = modelOpt.StartOptimize(); //численный градиент SetTechnology(); }
private void optimizeBtn_Click(object sender, RoutedEventArgs e) { if (modelRegress == null) { Log.Text = "Регрессионная модель не загружена"; return; } if (modelDescret == null) { Log.Text = "Дискретная модель не загружена"; return; } for (int i=0; i<modelRegress.x.Count; i++) if (modelRegress.x[i] != modelDescret.x[i]) { Log.Text = "Дискретная и регрессионная модель используют разные факторы!"; return; } for (int i = 0; i < modelRegress.y.Count; i++) if (modelRegress.y[i] != modelDescret.y[i]) { Log.Text = "Дискретная и регрессионная модель используют разные выходные свойства!"; return; } for(int i=0; i<modelRegress.y.Count; i++) if ( yOptData[i].val1 == -1 ) { Log.Text = "Не выбраны оптимальные значения свойств"; return; } double[] yOpt = new double[modelRegress.y.Count]; for (int i = 0; i < modelRegress.y.Count; i++) yOpt[i] = yOptData[i].val1; modelOpt = new CondOptModel(modelRegress, modelDescret, yOpt, Convert.ToDouble(epsgTextBox.Text), Convert.ToDouble(epsxTextBox.Text), Convert.ToInt32(iterTextBox.Text)); technology = modelOpt.StartOptimize(); //численный градиент SetTechnology(); }
private void correctBtn_Click(object sender, RoutedEventArgs e) { if (technology == null) { Log.Text = "Технология не загружена"; return; } if (modelDescret == null) { Log.Text = "Дискретная модель не загружена"; return; } if (modelRegress == null) { Log.Text = "Регрессионная модель не загружена"; return; } for (int i = 0; i < modelRegress.x.Count; i++) if (modelRegress.x[i] != modelDescret.x[i]) { Log.Text = "Модели используют разные факторы!"; return; } double[] xDone = new double[xOptData.Count]; for (int i = 0; i < xOptData.Count; i++) xDone[i] = xOptData[i].val2; CondOptModel modelCor = new CondOptModel(modelRegress, modelDescret, technology,Convert.ToDouble(epsgTextBox2.Text), Convert.ToDouble(epsxTextBox2.Text), Convert.ToInt32(iterTextBox2.Text),xDone); technologyCorrected = modelCor.StartCorrect(); //заполняем результаты for (int i = 0; i < modelRegress.x.Count; i++) xOptData[i].val2 = technologyCorrected.xOpt[i]; XcurrentGrid.ItemsSource = null; XcurrentGrid.ItemsSource = xOptData; for (int i = 0; i < modelRegress.y.Count; i++) { yOptData[i].val2 = modelCor.yModel[i]; yOptData[i].val3 = technologyCorrected.error[i]; } YcurrentGrid.Columns[2].Visibility = System.Windows.Visibility.Visible; YcurrentGrid.Columns[3].Visibility = System.Windows.Visibility.Visible; YcurrentGrid.ItemsSource = null; YcurrentGrid.ItemsSource = yOptData; Log.Text = "Технология скорректирована!"; List<itemGrid> YnotCorrectedData = new List<itemGrid>(); for (int i = 0; i < yOptData.Count; i++) YnotCorrectedData.Add(new itemGrid(yOptData[i].header, yOptData[i].val1)); double[] oldOpt = new double[technology.xOpt.Count]; for (int i = 0; i < oldOpt.Length; i++) oldOpt[i] = technology.xOpt[i]; for (int i = 0; i < yOptData.Count; i++) { if (modelRegress.isUpgraded) YnotCorrectedData[i].val2 = modelRegress.equation[i].Calculate(oldOpt, modelRegress.typesF); else YnotCorrectedData[i].val2 = modelRegress.equation[i].Calculate(xDone); YnotCorrectedData[i].val3 = Math.Abs(YnotCorrectedData[i].val2 - YnotCorrectedData[i].val1); } YolDcurrentGrid.ItemsSource = null; YolDcurrentGrid.ItemsSource = YnotCorrectedData; labelCorID.Text = "ID: local"; labelCorDate.Text = "Дата: " + DateTime.Now.Date.ToShortDateString(); labelCorGOST.Text = labelDesGOST.Text; labelCorMark.Text = labelDesMark.Text; labelCorOptID.Text = "ID исходной техн-ии: " + technologyCorrected.baseTechnologyID; labelCorDesID.Text = "ID дескр. модели: " + modelDescret.id.ToString(); technologyCorrected.mark = modelDescret.mark; technologyCorrected.GOST = modelDescret.GOST; technologyCorrected.date = DateTime.Now.Date; expanderCor.IsExpanded = true; }
private void correctBtn_Click(object sender, RoutedEventArgs e) { if (technology == null) { Log.Text = "Технология не загружена"; return; } if (modelDescret == null) { Log.Text = "Дискретная модель не загружена"; return; } if (modelRegress == null) { Log.Text = "Регрессионная модель не загружена"; return; } for (int i = 0; i < modelRegress.x.Count; i++) { if (modelRegress.x[i] != modelDescret.x[i]) { Log.Text = "Модели используют разные факторы!"; return; } } double[] xDone = new double[xOptData.Count]; for (int i = 0; i < xOptData.Count; i++) { xDone[i] = xOptData[i].val2; } CondOptModel modelCor = new CondOptModel(modelRegress, modelDescret, technology, Convert.ToDouble(epsgTextBox2.Text), Convert.ToDouble(epsxTextBox2.Text), Convert.ToInt32(iterTextBox2.Text), xDone); technologyCorrected = modelCor.StartCorrect(); //заполняем результаты for (int i = 0; i < modelRegress.x.Count; i++) { xOptData[i].val2 = technologyCorrected.xOpt[i]; } XcurrentGrid.ItemsSource = null; XcurrentGrid.ItemsSource = xOptData; for (int i = 0; i < modelRegress.y.Count; i++) { yOptData[i].val2 = modelCor.yModel[i]; yOptData[i].val3 = technologyCorrected.error[i]; } YcurrentGrid.Columns[2].Visibility = System.Windows.Visibility.Visible; YcurrentGrid.Columns[3].Visibility = System.Windows.Visibility.Visible; YcurrentGrid.ItemsSource = null; YcurrentGrid.ItemsSource = yOptData; Log.Text = "Технология скорректирована!"; List <itemGrid> YnotCorrectedData = new List <itemGrid>(); for (int i = 0; i < yOptData.Count; i++) { YnotCorrectedData.Add(new itemGrid(yOptData[i].header, yOptData[i].val1)); } double[] oldOpt = new double[technology.xOpt.Count]; for (int i = 0; i < oldOpt.Length; i++) { oldOpt[i] = technology.xOpt[i]; } for (int i = 0; i < yOptData.Count; i++) { if (modelRegress.isUpgraded) { YnotCorrectedData[i].val2 = modelRegress.equation[i].Calculate(oldOpt, modelRegress.typesF); } else { YnotCorrectedData[i].val2 = modelRegress.equation[i].Calculate(xDone); } YnotCorrectedData[i].val3 = Math.Abs(YnotCorrectedData[i].val2 - YnotCorrectedData[i].val1); } YolDcurrentGrid.ItemsSource = null; YolDcurrentGrid.ItemsSource = YnotCorrectedData; labelCorID.Text = "ID: local"; labelCorDate.Text = "Дата: " + DateTime.Now.Date.ToShortDateString(); labelCorGOST.Text = labelDesGOST.Text; labelCorMark.Text = labelDesMark.Text; labelCorOptID.Text = "ID исходной техн-ии: " + technologyCorrected.baseTechnologyID; labelCorDesID.Text = "ID дескр. модели: " + modelDescret.id.ToString(); technologyCorrected.mark = modelDescret.mark; technologyCorrected.GOST = modelDescret.GOST; technologyCorrected.date = DateTime.Now.Date; expanderCor.IsExpanded = true; }