Program Listing for File partition_probability.hpp
↰ Return to documentation for file (cosm/ta/partition_probability.hpp
)
#pragma once
/*******************************************************************************
* Includes
******************************************************************************/
#include <string>
#include "rcppsw/er/client.hpp"
#include "rcppsw/math/expression.hpp"
#include "rcppsw/math/rng.hpp"
#include "rcppsw/math/sigmoid.hpp"
#include "cosm/ta/time_estimate.hpp"
/*******************************************************************************
* Namespaces/Decls
******************************************************************************/
namespace cosm::ta {
namespace config {
struct sigmoid_sel_config;
} /* namespace config */
/*******************************************************************************
* Class Definitions
******************************************************************************/
class partition_probability final : public rmath::sigmoid,
public rer::client<partition_probability> {
public:
static inline const std::string kMethodPini2011 = "pini2011";
static inline const std::string kMethodRandom = "random";
/*
* A default reactivity value determined experimentally to work well.
*/
static constexpr const double kDEFAULT_REACTIVITY = 1.5;
/*
* A default reactivity value that does *not* induce singularities in the
* overall equation. Choose not to employ it at your own risk...
*/
static constexpr const double kDEFAULT_OFFSET = 1.0;
/* A default gamma value because there needs to be one */
static constexpr const double kDEFAULT_GAMMA = 1.0;
explicit partition_probability(const std::string& method)
: sigmoid(kDEFAULT_REACTIVITY, kDEFAULT_OFFSET, kDEFAULT_GAMMA),
ER_CLIENT_INIT("cosm.ta.partition_probability"),
mc_method(method) {}
explicit partition_probability(const config::sigmoid_sel_config* config);
double operator()(const time_estimate& task,
const time_estimate& subtask1,
const time_estimate& subtask2,
rmath::rng* rng);
const std::string& method(void) const { return mc_method; }
private:
double calc_pini2011(const time_estimate& task,
const time_estimate& subtask1,
const time_estimate& subtask2);
double calc_random(rmath::rng* rng);
/* clang-format off */
const std::string mc_method;
/* clang-format on */
};
} /* namespace cosm::ta */