/home/coin/SVN-release/CoinAll-1.1.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 (int)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         void addEvent(OsiSolverInterface &osi, double prob)
00102         {
00103                 SmiLinearData d(osi);
00104                 SmiDiscreteEvent *e = new SmiDiscreteEvent(d,prob);
00105                 events_.push_back(e); 
00106                 prob_+=prob;
00107         }
00108 
00109         inline const CoinPackedMatrix &getEventMatrix(int i)   {return events_[i]->getMatrix(); }
00110         inline const CoinPackedVector &getEventColLower(int i) {return events_[i]->getColLower();}
00111         inline const CoinPackedVector &getEventColUpper(int i) {return events_[i]->getColUpper();}
00112         inline const CoinPackedVector &getEventObjective(int i){return events_[i]->getObjective();}
00113         inline const CoinPackedVector &getEventRowLower(int i) {return events_[i]->getRowLower();}
00114         inline const CoinPackedVector &getEventRowUpper(int i) {return events_[i]->getRowUpper();}
00115         double getEventProb(int i) { 
00116         //      return events_[i]->getEventProb()/prob_;
00117                         return events_[i]->getEventProb();
00118         }
00119         inline size_t getNumEvents() { return events_.size(); }
00120         inline int getStage() {return stg_;}
00121         inline void setStage(int p) {stg_=p;}
00122         SmiDiscreteRV(){prob_=0.0; stg_=-1;}
00123         SmiDiscreteRV(int p) {prob_=0.0; stg_=p;}
00124         ~SmiDiscreteRV(){}
00125 private:
00126         vector<SmiDiscreteEvent *> events_;
00127         SmiStageIndex  stg_;
00128         double prob_;
00129 };
00130 
00131 void SmiDiscreteUnitTest();
00132 
00133 #endif //SmiDiscreteRV_H
00134 

Generated on Sun Nov 14 14:06:40 2010 for Coin-All by  doxygen 1.4.7