/home/coin/Smi-0.5.0/Smi/src/SmiDiscreteDistribution.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2003, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef SmiDiscreteRV_H
00004 #define SmiDiscreteRV_H
00005 
00006 #if defined(_MSC_VER)
00007 // Turn off compiler warning about long names
00008 #  pragma warning(disable:4786)
00009 #endif
00010 
00020 #include "SmiScnData.hpp"
00021 #include "SmiLinearData.hpp"
00022 
00023 #include <vector>
00024 using namespace std;
00025 
00026 //forward declarations
00027 class SmiDiscreteRV;
00028 
00029 class SmiDiscreteDistribution
00030 {
00031         friend void SmiDiscreteUnitTest();
00032 public:
00034         void addDiscreteRV(SmiDiscreteRV *s)
00035         { smiDiscrete_.push_back(s); }
00036 
00038         SmiDiscreteRV * getDiscreteRV(int i) {return smiDiscrete_[i];}
00039 
00041         int getNumRV() { return smiDiscrete_.size(); }
00042 
00044         SmiCoreData *getCore(){ return core_; }
00045 
00047         inline void setCombineWithCoreRule(SmiCoreCombineRule *r){
00048                         combineRule_ = r;
00049         }
00050 
00052         inline SmiCoreCombineRule *getCombineWithCoreRule() { return combineRule_;}
00053 
00054         
00056         SmiDiscreteDistribution(SmiCoreData *c, SmiCoreCombineRule *r=SmiCoreCombineReplace::Instance())
00057         {
00058                 core_=c;
00059                 this->setCombineWithCoreRule(r);                
00060         }
00061 
00062         ~SmiDiscreteDistribution();
00063 
00064 private:
00065         SmiDiscreteDistribution(){core_=NULL;}
00066         SmiCoreData *core_;
00067         vector<SmiDiscreteRV *> smiDiscrete_;
00068         SmiCoreCombineRule *combineRule_;
00069 
00070 
00071 };
00072 
00073 
00074 class SmiDiscreteEvent : public SmiLinearData
00075 {
00076         friend void SmiDiscreteUnitTest();
00077 public:
00078         inline void setEventProb(double p) {prob_ = p;}
00079         inline const double getEventProb () { return prob_; }
00080         SmiDiscreteEvent(SmiLinearData d, double p):SmiLinearData(d),prob_(p){}
00081         ~SmiDiscreteEvent(){};
00082 private:
00083         double prob_;
00084 };
00085 
00086 
00087 class SmiDiscreteRV
00088 {
00089         friend void SmiDiscreteUnitTest();
00090 public:
00091         void addEvent(CoinPackedMatrix &matrix,
00092                                 CoinPackedVector &dclo, CoinPackedVector &dcup,
00093                                 CoinPackedVector &dobj,
00094                                 CoinPackedVector &drlo, CoinPackedVector &drup, double prob)
00095         {
00096                 SmiLinearData d(matrix,dclo,dcup,dobj,drlo,drup);
00097                 SmiDiscreteEvent *e = new SmiDiscreteEvent(d,prob);
00098                 events_.push_back(e); 
00099                 prob_+=prob;
00100         }
00101 
00102         inline const CoinPackedMatrix &getEventMatrix(int i)   {return events_[i]->getMatrix(); }
00103         inline const CoinPackedVector &getEventColLower(int i) {return events_[i]->getColLower();}
00104         inline const CoinPackedVector &getEventColUpper(int i) {return events_[i]->getColUpper();}
00105         inline const CoinPackedVector &getEventObjective(int i){return events_[i]->getObjective();}
00106         inline const CoinPackedVector &getEventRowLower(int i) {return events_[i]->getRowLower();}
00107         inline const CoinPackedVector &getEventRowUpper(int i) {return events_[i]->getRowUpper();}
00108         double getEventProb(int i) { 
00109         //      return events_[i]->getEventProb()/prob_;
00110                         return events_[i]->getEventProb();
00111         }
00112         inline int getNumEvents() { return events_.size(); }
00113         inline int getStage() {return stg_;}
00114         inline void setStage(int p) {stg_=p;}
00115         SmiDiscreteRV(){prob_=0.0; stg_=-1;}
00116         SmiDiscreteRV(int p) {prob_=0.0; stg_=p;}
00117         ~SmiDiscreteRV(){};
00118 private:
00119         vector<SmiDiscreteEvent *> events_;
00120         SmiStageIndex  stg_;
00121         double prob_;
00122 };
00123 
00124 void SmiDiscreteUnitTest();
00125 
00126 #endif //SmiDiscreteRV_H
00127 

Generated on Wed Aug 22 06:50:16 2007 by  doxygen 1.4.7