00001 00155 #ifndef _RosenbrockDiscrete_h 00156 #define _RosenbrockDiscrete_h 00157 00158 // SYSTEM INCLUDES 00159 // 00160 00161 // PROJECT INCLUDES 00162 // 00163 00164 // LOCAL INCLUDES 00165 // 00166 #include "../DoubleParameter.h" 00167 #include "../FunctionBase.h" 00168 #include "../ProblemBase.h" 00169 #include "../Method.h" 00170 #include "../StandardStopCondition.h" 00171 #include "RosenbrockDiscreteIteration.h" 00172 00173 // FORWARD REFERENCES 00174 // 00175 00176 00177 class RosenbrockDiscrete 00178 : public Method 00179 { 00180 public: 00181 // LIFECYCLE 00182 00183 friend class RosenbrockDiscretePanel; 00184 00187 ~RosenbrockDiscrete(void); 00188 00189 00190 // OPERATORS 00191 00192 // OPERATIONS 00193 00196 virtual std::auto_ptr<Method> Clone() const; 00197 00198 virtual void UpdateStartingConditions 00199 (const Result* result) const; 00200 00201 virtual void ResetStartingConditions() const; 00202 00203 // ACCESS 00206 virtual const wxString& Name() const; 00207 00210 virtual MethodIdType Id() const; 00211 00214 static MethodIdType ClassId(); 00215 00216 virtual wxString ToString(bool standalone = true) const; 00217 00218 // INQUIRY 00219 00220 virtual bool CanHandle(const ProblemBase* pProblem) const; 00221 00222 virtual StopConditions AllowedStopConditions() const; 00223 00224 protected: 00225 00228 RosenbrockDiscrete(void); 00229 00234 RosenbrockDiscrete(const RosenbrockDiscrete& from); 00235 00275 void SearchAllDirections(const FunctionBase& function, 00276 ColumnVector& rxBest, 00277 double& rMin, 00278 const SquareMatrix& D, 00279 ColumnVector& rTau, 00280 ColumnVector& rLambda, 00281 RosenbrockDiscreteIteration& rIterationData) 00282 const; 00283 00318 void RotateBase ( 00319 SquareMatrix& rD, 00320 const ColumnVector& lambda, 00321 RosenbrockDiscreteIteration& rIterationData) const; 00322 00326 ColumnVector mTau; 00327 00330 DoubleParameter mAlpha; 00331 00334 DoubleParameter mBeta; 00335 00338 DoubleParameter mDelta; 00339 00342 mutable ColumnVector mStartingPoint; 00343 ColumnVector mInitialStartingPoint; 00344 00347 CountedPtr<const StandardStopCondition> mcpStopCondition; 00348 00349 virtual wxString& rName(); 00350 private: 00351 00352 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const 00353 throw(OptimizationError); 00354 00355 static wxString mName; 00356 static RosenbrockDiscrete mRosenbrockDiscrete; 00357 }; 00358 00359 // INLINE METHODS 00360 // 00361 00362 // EXTERNAL REFERENCES 00363 // 00364 00365 #endif // _RosenbrockDiscrete_h_