00001 #ifndef _HookeJeevesDiscrete_h 00002 #define _HookeJeevesDiscrete_h 00003 00004 // SYSTEM INCLUDES 00005 // 00006 00007 // PROJECT INCLUDES 00008 // 00009 00010 // LOCAL INCLUDES 00011 // 00012 #include "../DoubleParameter.h" 00013 #include "../FunctionBase.h" 00014 #include "../ProblemBase.h" 00015 #include "../Method.h" 00016 00017 #include "HookeJeevesDiscreteIteration.h" 00018 00019 // FORWARD REFERENCES 00020 // 00021 00135 class HookeJeevesDiscrete 00136 : public Method 00137 { 00138 public: 00139 00142 friend class HookeJeevesDiscretePanel; 00143 00144 // LIFECYCLE 00145 00148 ~HookeJeevesDiscrete(void); 00149 00150 00151 // OPERATORS 00152 00153 // OPERATIONS 00154 00157 virtual std::auto_ptr<Method> Clone() const; 00158 00159 virtual void UpdateStartingConditions 00160 (const Result* result) const; 00161 00162 virtual void ResetStartingConditions() const; 00163 00164 // ACCESS 00165 00168 virtual const wxString& Name() const; 00169 00170 virtual wxString ToString(bool standalone = true) const; 00171 00174 virtual MethodIdType Id() const; 00175 00178 static MethodIdType ClassId(); 00179 00180 // INQUIRY 00181 00182 virtual bool CanHandle(const ProblemBase* pProblem) const; 00183 00184 protected: 00185 00188 HookeJeevesDiscrete(void); 00189 00194 HookeJeevesDiscrete(const HookeJeevesDiscrete& from); 00195 00196 00197 // Poniższa metoda nie jest prywatna wyłącznie ze względu na testy 00214 double CoordinateSearch 00215 (const FunctionBase& function, 00216 ColumnVector& rx, 00217 double tau, 00218 HookeJeevesDiscreteIteration& rIterationData) const; 00219 00220 DoubleParameter mTau; 00221 DoubleParameter mBeta; 00222 DoubleParameter mEpsilon; 00223 mutable ColumnVector mStartingPoint; 00224 ColumnVector mInitialStartingPoint; 00225 00226 virtual wxString& rName(); 00227 private: 00228 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const 00229 throw(OptimizationError); 00230 00231 00232 static wxString mName; 00233 static HookeJeevesDiscrete mHookeJeevesDiscrete; 00234 }; 00235 00236 // INLINE METHODS 00237 // 00238 00239 // EXTERNAL REFERENCES 00240 // 00241 00242 #endif // _HookeJeevesDiscrete_h_