Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

EmpiricalRandomVariable Class Reference

#include <ranvar.h>

Inheritance diagram for EmpiricalRandomVariable:

Inheritance graph
[legend]
Collaboration diagram for EmpiricalRandomVariable:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual double value ()
virtual double interpolate (double u, double x1, double y1, double x2, double y2)
virtual double avg ()
 EmpiricalRandomVariable ()
double & minCDF ()
double & maxCDF ()
int loadCDF (const char *filename)
int seed (char *)

Protected Member Functions

int command (int argc, const char *const *argv)
int lookup (double u)

Protected Attributes

double minCDF_
double maxCDF_
int interpolation_
int numEntry_
int maxEntry_
CDFentrytable_
RNGrng_

Constructor & Destructor Documentation

EmpiricalRandomVariable::EmpiricalRandomVariable  ) 
 

Definition at line 301 of file ranvar.cc.

References interpolation_, maxCDF_, maxEntry_, and minCDF_.

00301                                                  : minCDF_(0), maxCDF_(1), maxEntry_(32), table_(0)
00302 {
00303         bind("minCDF_", &minCDF_);
00304         bind("maxCDF_", &maxCDF_);
00305         bind("interpolation_", &interpolation_);
00306         bind("maxEntry_", &maxEntry_);
00307 }


Member Function Documentation

virtual double EmpiricalRandomVariable::avg  )  [inline, virtual]
 

Implements RandomVariable.

Definition at line 181 of file ranvar.h.

References value().

00181 { return value(); } // junk

Here is the call graph for this function:

int EmpiricalRandomVariable::command int  argc,
const char *const *  argv
[protected]
 

Reimplemented from RandomVariable.

Definition at line 309 of file ranvar.cc.

References RandomVariable::command(), and loadCDF().

00310 {
00311         Tcl& tcl = Tcl::instance();
00312         if (argc == 3) {
00313                 if (strcmp(argv[1], "loadCDF") == 0) {
00314                         if (loadCDF(argv[2]) == 0) {
00315                                 tcl.resultf("%s loadCDF %s: invalid file",
00316                                             name(), argv[2]);
00317                                 return (TCL_ERROR);
00318                         }
00319                         return (TCL_OK);
00320                 }
00321         }
00322         return RandomVariable::command(argc, argv);
00323 }

Here is the call graph for this function:

double EmpiricalRandomVariable::interpolate double  u,
double  x1,
double  y1,
double  x2,
double  y2
[virtual]
 

Definition at line 367 of file ranvar.cc.

References INTER_INTEGRAL, interpolation_, and value().

Referenced by value().

00368 {
00369         double value = y1 + (x - x1) * (y2 - y1) / (x2 - x1);
00370         if (interpolation_ == INTER_INTEGRAL)   // round up
00371                 return ceil(value);
00372         return value;
00373 }

Here is the call graph for this function:

int EmpiricalRandomVariable::loadCDF const char *  filename  ) 
 

Definition at line 325 of file ranvar.cc.

References CDFentry::cdf_, maxEntry_, numEntry_, table_, and CDFentry::val_.

Referenced by command().

00326 {
00327         FILE* fp;
00328         char line[256];
00329         CDFentry* e;
00330 
00331         fp = fopen(filename, "r");
00332         if (fp == 0) 
00333                 return 0;
00334 
00335 
00336         if (table_ == 0)
00337                 table_ = new CDFentry[maxEntry_];
00338         for (numEntry_=0;  fgets(line, 256, fp);  numEntry_++) {
00339                 if (numEntry_ >= maxEntry_) {   // resize the CDF table
00340                         maxEntry_ *= 2;
00341                         e = new CDFentry[maxEntry_];
00342                         for (int i=numEntry_-1; i >= 0; i--)
00343                                 e[i] = table_[i];
00344                         delete table_;
00345                         table_ = e;
00346                 }
00347                 e = &table_[numEntry_];
00348                 // Use * and l together raises a warning
00349                 sscanf(line, "%lf %*f %lf", &e->val_, &e->cdf_);
00350         }
00351         fclose(fp);
00352         return numEntry_;
00353 }

int EmpiricalRandomVariable::lookup double  u  )  [protected]
 

Definition at line 375 of file ranvar.cc.

References CDFentry::cdf_, numEntry_, and table_.

Referenced by value().

00376 {
00377         // always return an index whose value is >= u
00378         int lo, hi, mid;
00379         if (u <= table_[0].cdf_)
00380                 return 0;
00381         for (lo=1, hi=numEntry_-1;  lo < hi; ) {
00382                 mid = (lo + hi) / 2;
00383                 if (u > table_[mid].cdf_)
00384                         lo = mid + 1;
00385                 else hi = mid;
00386         }
00387         return lo;
00388 }

double& EmpiricalRandomVariable::maxCDF  )  [inline]
 

Definition at line 184 of file ranvar.h.

References maxCDF_.

00184 { return maxCDF_; }

double& EmpiricalRandomVariable::minCDF  )  [inline]
 

Definition at line 183 of file ranvar.h.

References minCDF_.

00183 { return minCDF_; }

int RandomVariable::seed char *   )  [inherited]
 

Definition at line 60 of file ranvar.cc.

References RandomVariable::rng_.

Referenced by EXPOO_Traffic::command().

00060                                 {
00061         
00062         Tcl& tcl = Tcl::instance();
00063 
00064                 rng_ = (RNG*)TclObject::lookup(x);
00065                 if (rng_ == 0) {
00066                         tcl.resultf("no such RNG %s", x);
00067                         return(TCL_ERROR);
00068                 }
00069                 return(TCL_OK);
00070  
00071 }

double EmpiricalRandomVariable::value  )  [virtual]
 

Implements RandomVariable.

Definition at line 355 of file ranvar.cc.

References CDFentry::cdf_, interpolate(), interpolation_, lookup(), maxCDF_, minCDF_, numEntry_, RandomVariable::rng_, table_, and RNG::uniform().

Referenced by avg(), EmpFtpTrafPool::command(), EmpWebPage::doneObject(), EmpWebTrafSession::donePage(), EmpWebTrafSession::expire(), EmpWebPage::expire(), EmpFtpTrafSession::expire(), EmpWebTrafSession::handle(), EmpWebPage::handle(), EmpFtpTrafSession::handle(), and interpolate().

00356 {
00357         if (numEntry_ <= 0)
00358                 return 0;
00359         double u = rng_->uniform(minCDF_, maxCDF_);
00360         int mid = lookup(u);
00361         if (mid && interpolation_ && u < table_[mid].cdf_)
00362                 return interpolate(u, table_[mid-1].cdf_, table_[mid-1].val_,
00363                                    table_[mid].cdf_, table_[mid].val_);
00364         return table_[mid].val_;
00365 }

Here is the call graph for this function:


Member Data Documentation

int EmpiricalRandomVariable::interpolation_ [protected]
 

Definition at line 193 of file ranvar.h.

Referenced by EmpiricalRandomVariable(), interpolate(), and value().

double EmpiricalRandomVariable::maxCDF_ [protected]
 

Definition at line 192 of file ranvar.h.

Referenced by EmpiricalRandomVariable(), maxCDF(), and value().

int EmpiricalRandomVariable::maxEntry_ [protected]
 

Definition at line 195 of file ranvar.h.

Referenced by EmpiricalRandomVariable(), and loadCDF().

double EmpiricalRandomVariable::minCDF_ [protected]
 

Definition at line 191 of file ranvar.h.

Referenced by EmpiricalRandomVariable(), minCDF(), and value().

int EmpiricalRandomVariable::numEntry_ [protected]
 

Definition at line 194 of file ranvar.h.

Referenced by loadCDF(), lookup(), and value().

RNG* RandomVariable::rng_ [protected, inherited]
 

Definition at line 41 of file ranvar.h.

Referenced by RandomVariable::command(), RandomVariable::RandomVariable(), RandomVariable::seed(), value(), LogNormalRandomVariable::value(), NormalRandomVariable::value(), ParetoIIRandomVariable::value(), ParetoRandomVariable::value(), ExponentialRandomVariable::value(), and UniformRandomVariable::value().

CDFentry* EmpiricalRandomVariable::table_ [protected]
 

Definition at line 196 of file ranvar.h.

Referenced by loadCDF(), lookup(), and value().


The documentation for this class was generated from the following files:
Generated on Tue Apr 20 12:45:12 2004 for NS2.26SourcesOriginal by doxygen 1.3.3