equal
deleted
inserted
replaced
57 } |
57 } |
58 |
58 |
59 void SurvRateGroup::reset() { |
59 void SurvRateGroup::reset() { |
60 _all_regions_allocated = 0; |
60 _all_regions_allocated = 0; |
61 _setup_seq_num = 0; |
61 _setup_seq_num = 0; |
62 _accum_surv_rate = 0.0; |
|
63 _last_pred = 0.0; |
62 _last_pred = 0.0; |
64 // the following will set up the arrays with length 1 |
63 // the following will set up the arrays with length 1 |
65 _region_num = 1; |
64 _region_num = 1; |
66 |
65 |
67 // The call to stop_adding_regions() will use "new" to refill |
66 // The call to stop_adding_regions() will use "new" to refill |
81 } |
80 } |
82 |
81 |
83 void SurvRateGroup::start_adding_regions() { |
82 void SurvRateGroup::start_adding_regions() { |
84 _setup_seq_num = _stats_arrays_length; |
83 _setup_seq_num = _stats_arrays_length; |
85 _region_num = 0; |
84 _region_num = 0; |
86 _accum_surv_rate = 0.0; |
|
87 } |
85 } |
88 |
86 |
89 void SurvRateGroup::stop_adding_regions() { |
87 void SurvRateGroup::stop_adding_regions() { |
90 if (_region_num > _stats_arrays_length) { |
88 if (_region_num > _stats_arrays_length) { |
91 double* old_surv_rate = _surv_rate; |
89 double* old_surv_rate = _surv_rate; |
119 for (size_t i = 0; i < _stats_arrays_length; ++i) { |
117 for (size_t i = 0; i < _stats_arrays_length; ++i) { |
120 _surv_rate[i] = 0.0; |
118 _surv_rate[i] = 0.0; |
121 } |
119 } |
122 } |
120 } |
123 |
121 |
124 double SurvRateGroup::accum_surv_rate(size_t adjustment) { |
|
125 // we might relax this one in the future... |
|
126 guarantee( adjustment == 0 || adjustment == 1, "pre-condition" ); |
|
127 |
|
128 double ret = _accum_surv_rate; |
|
129 if (adjustment > 0) { |
|
130 TruncatedSeq* seq = get_seq(_region_num+1); |
|
131 double surv_rate = get_new_prediction(seq); |
|
132 ret += surv_rate; |
|
133 } |
|
134 |
|
135 return ret; |
|
136 } |
|
137 |
|
138 int SurvRateGroup::next_age_index() { |
122 int SurvRateGroup::next_age_index() { |
139 TruncatedSeq* seq = get_seq(_region_num); |
|
140 double surv_rate = get_new_prediction(seq); |
|
141 _accum_surv_rate += surv_rate; |
|
142 |
|
143 ++_region_num; |
123 ++_region_num; |
144 return (int) ++_all_regions_allocated; |
124 return (int) ++_all_regions_allocated; |
145 } |
125 } |
146 |
126 |
147 void SurvRateGroup::record_surviving_words(int age_in_group, size_t surv_words) { |
127 void SurvRateGroup::record_surviving_words(int age_in_group, size_t surv_words) { |
158 if ((size_t)(age_in_group+1) > _summary_surv_rates_max_len) |
138 if ((size_t)(age_in_group+1) > _summary_surv_rates_max_len) |
159 _summary_surv_rates_max_len = age_in_group+1; |
139 _summary_surv_rates_max_len = age_in_group+1; |
160 } |
140 } |
161 } |
141 } |
162 |
142 |
163 void SurvRateGroup::all_surviving_words_recorded(bool propagate) { |
143 void SurvRateGroup::all_surviving_words_recorded(bool update_predictors) { |
164 if (propagate && _region_num > 0) { // conservative |
144 if (update_predictors && _region_num > 0) { // conservative |
165 double surv_rate = _surv_rate_pred[_region_num-1]->last(); |
145 double surv_rate = _surv_rate_pred[_region_num-1]->last(); |
166 for (size_t i = _region_num; i < _stats_arrays_length; ++i) { |
146 for (size_t i = _region_num; i < _stats_arrays_length; ++i) { |
167 guarantee( _surv_rate[i] <= 0.00001, |
147 guarantee( _surv_rate[i] <= 0.00001, |
168 "the slot should not have been updated" ); |
148 "the slot should not have been updated" ); |
169 _surv_rate_pred[i]->add(surv_rate); |
149 _surv_rate_pred[i]->add(surv_rate); |