00001
00006 #ifndef _NelderMeadIteration_h
00007 #define _NelderMeadIteration_h
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "../IterationData.h"
00018 #include "../PointWithValue.h"
00019
00020
00021
00022
00023 class NelderMeadIteration
00024 : public IterationData
00025 {
00026 public:
00027
00028 typedef enum
00029 {
00030 REFLECTION = 1,
00031 EXPANSION,
00032 CONTRACTION,
00033 SHRINKAGE
00034 } SimplexModificationType;
00035
00036
00037
00040
00041
00046 NelderMeadIteration(const std::vector<PointWithValue>& initialSimplex);
00047
00050 ~NelderMeadIteration(void);
00051
00052
00053
00054
00055
00056 void AddReflected(const PointWithValue& reflected);
00057 void AddExpanded(const PointWithValue& expanded);
00058 void AddContracted(const PointWithValue& contracted);
00059 void AddNewSimplex(const vector<PointWithValue>& simplex);
00060 void SetSimplexModification
00061 (const SimplexModificationType simplexModification);
00062
00063
00064
00065 virtual ColumnVector EndValuePoint() const;
00066
00067 virtual vector<IterationDataIdType> ClassIds() const;
00068
00069 static IterationDataIdType ClassId();
00070
00071 const std::vector<PointWithValue>& InitialSimplex() const;
00072 const std::vector<PointWithValue>& NewSimplex() const;
00073 const PointWithValue& Reflected() const;
00074 const PointWithValue& Expanded() const;
00075 const PointWithValue& Contracted() const;
00076 SimplexModificationType SimplexModification() const;
00077
00078
00079
00080
00081 protected:
00082 private:
00083
00086 std::vector<PointWithValue> mInitialSimplex;
00089 std::vector<PointWithValue> mNewSimplex;
00090 PointWithValue mReflected;
00091 PointWithValue mExpanded;
00092 PointWithValue mContracted;
00093 SimplexModificationType mSimplexModification;
00094
00095 };
00096
00097
00098
00099
00100
00101
00102
00103 #endif // _NelderMeadIteration_h