Spaces:
Sleeping
Sleeping
from kaggle_environments.envs.football.helpers import * | |
from math import sqrt | |
from enum import Enum | |
import torch | |
import torch.nn as nn | |
import numpy as np | |
from ding.torch_utils import tensor_to_list, one_hot, to_ndarray, to_tensor, to_dtype | |
from ding.utils import MODEL_REGISTRY | |
from .TamakEriFever.submission import agent | |
class FootballKaggle5thPlaceModel(torch.nn.Module): | |
def __init__(self): | |
super(FootballKaggle5thPlaceModel, self).__init__() | |
# be compatiable with bc policy | |
# to avoid: ValueError: optimizer got an empty parameter list | |
self._dummy_param = nn.Parameter(torch.zeros(1, 1)) | |
def forward(self, data): | |
actions = [] | |
data = data['raw_obs'] | |
if isinstance(data['score'], list): | |
# to be compatiable with collect phase in subprocess mode | |
data['score'] = torch.stack(data['score'], dim=-1) | |
# dict of raw observations -> list of dict, each element in the list is the raw obs in a timestep | |
data = [{k: v[i] for k, v in data.items()} for i in range(data['left_team'].shape[0])] | |
for d in data: | |
# the rew obs in one timestep | |
if isinstance(d['steps_left'], torch.Tensor): | |
d = {k: v.cpu() for k, v in d.items()} | |
d = to_ndarray(d) | |
for k in ['active', 'designated', 'ball_owned_player', 'ball_owned_team']: | |
d[k] = int(d[k]) | |
for k in ['sticky_actions']: | |
d[k] = list(d[k]) | |
d = {'controlled_players': 1, 'players_raw': [d]} | |
actions.append(agent(d)[0]) | |
return {'action': torch.LongTensor(actions), 'logit': one_hot(torch.LongTensor(actions), 19)} | |