libMesh
optimization_solver.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2019 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 #ifdef LIBMESH_FORWARD_DECLARE_ENUMS
31 namespace libMesh
32 {
33 enum SolverPackage : int;
34 }
35 #else
36 #include "libmesh/enum_solver_package.h"
37 #endif
38 
39 // C++ includes
40 #include <cstddef>
41 #include <memory>
42 
43 namespace libMesh
44 {
45 
46 // forward declarations
47 template <typename T> class SparseMatrix;
48 template <typename T> class NumericVector;
49 template <typename T> class Preconditioner;
50 
59 template <typename T>
60 class OptimizationSolver : public ReferenceCountedObject<OptimizationSolver<T>>,
61  public ParallelObject
62 {
63 public:
68 
72  explicit
74 
78  virtual ~OptimizationSolver ();
79 
84  static std::unique_ptr<OptimizationSolver<T>> build(sys_type & s,
85  const SolverPackage solver_package = libMesh::default_solver_package());
86 
91  bool initialized () const { return _is_initialized; }
92 
96  virtual void clear () {}
97 
101  virtual void init () = 0;
102 
106  virtual void solve () = 0;
107 
113  virtual void get_dual_variables()
114  { libmesh_not_implemented(); }
115 
120  virtual void print_converged_reason() { libmesh_not_implemented(); }
121 
131  virtual int get_converged_reason() { return 0; }
132 
138 
144 
150 
156 
161 
167 
172 
177 
182  const sys_type & system () const { return _system; }
183 
188  sys_type & system () { return _system; }
189 
194 
199 
203  bool verbose;
204 
205 protected:
206 
211 
216 
217 };
218 
219 } // namespace libMesh
220 
221 
222 #endif // LIBMESH_OPTIMIZATION_SOLVER_H
libMesh::OptimizationSystem
This System subclass enables us to assemble an objective function, gradient, Hessian and bounds for o...
Definition: optimization_system.h:43
libMesh::OptimizationSolver::equality_constraints_jacobian_object
OptimizationSystem::ComputeEqualityConstraintsJacobian * equality_constraints_jacobian_object
Object that computes the Jacobian of C_eq(X).
Definition: optimization_solver.h:160
libMesh::SolverPackage
SolverPackage
Defines an enum for various linear solver packages.
Definition: enum_solver_package.h:34
libMesh::OptimizationSolver::build
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.
Definition: optimization_solver.C:62
libMesh::OptimizationSolver::print_converged_reason
virtual void print_converged_reason()
Prints a useful message about why the latest optimization solve con(di)verged.
Definition: optimization_solver.h:120
libMesh::OptimizationSolver::hessian_object
OptimizationSystem::ComputeHessian * hessian_object
Object that computes the Hessian H_f(X) of the objective function at the input iterate X.
Definition: optimization_solver.h:149
libMesh::OptimizationSolver::system
sys_type & system()
Definition: optimization_solver.h:188
libMesh::OptimizationSolver::max_objective_function_evaluations
unsigned int max_objective_function_evaluations
Maximum number of objective function evaluations allowed.
Definition: optimization_solver.h:193
libMesh::OptimizationSystem::ComputeInequalityConstraintsJacobian
Abstract base class to be used to calculate the Jacobian of the inequality constraints.
Definition: optimization_system.h:187
libMesh::ReferenceCountedObject
This class implements reference counting.
Definition: reference_counted_object.h:65
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::OptimizationSystem::ComputeInequalityConstraints
Abstract base class to be used to calculate the inequality constraints.
Definition: optimization_system.h:169
libMesh::OptimizationSolver::get_converged_reason
virtual int get_converged_reason()
Definition: optimization_solver.h:131
libMesh::OptimizationSystem::ComputeHessian
Abstract base class to be used to calculate the Hessian of an objective function.
Definition: optimization_system.h:116
libMesh::default_solver_package
SolverPackage default_solver_package()
Definition: libmesh.C:993
libMesh::OptimizationSolver::objective_object
OptimizationSystem::ComputeObjective * objective_object
Object that computes the objective function f(X) at the input iterate X.
Definition: optimization_solver.h:137
libMesh::OptimizationSystem::ComputeEqualityConstraints
Abstract base class to be used to calculate the equality constraints.
Definition: optimization_system.h:135
libMesh::OptimizationSolver::clear
virtual void clear()
Release all memory and clear data structures.
Definition: optimization_solver.h:96
libMesh::OptimizationSolver::init
virtual void init()=0
Initialize data structures if not done so already.
libMesh::OptimizationSolver::inequality_constraints_jacobian_object
OptimizationSystem::ComputeInequalityConstraintsJacobian * inequality_constraints_jacobian_object
Object that computes the Jacobian of C_ineq(X).
Definition: optimization_solver.h:171
libMesh::OptimizationSolver
This base class can be inherited from to provide interfaces to optimization solvers from different pa...
Definition: optimization_solver.h:60
libMesh::OptimizationSystem::ComputeLowerAndUpperBounds
Abstract base class to be used to calculate the lower and upper bounds for all dofs in the system.
Definition: optimization_system.h:204
libMesh::OptimizationSolver::objective_function_relative_tolerance
double objective_function_relative_tolerance
Required change in objective function which signals convergence.
Definition: optimization_solver.h:198
libMesh::OptimizationSolver::sys_type
OptimizationSystem sys_type
The type of system.
Definition: optimization_solver.h:67
libMesh::OptimizationSystem::ComputeEqualityConstraintsJacobian
Abstract base class to be used to calculate the Jacobian of the equality constraints.
Definition: optimization_system.h:153
libMesh::OptimizationSolver::system
const sys_type & system() const
Definition: optimization_solver.h:182
libMesh::OptimizationSystem::ComputeObjective
Abstract base class to be used to calculate the objective function for optimization.
Definition: optimization_system.h:74
libMesh::OptimizationSolver::get_dual_variables
virtual void get_dual_variables()
Get the current values of dual variables associated with inequality and equality constraints.
Definition: optimization_solver.h:113
libMesh::OptimizationSolver::~OptimizationSolver
virtual ~OptimizationSolver()
Destructor.
Definition: optimization_solver.C:54
libMesh::OptimizationSystem::ComputeGradient
Abstract base class to be used to calculate the gradient of an objective function.
Definition: optimization_system.h:95
libMesh::OptimizationSolver::lower_and_upper_bounds_object
OptimizationSystem::ComputeLowerAndUpperBounds * lower_and_upper_bounds_object
Object that computes the lower and upper bounds vectors.
Definition: optimization_solver.h:176
libMesh::OptimizationSolver::OptimizationSolver
OptimizationSolver(sys_type &s)
Constructor.
Definition: optimization_solver.C:32
libMesh::OptimizationSolver::initialized
bool initialized() const
Definition: optimization_solver.h:91
libMesh::OptimizationSolver::verbose
bool verbose
Control how much is output from the OptimizationSolver as it's running.
Definition: optimization_solver.h:203
libMesh::OptimizationSolver::_is_initialized
bool _is_initialized
Flag indicating if the data structures have been initialized.
Definition: optimization_solver.h:215
libMesh::OptimizationSolver::solve
virtual void solve()=0
Solves the optimization problem.
libMesh::ParallelObject
An object whose state is distributed along a set of processors.
Definition: parallel_object.h:55
libMesh::OptimizationSolver::gradient_object
OptimizationSystem::ComputeGradient * gradient_object
Object that computes the gradient grad_f(X) of the objective function at the input iterate X.
Definition: optimization_solver.h:143
libMesh::OptimizationSolver::equality_constraints_object
OptimizationSystem::ComputeEqualityConstraints * equality_constraints_object
Object that computes the equality constraints vector C_eq(X).
Definition: optimization_solver.h:155
libMesh::OptimizationSolver::inequality_constraints_object
OptimizationSystem::ComputeInequalityConstraints * inequality_constraints_object
Object that computes the inequality constraints vector C_ineq(X).
Definition: optimization_solver.h:166
int
void ErrorVector unsigned int
Definition: adjoints_ex3.C:360
libMesh::OptimizationSolver::_system
sys_type & _system
A reference to the system we are solving.
Definition: optimization_solver.h:210