Source code for smallerize.simulate

import typing

from .smallerize import Minimizer, Factor


[docs]class SimulatedTrial: def __init__(self, minimizers: typing.Dict[str, Minimizer], factors: typing.List[Factor]): self.minimizers = minimizers self.factors = {factor.name: factor for factor in factors}
[docs] def create_random_participants(self, n: int): random_levels = {} for factor_name, factor in self.factors.items(): random_levels[factor_name] = factor.get_random_level_multiple(n) participants = [] for participant_num in range(n): factor_levels = { factor_name: random_levels[factor_name][participant_num] for factor_name in self.factors } participants.append(factor_levels) return participants
[docs] def assign_one(self, factor_levels: dict) -> dict: result = {} for name, minimizer in self.minimizers.items(): assign_info = minimizer.get_assignment_info(factor_levels) minimizer._add_participant_to_arm(factor_levels, assign_info['arm']) assign_info.update(factor_levels) result[name] = assign_info return result
[docs] def simulate(self, n_trials: int): participants = self.create_random_participants(n_trials) results = {minimizer_name: [] for minimizer_name in self.minimizers} for ppt in participants: assignment = self.assign_one(ppt) for minimizer_name in self.minimizers: results[minimizer_name].append(assignment[minimizer_name]) return results