示例#1
0
def test_ticket() -> None:
    """
    Basic call
    """
    ticket = Ticket()
    ticket.randomize_ticket()
    assert ticket.price() > 0
示例#2
0
def test_ticket_str() -> None:
    """
    Basic call
    """
    ticket = Ticket()
    ticket.randomize_ticket()
    assert str(ticket) != ""
示例#3
0
def test_ticket_validator_is_good_ticket() -> None:
    """
    Basic call
    """
    ticket = Ticket()
    ticket.randomize_ticket()
    validator = TicketValidator()
    assert validator.is_good_ticket(ticket)
示例#4
0
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"
示例#5
0
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"
示例#6
0
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))
示例#7
0
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)
示例#8
0
    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="")
示例#9
0
    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()
示例#10
0
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)
示例#11
0
    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)