/// <summary> /// Выполнение. /// </summary> private void Implementation() { //Прямой ход метода Гаусса для приведения к треугольному виду. MatrixTransformation.Gauss(elements, CornerDot, variable_visualization); //Выражение базисных переменных. MatrixTransformation.HoistingMatrix(elements, number_of_basix); //создаём сиплекс-таблицу simplextable = new SimplexTable(number_of_basix, number_of_free_variables, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable); int responce; int step = 1; while (true) { if ((responce = simplextable.ResponseCheck()) == 0) { //выбор любого опорного simplextable.SelectionRandomSupportElement(); //смена визуализации переменных в симплек-таблице simplextable.ChangeOfVisualWithoutBuffer(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); //номер угловой точки simplextable.CornerPoint(step); step++; } else if (responce == 1) { if (MinMax == 0) { labelanswer.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelanswer.Content = "Ответ :" + simplextable.Response(); } //добавляем точку corner_dot = simplextable.ResponseCornerDot(step - 1); MainGrid.Children.Add(corner_dot); buttonToMainWindow.Visibility = Visibility.Visible; break; } else if (responce == -1) { labelanswer.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } } }
/// <summary> /// Кнопка "вперёд". /// </summary> private void buttonNext_Click(object sender, RoutedEventArgs e) { switch (step) { case 0: //буферизация данных BufferingTableValues(); try { buffer_variable_visualization = new int[variable_visualization.Length]; for (int i = 0; i < variable_visualization.Length; i++) { buffer_variable_visualization[i] = variable_visualization[i]; } //прямой ход Гаусса MatrixTransformation.Gauss(elements, CornerDot, variable_visualization); } catch (Exception d) { MessageBox.Show(d.Message); buttonToMainWindow.Visibility = Visibility.Visible; } //Обновление визуализации переменных. UpdateVisualVariables(); //обновление таблицы UpdateTableValues(); step++; labelsteps.Content = "Шаг 1: Прямой ход метода Гаусса."; break; case 1: //буферизация данных BufferingTableValues(); //Выражение базисных переменных. MatrixTransformation.HoistingMatrix(elements, number_of_permutations); //обновление таблицы UpdateTableValues(); step++; labelsteps.Content = "Шаг 2: Выражение базисных переменных."; break; case 2: //скрываем матрицу scrollgaussgrid.Visibility = Visibility.Hidden; if (simplex_table_was_draw == false) { simplextable = new SimplexTable(number_of_permutations, number_of_free_variables, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable); //Симплекс-таблица была создана simplex_table_was_draw = true; } //показываем симплекс-таблицу simplextable.Visibility = Visibility.Visible; switch (simplextable.ResponseCheck()) { case 0: step++; labelsteps.Content = "Шаг 3: Симплекс-таблица."; break; case 1: step++; if (MinMax == 0) { labelsteps.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelsteps.Content = "Ответ :" + simplextable.Response(); } if (corner_dot_was_added == false) { //добавляем точку corner_dot = simplextable.ResponseCornerDot(step); MainGrid.Children.Add(corner_dot); corner_dot_was_added = true; } //показываем угловую точку решения corner_dot.Visibility = Visibility.Hidden; buttonToMainWindow.Visibility = Visibility.Visible; break; case -1: step++; labelsteps.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } break; case 3: //выбор опорного simplextable.SelectionOfTheSupportElement(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); step++; labelsteps.Content = "Шаг " + step + ": Симплекс-таблица. Выбор опорного элемента."; break; default: try { //выбран ли опорный элемент simplextable.ButtonPressedOrNot(); //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable.ChangeOfVisualizationVariables(); //буферизация данных simplextable.BufferingSimplexTableValues(step); //удаляем кнопки simplextable.DeleteButtons(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); switch (simplextable.ResponseCheck()) { case 0: step++; labelsteps.Content = "Шаг " + step + ": Симплекс-таблица. Выбор опорного элемента."; //выбор опорного simplextable.SelectionOfTheSupportElement(); break; case 1: step++; if (MinMax == 0) { labelsteps.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelsteps.Content = "Ответ :" + simplextable.Response(); } //если не была добавлена, то добавляем if (corner_dot_was_added == false) { //добавляем точку corner_dot = simplextable.ResponseCornerDot(step - 4); MainGrid.Children.Add(corner_dot); corner_dot_was_added = true; } //показываем угловую точку решения corner_dot.Visibility = Visibility.Visible; buttonToMainWindow.Visibility = Visibility.Visible; break; case -1: step++; labelsteps.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } simplextable.CornerPoint(step - 4); } catch (Exception d) { MessageBox.Show(d.Message); } break; } }
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); } }