public DefaultBasisInput(LinearProgrammingProblem canonicalProblem, FormInitialConditions previousForm) { this.canonicalProblem = canonicalProblem; this.previousForm = previousForm; defaultBasisIndexes = new int[canonicalProblem.LimitationNumber]; InitializeComponent(); }
public DefaultSolutionInput(LinearProgrammingProblem canonicalProblem, FormInitialConditions previousForm) { this.canonicalProblem = canonicalProblem; this.previousForm = previousForm; defaultSolution = new Vector(canonicalProblem.VariableNumber); InitializeComponent(); }
public ResultForm(LinearProgrammingProblem problem, FormInitialConditions formWithProblem) { this.problem = problem; this.formWithProblem = formWithProblem; givenProblem = formWithProblem.Problem; InitializeComponent(); }
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); }
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(); } }