docs: def vote(self, candidates):
          """Rank artifact candidates.
  
          The voting is needed for the agents living in societies using
          social decision making. The function should return a sorted list
          of (candidate, evaluation)-tuples. Depending on the social choice
          function used, the evaluation might be omitted from the actual decision
          making, or only a number of (the highest ranking) candidates may be
          used.
  
          This basic implementation ranks candidates based on
          :meth:`~creamas.core.agent.CreativeAgent.evaluate`.
  
          :param candidates:
              list of :py:class:`~creamas.core.artifact.Artifact` objects to be
              ranked
  
          :returns:
              Ordered list of (candidate, evaluation)-tuples
          """
          ranks = [(c, self.evaluate(c)[0]) for c in candidates]
          ranks.sort(key=operator.itemgetter(1), reverse=True)
          return ranks