libMesh
Loading...
Searching...
No Matches
optimization_solver.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20#ifndef LIBMESH_OPTIMIZATION_SOLVER_H
21#define LIBMESH_OPTIMIZATION_SOLVER_H
22
23// Local includes
24#include "libmesh/libmesh_common.h"
25#include "libmesh/reference_counted_object.h"
26#include "libmesh/libmesh.h"
27#include "libmesh/parallel_object.h"
28#include "libmesh/optimization_system.h"
29
30// C++ includes
31#include <cstddef>
32#include <memory>
33
34namespace libMesh
35{
36
37// forward declarations
38template <typename T> class SparseMatrix;
39template <typename T> class NumericVector;
40template <typename T> class Preconditioner;
41enum SolverPackage : int;
42
51template <typename T>
52class OptimizationSolver : public ReferenceCountedObject<OptimizationSolver<T>>,
53 public ParallelObject
54{
55public:
60
64 explicit
66
71
76 static std::unique_ptr<OptimizationSolver<T>> build(sys_type & s,
77 const SolverPackage solver_package = libMesh::default_solver_package());
78
83 bool initialized () const { return _is_initialized; }
84
88 virtual void clear () {}
89
93 virtual void init () = 0;
94
98 virtual void solve () = 0;
99
105 virtual void get_dual_variables()
106 { libmesh_not_implemented(); }
107
112 virtual void print_converged_reason() { libmesh_not_implemented(); }
113
123 virtual int get_converged_reason() { return 0; }
124
130
136
142
148
153
159
164
169
174 const sys_type & system () const { return _system; }
175
180 sys_type & system () { return _system; }
181
186
191
196
197protected:
198
203
208
209};
210
211} // namespace libMesh
212
213
214#endif // LIBMESH_OPTIMIZATION_SOLVER_H
void ErrorVector unsigned int
This base class can be inherited from to provide interfaces to optimization solvers from different pa...
sys_type & _system
A reference to the system we are solving.
OptimizationSystem::ComputeInequalityConstraints * inequality_constraints_object
Object that computes the inequality constraints vector C_ineq(X).
bool _is_initialized
Flag indicating if the data structures have been initialized.
OptimizationSystem::ComputeGradient * gradient_object
Object that computes the gradient grad_f(X) of the objective function at the input iterate X.
OptimizationSystem::ComputeEqualityConstraintsJacobian * equality_constraints_jacobian_object
Object that computes the Jacobian of C_eq(X).
const sys_type & system() const
OptimizationSystem::ComputeInequalityConstraintsJacobian * inequality_constraints_jacobian_object
Object that computes the Jacobian of C_ineq(X).
virtual void get_dual_variables()
Get the current values of dual variables associated with inequality and equality constraints.
virtual void init()=0
Initialize data structures if not done so already.
virtual void clear()
Release all memory and clear data structures.
OptimizationSystem::ComputeHessian * hessian_object
Object that computes the Hessian H_f(X) of the objective function at the input iterate X.
static std::unique_ptr< OptimizationSolver< T > > build(sys_type &s, const SolverPackage solver_package=libMesh::default_solver_package())
Builds an OptimizationSolver using the package specified by solver_package.
OptimizationSystem sys_type
The type of system.
double objective_function_relative_tolerance
Required change in objective function which signals convergence.
OptimizationSystem::ComputeEqualityConstraints * equality_constraints_object
Object that computes the equality constraints vector C_eq(X).
OptimizationSystem::ComputeObjective * objective_object
Object that computes the objective function f(X) at the input iterate X.
virtual void print_converged_reason()
Prints a useful message about why the latest optimization solve con(di)verged.
virtual void solve()=0
Solves the optimization problem.
bool verbose
Control how much is output from the OptimizationSolver as it's running.
unsigned int max_objective_function_evaluations
Maximum number of objective function evaluations allowed.
virtual ~OptimizationSolver()
Destructor.
OptimizationSystem::ComputeLowerAndUpperBounds * lower_and_upper_bounds_object
Object that computes the lower and upper bounds vectors.
Abstract base class to be used to calculate the Jacobian of the equality constraints.
Abstract base class to be used to calculate the equality constraints.
Abstract base class to be used to calculate the gradient of an objective function.
Abstract base class to be used to calculate the Hessian of an objective function.
Abstract base class to be used to calculate the Jacobian of the inequality constraints.
Abstract base class to be used to calculate the inequality constraints.
Abstract base class to be used to calculate the lower and upper bounds for all dofs in the system.
Abstract base class to be used to calculate the objective function for optimization.
This System subclass enables us to assemble an objective function, gradient, Hessian and bounds for o...
An object whose state is distributed along a set of processors.
This class implements reference counting.
The libMesh namespace provides an interface to certain functionality in the library.
SolverPackage default_solver_package()
Definition libmesh.C:1064
SolverPackage
Defines an enum for various linear solver packages.