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" 38 template <
typename T>
class SparseMatrix;
39 template <
typename T>
class NumericVector;
40 template <
typename T>
class Preconditioner;
76 static std::unique_ptr<OptimizationSolver<T>>
build(
sys_type & s,
93 virtual void init () = 0;
98 virtual void solve () = 0;
106 { libmesh_not_implemented(); }
214 #endif // LIBMESH_OPTIMIZATION_SOLVER_H Abstract base class to be used to calculate the inequality constraints.
OptimizationSystem::ComputeObjective * objective_object
Object that computes the objective function f(X) at the input iterate X.
virtual ~OptimizationSolver()
Destructor.
virtual void clear()
Release all memory and clear data structures.
virtual void print_converged_reason()
Prints a useful message about why the latest optimization solve con(di)verged.
Abstract base class to be used to calculate the objective function for optimization.
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::ComputeGradient * gradient_object
Object that computes the gradient grad_f(X) of the objective function at the input iterate X...
The libMesh namespace provides an interface to certain functionality in the library.
double objective_function_relative_tolerance
Required change in objective function which signals convergence.
bool _is_initialized
Flag indicating if the data structures have been initialized.
sys_type & _system
A reference to the system we are solving.
OptimizationSystem::ComputeHessian * hessian_object
Object that computes the Hessian H_f(X) of the objective function at the input iterate X...
virtual void solve()=0
Solves the optimization problem.
OptimizationSystem::ComputeInequalityConstraints * inequality_constraints_object
Object that computes the inequality constraints vector C_ineq(X).
SolverPackage default_solver_package()
virtual void get_dual_variables()
Get the current values of dual variables associated with inequality and equality constraints.
OptimizationSystem::ComputeEqualityConstraintsJacobian * equality_constraints_jacobian_object
Object that computes the Jacobian of C_eq(X).
Abstract base class to be used to calculate the equality constraints.
This System subclass enables us to assemble an objective function, gradient, Hessian and bounds for o...
unsigned int max_objective_function_evaluations
Maximum number of objective function evaluations allowed.
virtual int get_converged_reason()
This class implements reference counting.
An object whose state is distributed along a set of processors.
OptimizationSolver(sys_type &s)
Constructor.
const sys_type & system() const
Abstract base class to be used to calculate the gradient of an objective function.
Abstract base class to be used to calculate the Jacobian of the equality constraints.
virtual void init()=0
Initialize data structures if not done so already.
OptimizationSystem::ComputeLowerAndUpperBounds * lower_and_upper_bounds_object
Object that computes the lower and upper bounds vectors.
bool verbose
Control how much is output from the OptimizationSolver as it's running.
This base class can be inherited from to provide interfaces to optimization solvers from different pa...
Abstract base class to be used to calculate the Hessian of an objective function. ...
SolverPackage
Defines an enum for various linear solver packages.
Abstract base class to be used to calculate the lower and upper bounds for all dofs in the system...
void ErrorVector unsigned int
OptimizationSystem::ComputeInequalityConstraintsJacobian * inequality_constraints_jacobian_object
Object that computes the Jacobian of C_ineq(X).
OptimizationSystem::ComputeEqualityConstraints * equality_constraints_object
Object that computes the equality constraints vector C_eq(X).
OptimizationSystem sys_type
The type of system.
Abstract base class to be used to calculate the Jacobian of the inequality constraints.