sample_outcomes

negmas.outcomes.sample_outcomes(issues, n_outcomes=None, min_per_dim=5, expansion_policy=None)[source]

Discretizes the issue space and returns either a predefined number of outcomes or uniform samples.

Parameters:
  • issues (Sequence[Issue]) – The issues describing the issue space to be discretized

  • n_outcomes (int | None) – If None then exactly min_per_dim bins will be used for every continuous dimension and all outcomes

  • returned (will be)

  • min_per_dim (int) – Max levels of discretization per dimension

  • expansion_policy – None or ‘repeat’ or ‘null’ or ‘no’. If repeat, then some of the outcomes will be repeated

  • than (if None or 'no' then no expansion will happen if the total number of outcomes is less)

  • n_outcomes – If ‘null’ then expansion will be with None values

Return type:

list[tuple]

Returns:

list of outcomes

Examples

enumberate the whole space

>>> from negmas.outcomes import make_issue
>>> issues = [
...     make_issue(values=(0.0, 1.0), name="Price"),
...     make_issue(values=["a", "b"], name="Name"),
... ]
>>> sample_outcomes(issues=issues)
[(0.0, 'a'), (0.0, 'b'), (0.25, 'a'), (0.25, 'b'), (0.5, 'a'), (0.5, 'b'), (0.75, 'a'), (0.75, 'b'), (1.0, 'a'), (1.0, 'b')]

enumerate with sampling for very large space (we have 10 outcomes in the discretized space)

>>> from negmas.outcomes import make_issue
>>> issues = [
...     make_issue(values=(0.0, 1.0), name="Price"),
...     make_issue(values=["a", "b"], name="Name"),
... ]
>>> issues[0].is_continuous()
True
>>> sampled = sample_outcomes(issues=issues, n_outcomes=5)
>>> len(sampled)
5
>>> len(set(sampled))
5
>>> from negmas.outcomes import make_issue
>>> issues = [
...     make_issue(values=(0, 1), name="Price"),
...     make_issue(values=["a", "b"], name="Name"),
... ]
>>> issues[0].is_continuous()
False
>>> sampled = sample_outcomes(issues=issues, n_outcomes=5)
>>> len(sampled)
4
>>> len(set(sampled))
4