def play(self, market: Market): remaining_firms = copy(market.firms) # average obfuscation level t_mean = market.compute_mean_obfuscation_level() search_cost = self.compute_keep_search_cost(tau=market.tau, t_mean=t_mean) while self.should_keep_searching(market=market, search_cost=search_cost): firm = remaining_firms[np.random.choice(len(remaining_firms))] remaining_firms.remove(firm) if self.p_0_firm is None\ or self.p_0_firm.price > firm.price: self.p_0_firm = firm self.t_0 += (market.tau + firm.obfuscation_level) self.search_count += 1 if len(remaining_firms) == 0: break # buy from firm offering lowerest price if self.p_0_firm is not None: self.p_0_firm.sell()