def sample_plan(self, plan_id, plan_length, rho, views, view_values, view_costs, current_view_id): remaining_views = dict() for v in views: remaining_views[v.ID] = v # current_view_id = remaining_views.keys()[0] NOW FUNCTION ARGUMENT plan = Plan(plan_id) # pmf for values value_pmf = self._generate_value_pmf(view_values) # pmf for costs cost_pmf = self._generate_cost_pmf(current_view_id, remaining_views.keys(), rho, view_costs) # joint dist joint = make_joint(value_pmf, cost_pmf) joint.normalize() for j in range(plan_length): x = joint.random() plan.append(remaining_views[x]) remaining_views.pop(x) # sample without replacement # adapt both pmfs: value and cost value_pmf.unset(x) value_pmf.normalize() cost_pmf = self._generate_cost_pmf(x, remaining_views.keys(), rho, view_costs) # re-generate joint dist joint = make_joint(value_pmf, cost_pmf) joint.normalize() return plan