Skip to content

Commit

Permalink
Add cost to solver status (#498)
Browse files Browse the repository at this point in the history
  • Loading branch information
calcmogul authored Apr 10, 2024
1 parent 80f69af commit 37487e5
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 2 deletions.
3 changes: 3 additions & 0 deletions include/sleipnir/optimization/SolverStatus.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ struct SLEIPNIR_DLLEXPORT SolverStatus {

/// The solver's exit condition.
SolverExitCondition exitCondition = SolverExitCondition::kSuccess;

/// The solution's cost.
double cost = 0.0;
};

} // namespace sleipnir
2 changes: 2 additions & 0 deletions jormungandr/cpp/Docstrings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,8 @@ static const char *__doc_sleipnir_SolverStatus =
R"doc(Return value of OptimizationProblem::Solve() containing the cost
function and constraint types and solver's exit condition.)doc";

static const char *__doc_sleipnir_SolverStatus_cost = R"doc(The solution's cost.)doc";

static const char *__doc_sleipnir_SolverStatus_costFunctionType = R"doc(The cost function type detected by the solver.)doc";

static const char *__doc_sleipnir_SolverStatus_equalityConstraintType = R"doc(The equality constraint type detected by the solver.)doc";
Expand Down
6 changes: 4 additions & 2 deletions jormungandr/cpp/optimization/BindSolverStatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ void BindSolverStatus(py::module_& optimization) {
DOC(sleipnir, SolverStatus)};
cls.def(py::init<>());
cls.def(py::init<ExpressionType, ExpressionType, ExpressionType,
SolverExitCondition>(),
SolverExitCondition, double>(),
"cost_function_type"_a = ExpressionType::kNone,
"equality_constraint_type"_a = ExpressionType::kNone,
"inequality_constraint_type"_a = ExpressionType::kNone,
"exit_condition"_a = SolverExitCondition::kSuccess);
"exit_condition"_a = SolverExitCondition::kSuccess, "cost"_a = 0.0);
cls.def_readwrite("cost_function_type", &SolverStatus::costFunctionType,
DOC(sleipnir, SolverStatus, costFunctionType));
cls.def_readwrite("equality_constraint_type",
Expand All @@ -31,6 +31,8 @@ void BindSolverStatus(py::module_& optimization) {
DOC(sleipnir, SolverStatus, inequalityConstraintType));
cls.def_readwrite("exit_condition", &SolverStatus::exitCondition,
DOC(sleipnir, SolverStatus, exitCondition));
cls.def_readwrite("cost", &SolverStatus::cost,
DOC(sleipnir, SolverStatus, cost));
}

} // namespace sleipnir
2 changes: 2 additions & 0 deletions src/optimization/solver/InteriorPoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ void InteriorPoint(

// Prints final diagnostics when the solver exits
scope_exit exit{[&] {
status->cost = f.Value();

if (config.diagnostics && !feasibilityRestoration) {
auto solveEndTime = std::chrono::system_clock::now();

Expand Down

0 comments on commit 37487e5

Please sign in to comment.