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