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
00030
00031
00032
00033
00034 #ifndef PolakHeSearchDirectionAndMeritFunction_h
00035 #define PolakHeSearchDirectionAndMeritFunction_h
00036
00037 #include <SearchDirection.h>
00038 #include <MeritFunctionCheck.h>
00039 #include <Vector.h>
00040
00041 class PolakHeSearchDirectionAndMeritFunction : public SearchDirection, public MeritFunctionCheck
00042 {
00043
00044 public:
00045 PolakHeSearchDirectionAndMeritFunction(double gamma, double delta);
00046 ~PolakHeSearchDirectionAndMeritFunction();
00047
00048 int computeSearchDirection( int stepNumber,
00049 Vector passed_u,
00050 double passed_gFunctionValue,
00051 Vector passedGradientInStandardNormalSpace);
00052 Vector getSearchDirection();
00053
00054 int check(Vector u_old,
00055 double g_old,
00056 Vector grad_G_old,
00057 double stepSize,
00058 Vector stepDirection,
00059 double g_new);
00060 double getMeritFunctionValue(Vector u, double g, Vector grad_G);
00061 int updateMeritParameters(Vector u, double g, Vector grad_G);
00062
00063 int setAlpha(double alpha);
00064
00065 protected:
00066
00067 private:
00068 Vector searchDirection;
00069 double thetaFunction;
00070 double alpha;
00071 double gamma;
00072 double delta;
00073 };
00074
00075 #endif