IterableStrategyTwelve

class poisson_approval.IterableStrategyTwelve(profile=None, voting_rule=None, d_ranking_fixed_strategy=None, test=None)[source]

Iterate over twelve-type strategies (StrategyTwelve).

Parameters:
  • profile (Profile, optional) –
  • voting_rule (str, optional) – The voting rule. Possible values are APPROVAL, PLURALITY and ANTI_PLURALITY. Default: the same voting rule as profile if a profile is specified, APPROVAL otherwise.
  • d_ranking_fixed_strategy (dict) – Key: ranking. Value: fixed strategy. Cf. examples below.
  • test (callable.) – A function StrategyTwelve -> bool. Only strategies meeting this test are given.

Examples

Basic usage:

>>> for strategy in IterableStrategyTwelve():  # doctest: +ELLIPSIS
...     print(strategy)
<abc: a, acb: a, bac: b, bca: b, cab: c, cba: c>
<abc: a, acb: a, bac: b, bca: b, cab: c, cba: bc>
<abc: a, acb: a, bac: b, bca: b, cab: c, cba: utility-dependent>
...
<abc: utility-dependent, acb: utility-dependent, bac: utility-dependent, bca: utility-dependent, cab: utility-dependent, cba: utility-dependent>

Specify a profile:

>>> from poisson_approval import ProfileTwelve
>>> profile = ProfileTwelve({'ab_c': 0.5, 'a_bc': 0.25, 'b_ac': 0.25})
>>> for strategy in IterableStrategyTwelve(profile=profile):
...     print(strategy)
<abc: a, bac: b> ==> a
<abc: a, bac: ab> ==> a
<abc: ab, bac: b> ==> b
<abc: ab, bac: ab> ==> a, b
<abc: utility-dependent, bac: b> ==> a, b
<abc: utility-dependent, bac: ab> ==> a

Specify some fixed strategies:

>>> iterable = IterableStrategyTwelve(
...     d_ranking_fixed_strategy={'abc': 'a', 'acb': 'a', 'bac': 'b', 'bca': UTILITY_DEPENDENT})
>>> for strategy in iterable:
...     print(strategy)
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: c, cba: c>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: c, cba: bc>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: c, cba: utility-dependent>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: ac, cba: c>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: ac, cba: bc>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: ac, cba: utility-dependent>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: utility-dependent, cba: c>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: utility-dependent, cba: bc>
<abc: a, acb: a, bac: b, bca: utility-dependent, cab: utility-dependent, cba: utility-dependent>

Use a condition with the parameter test:

>>> profile = ProfileTwelve({'ab_c': 0.5, 'a_bc': 0.25, 'b_ac': 0.25})
>>> def test_a_wins(strategy):
...     return strategy.winners == {'a'}
>>> for strategy in IterableStrategyTwelve(profile=profile, test=test_a_wins):
...     print(strategy)
<abc: a, bac: b> ==> a
<abc: a, bac: ab> ==> a
<abc: utility-dependent, bac: ab> ==> a