00001
00193 #ifndef _Simplex_h
00194 #define _Simplex_h
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204 #include "../AugmentedForm.h"
00205 #include "../LinearProblem.h"
00206 #include "../LinearMethod.h"
00207 #include "../util.h"
00208
00209
00210
00211
00212
00213 class Simplex
00214 : public LinearMethod
00215 {
00216 public:
00217
00218
00221 ~Simplex(void);
00222
00223
00224
00225
00226
00227
00228
00229
00230 virtual void UpdateStartingConditions(const Result* result) const
00231 {}
00232
00233 virtual void ResetStartingConditions() const
00234 {}
00235
00236 public:
00237
00240 virtual std::auto_ptr<Method> Clone() const;
00241
00242
00243
00246 virtual const wxString& Name() const;
00247
00250 virtual MethodIdType Id() const;
00251
00254 static MethodIdType ClassId();
00255
00256 virtual wxString ToString(bool standalone = true) const;
00257
00258
00259
00260 protected:
00261
00264 Simplex(void);
00265
00270 Simplex(const Simplex& from);
00271
00272 virtual wxString& rName();
00273 private:
00274
00275 virtual std::auto_ptr<Result> Optimize(const ProblemBase& problem) const
00276 throw(OptimizationError);
00277
00298 bool TrivialFirstBase(
00299 CountedPtr<const AugmentedForm> cpMainProblemData,
00300 vector<int>& riB,
00301 vector<int>& riN) const;
00302
00324 void SolveExtendedProblem(
00325 CountedPtr<const AugmentedForm> cpMainProblemData,
00326 vector<int>& riB,
00327 vector<int>& riN,
00328 int& stepCount,
00329 Result* pResult) const
00330 throw(Error);
00331
00332
00348 void InitializeBase(const Matrix& A,
00349 const vector<int>& iB,
00350 const vector<int>& iN,
00351 SquareMatrix& rB,
00352 Matrix& rN) const;
00353
00366 ColumnVector Calculate_d(const ColumnVector& c,
00367 const vector<int>& iB,
00368 const vector<int>& iN,
00369 const SquareMatrix& BInv,
00370 const Matrix& N) const;
00371
00387 void Solve(CountedPtr<const AugmentedForm> cpMainProblemData,
00388 CountedPtr<const AugmentedForm> cpExtendedProblemData,
00389 vector<int>& riB,
00390 vector<int>& riN,
00391 int& stepCount,
00392 Result* pResult) const
00393 throw(Error);
00394
00395
00396
00397 static Simplex mSimplex;
00398 static wxString mName;
00399 };
00400
00401
00402
00403
00404
00405
00406
00407 #endif // _Simplex_h_