#include <Vivaldi.h>
Public Member Functions | |
virtual | ~Vivaldi () |
virtual void | init (NeighborCache *neighborCache) |
void | processCoordinates (const simtime_t &rtt, const AbstractNcsNodeInfo &nodeInfo) |
Prox | getCoordinateBasedProx (const AbstractNcsNodeInfo &info) const |
virtual AbstractNcsNodeInfo * | getUnvalidNcsInfo () const |
virtual AbstractNcsNodeInfo * | createNcsInfo (const std::vector< double > &coords) const |
const VivaldiCoordsInfo & | getOwnNcsInfo () const |
const std::vector< double > & | getOwnCoordinates () const |
double | getOwnError () const |
double | getOwnHeightVector () const |
Protected Member Functions | |
virtual void | finishVivaldi () |
virtual void | updateDisplay () |
virtual double | calcError (const simtime_t &rtt, double dist, double weight) |
virtual double | calcDelta (const simtime_t &rtt, double dist, double weight) |
Protected Attributes | |
VivaldiCoordsInfo * | ownCoords |
double | errorC |
double | coordC |
bool | showPosition |
GlobalStatistics * | globalStatistics |
NeighborCache * | neighborCache |
Private Attributes | |
bool | enableHeightVector |
uint32_t | dimension |
Definition at line 39 of file Vivaldi.h.
virtual Vivaldi::~Vivaldi | ( | ) | [inline, virtual] |
double Vivaldi::calcDelta | ( | const simtime_t & | rtt, | |
double | dist, | |||
double | weight | |||
) | [protected, virtual] |
Reimplemented in SVivaldi.
Definition at line 115 of file Vivaldi.cc.
Referenced by processCoordinates().
{ // estimates the delta factor return coordC * weight; }
double Vivaldi::calcError | ( | const simtime_t & | rtt, | |
double | dist, | |||
double | weight | |||
) | [protected, virtual] |
Reimplemented in SVivaldi.
Definition at line 102 of file Vivaldi.cc.
Referenced by processCoordinates().
AbstractNcsNodeInfo * Vivaldi::createNcsInfo | ( | const std::vector< double > & | coords | ) | const [virtual] |
Implements AbstractNcs.
Definition at line 128 of file Vivaldi.cc.
{ assert(coords.size() > 1); VivaldiCoordsInfo* info = new VivaldiCoordsInfo(); uint8_t i; for (i = 0; i < coords.size() - (enableHeightVector ? 2 : 1); ++i) { info->setCoords(i, coords[i]); } info->setError(coords[i++]); if (enableHeightVector) { info->setHeightVector(coords[i]); } return info; }
void Vivaldi::finishVivaldi | ( | ) | [protected, virtual] |
Definition at line 163 of file Vivaldi.cc.
{ globalStatistics->addStdDev("Vivaldi: Errori(ei)", ownCoords->getError()); }
Prox Vivaldi::getCoordinateBasedProx | ( | const AbstractNcsNodeInfo & | info | ) | const [virtual] |
Implements AbstractNcs.
Definition at line 122 of file Vivaldi.cc.
{ return ownCoords->getDistance(abstractInfo); }
const std::vector<double>& Vivaldi::getOwnCoordinates | ( | ) | const [inline] |
double Vivaldi::getOwnError | ( | ) | const [inline] |
double Vivaldi::getOwnHeightVector | ( | ) | const [inline] |
Definition at line 80 of file Vivaldi.h.
{ return ownCoords->getHeightVector(); };
const VivaldiCoordsInfo& Vivaldi::getOwnNcsInfo | ( | ) | const [inline, virtual] |
virtual AbstractNcsNodeInfo* Vivaldi::getUnvalidNcsInfo | ( | ) | const [inline, virtual] |
Implements AbstractNcs.
Definition at line 74 of file Vivaldi.h.
{ return new VivaldiCoordsInfo(enableHeightVector); };
void Vivaldi::init | ( | NeighborCache * | neighborCache | ) | [virtual] |
Implements AbstractNcs.
Reimplemented in SVivaldi.
Definition at line 32 of file Vivaldi.cc.
{ this->neighborCache = neighborCache; errorC = neighborCache->par("vivaldiErrorConst"); coordC = neighborCache->par("vivaldiCoordConst"); dimension = neighborCache->par("vivaldiDimConst"); enableHeightVector = neighborCache->par("vivaldiEnableHeightVector"); showPosition = neighborCache->par("vivaldiShowPosition"); // init variables VivaldiCoordsInfo::setDimension(dimension); ownCoords = new VivaldiCoordsInfo(); for (uint32_t i = 0; i < dimension; i++) { ownCoords->setCoords(i, uniform(-.2, .2)); } if (enableHeightVector) ownCoords->setHeightVector(0.0); WATCH(*ownCoords); globalStatistics = GlobalStatisticsAccess().get(); };
void Vivaldi::processCoordinates | ( | const simtime_t & | rtt, | |
const AbstractNcsNodeInfo & | nodeInfo | |||
) | [virtual] |
Reimplemented from AbstractNcs.
Definition at line 56 of file Vivaldi.cc.
{ if (rtt <= 0.0) { std::cout << "Vivaldi::processCoordinates() called with rtt = " << rtt << std::endl; return; } if (!dynamic_cast<const VivaldiCoordsInfo*>(&nodeInfo)) { throw cRuntimeError("Vivaldi coords needed!"); } const VivaldiCoordsInfo& info = *(static_cast<const VivaldiCoordsInfo*>(&nodeInfo)); // calculate weight double weight = (((ownCoords->getError() + info.getError()) == 0) ? 0 : (ownCoords->getError() / (ownCoords->getError() + info.getError()))); // calculate distance double dist = ownCoords->getDistance(info).proximity; // ... own error ownCoords->setError(calcError(rtt, dist, weight)); // delta double delta = calcDelta(rtt, dist, weight); // update local coordinates if (dist > 0) { for (uint8_t i = 0; i < dimension; i++) { ownCoords->setCoords(i, ownCoords->getCoords(i) + (delta * (SIMTIME_DBL(rtt) - dist)) * ((ownCoords->getCoords(i) - info.getCoords(i)) / dist)); } if(enableHeightVector) { ownCoords->setHeightVector(ownCoords->getHeightVector() + (delta * (SIMTIME_DBL(rtt) - dist))); } } updateDisplay(); }
void Vivaldi::updateDisplay | ( | ) | [protected, virtual] |
Definition at line 147 of file Vivaldi.cc.
Referenced by processCoordinates().
{ char buf[60]; sprintf(buf, "xi[0]: %f xi[1]: %f ", ownCoords->getCoords(0), ownCoords->getCoords(1)); neighborCache->getDisplayString().setTagArg("t", 0, buf); // show nodes at estimated position TODO if (showPosition) { for (uint32_t i = 0; i < dimension; i++) neighborCache->getParentModule() ->getDisplayString().setTagArg("p", i, ownCoords->getCoords(i) * 1000); } }
double Vivaldi::coordC [protected] |
Definition at line 50 of file Vivaldi.h.
Referenced by calcDelta(), SVivaldi::calcDelta(), and init().
uint32_t Vivaldi::dimension [private] |
Definition at line 44 of file Vivaldi.h.
Referenced by init(), processCoordinates(), and updateDisplay().
bool Vivaldi::enableHeightVector [private] |
Definition at line 43 of file Vivaldi.h.
Referenced by createNcsInfo(), getUnvalidNcsInfo(), init(), and processCoordinates().
double Vivaldi::errorC [protected] |
Definition at line 49 of file Vivaldi.h.
Referenced by calcError(), SVivaldi::calcError(), and init().
GlobalStatistics* Vivaldi::globalStatistics [protected] |
Definition at line 62 of file Vivaldi.h.
Referenced by finishVivaldi(), and init().
NeighborCache* Vivaldi::neighborCache [protected] |
Definition at line 63 of file Vivaldi.h.
Referenced by SVivaldi::calcError(), and updateDisplay().
VivaldiCoordsInfo* Vivaldi::ownCoords [protected] |
Definition at line 47 of file Vivaldi.h.
Referenced by calcError(), SVivaldi::calcError(), finishVivaldi(), getCoordinateBasedProx(), getOwnCoordinates(), getOwnError(), getOwnHeightVector(), getOwnNcsInfo(), init(), processCoordinates(), updateDisplay(), and ~Vivaldi().
bool Vivaldi::showPosition [protected] |
Definition at line 52 of file Vivaldi.h.
Referenced by init(), and updateDisplay().