🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
INLPProblem.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include <vector>
25
26
27AST_NAMESPACE_BEGIN
28
29
30
32struct NLPInfo
33{
34 int numVariable_{ 0 }; // 优化变量的维度,默认为0
35 int numConstraintEq_{ 0 }; // 等式约束的维度,默认为0
36 int numConstraintIneq_{ 0 }; // 不等式约束维度,默认为0
37 int numObjective_{ 0 }; // 优化目标的维度,默认为0
38
39public:
40 int getNumConstraint() const
41 {
42 return getNumConstraintEq() + getNumConstraintIneq();
43 }
44 int getNumObjConstr() const
45 {
46 return getNumObjective() + getNumConstraint();
47 }
48 int getNumVariable() const
49 {
50 return numVariable_;
51 }
52 int getNumObjective() const
53 {
54 return numObjective_;
55 }
56 int getNumConstraintEq() const
57 {
58 return numConstraintEq_;
59 }
60 int getNumConstraintIneq() const
61 {
62 return numConstraintIneq_;
63 }
64
65 int& numVariable(){return numVariable_;}
66 int& numConstraintEq(){return numConstraintEq_;}
67 int& numConstraintIneq(){return numConstraintIneq_;}
68 int& numObjective(){return numObjective_;}
69};
70
71
72// @brief 非线性规划问题的雅可比矩阵信息
74{
75 std::vector<int> idxVariable_; // 变量索引,从0开始
76 std::vector<int> idxConstraint_; // 约束索引,从0开始
77};
78
81{
82 size_t size_{ 0 }; // 维度
83 double* lower_{ nullptr }; // 下界
84 double* upper_{ nullptr }; // 上界
85public:
86 size_t size() const { return size_; }
87 size_t& size(){return size_;}
88 double* lower(){return lower_;}
89 double* upper(){return upper_;}
90};
91
94{
95 double* data_{ nullptr }; // 数值
96 size_t size_{ 0 }; // 维度
97public:
98 double* data() const {return data_;}
99 size_t& size(){return size_;}
100 size_t size() const { return size_; }
101 double& operator[](size_t index) {return data_[index];}
102 double operator[](size_t index) const {return data_[index];}
103};
104
107{
108 NLPVectorBounds variable_; // 优化变量的上下界,不设置则默认是 -∞ <= variable <= +∞
109 NLPVectorBounds constraintIneq_; // 不等式约束上下界,不设置则默认是 -∞ <= constrIneq <= 0
110 NLPVector constraintEq_; // 等式约束的期望值,不设置则默认是 0
111public:
112 NLPVectorBounds& variable(){return variable_;}
113 NLPVectorBounds& constraintIneq(){return constraintIneq_;}
114 NLPVector& constraintEq(){return constraintEq_;}
115};
116
119{
120 NLPVector variable_;
121public:
122 NLPVector& variable(){return variable_;}
123 const NLPVector& variable() const {return variable_;}
124};
125
128{
129 NLPVector objective_;
130 NLPVector constraintEq_;
131 NLPVector constraintIneq_;
132public:
133 NLPVector& objective(){return objective_;}
134 NLPVector& constraintEq(){return constraintEq_;}
135 NLPVector& constraintIneq(){return constraintIneq_;}
136};
137
138
140{
141public:
143 virtual ~INLPProblem() = default;
144
146 virtual errc_t getInfo(NLPInfo& info) const = 0;
147
149 virtual errc_t getJacInfo(NLPJacInfo& info) const = 0;
150
152 virtual errc_t getBounds(NLPBounds& bounds) const = 0;
153
154
156 virtual errc_t evalFitness(const NLPInput& input, NLPOutput& output) const = 0;
157
158
163 virtual errc_t evalJacobi(int numVariable, const double* variable, int numConstraint, int nnzJacobi, double* nzElemjacobi) const = 0;
164
165
170 virtual errc_t evalGradient(int numVariable, const double* variable, double* grad) const = 0;
171
172
174 virtual errc_t getInitialGuess(int numVariable, double* variable) const = 0;
175
176
177};
178
179
180AST_NAMESPACE_END
181
定义 INLPProblem.hpp:140
virtual errc_t getBounds(NLPBounds &bounds) const =0
获取问题的设计变量与约束的上下界
virtual errc_t getJacInfo(NLPJacInfo &info) const =0
获取问题的雅可比矩阵信息
virtual ~INLPProblem()=default
虚析构函数
virtual errc_t getInitialGuess(int numVariable, double *variable) const =0
获取初始猜测值(迭代初值/迭代起始点)
virtual errc_t evalJacobi(int numVariable, const double *variable, int numConstraint, int nnzJacobi, double *nzElemjacobi) const =0
计算非线性方程的解析(数值)Jacobi矩阵
virtual errc_t getInfo(NLPInfo &info) const =0
获取问题的维度信息等
virtual errc_t evalGradient(int numVariable, const double *variable, double *grad) const =0
计算目标函数梯度
virtual errc_t evalFitness(const NLPInput &input, NLPOutput &output) const =0
计算目标函数和约束
非线性规划问题的上下界值
定义 INLPProblem.hpp:107
非线性规划问题的维度信息
定义 INLPProblem.hpp:33
非线性规划问题输入
定义 INLPProblem.hpp:119
定义 INLPProblem.hpp:74
非线性规划问题输出
定义 INLPProblem.hpp:128
非线性规划问题的向量上下界
定义 INLPProblem.hpp:81
非线性规划问题的向量值
定义 INLPProblem.hpp:94