Exemplo n.º 1
0
        /// <summary>
        /// Выполнение.
        /// </summary>
        private void Implementation()
        {
            if (Radical_or_Decimal)
            {
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr, cel_function, false, Radical_or_Decimal);
                //отрисовываем симплекс таблицу
                simplextable.DrawSimplexTable(ogr, dataGridView3);
            }
            else
            {
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr_with_radicals, cel_function_with_radicals, false, Radical_or_Decimal);
                //отрисовываем симплекс таблицу
                simplextable.DrawSimplexTable(ogr_with_radicals, dataGridView3);
            }

            if (simplextable.ResponseCheck() == 1)
            {
                label1.Text = "Метод искусственного базиса. Выбор опорного элемента.";
            }
            else
            {
                label1.Text = "Метод искусственного базиса. Выбор опорного элемента.";
                //выбор опорного
                simplextable.SelectionOfTheSupportElement(dataGridView3);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Выполнение.
        /// </summary>
        private void Implementation()
        {
            if (Radical_or_Decimal)
            {
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr, cel_function, false, Radical_or_Decimal);
                //отрисовываем симплекс таблицу
                simplextable.DrawSimplexTable(ogr, dataGridView3);
            }
            else
            {
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr_with_radicals, cel_function_with_radicals, false, Radical_or_Decimal);
                //отрисовываем симплекс таблицу
                simplextable.DrawSimplexTable(ogr_with_radicals, dataGridView3);
            }

            if (simplextable.ResponseCheck() == 1)
            {
                //    tabControl1.TabPages[0].Text = "Холостой шаг: Метод искусственного базиса. Выбор опорного элемента.";
                //холостой шаг
                //simplextable.IdleStep();
            }
            else
            {
                //   tabControl1.TabPages[0].Text = "Шаг " + step + ": Метод искусственного базиса. Выбор опорного элемента.";
                //выбор опорного
                simplextable.SelectionRandomSupportElement();
            }

            // Делаем пока таблица искус базиса не вышла в ноль
            while (ArtificalBasixGoToNull == false)
            {
                //смена местами переменной + буферизация
                simplextable.ChangeOfVisualizationVariables(dataGridView3);
                //вычисление согласно выбранному опорному элементу
                simplextable.CalculateSimplexTable(simplextable.row_of_the_support_element, simplextable.column_of_the_support_element);

                // обновление данных ячеек таблицы
                if (Radical_or_Decimal)
                {
                    addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3);
                }
                else
                {
                    addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3);
                }

                switch (simplextable.ArtificialResponseCheck(variable_visualization, dataGridView3))
                {
                case 1:
                    //MessageBox.Show("Таблица пришла в ноль!");

                    if (!ArtificalBasixGoToNull)
                    {
                        // Удаляем столбцы с искусственными переменными.
                        simplextable.DeleteArtificalBasix(dataGridView3);

                        // Считываем ограничения заного
                        if (Radical_or_Decimal)
                        {
                            ogr = new List <List <double> >();
                            read_grids(dataGridView3, ogr);
                            simplextable.simplex_elements = ogr;
                            // удаляем строку с нулями из элементов симплекс таблицы
                            simplextable.simplex_elements.RemoveAt(simplextable.simplex_elements.Count - 1);
                            // удаляем последнюю строку с нулями из датаГрид
                            dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1);
                            // отображаем новые данные
                            addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3);
                        }

                        else
                        {
                            ogr_with_radicals = new List <List <Fractions> >();
                            read_grids(dataGridView3, ogr_with_radicals);
                            simplextable.simplex_elements_with_radicals = ogr_with_radicals;
                            // удаляем строку с нулями из элементов симплекс таблицы
                            simplextable.simplex_elements_with_radicals.RemoveAt(simplextable.simplex_elements_with_radicals.Count - 1);
                            // удаляем последнюю строку с нулями из датаГрид
                            dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1);
                            // отображаем новые данные
                            addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3);
                        }

                        // Высчитываем последнюю строку
                        simplextable.CalculateCelRow(dataGridView3);
                    }

                    ArtificalBasixGoToNull = true;

                    // Если ответ готов сразу же
                    switch (simplextable.ResponseCheck())
                    {
                    case 0:
                        //выбор опорного
                        simplextable.SelectionRandomSupportElement();
                        break;

                    case 1:
                        if (MinMax == 0)
                        {
                            if (Radical_or_Decimal)
                            {
                                label_answer.Text = "Ответ :" + simplextable.Response();
                            }
                            else
                            {
                                label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction();
                            }
                        }
                        else
                        {
                            if (Radical_or_Decimal)
                            {
                                label_answer.Text = "Ответ: " + simplextable.Response() * (-1);
                            }
                            else
                            {
                                label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction() * (-1);
                            }
                        }

                        // Выводим точку X*
                        if (corner_dot_was_added == false)
                        {
                            corner_dot_was_added = true;
                            //добавляем точку
                            addGridParam(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot);
                        }

                        break;

                    case -1:
                        //   tabControl1.TabPages[0].Text = "Линейная форма не ограничена сверху на множествен планов задачи.";

                        MessageBox.Show("Линейная форма не ограничена сверху на множествен планов задачи", "");

                        break;
                    }
                    break;

                case 0:
                    if (simplextable.ResponseCheck() == 1)
                    {
                        // Если симплекс таблица решена
                        if (MinMax == 0)
                        {
                            if (Radical_or_Decimal)
                            {
                                label_answer.Text = "Ответ :" + simplextable.Response();
                            }
                            else
                            {
                                label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction();
                            }
                        }
                        else
                        {
                            if (Radical_or_Decimal)
                            {
                                label_answer.Text = "Ответ: " + simplextable.Response() * (-1);
                            }
                            else
                            {
                                label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction() * (-1);
                            }
                        }

                        // Выводим точку X*
                        if (corner_dot_was_added == false)
                        {
                            corner_dot_was_added = true;
                            //добавляем точку
                            addGridParam(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot);
                        }
                    }
                    else
                    {
                        //  tabControl1.TabPages[0].Text = "Шаг " + step + ": Метод искусственного базиса. Выбор опорного элемента.";
                        //выбор опорного
                        simplextable.SelectionRandomSupportElement();
                    }
                    break;

                case -1:
                    //  MessageBox.Show("Решения не имеет");
                    break;
                }
            }

            // Переходим к симплекс таблице, если она не имеет решения или пока ещё не решена, и решаем её до тех пор
            while (simplextable.ResponseCheck() != 1 && simplextable.ResponseCheck() != -1)
            {
                //смена местами переменной + буферизация
                simplextable.ChangeOfVisualizationVariables(dataGridView3);
                //вычисление согласно выбранному опорному элементу
                simplextable.CalculateSimplexTable(simplextable.row_of_the_support_element, simplextable.column_of_the_support_element);

                // обновление данных ячеек таблицы
                if (Radical_or_Decimal)
                {
                    addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3);
                }
                else
                {
                    addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3);
                }

                switch (simplextable.ResponseCheck())
                {
                case 0:
                    //выбор опорного
                    simplextable.SelectionRandomSupportElement();
                    break;

                case 1:
                    // Подставляем ответ
                    if (MinMax == 0)
                    {
                        if (Radical_or_Decimal)
                        {
                            label_answer.Text = "Ответ :" + simplextable.Response();
                        }
                        else
                        {
                            label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction();
                        }
                    }
                    else
                    {
                        if (Radical_or_Decimal)
                        {
                            label_answer.Text = "Ответ: " + simplextable.Response() * (-1);
                        }
                        else
                        {
                            label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction() * (-1);
                        }
                    }

                    // Выводим точку X*
                    if (corner_dot_was_added == false)
                    {
                        corner_dot_was_added = true;
                        //добавляем точку
                        addGridParam(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot);
                    }

                    break;

                case -1:
                    //  tabControl1.TabPages[0].Text = "Линейная форма не ограничена сверху на множествен планов задачи.";
                    MessageBox.Show("Линейная форма не ограничена сверху на множествен планов задачи.", "");
                    break;
                }
            }
        }