20#ifndef LIBMESH_OPTIMIZATION_SOLVER_H
21#define LIBMESH_OPTIMIZATION_SOLVER_H
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"
38template <
typename T>
class SparseMatrix;
39template <
typename T>
class NumericVector;
40template <
typename T>
class Preconditioner;
76 static std::unique_ptr<OptimizationSolver<T>>
build(
sys_type & s,
106 { libmesh_not_implemented(); }
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 int get_converged_reason()
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()
SolverPackage
Defines an enum for various linear solver packages.