Simplex.h

00001 
00193 #ifndef _Simplex_h
00194 #define _Simplex_h
00195 
00196 // SYSTEM INCLUDES
00197 //
00198 
00199 // PROJECT INCLUDES
00200 //
00201 
00202 // LOCAL INCLUDES
00203 //
00204 #include "../AugmentedForm.h"
00205 #include "../LinearProblem.h"
00206 #include "../LinearMethod.h"
00207 #include "../util.h"
00208 
00209 // FORWARD REFERENCES
00210 //
00211 
00212 
00213 class Simplex
00214     : public LinearMethod
00215 {
00216 public:
00217 // LIFECYCLE
00218 
00221    ~Simplex(void);
00222 
00223 
00224 // OPERATORS
00225 
00226 // OPERATIONS
00227 
00228     // TODO: Co tu zrobić? Tej metody nie powinno być w sympleksie,
00229     // ale abstrakcyjna w Method jest bezpieczeniejsza.
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 // ACCESS
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 // INQUIRY
00259 // LIFECYCLE
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 // INLINE METHODS
00402 //
00403 
00404 // EXTERNAL REFERENCES
00405 //
00406 
00407 #endif  // _Simplex_h_

Wygenerowano Fri Sep 29 21:04:48 2006 dla EduOptim2 programem  doxygen 1.4.6