Sleipnir C++ API
Loading...
Searching...
No Matches
problem_scaling.hpp
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <algorithm>
6
7#include <Eigen/Core>
8#include <Eigen/SparseCore>
9
10#include "sleipnir/optimization/solver/util/sparse_inf_norms.hpp"
11
12// See docs/algorithms.md#Works_cited for citation definitions
13
14namespace slp {
15
19template <typename Scalar>
22 using DenseVector = Eigen::Vector<Scalar, Eigen::Dynamic>;
24 using SparseMatrix = Eigen::SparseMatrix<Scalar>;
26 using SparseVector = Eigen::SparseVector<Scalar>;
27
29 Scalar f = Scalar(1);
30
33
36
38 ProblemScaling() = default;
39
46 : f{f}, c_e{c_e}, c_i{c_i} {}
47
58 explicit ProblemScaling(const DenseVector& g) {
59 constexpr Scalar g_max(100);
60
61 f = std::min(Scalar(1), g_max / g.template lpNorm<Eigen::Infinity>());
62 }
63
77 ProblemScaling(const DenseVector& g, const SparseMatrix& A_e) {
78 constexpr Scalar g_max(100);
79
80 f = std::min(Scalar(1), g_max / g.template lpNorm<Eigen::Infinity>());
81 c_e = (g_max / sparse_inf_norms(A_e).array()).min(Scalar(1)).matrix();
82 }
83
100 const SparseMatrix& A_i) {
101 constexpr Scalar g_max(100);
102
103 f = std::min(Scalar(1), g_max / g.template lpNorm<Eigen::Infinity>());
104 c_e = (g_max / sparse_inf_norms(A_e).array()).min(Scalar(1)).matrix();
105 c_i = (g_max / sparse_inf_norms(A_i).array()).min(Scalar(1)).matrix();
106 }
107
111 bool is_identity() const {
112 return f == Scalar(1) && c_e.size() == 0 && c_i.size() == 0;
113 }
114};
115
116} // namespace slp
Definition intrusive_shared_ptr.hpp:27
Definition problem_scaling.hpp:20
ProblemScaling(const DenseVector &g, const SparseMatrix &A_e, const SparseMatrix &A_i)
Definition problem_scaling.hpp:99
ProblemScaling()=default
Constructs identity problem scaling.
Scalar f
Cost scaling factor d_f.
Definition problem_scaling.hpp:29
bool is_identity() const
Definition problem_scaling.hpp:111
DenseVector c_i
Inequality constraint scaling factors d_cᵢ.
Definition problem_scaling.hpp:35
DenseVector c_e
Equality constraint scaling factors d_cₑ.
Definition problem_scaling.hpp:32
Eigen::Vector< Scalar, Eigen::Dynamic > DenseVector
Type alias for dense vector.
Definition problem_scaling.hpp:22
ProblemScaling(Scalar f, const DenseVector &c_e, const DenseVector &c_i)
Definition problem_scaling.hpp:45
ProblemScaling(const DenseVector &g, const SparseMatrix &A_e)
Definition problem_scaling.hpp:77
Eigen::SparseMatrix< Scalar > SparseMatrix
Type alias for sparse matrix.
Definition problem_scaling.hpp:24
ProblemScaling(const DenseVector &g)
Definition problem_scaling.hpp:58
Eigen::SparseVector< Scalar > SparseVector
Type alias for sparse vector.
Definition problem_scaling.hpp:26