void AEMS::Expand(QNode* qnode, BeliefLowerBound* lb, BeliefUpperBound* ub, const BeliefMDP* model, History& history) { VNode* parent = qnode->parent(); int action = qnode->edge(); map<OBS_TYPE, VNode*>& children = qnode->children(); const Belief* belief = parent->belief(); // cout << *belief << endl; double step_reward = model->StepReward(belief, qnode->edge()); map<OBS_TYPE, double> obss; model->Observe(belief, qnode->edge(), obss); double lower_bound = step_reward; double upper_bound = step_reward; // Create new belief nodes for (map<OBS_TYPE, double>::iterator it = obss.begin(); it != obss.end(); it++) { OBS_TYPE obs = it->first; double weight = it->second; logd << "[AEMS::Expand] Creating node for obs " << obs << " with weight " << weight << endl; VNode* vnode = new VNode(model->Tau(belief, action, obs), parent->depth() + 1, qnode, obs); vnode->likelihood = weight; logd << " New node created!" << endl; children[obs] = vnode; InitLowerBound(vnode, lb, history); InitUpperBound(vnode, ub, history); lower_bound += weight * Discount() * vnode->lower_bound(); upper_bound += weight * Discount() * vnode->upper_bound(); } qnode->step_reward = step_reward; qnode->lower_bound(lower_bound); qnode->upper_bound(upper_bound); }