예제 #1
0
 def from_prims(cls, prims: dict) -> 'Entity':
     cpprims = prims.copy()
     cpprims['modifiers'] = [
         ser.deserialize_embeddable(mod) for mod in prims['modifiers']
     ]
     cpprims['items'] = dict((int(key), ser.deserialize_embeddable(val))
                             for key, val in prims['items'])
     return cls(**cpprims)
예제 #2
0
 def from_prims(cls, prims) -> 'EntityCombatUpdate':
     return cls(
         prims['order'],
         prims['attacker_iden'],
         prims['defender_iden'],
         prims['og_damage'],
         set(prims['tags']),
         tuple(
             ser.deserialize_embeddable(prev)
             for prev in prims['attack_prevals']),
         tuple(
             ser.deserialize_embeddable(prev)
             for prev in prims['defend_prevals']),
     )
예제 #3
0
 def from_prims(cls, prims):
     return cls(
         train_bot=prims['train_bot'],
         adver_bot=prims['adver_bot'],
         bot_folder=prims['bot_folder'],
         train_seq=list(ser.deserialize_embeddable(ses) for ses in prims['train_seq']),
         cur_ind=prims['cur_ind']
     )
예제 #4
0
def _run(args):
    settings: TrainSettings = None
    if not os.path.exists(args.settings):
        os.makedirs(os.path.dirname(args.settings), exist_ok=True)
        settings = TrainSettings.defaults(args.bot)
        with open(args.settings, 'w') as outfile:
            json.dump(ser.serialize_embeddable(settings), outfile)
    else:
        with open(args.settings, 'r') as infile:
            rawsettings = json.load(infile)
            settings = ser.deserialize_embeddable(rawsettings)

    os.makedirs(settings.bot_folder, exist_ok=True)
    executable = 'python3' if args.py3 else 'python'
    port = args.port
    create_flags = 0 if args.headless else subprocess.CREATE_NEW_CONSOLE
    nthreads = args.numthreads
    spec = not args.headless

    ncores = psutil.cpu_count(logical=False)
    if args.aggressive and nthreads > (ncores // 3):
        print(f'auto-reducing simultaneous servers to {ncores // 3} since there are {ncores} '
              + 'cores and we need 3 cores per server')
        nthreads = ncores // 3

    if os.path.exists(settings.replay_folder):
        rb.FileWritableReplayBuffer(settings.replay_folder, exist_ok=True).close()

    while settings.cur_ind < len(settings.train_seq):
        print('--starting session--')
        print(settings.current_session)
        _get_experiences_async(settings, executable, port, port + 10*nthreads, create_flags,
                               args.aggressive, spec, nthreads)
        _train_experiences(settings, executable)
        if args.debug:
            break
        _cleanup_session(settings)
        settings.cur_ind += 1
        with open(args.settings, 'w') as outfile:
            json.dump(ser.serialize_embeddable(settings), outfile)

    print('--finished--')
예제 #5
0
 def from_prims(cls, prims) -> 'AttackEventArgs':
     return cls(prims['attacker_iden'],
                ser.deserialize_embeddable(prims['attack_result']))
예제 #6
0
 def from_prims(cls, prims):
     return cls(
         prims['order'], prims['entity_iden'], prims['event_name'],
         ser.deserialize_embeddable(prims['args']),
         tuple(
             ser.deserialize_embeddable(prev) for prev in prims['prevals']))
예제 #7
0
 def from_prims(cls, prims):
     return cls(prims['order'], prims['depth'],
                ser.deserialize_embeddable(prims['dungeon']))
예제 #8
0
 def from_prims(cls, prims):
     return cls(prims['order'], prims['entity_iden'],
                ser.deserialize_embeddable(prims['modifier']))
예제 #9
0
def _get_experiences_target(serd_settings: dict, executable: str, port_min: int, port_max: int,
                            create_flags: int, aggressive: bool, spec: bool, replay_path: str,
                            settings_path: str, tar_num_ticks: int):
    settings = ser.deserialize_embeddable(serd_settings)
    _get_experiences_sync(settings, executable, PortChooser(port_min, port_max-port_min),
                          create_flags, aggressive, spec, replay_path, settings_path, tar_num_ticks)
예제 #10
0
 def from_prims(cls, prims) -> 'MovePacket':
     return cls(ser.deserialize_embeddable(prims['thing']))
예제 #11
0
 def from_prims(cls, prims) -> 'TogetherGameStartGenerator':
     return cls(ser.deserialize_embeddable(prims['dgen']))
예제 #12
0
 def from_prims(cls, prims) -> 'SeparatedGameStartGenerator':
     return cls(
         ser.deserialize_embeddable(prims['dgen']),
         prims['p1_depth'],
         prims['p2_depth']
     )
예제 #13
0
    def from_prims(cls, prims) -> 'SyncPacket':
        if ser.peek_type_embeddable(prims['game_state']) != GameState:
            raise ValueError('game_state bad type')

        return cls(ser.deserialize_embeddable(prims['game_state']),
                   prims['player_iden'])
예제 #14
0
 def from_prims(cls, prims) -> 'UpdatePacket':
     return cls(ser.deserialize_embeddable(prims['update']))