public QpProgressReport PreSolve() { bool success = true; var constraintSummary = new ConstraintSummary(this.a); foreach (int colIndex in constraintSummary.EmptyColIndices) { success &= this.ProcessEmptyCol(colIndex, this.b); } List <BoxConstraint> boxConstraints = SetupBoxConstraints(this.a.RowCount); foreach (int colIndex in constraintSummary.SingleElementColIndices) { Bound bound = this.ProcessSingleElementCol(colIndex, constraintSummary, this.b); boxConstraints[bound.Position] = boxConstraints[bound.Position].Add(bound); } Vector <double> initialX; success &= this.ChooseStartingX(boxConstraints, out initialX); foreach (int colIndex in constraintSummary.MultiElementColIndices) { success &= this.ProcessMultiElementCol(colIndex, constraintSummary, this.b); } return(CompileReport(success, initialX)); }
public QpProgressReport PreSolve() { bool success = true; var constraintSummary = new ConstraintSummary(this.a); foreach (int colIndex in constraintSummary.EmptyColIndices) { success &= this.ProcessEmptyCol(colIndex, this.b); } List<BoxConstraint> boxConstraints = SetupBoxConstraints(this.a.RowCount); foreach (int colIndex in constraintSummary.SingleElementColIndices) { Bound bound = this.ProcessSingleElementCol(colIndex, constraintSummary, this.b); boxConstraints[bound.Position] = boxConstraints[bound.Position].Add(bound); } Vector<double> initialX; success &= this.ChooseStartingX(boxConstraints, out initialX); foreach (int colIndex in constraintSummary.MultiElementColIndices) { success &= this.ProcessMultiElementCol(colIndex, constraintSummary, this.b); } return CompileReport(success, initialX); }
private Bound ProcessSingleElementCol(int colIndex, ConstraintSummary constraintSummary, Vector <double> b) { var element = constraintSummary.GetColElements(colIndex).Single(); if (element.Item3 > 0) { return(new LowerBound(element.Item1, b[colIndex] / element.Item3)); } return(new UpperBound(element.Item1, b[colIndex] / element.Item3)); }
private bool ProcessMultiElementCol(int colIndex, ConstraintSummary constraintSummary, Vector <double> b) { // TODO check multivariable constraints return(true); }
private Bound ProcessSingleElementCol(int colIndex, ConstraintSummary constraintSummary, Vector<double> b) { var element = constraintSummary.GetColElements(colIndex).Single(); if (element.Item3 > 0) { return new LowerBound(element.Item1, b[colIndex] / element.Item3); } return new UpperBound(element.Item1, b[colIndex] / element.Item3); }
private bool ProcessMultiElementCol(int colIndex, ConstraintSummary constraintSummary, Vector<double> b) { // TODO check multivariable constraints return true; }