00001
00135 #ifndef _PowellVariant2_h
00136 #define _PowellVariant2_h
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 #include "../DoubleParameter.h"
00147 #include "../FunctionBase.h"
00148 #include "../ProblemBase.h"
00149 #include "../MethodWithLineSearch.h"
00150 #include "../ui/MethodWithLineSearchPanel.h"
00151 #include "PowellVariant2Iteration.h"
00152
00153
00154
00155
00156
00157 class PowellVariant2
00158 : public MethodWithLineSearch
00159 {
00160 public:
00161
00162
00163 friend class MethodWithLineSearchPanel<PowellVariant2>;
00164
00167 ~PowellVariant2(void);
00168
00169
00170
00171
00172
00173
00176 virtual std::auto_ptr<Method> Clone() const;
00177
00178
00179
00182 virtual const wxString& Name() const;
00183
00186 virtual MethodIdType Id() const;
00187
00190 static MethodIdType ClassId();
00191
00192
00193
00194 virtual bool CanHandle(const ProblemBase* pProblem) const;
00195
00196 virtual StopConditions AllowedStopConditions() const;
00197
00198 protected:
00199
00202 PowellVariant2(void);
00203
00208 PowellVariant2(const PowellVariant2& from);
00209
00231 void SearchAllDirections(const FunctionBase& function,
00232 ColumnVector& rxBest,
00233 const SquareMatrix& D,
00234 double& rTau_p,
00235 unsigned& rP,
00236 PowellVariant2Iteration& rIterationData) const;
00237
00238 virtual wxString& rName();
00239 private:
00240
00241 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const
00242 throw(OptimizationError);
00243 static wxString mName;
00244 static PowellVariant2 mPowellVariant2;
00245 };
00246
00247
00248
00249
00250
00251
00252
00253 #endif // _PowellVariant2_h_