def _start_collective_solver(self, state):
        '''
        Determines who from all the monitors monitoring this agent should
        resolve the issue.
        '''
        own_address = state.agent.get_own_address()
        monitors = [IRecipient(x) for x in state.descriptor.partners
                    if x.role == u'monitor']
        im_included = any([x == own_address for x in monitors])
        if not im_included:
            monitors.append(own_address)
        # this object is going to be stored in the state of CollectiveSolver,
        # we need to deepcopy it not to share a refrence
        state.monitors = copy.deepcopy(monitors)
        state.agent.initiate_protocol(problem.CollectiveSolver,
                                      self, monitors)
        return task.NOT_DONE_YET
Determines who from all the monitors monitoring this agent should
        resolve the issue.