00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef BFGS_UPDATE_STRATEGY_H
00030 #define BFGS_UPDATE_STRATEGY_H
00031
00032 #include "MoochoPack_Types.hpp"
00033 #include "MoochoPack_QuasiNewtonStats.hpp"
00034 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00035
00036 namespace MoochoPack {
00037
00046 class BFGSUpdate_Strategy {
00047 public:
00048
00052 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, rescale_init_identity );
00053
00057 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, use_dampening );
00058
00060 enum ESecantTesting { SECANT_TEST_DEFAULT, SECANT_TEST_ALWAYS, SECANT_NO_TEST };
00061
00067 STANDARD_MEMBER_COMPOSITION_MEMBERS( ESecantTesting, secant_testing );
00068
00072 STANDARD_MEMBER_COMPOSITION_MEMBERS( value_type, secant_warning_tol );
00073
00077 STANDARD_MEMBER_COMPOSITION_MEMBERS( value_type, secant_error_tol );
00078
00080 BFGSUpdate_Strategy(
00081 bool rescale_init_identity = true
00082 ,bool use_dampening = true
00083 ,ESecantTesting secant_testing = SECANT_TEST_DEFAULT
00084 ,value_type secant_warning_tol = 1e-6
00085 ,value_type secant_error_tol = 1e-1
00086 );
00087
00119 void perform_update(
00120 VectorMutable *s_bfgs
00121 ,VectorMutable *y_bfgs
00122 ,bool first_update
00123 ,std::ostream &out
00124 ,EJournalOutputLevel olevel
00125 ,bool check_results
00126 ,MatrixSymOp *B
00127 ,QuasiNewtonStats * quasi_newton_stats
00128 );
00129
00131 void print_step( std::ostream& out, const std::string& leading_str ) const;
00132
00133 };
00134
00135 }
00136
00137 #endif // BFGS_UPDATE_STRATEGY_H