00001
00006 #ifndef _SimplexIteration_h
00007 #define _SimplexIteration_h
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "../AugmentedForm.h"
00018 #include "../IterationData.h"
00019
00020
00021
00022
00023
00024 class SimplexIteration
00025 : public IterationData
00026 {
00027 public:
00028
00029
00030 typedef enum {
00031 FIRST_TRIVIAL,
00032 FIRST_EXTENDED,
00033 FIRST_MAINPHASE,
00034 LAST_EXTENDED,
00035 OTHER
00036 } SimplexIterationType;
00037
00040
00041
00051 SimplexIteration(CountedPtr<const AugmentedForm> cpMainProblemData,
00052 CountedPtr<const AugmentedForm> cpExtendedProblemData,
00053 const vector<int>& iB,
00054 const vector<int>& iN);
00055
00058 ~SimplexIteration(void);
00059
00060
00061
00062
00063 void AddMatricesData(const SquareMatrix& B,
00064 const Matrix& N);
00065
00066 void AddReducedCostData(const ColumnVector& d,
00067 int s,
00068 int prevS);
00069
00070 void AddAllowedShiftData(const ColumnVector& h,
00071 int q,
00072 int prevQ,
00073 const ColumnVector& sigma);
00074
00075
00076
00077 virtual ColumnVector EndValuePoint() const;
00078
00079 virtual vector<IterationDataIdType> ClassIds() const;
00080
00081 static IterationDataIdType ClassId();
00082
00083
00084 SimplexIterationType Type() const;
00085 SimplexIterationType& rType();
00086
00087
00088 const Matrix& MainA() const;
00089
00090 const ColumnVector& MainB() const;
00091
00092 const ColumnVector& MainC() const;
00093
00094 const Matrix& ExtendedA() const;
00095
00096 const ColumnVector& ExtendedB() const;
00097
00098 const ColumnVector& ExtendedC() const;
00099
00100
00101 const vector<int>& BasicIndices() const;
00102
00103 const vector<int>& NonbasicIndices() const;
00104
00105 const SquareMatrix& Base() const;
00106 const Matrix& N() const;
00107
00108 const ColumnVector& X() const;
00109 ColumnVector& rX();
00110
00111
00112 const ColumnVector& D() const;
00113
00114 int S() const;
00115
00116 int PreviousS() const;
00117
00118
00119 const ColumnVector& H() const;
00120
00121 const ColumnVector& Sigma() const;
00122
00123 int Q() const;
00124
00125 int PreviousQ() const;
00126
00127
00128 double Alpha() const;
00129
00130 const ColumnVector& NewX() const;
00131 ColumnVector& rNewX();
00132
00133
00134 bool MainPhase() const;
00135
00136 ColumnVector ActualPoint() const;
00137
00138 ColumnVector FullPoint() const;
00139
00140 int ActualVariables() const;
00141 protected:
00142 private:
00145 CountedPtr<const AugmentedForm> mcpMainProblemData;
00146
00149 CountedPtr<const AugmentedForm> mcpExtendedProblemData;
00150
00151 SimplexIterationType mType;
00152
00153 vector<int> miB;
00154 vector<int> miN;
00155
00156 SquareMatrix mB;
00157 Matrix mN;
00158
00159 ColumnVector mX;
00160
00161 ColumnVector mD;
00162 int mS;
00163 int mPrevS;
00164
00165
00166 ColumnVector mH;
00167 ColumnVector mSigma;
00168
00169 int mQ;
00170 int mPrevQ;
00171
00172
00173 ColumnVector mNewX;
00174 };
00175
00176
00177
00178
00179
00180
00181
00182 #endif // _SimplexIteration_h