Exemplo n.º 1
0
def datacoll(num_games):
        
    wins = 0
    pushes = 0
    loses = 0
    blackjack = Blackjack()
        
    Data_coll = []   #initialize the data set for my bayes method  
    for _ in range(num_games):
        finished, result, dealer_cards, player_cards = blackjack.play_game(Blackjack.ACTION["start"]) #I can name these output variables differently and create my output data differently
        hit_count = 0
        game_data = [Blackjack.get_card_value(player_cards),Blackjack.get_card_value([dealer_cards[0]]),result,hit_count,_+1]
        Data_coll.append(game_data)
        while not finished:
            action = random.choice([Blackjack.ACTION["hit"], Blackjack.ACTION["hold"]])
            finished, result, dealer_cards, player_cards = blackjack.play_game(action)
            if action == Blackjack.ACTION["hit"]:
                hit_count += 1
                Data_coll.append([Blackjack.get_card_value(player_cards),Blackjack.get_card_value([dealer_cards[0]]),result,hit_count,_+1])
            else:
                Data_coll.append([Blackjack.get_card_value(player_cards),Blackjack.get_card_value([dealer_cards[0]]),result,hit_count,_+1])
        
        wins += 1 if result == Blackjack.RESULT["win"] else 0
        pushes += 1 if result == Blackjack.RESULT["push"] else 0
        loses += 1 if result == Blackjack.RESULT["lose"] else 0
    return (Data_coll)
Exemplo n.º 2
0
class BlackjackEnv():
    def __init__(self):
        self._seed = None
        self._blackjack = None

        self.reset()

    def seed(self, seed=None):
        self._seed = seed

    def reset(self):
        self._blackjack = Blackjack(self._seed)

    def deal(self):
        _, _, dealer_cards, player_cards, revealed_cards = self._blackjack.play_game(Blackjack.ACTION["start"])
        return dealer_cards, player_cards, revealed_cards

    def step(self, action):
        assert action in Blackjack.ACTION.values()

        action = Blackjack.ACTION["hold"] if action == 0 else Blackjack.ACTION["hit"]

        finished, result, dealer_cards, player_cards, revealed_cards = self._blackjack.play_game(action)
        reward = BlackjackEnv._calculate_reward(finished, result, player_cards)

        return [dealer_cards, player_cards, revealed_cards], reward, finished, [result]

    @staticmethod
    def _calculate_reward(finished, result, player_cards):
        if finished and result == Blackjack.RESULT["lose"]:
            # Player lost
            return -100
        elif finished and result == Blackjack.RESULT["win"]:
            # Player won
            return 100
        elif finished and result == Blackjack.RESULT["push"]:
            # Push
            return -25
        elif not finished:
            # Still in the middle of a hand
            return 0
Exemplo n.º 3
0
import random
import sys

from Blackjack import Blackjack

num_games = int(float(sys.argv[1]))

wins = 0
pushes = 0
loses = 0

blackjack = Blackjack()
for _ in range(num_games):
    finished, result, dealer_cards, player_cards = blackjack.play_game(
        Blackjack.ACTION["start"])
    while not finished:
        action = random.choice(
            [Blackjack.ACTION["hit"], Blackjack.ACTION["hold"]])
        finished, result, dealer_cards, player_cards = blackjack.play_game(
            action)

    wins += 1 if result == Blackjack.RESULT["win"] else 0
    pushes += 1 if result == Blackjack.RESULT["push"] else 0
    loses += 1 if result == Blackjack.RESULT["lose"] else 0

print("wins:\t{}".format(wins))
print("pushes\t{}".format(pushes))
print("loses:\t{}".format(loses))
Exemplo n.º 4
0
   
    # Initialize our classifier
    mnb = MultinomialNB()

    # Train our classifier
    model = mnb.fit(Data, outcome)
    
    # Playing With NB.Multinomial Classifier
    num_games_test = 1000
    wins = 0
    pushes = 0
    loses = 0
    blackjack = Blackjack()     
    
    for _ in range(num_games_test):
        finished, result, dealer_cards, player_cards = blackjack.play_game(Blackjack.ACTION["start"]) #I can name these output variables differently and create my output data differently
        while not finished:
            outc_W_hit =  [Blackjack.get_card_value(player_cards),Blackjack.get_card_value([dealer_cards[0]]),1]
            outc_Wout_hit =  [Blackjack.get_card_value(player_cards),Blackjack.get_card_value([dealer_cards[0]]),0]
            preds_W_hit = mnb.predict_proba([outc_W_hit])   #order of this output is [-1  0  1] thanks to mnb.classes_ attribute output
            preds_Wout_hit = mnb.predict_proba([outc_Wout_hit])
            if preds_W_hit[0][2] > preds_Wout_hit[0][2]:
                finished, result, dealer_cards, player_cards = blackjack.play_game(Blackjack.ACTION["hit"])
            else:
                finished, result, dealer_cards, player_cards = blackjack.play_game(Blackjack.ACTION["hold"])
        
        wins += 1 if result == Blackjack.RESULT["win"] else 0
        pushes += 1 if result == Blackjack.RESULT["push"] else 0
        loses += 1 if result == Blackjack.RESULT["lose"] else 0    

    # Machine Learning Winning Percentage