hyper_graph_optimization_problem_vertex_based.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_HYPER_GRAPH_OPTIMIZATION_PROBLEM_VERTEX_BASED_H_
26 #define SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_HYPER_GRAPH_OPTIMIZATION_PROBLEM_VERTEX_BASED_H_
27 
29 
30 #include <memory>
31 
32 namespace corbo {
33 
34 class HyperGraphOptimizationProblemVertexBased : public BaseHyperGraphOptimizationProblem
35 {
36  public:
39  : BaseHyperGraphOptimizationProblem(edges, vertices)
40  {
41  }
42 
43  BaseHyperGraphOptimizationProblem::Ptr getInstance() const override { return std::make_shared<HyperGraphOptimizationProblemVertexBased>(); }
44 
45  void precomputeEdgeQuantities() override;
46 
49  void computeDenseJacobianLsqObjective(Eigen::Ref<Eigen::MatrixXd> jacobian, const double* multipliers = nullptr) override;
50 
53  void computeSparseJacobianLsqObjectiveValues(Eigen::Ref<Eigen::VectorXd> values, const double* multipliers) override;
54 
55  void computeDenseJacobianEqualities(Eigen::Ref<Eigen::MatrixXd> jacobian, const double* multipliers = nullptr) override;
58  void computeSparseJacobianEqualitiesValues(Eigen::Ref<Eigen::VectorXd> values, const double* multipliers = nullptr) override;
59 
60  void computeDenseJacobianInequalities(Eigen::Ref<Eigen::MatrixXd> jacobian, const double* multipliers = nullptr) override;
63  void computeSparseJacobianInequalitiesValues(Eigen::Ref<Eigen::VectorXd> values, const double* multipliers = nullptr) override;
64 
65  void computeDenseJacobianActiveInequalities(Eigen::Ref<Eigen::MatrixXd> jacobian, double weight = 1.0) override;
66  void computeSparseJacobianActiveInequalitiesValues(Eigen::Ref<Eigen::VectorXd> values, double weight = 1.0) override;
67 
68  int computeCombinedSparseJacobiansNNZ(bool objective_lsq = true, bool equality = true, bool inequality = true) override;
70  bool equality = true, bool inequality = true) override;
71  void computeCombinedSparseJacobiansValues(Eigen::Ref<Eigen::VectorXd> values, bool objective_lsq = true, bool equality = true,
72  bool inequality = true, const double* multipliers_obj = nullptr, const double* multipliers_eq = nullptr,
73  const double* multipliers_ineq = nullptr) override;
74  void computeCombinedSparseJacobian(Eigen::SparseMatrix<double>& jacobian, bool objective_lsq, bool equality, bool inequality,
75  bool finite_combined_bounds, bool active_ineq = false, double weight_eq = 1.0, double weight_ineq = 1.0,
76  double weight_bounds = 1.0, const Eigen::VectorXd* values = nullptr,
77  const Eigen::VectorXi* col_nnz = nullptr) override;
78 
79  // useful for IPOPT (w/ hessian-approx)
81  bool equality = true, bool inequality = true,
82  const double* multipliers_eq = nullptr,
83  const double* multipliers_ineq = nullptr) override;
84 
85  protected:
86  void precomputeConnectedMixedEdges(const VertexInterface* vertex, bool objective = true, bool equality = true, bool inequality = true);
87 
88  void computeObjectiveValuesCached(const VertexInterface* vertex, bool include_lsq_edges, bool include_nonmixed = true, bool include_mixed = true);
89  void finalizeObjectiveGradient(const VertexInterface* vertex, double& gradient_coeff, bool include_lsq_edges, bool include_nonmixed = true,
90  bool include_mixed = true, bool precompute_mixed = true);
91 
92  void computeLsqObjectiveValuesCached(const VertexInterface* vertex, bool include_nonmixed = true, bool include_mixed = true,
93  bool precompute_mixed = true);
94  void finalizeLsqObjectiveJacobian(const VertexInterface* vertex, int vtx_idx, Eigen::Ref<Eigen::MatrixXd>& jacobian,
95  const double* multipliers = nullptr, bool include_nonmixed = true, bool include_mixed = true);
97  Eigen::Ref<Eigen::VectorXi> j_col, int& nnz_idx, int row_offset = 0);
99  const double* multipliers = nullptr, bool precompute_mixed = true);
100 
101  void computeEqualitiesValuesCached(const VertexInterface* vertex, bool include_nonmixed = true, bool include_mixed = true,
102  bool precompute_mixed = true);
103  void finalizeEqualitiesJacobian(const VertexInterface* vertex, int vtx_idx, Eigen::Ref<Eigen::MatrixXd>& jacobian,
104  const double* multipliers = nullptr, bool include_nonmixed = true, bool include_mixed = true,
105  bool precompute_mixed = true);
107  Eigen::Ref<Eigen::VectorXi> j_col, int& nnz_idx, int row_offset = 0);
109  const double* multipliers = nullptr, bool precompute_mixed = true);
110 
111  void computeInequalitiesValuesCached(const VertexInterface* vertex, bool include_nonmixed = true, bool include_mixed = true,
112  bool precompute_mixed = true);
113  void finalizeInequalitiesJacobian(const VertexInterface* vertex, int vtx_idx, Eigen::Ref<Eigen::MatrixXd>& jacobian,
114  const double* multipliers = nullptr, bool include_nonmixed = true, bool include_mixed = true,
115  bool precompute_mixed = true);
116  void finalizeActiveInequalitiesJacobian(const VertexInterface* vertex, int vtx_idx, Eigen::Ref<Eigen::MatrixXd>& jacobian, double weight = 1.0,
117  bool include_nonmixed = true, bool include_mixed = true);
119  Eigen::Ref<Eigen::VectorXi> j_col, int& nnz_idx, int row_offset = 0);
121  const double* multipliers = nullptr, bool precompute_mixed = true);
123  double weight = 1.0);
124 };
125 
127 
128 } // namespace corbo
129 
130 #endif // SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_HYPER_GRAPH_OPTIMIZATION_PROBLEM_VERTEX_BASED_H_
corbo::HyperGraphOptimizationProblemVertexBased::HyperGraphOptimizationProblemVertexBased
HyperGraphOptimizationProblemVertexBased()=default
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianInequalitiesValues
void computeSparseJacobianInequalitiesValues(Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1164
corbo::OptimizationEdgeSet::Ptr
std::shared_ptr< OptimizationEdgeSet > Ptr
Definition: edge_set.h:99
corbo::HyperGraphOptimizationProblemVertexBased::computeGradientNonLsqObjective
void computeGradientNonLsqObjective(Eigen::Ref< Eigen::VectorXd > gradient) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:793
Eigen::SparseMatrix< double >
corbo::HyperGraphOptimizationProblemVertexBased::finalizeLsqObjectiveJacobian
void finalizeLsqObjectiveJacobian(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::MatrixXd > &jacobian, const double *multipliers=nullptr, bool include_nonmixed=true, bool include_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:190
corbo::HyperGraphOptimizationProblemVertexBased::finalizeInequalitiesJacobian
void finalizeInequalitiesJacobian(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::MatrixXd > &jacobian, const double *multipliers=nullptr, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:499
corbo::HyperGraphOptimizationProblemVertexBased::finalizeActiveInequalitiesJacobian
void finalizeActiveInequalitiesJacobian(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::MatrixXd > &jacobian, double weight=1.0, bool include_nonmixed=true, bool include_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:550
corbo::HyperGraphOptimizationProblemVertexBased::computeInequalitiesJacobianStructureForVertex
void computeInequalitiesJacobianStructureForVertex(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, int &nnz_idx, int row_offset=0)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:616
corbo::HyperGraphOptimizationProblemVertexBased::getInstance
BaseHyperGraphOptimizationProblem::Ptr getInstance() const override
Definition: hyper_graph_optimization_problem_vertex_based.h:87
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::VertexSetInterface::Ptr
std::shared_ptr< VertexSetInterface > Ptr
Definition: vertex_set.h:92
corbo::HyperGraphOptimizationProblemVertexBased::computeCombinedSparseJacobiansStructure
void computeCombinedSparseJacobiansStructure(Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool objective_lsq=true, bool equality=true, bool inequality=true) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1280
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianEqualitiesValues
void computeSparseJacobianEqualitiesValues(Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1039
corbo::HyperGraphOptimizationProblemVertexBased::computeLsqObjectiveValuesCached
void computeLsqObjectiveValuesCached(const VertexInterface *vertex, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:166
corbo::HyperGraphOptimizationProblemVertexBased::computeEqualitiesValuesCached
void computeEqualitiesValuesCached(const VertexInterface *vertex, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:323
corbo::HyperGraphOptimizationProblemVertexBased::computeGradientObjectiveAndCombinedSparseJacobiansValues
void computeGradientObjectiveAndCombinedSparseJacobiansValues(Eigen::Ref< Eigen::VectorXd > gradient, Eigen::Ref< Eigen::VectorXd > jac_values, bool equality=true, bool inequality=true, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1366
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianInequalitiesStructure
void computeSparseJacobianInequalitiesStructure(Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1139
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianLsqObjectiveNNZ
int computeSparseJacobianLsqObjectiveNNZ() override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:861
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianActiveInequalitiesValues
void computeSparseJacobianActiveInequalitiesValues(Eigen::Ref< Eigen::VectorXd > values, double weight=1.0) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1235
corbo::VertexInterface
Generic interface class for vertices.
Definition: vertex_interface.h:75
corbo::HyperGraphOptimizationProblemVertexBased::computeDenseJacobianActiveInequalities
void computeDenseJacobianActiveInequalities(Eigen::Ref< Eigen::MatrixXd > jacobian, double weight=1.0) override
Compute the Jacobian Jc(x) with non-zeros for active constraints c(x)>= 0 and zeros for inactive ones...
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1198
corbo::HyperGraphOptimizationProblemVertexBased::finalizeActiveInequalitiesJacobianSparseValues
void finalizeActiveInequalitiesJacobianSparseValues(const VertexInterface *vertex, int &nnz_idx, Eigen::Ref< Eigen::VectorXd > &values, double weight=1.0)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:697
corbo::HyperGraphOptimizationProblemVertexBased::computeObjectiveValuesCached
void computeObjectiveValuesCached(const VertexInterface *vertex, bool include_lsq_edges, bool include_nonmixed=true, bool include_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:86
corbo::HyperGraphOptimizationProblemVertexBased::finalizeEqualitiesJacobianSparseValues
void finalizeEqualitiesJacobianSparseValues(const VertexInterface *vertex, int &nnz_idx, Eigen::Ref< Eigen::VectorXd > &values, const double *multipliers=nullptr, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:429
corbo::HyperGraphOptimizationProblemVertexBased::finalizeInequalitiesJacobianSparseValues
void finalizeInequalitiesJacobianSparseValues(const VertexInterface *vertex, int &nnz_idx, Eigen::Ref< Eigen::VectorXd > &values, const double *multipliers=nullptr, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:648
corbo::HyperGraphOptimizationProblemVertexBased::finalizeLsqObjectiveJacobianSparseValues
void finalizeLsqObjectiveJacobianSparseValues(const VertexInterface *vertex, int &nnz_idx, Eigen::Ref< Eigen::VectorXd > &values, const double *multipliers=nullptr, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:275
corbo::BaseHyperGraphOptimizationProblem::BaseHyperGraphOptimizationProblem
BaseHyperGraphOptimizationProblem()=default
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianLsqObjectiveStructure
void computeSparseJacobianLsqObjectiveStructure(Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:891
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianEqualitiesStructure
void computeSparseJacobianEqualitiesStructure(Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1015
corbo::HyperGraphOptimizationProblemVertexBased::computeGradientObjective
void computeGradientObjective(Eigen::Ref< Eigen::VectorXd > gradient) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:759
corbo::HyperGraphOptimizationProblemVertexBased::computeCombinedSparseJacobian
void computeCombinedSparseJacobian(Eigen::SparseMatrix< double > &jacobian, bool objective_lsq, bool equality, bool inequality, bool finite_combined_bounds, bool active_ineq=false, double weight_eq=1.0, double weight_ineq=1.0, double weight_bounds=1.0, const Eigen::VectorXd *values=nullptr, const Eigen::VectorXi *col_nnz=nullptr) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1356
corbo::HyperGraphOptimizationProblemVertexBased::precomputeConnectedMixedEdges
void precomputeConnectedMixedEdges(const VertexInterface *vertex, bool objective=true, bool equality=true, bool inequality=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:72
corbo::HyperGraphOptimizationProblemVertexBased
Definition: hyper_graph_optimization_problem_vertex_based.h:56
corbo::HyperGraphOptimizationProblemVertexBased::computeDenseJacobianInequalities
void computeDenseJacobianInequalities(Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr) override
Compute the inequality constraint Jacobian Jc(x) for the current parameter set.
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1073
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianEqualitiesNNZ
int computeSparseJacobianEqualitiesNNZ() override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:985
corbo::HyperGraphOptimizationProblemVertexBased::finalizeEqualitiesJacobian
void finalizeEqualitiesJacobian(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::MatrixXd > &jacobian, const double *multipliers=nullptr, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:346
corbo::HyperGraphOptimizationProblemVertexBased::finalizeObjectiveGradient
void finalizeObjectiveGradient(const VertexInterface *vertex, double &gradient_coeff, bool include_lsq_edges, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:120
FACTORY_REGISTER_HYPER_GRAPH_OPTIMIZATION_PROBLEM
#define FACTORY_REGISTER_HYPER_GRAPH_OPTIMIZATION_PROBLEM(type)
Definition: hyper_graph_optimization_problem_base.h:288
corbo::HyperGraphOptimizationProblemVertexBased::computeDenseJacobianEqualities
void computeDenseJacobianEqualities(Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr) override
Compute the equality constraint Jacobian Jceq(x) for the current parameter set.
Definition: hyper_graph_optimization_problem_vertex_based.cpp:949
corbo::BaseHyperGraphOptimizationProblem::Ptr
std::shared_ptr< BaseHyperGraphOptimizationProblem > Ptr
Definition: hyper_graph_optimization_problem_base.h:117
corbo::HyperGraphOptimizationProblemVertexBased::precomputeEdgeQuantities
void precomputeEdgeQuantities() override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:55
Eigen::Ref
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
corbo::HyperGraphOptimizationProblemVertexBased::computeDenseJacobianLsqObjective
void computeDenseJacobianLsqObjective(Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr) override
Compute the objective Jacobian Jf(x) for the current parameter set.
Definition: hyper_graph_optimization_problem_vertex_based.cpp:825
corbo::HyperGraphOptimizationProblemVertexBased::computeEqualitiesJacobianStructureForVertex
void computeEqualitiesJacobianStructureForVertex(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, int &nnz_idx, int row_offset=0)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:397
corbo::HyperGraphOptimizationProblemVertexBased::computeCombinedSparseJacobiansValues
void computeCombinedSparseJacobiansValues(Eigen::Ref< Eigen::VectorXd > values, bool objective_lsq=true, bool equality=true, bool inequality=true, const double *multipliers_obj=nullptr, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1311
corbo::HyperGraphOptimizationProblemVertexBased::computeInequalitiesValuesCached
void computeInequalitiesValuesCached(const VertexInterface *vertex, bool include_nonmixed=true, bool include_mixed=true, bool precompute_mixed=true)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:476
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianInequalitiesNNZ
int computeSparseJacobianInequalitiesNNZ() override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1109
hyper_graph_optimization_problem_base.h
corbo::HyperGraphOptimizationProblemVertexBased::computeLsqObjectiveJacobianStructureForVertex
void computeLsqObjectiveJacobianStructureForVertex(const VertexInterface *vertex, int vtx_idx, Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, int &nnz_idx, int row_offset=0)
Definition: hyper_graph_optimization_problem_vertex_based.cpp:242
corbo::HyperGraphOptimizationProblemVertexBased::computeCombinedSparseJacobiansNNZ
int computeCombinedSparseJacobiansNNZ(bool objective_lsq=true, bool equality=true, bool inequality=true) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:1272
corbo::HyperGraphOptimizationProblemVertexBased::computeSparseJacobianLsqObjectiveValues
void computeSparseJacobianLsqObjectiveValues(Eigen::Ref< Eigen::VectorXd > values, const double *multipliers) override
Definition: hyper_graph_optimization_problem_vertex_based.cpp:915


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:48