xo-tokenizer2/xo-process/include/xo/process/StochasticProcess.hpp
Roland Conybeare 2450ab4ed9 Add 'xo-process/' from commit '7cfc560f02'
git-subtree-dir: xo-process
git-subtree-mainline: abd08e3491
git-subtree-split: 7cfc560f02
2025-05-11 16:10:34 -05:00

73 lines
2.3 KiB
C++

/* @file StochasticProcess.hpp */
#pragma once
#include "AbstractStochasticProcess.hpp"
//#include "refcnt/Refcounted.hpp"
//#include "time/Time.hpp"
#include <string>
#include <utility>
namespace xo {
namespace process {
// abstraction for a stochastic process.
// - represents a probability space:
// - a collection of paths
// - an associated probability measure on path sapce
// - paths may vary continuously with time
// - need not be continuous
// - want to be able to use in simulation,
// in which case will likely require some discretization
//
template<typename T>
class StochasticProcess : public AbstractStochasticProcess {
public:
using value_type = T;
using utc_nanos = xo::time::utc_nanos;
using event_type = std::pair<utc_nanos, T>;
public:
virtual ~StochasticProcess() = default;
/* starting time for this process */
virtual utc_nanos t0() const = 0;
/* starting value of this process */
virtual T t0_value() const = 0;
/* sample this process at time t,
* given preceding known value
* {t1, v1}
* with t1 < t
*/
virtual value_type exterior_sample(utc_nanos t,
event_type const & lo) = 0;
/* sample this process at time t,
* given surrounding known values
* {t1, v1}, {t2, v2}
* with t1 < t < t2
*/
virtual value_type interior_sample(utc_nanos t,
event_type const & lo,
event_type const & hi) = 0;
#ifdef NOT_IN_USE
/* sample hitting time
* T(a) = inf{t : P(t)=a, t>t1} for process hitting value a,
* given preceding known value
* {t1, v1} = {lo.first, lo.second}
*/
virtual utc_nanos hitting_time(T const & a,
event_type const & lo) = 0;
#endif
/* human-readable string identifying this process */
virtual std::string display_string() const = 0;
}; /*StochasticProcess*/
} /*namespace process*/
} /*namespace xo*/
/* end StochasticProcess.hpp */