message: polymorphic conversion of nheuristic mcts
diff: #ifdef PLANNER_UCT
  #include "bark_mcts/models/behavior/behavior_uct_hypothesis.hpp"
  #include "bark_mcts/models/behavior/behavior_uct_risk_constraint.hpp"
  +#include "bark_mcts/models/behavior/behavior_uct_nheuristic_risk_constraint.hpp"
  #include "bark_mcts/models/behavior/behavior_uct_cooperative.hpp"
  #include "bark_mcts/models/behavior/hypothesis/idm/hypothesis_idm.hpp"
  using bark::models::behavior::BehaviorHypothesisIDM;
  using bark::models::behavior::BehaviorUCTHypothesis;
  using bark::models::behavior::BehaviorUCTRiskConstraint;
  using bark::models::behavior::BehaviorUCTCooperative;
  +using bark::models::behavior::BehaviorUCTNHeuristicRiskConstraint;
  #endif
  #ifdef PLANNER_MIQP
  @@ -177,6 +179,8 @@ py::tuple BehaviorModelToPython(BehaviorModelPtr behavior_model) {
  #ifdef PLANNER_UCT
  else if (typeid(*behavior_model) == typeid(BehaviorUCTCooperative)) {
  behavior_model_name = "BehaviorUCTCooperative";
  + } else if (typeid(*behavior_model) == typeid(BehaviorUCTNHeuristicRiskConstraint)) {
  + behavior_model_name = "BehaviorUCTNHeuristicRiskConstraint";
  } else if (typeid(*behavior_model) == typeid(BehaviorUCTRiskConstraint)) {
  behavior_model_name = "BehaviorUCTRiskConstraint";
  } else if (typeid(*behavior_model) == typeid(BehaviorUCTHypothesis)) {
  @@ -256,6 +260,9 @@ BehaviorModelPtr PythonToBehaviorModel(py::tuple t) {
  else if (behavior_model_name.compare("BehaviorUCTCooperative") == 0) {
  return std::make_shared<BehaviorUCTCooperative>(
  t[0].cast<BehaviorUCTCooperative>());
  + } else if (behavior_model_name.compare("BehaviorUCTNHeuristicRiskConstraint") == 0) {
  + return std::make_shared<BehaviorUCTNHeuristicRiskConstraint>(
  + t[0].cast<BehaviorUCTNHeuristicRiskConstraint>());
  } else if (behavior_model_name.compare("BehaviorUCTRiskConstraint") == 0) {
  return std::make_shared<BehaviorUCTRiskConstraint>(
  t[0].cast<BehaviorUCTRiskConstraint>());
  