Miind
ProbabilityQueue.hpp
Go to the documentation of this file.
1 // Copyright (c) 2005 - 2014 Marc de Kamps
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5 //
6 // * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 // * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation
8 // and/or other materials provided with the distribution.
9 // * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software
10 // without specific prior written permission.
11 //
12 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
13 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
14 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
15 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
16 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17 //
18 // If you use this software in work leading to a scientific publication, you should include a reference there to
19 // the 'currently valid reference', which can be found at http://miind.sourceforge.net
20 #ifndef _CODE_LIBS_MPILIB_PRIORITYQUEUE_INCLUDE_GUARD
21 #define _CODE_LIBS_MPILIB_PRIORITYQUEUE_INCLUDE_GUARD
22 
23 #include <queue>
25 #include "StampedProbability.hpp"
26 
27 using std::queue;
28 
29 namespace MPILib {
30 namespace populist {
31 
36  public:
39 
42 
44  void push(const StampedProbability& prob);
45 
47  bool HasProbability(Time) const;
48 
51 
54 
56  bool IsConsistent() const;
57 
59  Time TimeCurrent() const { return _t_current; }
60 
62  void Scale(double);
63 
64  Time TBatch () const { return _t_batch_size; }
65 
66  private:
67 
68  double _scale;
72 
75 
76  std::queue<StampedProbability> _queue;
77 
78  };
79 } // populist
80 } //MPILib
81 #endif // include guard
void push(const StampedProbability &prob)
push time stamped probability on the queue
double Time
A queue to store probability density, effectively a pipeline.
Probability TotalProbability() const
Total probability in queue.
bool HasProbability(Time) const
if there is time stamped probability that would be retrieved by CollectAndRemove before this will ret...
const Time TIME_REFRACT_MIN
Even if refraction is not considered, for some algorithms it is convenient to set it artificially to ...
ProbabilityQueue(Time time_step=TIME_REFRACT_MIN)
Probability is grouped in batches.
bool IsConsistent() const
Stamped Probability must entered in the queue in the right time order.
A time stamped measure of probability.
double Probability
Probability CollectAndRemove(Time)
add all probability that is batched below the current time and remove it from the queue ...
std::queue< StampedProbability > _queue
void Scale(double)
Sometimes, after rebinning the probability in the queue needs to be rescaled.
Time TimeCurrent() const
Current time based on last CollectAndRemove call.