COPP C++ API 0.2.3
C++ interface for COPP trajectory optimization
Loading...
Searching...
No Matches
topp3.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <optional>
6#include <utility>
7#include <vector>
8
9#include "copp/clarabel.hpp"
10#include "copp/core.hpp"
12#include "copp/robot.hpp"
13
14namespace copp::solver::topp3
15{
16
25 {
26 std::size_t start = 1;
27 std::size_t end = 1;
28
29 static constexpr StationaryBounds both(std::size_t value) noexcept
30 {
31 return StationaryBounds{value, value};
32 }
33 };
34
63 {
64 public:
84 std::size_t idx_s_start = 0,
86 StationaryBounds num_stationary_max = {},
87 double a_linearization_floor = 1.0e-10,
88 Span<const double> b_linearization = {});
89
93 std::size_t idx_s_start,
95 std::size_t symmetric_num_stationary_max,
96 double a_linearization_floor = 1.0e-10,
98
99 ConstraintsRef constraints() const noexcept { return constraints_; }
100 const std::vector<double> &a_linearization() const noexcept { return a_linearization_; }
102 const std::vector<double> &b_linearization() const noexcept { return b_linearization_; }
103 std::size_t idx_s_start() const noexcept { return idx_s_start_; }
104 std::size_t idx_s_final() const noexcept { return idx_s_final_; }
105 Boundary3 boundary() const noexcept { return boundary_; }
106 StationaryBounds num_stationary_max() const noexcept { return num_stationary_max_; }
107 StationaryBounds num_stationary() const noexcept { return num_stationary_; }
108 double a_linearization_floor() const noexcept { return a_linearization_floor_; }
109 std::size_t s_len() const noexcept { return a_linearization_.size(); }
110
111 private:
112 ConstraintsRef constraints_;
113 std::vector<double> a_linearization_;
114 std::vector<double> b_linearization_;
115 std::size_t idx_s_start_ = 0;
116 std::size_t idx_s_final_ = 0;
117 Boundary3 boundary_;
118 StationaryBounds num_stationary_max_;
119 StationaryBounds num_stationary_;
120 double a_linearization_floor_ = 1.0e-10;
121 };
122
133 struct Result
134 {
135 std::optional<Profile3rd> profile;
136 std::vector<double> x;
137 std::vector<double> z;
138 std::vector<double> s;
140 double obj_val = 0.0;
141 double obj_val_dual = 0.0;
142 double solve_time = 0.0;
143 std::uint32_t iterations = 0;
144 double r_prim = 0.0;
145 double r_dual = 0.0;
147 std::optional<double> objective_value;
148 std::vector<double> objective_terms;
149
150 bool has_profile() const noexcept { return profile.has_value(); }
151 };
152
153} // namespace copp::solver::topp3
Non-owning view of a Rust-backed constraint buffer.
Definition robot.hpp:88
Non-owning view of a contiguous one-dimensional array.
Definition core.hpp:139
const std::vector< double > & b_linearization() const noexcept
Copied b_linearization; empty when direct linearization is used.
Definition topp3.hpp:102
double a_linearization_floor() const noexcept
Definition topp3.hpp:108
std::size_t idx_s_start() const noexcept
Definition topp3.hpp:103
Boundary3 boundary() const noexcept
Definition topp3.hpp:105
StationaryBounds num_stationary_max() const noexcept
Definition topp3.hpp:106
std::size_t s_len() const noexcept
Definition topp3.hpp:109
Problem(ConstraintsRef constraints, Span< const double > a_linearization, std::size_t idx_s_start=0, Boundary3 boundary={}, StationaryBounds num_stationary_max={}, double a_linearization_floor=1.0e-10, Span< const double > b_linearization={})
Prepare a third-order problem and immediately linearize constraints.
Problem(ConstraintsRef constraints, Span< const double > a_linearization, std::size_t idx_s_start, Boundary3 boundary, std::size_t symmetric_num_stationary_max, double a_linearization_floor=1.0e-10, Span< const double > b_linearization={})
const std::vector< double > & a_linearization() const noexcept
Definition topp3.hpp:100
StationaryBounds num_stationary() const noexcept
Definition topp3.hpp:107
std::size_t idx_s_final() const noexcept
Definition topp3.hpp:104
ConstraintsRef constraints() const noexcept
Definition topp3.hpp:99
#define COPP_API
Definition core.hpp:23
SolverStatus
Clarabel termination status reported by expert SOCP results.
Definition clarabel.hpp:32
Shared third-order problem, boundary, stationary-bound, and expert result types used by TOPP3-LP,...
Third-order endpoint boundary values.
Definition core.hpp:87
Linear solver metadata captured from Clarabel after a solve.
Definition clarabel.hpp:49
Expert third-order Clarabel result.
Definition topp3.hpp:134
std::vector< double > x
Definition topp3.hpp:136
std::uint32_t iterations
Definition topp3.hpp:143
std::vector< double > objective_terms
Definition topp3.hpp:148
std::vector< double > s
Definition topp3.hpp:138
bool has_profile() const noexcept
Definition topp3.hpp:150
std::optional< Profile3rd > profile
Definition topp3.hpp:135
std::vector< double > z
Definition topp3.hpp:137
std::optional< double > objective_value
Definition topp3.hpp:147
clarabel::LinearSolverInfo linsolver
Definition topp3.hpp:146
clarabel::SolverStatus solver_status
Definition topp3.hpp:139
User-supplied upper bound for stationary boundary intervals.
Definition topp3.hpp:25
static constexpr StationaryBounds both(std::size_t value) noexcept
Definition topp3.hpp:29