in scripts/compute_upperbound.py [0:0]
def process(configs, feature_loaders, num_steps, step_fn=step_agnostic, action_space=['UP', 'LEFT', 'RIGHT', 'DOWN'], condition_on_action=False):
correct, cnt = 0, 0
all_possible_actions = [[]]
if num_steps > 1:
action_set = [action_space] * (num_steps - 1)
all_possible_actions = list(itertools.product(*action_set))
for config in configs:
for a in all_possible_actions:
neighborhood = config['neighborhood']
target_loc = config['target_location']
boundaries = config['boundaries']
obs = {k: list() for k in feature_loaders.keys()}
actions = list()
loc = copy.deepcopy(config['target_location'])
loc[2] = random.randint(0, 3)
for p in range(num_steps):
for k, feature_loader in feature_loaders.items():
obs[k].append(feature_loader.get(neighborhood, loc))
if p != num_steps - 1:
sampled_act = a[p]
actions.append(sampled_act)
loc = step_fn(sampled_act, loc, boundaries)
act_seq = None
if condition_on_action:
act_seq = a
correct += prediction_upperbound(obs['goldstandard'], feature_loaders['goldstandard'],
neighborhood, boundaries, loc,
step_fn=step_fn, actions=act_seq, action_space=action_space)
cnt += 1
return correct/cnt