Пример #1
0
 public DefaultBasisInput(LinearProgrammingProblem canonicalProblem, FormInitialConditions previousForm)
 {
     this.canonicalProblem = canonicalProblem;
     this.previousForm     = previousForm;
     defaultBasisIndexes   = new int[canonicalProblem.LimitationNumber];
     InitializeComponent();
 }
Пример #2
0
 public DefaultSolutionInput(LinearProgrammingProblem canonicalProblem, FormInitialConditions previousForm)
 {
     this.canonicalProblem = canonicalProblem;
     this.previousForm     = previousForm;
     defaultSolution       = new Vector(canonicalProblem.VariableNumber);
     InitializeComponent();
 }
Пример #3
0
 public ResultForm(LinearProgrammingProblem problem, FormInitialConditions formWithProblem)
 {
     this.problem         = problem;
     this.formWithProblem = formWithProblem;
     givenProblem         = formWithProblem.Problem;
     InitializeComponent();
 }
Пример #4
0
        public static void Solve(LinearProgrammingProblem lpTask)
        {
            NumericMatrix simplexTable = new NumericMatrix(lpTask.ineqNum, lpTask.ineqNum + lpTask.varNum);

            double[] deltaC           = new double[lpTask.ineqNum];
            double[] currentResultRow = new double[lpTask.ineqNum + lpTask.varNum + 1];
            double[] AZero            = lpTask.limitations.GetRow(lpTask.varNum + 1);
        }
Пример #5
0
        private void continueButton_Click(object sender, EventArgs e)
        {
            int i = 0, j = 0;

            try
            {
                for (j = 0; j < textBoxesObjectiveCoeffs.Length; j++)
                {
                    ObjectiveFunctionCoefficients[j] = Convert.ToDouble(textBoxesObjectiveCoeffs[j].Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в формуле целевой функции не является числом!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в формуле целевой функции, к сожалению, слишком велик!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения коэффициента при x" + Convert.ToString(j + 1) + " в формуле целевой функции возникла неизвестная ошибка!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            if (comboBoxMax.Text.Replace(" ", "") == "max")
            {
                maxObj = true;
            }
            else if (comboBoxMax.Text.Replace(" ", "") == "min")
            {
                maxObj = false;
            }
            else
            {
                MessageBox.Show("Не указан экстремум целевой функции!");
                return;
            }
            try
            {
                for (i = 0; i < textBoxesLimitationMatrix.GetLength(0); i++)
                {
                    for (j = 0; j < textBoxesLimitationMatrix.GetLength(1); j++)
                    {
                        LimitationMatrix[i, j] = Convert.ToDouble(textBoxesLimitationMatrix[i, j].Text);
                    }
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + " не является числом!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + ", к сожалению, слишком велик!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения коэффициента при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + " возникла неизвестная ошибка!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            try
            {
                for (i = 0; i < textBoxesLimitationVector.Length; i++)
                {
                    LimitationVector[i] = Convert.ToDouble(textBoxesLimitationVector[i].Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Свободный член введенный в уравнении/неравенстве №" + Convert.ToString(i + 1) + " не является числом!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Свободный член введенный в уравнении/неравенстве №" + Convert.ToString(i + 1) + ", к сожалению, слишком велик!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения свободного члена в уравнении/неравенстве №" + Convert.ToString(i + 1) + " возникла неизвестная ошибка!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            for (i = 0; i < comboBoxesRelations.Length; i++)
            {
                if (comboBoxesRelations[i].Text == "")
                {
                    MessageBox.Show("Не указан тип отношения в уравнении/неравенстве №" + Convert.ToString(i + 1) + "!");
                    return;
                }
            }
            for (i = 0; i < RelationArray.Length; i++)
            {
                if (comboBoxesRelations[i].Text.Replace(" ", "") == "<=")
                {
                    RelationArray[i] = -1;
                }
                else if (comboBoxesRelations[i].Text.Replace(" ", "") == ">=")
                {
                    RelationArray[i] = 1;
                }
                else
                {
                    RelationArray[i] = 0;
                }
            }
            for (j = 0; j < comboBoxesSigns.Length; j++)
            {
                if (comboBoxesSigns[j].Text == "")
                {
                    MessageBox.Show("Не указан знак для переменной x" + Convert.ToString(j + 1) + "!");
                    return;
                }
            }
            for (j = 0; j < SignArray.Length; j++)
            {
                if (comboBoxesSigns[j].Text.Replace(" ", "") == "<=0")
                {
                    SignArray[j] = -1;
                }
                else if (comboBoxesSigns[j].Text.Replace(" ", "") == ">=0")
                {
                    SignArray[j] = 1;
                }
                else
                {
                    SignArray[j] = 0;
                }
            }
            try
            {
                Problem = new LinearProgrammingProblem(LimitationMatrix, LimitationVector, ObjectiveFunctionCoefficients,
                                                       algorithmPrint, maxObj, RelationArray, SignArray);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Введенная ЗЛП не имеет смысла, или содержит ограничения, которые, очевидно, тождественно истинные или ложные!");
                return;
            }
            CanonicalProblem = new LinearProgrammingProblem(Problem.EqualCanonicalProblem);
            if (MethodNumber == 0)
            {
                Hide();
                DefaultBasisInput basisInput = new DefaultBasisInput(CanonicalProblem, this);
                basisInput.Show();
            }
            else if (MethodNumber == 1)
            {
                Hide();
                DefaultSolutionInput solutionInput = new DefaultSolutionInput(CanonicalProblem, this);
                solutionInput.Show();
            }
            else
            {
                Hide();
                ResultForm result = new ResultForm(Problem, this);
                result.Show();
            }
        }