Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
 private bool ProcessMultiElementCol(int colIndex, ConstraintSummary constraintSummary, Vector <double> b)
 {
     // TODO check multivariable constraints
     return(true);
 }
Пример #5
0
        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);
        }
Пример #6
0
 private bool ProcessMultiElementCol(int colIndex, ConstraintSummary constraintSummary, Vector<double> b)
 {
     // TODO check multivariable constraints
     return true;
 }