void WP::mle() {
   double old_loglike = loglike(
       concatenate_params(average_daily_rate(), day_of_week_pattern(),
                          weekday_hourly_pattern(), weekend_hourly_pattern()));
   double dloglike = 1.0;
   while (dloglike > 1e-5) {
     maximize_average_daily_rate();
     maximize_daily_pattern();
     maximize_hourly_pattern();
     double new_loglike = loglike(concatenate_params(
         average_daily_rate(), day_of_week_pattern(), weekday_hourly_pattern(),
         weekend_hourly_pattern()));
     dloglike = new_loglike - old_loglike;
     old_loglike = new_loglike;
   }
 }
 const Vec &WP::hourly_pattern(int day)const{
   if(day==Sat || day==Sun) return weekend_hourly_pattern();
   return weekday_hourly_pattern();
 }