private void Implementation() { //создаём сиплекс-таблицу simplextable = new SimplexTable(number_of_basix, number_of_free_variables, variable_visualization, elements, target_function_elements, false); MainGrid.Children.Add(simplextable); //добавляем тильду simplextable.AddTilde(); while (simplextable.ArtificialResponseCheck() != true) { if (simplextable.ResponseCheck() == 1) { //холостой шаг simplextable.RandomIdleStep(); this.Width = 720; //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable.ChangeOfVisualizationVariables(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); simplextable.CornerPoint(step); } else { //выбор опорного simplextable.SelectionRandomSupportElement(); this.Width = 651; //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable.ChangeOfVisualizationVariables(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); simplextable.CornerPoint(step); } } variable_visualization = simplextable.ReturnVariableVisualization(); elements = simplextable.ReturnElements(); elements.RemoveAt(elements.Count - 1); //организация массива для симплекс-метода List <List <double> > temp_elements = new List <List <double> >(); for (int i = 0; i < number_of_basix; i++) { temp_elements.Add(new List <double>()); for (int j = 0; j < number_of_basix; j++) { if (temp_elements[i].Count == i) { temp_elements[i].Add(1); } else { temp_elements[i].Add(0); } } } for (int i = 0; i < number_of_basix; i++) { temp_elements[i].AddRange(elements[i]); } elements = temp_elements; simplextable.HideSimplexTable(); simplextable1 = new SimplexTable(number_of_basix, variable_visualization.Length - number_of_basix, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable1); step = 0; while (simplextable1.ResponseCheck() != 1 && simplextable1.ResponseCheck() != -1) { //выбор опорного simplextable1.SelectionRandomSupportElement(); //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable1.ChangeOfVisualizationVariables(); //вычисление согласно выбранному опорному элементу simplextable1.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable1.UpdateSimplexTableValues(); } if (simplextable1.ResponseCheck() == 1) { if (MinMax == 0) { labelanswer.Content = "Ответ :" + simplextable1.Response() * (-1); } else { labelanswer.Content = "Ответ :" + simplextable1.Response(); } //добавляем точку corner_dot = simplextable1.ResponseCornerDot(step); MainGrid.Children.Add(corner_dot); buttonToMainWindow.Visibility = Visibility.Visible; } else { labelanswer.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; } step++; }
/// <summary> /// Кнопка "Вперёд". /// </summary> private void buttonNext_Click(object sender, RoutedEventArgs e) { try { //для запоминания типа шага if (simplextable.ResponseCheck() == 1) { type_of_step.Add(false); } else { type_of_step.Add(true); } //выбран ли опорный элемент simplextable.ButtonPressedOrNot(); //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable.ChangeOfVisualizationVariables(); //буферизация данных simplextable.BufferingSimplexTableValuesTest(); //удаляем кнопки simplextable.DeleteButtons(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); simplextable.CornerPoint(step); //проверка решения switch (simplextable.ArtificialResponseCheck()) { case true: variable_visualization = simplextable.ReturnVariableVisualization(); elements = simplextable.ReturnElements(); elements.RemoveAt(elements.Count - 1); //организация массива для симплекс-метода List <List <double> > temp_elements = new List <List <double> >(); for (int i = 0; i < number_of_basix; i++) { temp_elements.Add(new List <double>()); for (int j = 0; j < number_of_basix; j++) { if (temp_elements[i].Count == i) { temp_elements[i].Add(1); } else { temp_elements[i].Add(0); } } } for (int i = 0; i < number_of_basix; i++) { temp_elements[i].AddRange(elements[i]); } elements = temp_elements; buttonBack.Visibility = Visibility.Hidden; buttonNext.Visibility = Visibility.Hidden; buttonBack1.Visibility = Visibility.Visible; buttonNext1.Visibility = Visibility.Visible; simplextable.HideSimplexTable(); step++; if (simplex_table_was_draw == false) { simplextable1 = new SimplexTable(number_of_basix, variable_visualization.Length - number_of_basix, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable1); //Симплекс-таблица была создана simplex_table_was_draw = true; } else { simplextable1.DeleteButtons(); MainGrid.Children.Add(simplextable1); simplextable1.SetVariableVisualization(simplextable.ReturnVariableVisualization()); simplextable1.SetElements(elements); simplextable1.UpdateValuesNewStage(); } //проверка решения switch (simplextable1.ResponseCheck()) { case 0: //выбор опорного simplextable1.SelectionOfTheSupportElement(); labelsteps.Content = "Шаг " + step + ": Симплекс-таблица."; break; case 1: if (MinMax == 0) { labelsteps.Content = "Ответ :" + simplextable1.Response() * (-1); } else { labelsteps.Content = "Ответ :" + simplextable1.Response(); } if (corner_dot_was_added == false) { //добавляем точку corner_dot = simplextable1.ResponseCornerDot(0); MainGrid.Children.Add(corner_dot); corner_dot_was_added = true; } corner_dot.Visibility = Visibility.Visible; buttonToMainWindow.Visibility = Visibility.Visible; buttonNext1.Visibility = Visibility.Hidden; break; case -1: labelsteps.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; buttonNext1.Visibility = Visibility.Hidden; break; } break; case false: if (simplextable.ResponseCheck() == 1) { step++; labelsteps.Content = "Холостой шаг: Метод искусственного базиса. Выбор опорного элемента."; //холостой шаг simplextable.IdleStep(); this.Width = 720; } else { step++; labelsteps.Content = "Шаг " + step + ": Метод искусственного базиса. Выбор опорного элемента."; //выбор опорного simplextable.SelectionOfTheSupportElement(); this.Width = 651; } break; } } catch (Exception d) { MessageBox.Show(d.Message); } }