🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
NLPProblem.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "INLPProblem.hpp"
25
26AST_NAMESPACE_BEGIN
27
28
29//ptr2fnz:pointer to first none-zero
30
31
32AST_OPT_CAPI void aPrintSparityPatternCOO(int nnz, int* iFun, int* jVar, int idx_style);
33
34
35AST_OPT_CAPI void aPrintSparityPatternCCS();
36
37
38AST_OPT_CAPI void aParternCOOToCCS(
39 const std::vector<int>& iRow, const std::vector<int>& jCol,
40 std::vector<int>& ptr2fnz, std::vector<int>& indexRow
41);
42
43
44AST_OPT_CAPI void aParternCCSToCOO(
45 const std::vector<int>& ptr2fnz, const std::vector<int>& indexRow,
46 std::vector<int>& iFunRow, std::vector<int>& jVarCol
47);
48
49
50
51
52
54class AST_OPT_API NLPProblem
55{
56public:
57 explicit NLPProblem(INLPProblem* problem);
58
60
62 errc_t getInfo(NLPInfo& info) const;
63
65 errc_t getJacInfo(NLPJacInfo& info) const;
66
68 errc_t getBounds(NLPBounds& bounds) const;
69
71 errc_t evalFitness(const NLPInput& input, NLPOutput& output) const;
72
76 std::vector<double> evalFitness(const std::vector<double>& x) const;
77
78
83 errc_t evalFitness(const std::vector<double>& x, std::vector<double>& f) const;
84
85
96 errc_t evalFitness(
97 int numVariable, double* variable,
98 int numObjective, double* objective,
99 int numConstrEq, double* constrEq,
100 int numConstrIneq, double* constrIneq
101 ) const;
102
107 errc_t evalJacobi(int numVariable, const double* variable, int numConstraint, int nnzJacobi, double* nzElemjacobi) const;
108
109
114 errc_t evalGradient(int numVariable, const double* variable, double* grad) const;
115
116
118 errc_t getInitialGuess(int numVariable, double* variable) const;
119
120
121public:
125 std::vector<double> evalConstraint(const std::vector<double>& variable) const;
126
131 errc_t evalConstraint(const std::vector<double>& variable, std::vector<double>& constraint) const;
132
134 errc_t evalConstraint(int numVariable, const double* variable, int numConstraint, double* contraint) const;
135
137 errc_t evalObjective(int numVariable, const double* variable, int numObjective, double* objective) const;
138
140 errc_t evalObjective(int numVariable, const double* variable, double& objective) const;
141
142
143
144public:
146
147
149 errc_t evalGradientCD(double ustep, int ndim, const double* x, double* grad) const;
150
152 errc_t evalGradientFD(double ustep, int ndim, const double* x, double* grad) const;
153
155 errc_t evalGradientBD(double ustep, int ndim, const double* x, double* grad) const;
156
158 errc_t evalNLEJacobiCD(double ustep, int ndim, const double* x_input, int nConstraint, double* colmaj_jacobi) const;
159
161 errc_t evalNLEJacobiFD(double ustep, int ndim, const double* x_input, int nConstraint, double* colmaj_jacobi) const;
162
164 errc_t evalNLEJacobiBD(double ustep, int ndim, const double* x_input, int nConstraint, double* colmaj_jacobi) const;
165
174 errc_t evalNLEJacobiCCSFD(double ustep, int ndim, const double* xinput, int m, const int* iFuncRow, const int* idxNNZElem, double* jacobi_sparse_value) const;
175
182 errc_t evalNLENNZJacCCSNan(int ndim, const double* x_initguess, int m, std::vector<int>& iFunRow, std::vector<int>& idxNNZElem) const;
183
190 errc_t evalNLENNZJacNan(int ndim, const double* x_initguess, int m, int& nnz_jac) const;
191
198 errc_t evalNLENNZJacCOONan(int ndim, const double* x_initguess, int m, std::vector<int>& iFunRow, std::vector<int>& jVarCol) const;
199
200
209 errc_t evalNLENNZJacCOOSnJac(int ndim, const double* x_initguess, int m, std::vector<int>& iFunRow, std::vector<int>& jVarCol);
210protected:
211 A_DISABLE_COPY(NLPProblem);
212protected:
213 INLPProblem* m_problem; // 非线性规划问题描述接口
214 NLPInfo m_probInfo; // 非线性规划问题维度信息缓存
215};
216
217
218
219
220
221AST_NAMESPACE_END
非线性规划问题描述接口
Unit m
定义 Unit.cpp:416
定义 INLPProblem.hpp:140
非线性规划问题与相关函数
定义 NLPProblem.hpp:55
errc_t evalNLENNZJacCOOSnJac(int ndim, const double *x_initguess, int m, std::vector< int > &iFunRow, std::vector< int > &jVarCol)
使用snopt的snjac函数计算Jacobi矩阵的稀疏模式 输出COO格式描述的稀疏模式
void aPrintSparityPatternCOO(int nnz, int *iFun, int *jVar, int idx_style)
打印稀疏模式,零元素用 * 表示,0-nnz表示非零元素的内存排序
定义 NLPProblem.cpp:70
非线性规划问题的上下界值
定义 INLPProblem.hpp:107
非线性规划问题的维度信息
定义 INLPProblem.hpp:33
非线性规划问题输入
定义 INLPProblem.hpp:119
定义 INLPProblem.hpp:74
非线性规划问题输出
定义 INLPProblem.hpp:128