Skip to content

Commit 36d0883

Browse files
committed
Merge branch 'feature/interior_point_solver' of bitbucket.org:leggedrobotics/ocs2_dev into feature/interior_point_solver
2 parents 98ea50f + 048cab7 commit 36d0883

File tree

3 files changed

+6
-15
lines changed

3 files changed

+6
-15
lines changed

ocs2_ipm/src/IpmHelpers.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ namespace ipm {
3737
void condenseIneqConstraints(scalar_t barrierParam, const vector_t& slack, const vector_t& dual,
3838
const VectorFunctionLinearApproximation& ineqConstraint, ScalarFunctionQuadraticApproximation& lagrangian) {
3939
assert(barrierParam > 0.0);
40-
4140
const size_t nc = ineqConstraint.f.size();
4241
const size_t nu = ineqConstraint.dfdu.cols();
4342

@@ -95,8 +94,9 @@ vector_t retrieveSlackDirection(const VectorFunctionLinearApproximation& stateIn
9594

9695
vector_t retrieveDualDirection(scalar_t barrierParam, const vector_t& slack, const vector_t& dual, const vector_t& slackDirection) {
9796
assert(barrierParam > 0.0);
98-
vector_t dualDirection(slackDirection.size());
99-
dualDirection.array() = -(dual.array() * slackDirection.array() + (slack.array() * dual.array() - barrierParam)) / slack.array();
97+
vector_t dualDirection = dual.cwiseProduct(slack + slackDirection);
98+
dualDirection.array() -= barrierParam;
99+
dualDirection.array() /= -slack.array();
100100
return dualDirection;
101101
}
102102

@@ -108,14 +108,9 @@ scalar_t fractionToBoundaryStepSize(const vector_t& v, const vector_t& dv, scala
108108
return 1.0;
109109
}
110110

111-
scalar_t minFractionToBoundary = 1.0;
112-
vector_t fractionToBoundary = -marginRate * v.cwiseQuotient(dv);
113-
for (int i = 0; i < fractionToBoundary.size(); ++i) {
114-
if (fractionToBoundary[i] <= 0.0) {
115-
fractionToBoundary[i] = 1.0;
116-
}
117-
}
118-
return std::min(1.0, fractionToBoundary.minCoeff());
111+
const vector_t invFractionToBoundary = (-1.0 / marginRate) * dv.cwiseQuotient(v);
112+
const auto alpha = invFractionToBoundary.maxCoeff();
113+
return alpha > 0.0? std::min(1.0 / alpha, 1.0): 1.0;
119114
}
120115

121116
} // namespace ipm

ocs2_sqp/ocs2_sqp/include/ocs2_sqp/SqpSolver.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ class SqpSolver : public SolverBase {
185185
ProblemMetrics problemMetrics_;
186186

187187
// Benchmarking
188-
size_t numProblems_{0};
189188
size_t totalNumIterations_{0};
190189
benchmark::RepeatedTimer initializationTimer_;
191190
benchmark::RepeatedTimer linearQuadraticApproximationTimer_;

ocs2_sqp/ocs2_sqp/src/SqpSolver.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ void SqpSolver::reset() {
9191
performanceIndeces_.clear();
9292

9393
// reset timers
94-
numProblems_ = 0;
9594
totalNumIterations_ = 0;
9695
linearQuadraticApproximationTimer_.reset();
9796
solveQpTimer_.reset();
@@ -216,8 +215,6 @@ void SqpSolver::runImpl(scalar_t initTime, const vector_t& initState, scalar_t f
216215
problemMetrics_ = multiple_shooting::toProblemMetrics(timeDiscretization, std::move(metrics));
217216
computeControllerTimer_.endTimer();
218217

219-
++numProblems_;
220-
221218
if (settings_.printSolverStatus || settings_.printLinesearch) {
222219
std::cerr << "\nConvergence : " << toString(convergence) << "\n";
223220
std::cerr << "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++";

0 commit comments

Comments
 (0)