def test_ticket() -> None: """ Basic call """ ticket = Ticket() ticket.randomize_ticket() assert ticket.price() > 0
def test_ticket_str() -> None: """ Basic call """ ticket = Ticket() ticket.randomize_ticket() assert str(ticket) != ""
def test_ticket_validator_is_good_ticket() -> None: """ Basic call """ ticket = Ticket() ticket.randomize_ticket() validator = TicketValidator() assert validator.is_good_ticket(ticket)
def test_ticket_validator_basically_ok() -> None: """ Basic call """ ticket = Ticket() ticket.randomize_ticket() validator = TicketValidator() validator.check_ticket(ticket) assert True, "that function throws or doesn't no return"
def test_ticket_validator_winable() -> None: """ Basic call """ ticket = Ticket() validator = TicketValidator() validator.check_all_prizes_winnable(ticket) assert True, "that function throws or doesn't no return"
def test_player() -> None: """ Basic call """ for i in range(0, 10): player = Player( Strategy( state_range=["DC", "MD"], min_ticket_price=0, max_ticket_price=100, max_loss=160, sufficient_winnings=2000, max_plays_with_ticket_type=365, evade_taxes=True, )) ticket = Ticket() ticket.randomize_ticket() player.ticket = ticket player.go() print("winning: " + str(player.history)) print("bank: " + str(player.history_running_bank))
def test_ticket_validator_mutate() -> None: """ Basic call """ strategy = Strategy( state_range=["DC", "MD"], min_ticket_price=0, max_ticket_price=100, max_loss=160, sufficient_winnings=2000, max_plays_with_ticket_type=365, evade_taxes=True, ) ticket = Ticket() ticket.randomize_ticket() ticket.pick() ticket.mutate_ticket(.5, strategy)
def report_good_games(self, i: int, player: Player, ticket: Ticket) -> None: """ :param i: :param player: :param ticket: :return: """ if i < 6: print( "------Good Game------ paid-{0}, won(net) {1}".format( str(ticket.price() * player.tickets_played), player.net_winnings ) ) print(player.history) else: print(".", end="")
def generate_initial_population(self) -> None: """ possibly inefficient way of generating all possible tickets. I'm not sure how big the total space is. """ print("Generating tickets...") sys.stdout.flush() for _ in range(0, self.evolution_parameters.max_ticket_types): ticket = Ticket() ticket.randomize_ticket() # This keeps the initial pop too small for a genetic algo! # if ticket in self.tickets: # continue # TODO: check minimum winning on 1 ticket!! # don't waste time on these tickets if ticket.price() > self.strategy.max_ticket_price: continue if ticket.price() < self.strategy.minimum_ticket_price: continue if ticket.state not in self.strategy.state_range: continue self.tickets.append(ticket) if not self.tickets: raise TypeError("No possible valid tickets? Something must be wrong.") while len(self.tickets) < self.evolution_parameters.max_ticket_types: print( "Not enough tickets with unique individuals, puffing up with dupes have {0}. Need {1}".format( len(self.tickets), self.evolution_parameters.max_ticket_types ) ) self.tickets.extend(self.tickets) print("Have {0} tickets. Now ready to play".format(len(self.tickets))) sys.stdout.flush()
def test_three_six_ticket() -> None: """ Basic call """ plays = 0 good_games = 0 for _ in range(0, 1000): player = Player( Strategy( state_range=["DC", "MD"], min_ticket_price=0, max_ticket_price=100, max_loss=160, sufficient_winnings=2000, max_plays_with_ticket_type=365, evade_taxes=True, )) ticket = Ticket() ticket.randomize_ticket() ticket.to_go = False ticket.bet = 3 ticket.bonus = False ticket.super_bonus = False ticket.spots = 6 ticket.pick() ticket.games = 10 ticket.state = "MD" player.ticket = ticket player.go() print("winning: " + str(player.history)) print("bank: " + str(player.history_running_bank)) if player.good_game(): good_games += 1 plays += 1 print("Percent time good game") print(good_games / plays)
def go() -> None: strategy = Strategy( state_range=["MD"], min_ticket_price=14, max_ticket_price=16, max_plays_with_ticket_type=5000, # defense against infinite loops? max_loss=250, sufficient_winnings=2500, evade_taxes=True, ) first = Ticket() first.bet = 5 first.spots = 5 first.super_bonus = True first.bonus = False first.games = 1 first.state = "MD" first.to_go = False # # some other $15 ticket # first = Ticket() # first.bet = 5 # first.super_bonus = True # first.bonus = False # first.games = 1 # first.spots = 5 # first.state = "MD" # first.to_go = False # optimal second = Ticket() second.bet = 3 second.super_bonus = False second.bonus = False second.games = 5 second.spots = 6 second.state = "MD" second.to_go = False showdown(first, second, strategy)