8 std::vector<MyHumanDatum>,
9 Vector2D<DiscreteDistribution<S>>> {
21 for(
size_t i=0;i<n;i++) {
22 const auto& s = dptr->at(i).output;
30 for(
auto& [s,lp] : M){
38 return -(double)(r.length()+1)*log(
alphabet.size()+1);
42 assert(this->
which_data == std::addressof(human_data));
48 std::unordered_map<typename datum_t::data_t*, size_t> max_sizes;
49 for(
auto& d : human_data) {
50 if( (not max_sizes.contains(d.data)) or max_sizes[d.data] < d.ndata) {
51 max_sizes[d.data] = d.ndata;
55 this->
LL.reset(
new LL_t());
56 this->
LL->reserve(max_sizes.size());
59 for(
const auto& [dptr, sz] : max_sizes) {
64 #pragma omp parallel for 68 Vector data_lls = Vector::Zero(sz);
77 for(
size_t i=0;i<max_sizes[dptr];i++) {
79 d.push_back(dptr->at(i));
81 data_lls(i) = MyHypothesis::string_likelihood(M, d);
83 assert(not std::isnan(data_lls(i)));
87 this->
LL->at(dptr)[h] = std::move(data_lls);
100 std::map<typename HYP::output_t, double> model_predictions;
102 for(
int h=0;h<hposterior.rows();h++) {
103 if(hposterior(h,i) < 1e-6)
continue;
111 for(
const auto& [outcome,outlp] : M) {
112 model_predictions[outcome] += hposterior(h,i) * exp(outlp);
117 return model_predictions;
std::shared_ptr< LL_t > LL
Definition: BaseGrammarHypothesis.h:90
virtual double human_chance_lp(const typename datum_t::output_t &r, const datum_t &hd) const override
Definition: MyGrammarHypothesis.h:36
virtual std::map< typename HYP::output_t, double > compute_model_predictions(const data_t &human_data, const size_t i, const Matrix &hposterior) const override
Definition: MyGrammarHypothesis.h:94
size_t ndata() const
Definition: BaseGrammarHypothesis.h:158
Super::LL_t LL_t
Definition: DeterministicGrammarHypothesis.h:24
Eigen::MatrixXf Matrix
Definition: EigenLib.h:18
Definition: DiscreteDistribution.h:25
virtual size_t nhypotheses() const
A convenient function that uses C to say how many hypotheses.
Definition: BaseGrammarHypothesis.h:228
volatile sig_atomic_t CTRL_C
bool contains(const T &x) const
Definition: DiscreteDistribution.h:121
A version of a BaseGrammarHypothesis where the hypotheses are thunks (functions of no arguments)...
Definition: ThunkGrammarHypothesis.h:20
Args... datum_t
Definition: Bayesable.h:38
std::shared_ptr< Predict_t > P
Definition: BaseGrammarHypothesis.h:92
Just a little wrapper to allow vectors to be handled as 2D arrays, which simplifie some stuff in Gram...
Definition: Vector2D.h:14
virtual void recompute_LL(std::vector< HYP > &hypotheses, const data_t &human_data) override
Definition: MyGrammarHypothesis.h:41
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
Definition: MyGrammarHypothesis.h:5
BaseGrammarHypothesis< this_t, _HYP, datum_t, data_t, _Predict_t > Super
Definition: ThunkGrammarHypothesis.h:23
const std::vector< HumanDatum< MyHypothesis > > * which_data
Definition: BaseGrammarHypothesis.h:99
Super::data_t data_t
Definition: MyGrammarHypothesis.h:13
std::vector< Args... > data_t
Definition: Bayesable.h:39
static void remove_strings_and_renormalize(DiscreteDistribution< S > &M, datum_t::data_t *dptr, const size_t n)
Definition: MyGrammarHypothesis.h:17
S alphabet
Definition: Main.cpp:19
void erase(const T &k)
Definition: DiscreteDistribution.h:55
Eigen::VectorXf Vector
Definition: EigenLib.h:17
double Z() const
Definition: DiscreteDistribution.h:143