summaryrefslogtreecommitdiff
path: root/utils/ccrp.h
diff options
context:
space:
mode:
authorChris Dyer <cdyer@cs.cmu.edu>2012-03-23 17:48:38 -0400
committerChris Dyer <cdyer@cs.cmu.edu>2012-03-23 17:48:38 -0400
commit52c08b69c9c93e1a75fb8b175543e56276193bd5 (patch)
treee15d048a569381aaea496033a3e4f4c47a164bc1 /utils/ccrp.h
parentcd9569397f5eea93a12f2c2063411a449b5e79b7 (diff)
pf test
Diffstat (limited to 'utils/ccrp.h')
-rw-r--r--utils/ccrp.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/utils/ccrp.h b/utils/ccrp.h
index 390d4994..8635b422 100644
--- a/utils/ccrp.h
+++ b/utils/ccrp.h
@@ -97,8 +97,10 @@ class CCRP {
}
// returns +1 or 0 indicating whether a new table was opened
+ // p = probability with which the particular table was selected
+ // excluding p0
template <typename T>
- int increment(const Dish& dish, const T& p0, MT19937* rng) {
+ int increment(const Dish& dish, const T& p0, MT19937* rng, T* p = NULL) {
DishLocations& loc = dish_locs_[dish];
bool share_table = false;
if (loc.total_dish_count_) {
@@ -112,6 +114,7 @@ class CCRP {
ti != loc.table_counts_.end(); ++ti) {
r -= (*ti - discount_);
if (r <= 0.0) {
+ if (p) { *p = T(*ti - discount_) / T(strength_ + num_customers_); }
++(*ti);
break;
}
@@ -123,6 +126,7 @@ class CCRP {
}
} else {
loc.table_counts_.push_back(1u);
+ if (p) { *p = T(strength_ + discount_ * num_tables_) / T(strength_ + num_customers_); }
++num_tables_;
}
++loc.total_dish_count_;