def cards_to_state(dealer_cards, player_cards, revealed_cards, only_one_dealer_card=True): dealer_cards_interested_in = [dealer_cards[0]] if only_one_dealer_card else dealer_cards player_value = Blackjack.get_card_value(player_cards) dealer_value = Blackjack.get_card_value(dealer_cards_interested_in) assert player_value >= 4 assert dealer_value >= 2 return player_value - 1, dealer_value - 1
def cards_to_state(dealer_cards, player_cards, revealed_cards, only_one_dealer_card=True): dealer_cards_interested_in = [dealer_cards[0]] if only_one_dealer_card else dealer_cards counts = count_cards(revealed_cards) s = np.zeros([1, 15]) s[0, 0] = Blackjack.get_card_value(player_cards) s[0, 1] = Blackjack.get_card_value(dealer_cards_interested_in) for number in range(13): s[0, 2 + number] = counts[number] return s
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)
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 Total = wins + loses print (wins/Total)
clf_entropy.fit(X, Y) # Playing With an information gain Decision Tree 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 = clf_entropy.predict_proba( [outc_W_hit] ) #order of this output is [-1 0 1] thanks to mnb.classes_ attribute output preds_Wout_hit = clf_entropy.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(