void IRLTest::runOptimization()
{
  est_weights_ = Eigen::VectorXd::Zero(num_features_);
  optimizer_.reset(new IRLOptimizer(num_features_));
  //optimizer_->setBeta(100.0);
  optimizer_->setData(data_);
  optimizer_->setWeights(est_weights_);
  //optimizer_->runSBMLR();
  optimizer_->optimizeWithCV(6);
//  optimizer_->setAlpha(0.000000001);
//  optimizer_->useAllData();
//  optimizer_->runLBFGS();
  optimizer_->getWeights(est_weights_);

  if (real_weights_exist_)
  {
    printf("Weights: (real / est)\n");
    for (int i=0; i<num_features_; ++i)
    {
      printf("%f\t%f\n", real_weights_[i], est_weights_[i]);
    }
  }
  else
  {
    printf("Weights: (est)\n");
    for (int i=0; i<num_features_; ++i)
    {
      printf("%f\n", est_weights_[i]);
    }
  }
  optimizer_->computeAverageRank();
}