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')