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) – The attached profile.
voting_rule (str, optional) – The voting rule. Possible values are
APPROVAL
,PLURALITY
andANTI_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(): ... 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