Source code for gameanalysis.script.dom
"""find dominated strategies"""
import argparse
import json
import sys
from gameanalysis import dominance
from gameanalysis import gameio
from gameanalysis import subgame
[docs]def add_parser(subparsers):
parser = subparsers.add_parser(
'dominance', aliases=['dom'], help="""Computed dominated strategies""",
description="""Compute dominated strategies, or subgames with only
undominated strategies.""")
parser.add_argument(
'--input', '-i', metavar='<input-file>', default=sys.stdin,
type=argparse.FileType('r'), help="""Input file for script. (default:
stdin)""")
parser.add_argument(
'--output', '-o', metavar='<output-file>', default=sys.stdout,
type=argparse.FileType('w'), help="""Output file for script. (default:
stdout)""")
parser.add_argument(
'--strategies', '-s', action='store_true', help="""Output the remaining
strategies instead of the subgame after removing appropriate
strategies. (default: %(default)s)""")
parser.add_argument(
'--criterion', '-c', default='strictdom',
choices=['weakdom', 'strictdom', 'neverbr'],
help="""Dominance criterion: strictdom = strict pure-strategy
dominance; weakdom = weak pure-strategy dominance; neverbr =
never-best-response. (default: %(default)s)""")
parser.add_argument(
'--unconditional', '-u', action='store_false', help="""If specified use
unconditional dominance, instead of conditional dominance.""")
return parser
[docs]def main(args):
game, serial = gameio.read_game(json.load(args.input))
sub_mask = dominance.iterated_elimination(game, args.criterion,
args.unconditional)
if args.strategies:
res = {r: list(s) for r, s in serial.to_subgame_json(sub_mask).items()}
json.dump(res, args.output)
else:
sub_game = subgame.subgame(game, sub_mask)
sub_serial = subgame.subserializer(serial, sub_mask)
json.dump(sub_serial.to_game_json(sub_game), args.output)
args.output.write('\n')