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)
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
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))
# 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