Created
December 8, 2011 19:53
-
-
Save anilshanbhag/1448274 to your computer and use it in GitHub Desktop.
Poker AI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"POKER AI Team No:1465" | |
""" | |
Things to Remember: | |
1. All cards are numbered x-1 where x is defined | |
""" | |
import pickle | |
class Game: | |
# STAGE HANDLERS | |
def pre_flop(self): | |
pair = sorted([self.cards[0]%13,self.cards[1]%13]) + ['s' if self.cards[0]/13 == self.cards[1]/13 else 'o'] | |
rank = self.rate_pair(pair) # Rank Alloted | |
bet = self.max_bet("Pre_Flop") # Current Maximum Bet | |
exc = self.excessive_bet(bet) # Bet excessive ? | |
defn = self.defensive() # Play defensive ? | |
if defn: | |
if exc: | |
pass | |
else: | |
if rank > 7: | |
self.out(0) # TODO change to raise | |
elif rank > 4: | |
self.out(0) # call | |
else: | |
self.out(-10) #fold | |
else: | |
pass | |
# MAIN HANDLERS | |
def __init__(self): | |
self.inputf() | |
self.deals_money() | |
self.deal() | |
self.debug() | |
def inputf(self): | |
f = open('inputf.txt','r') | |
tokens = [int(m) for m in f.readline().split()] | |
self.cards = [m-1 for m in tokens[0:2]] | |
self.pos = tokens[2] | |
self.inTable = tokens[3] | |
f.close() | |
def deals_money(self): | |
f = open('deals_money.txt','r') | |
f.readline() # First Line | |
self.curMon = {} | |
for line in f.readlines(): | |
x = line.rstrip().split() | |
self.curMon[int(x[0])] = int(x[1]) | |
f.close() | |
def deal(self): | |
self.dealf = open('deal.txt','r') | |
f = self.dealf | |
self.dealer = int(f.readline().split()[1]) | |
self.stage = f.readline().split()[1] | |
self.stages = ["Pre_Flop","Flop","Fourth_Street","Fifth_Street","Show_Down"] | |
self.stage_no = self.stages.index(self.stage) | |
self.main_pot = int(f.readline().split()[1]) | |
self.known_cards = [] | |
self.AI() | |
def out(self,val = -10): | |
f = open('outputf.txt','w') | |
print "Value ",val | |
val = str(val) | |
f.write(val) | |
f.close() | |
def AI(self): | |
if self.stage == 0: | |
self.pre_flop() | |
# HELPERS | |
def get_lines(self,term): | |
f = self.dealf | |
f.readline() | |
lines = [] | |
line = f.readline().rstrip() | |
print "Debug line",line | |
if line == term: | |
#TODO change to eof | |
while(1): | |
m = f.readline() | |
if m == "": | |
break | |
x = m.rstrip() | |
if x == "End": | |
break | |
lines.append(x) | |
return lines | |
def defensive(self): | |
if (max(self.curMon.values())-self.curMon[self.pos]) / self.curMon[self.pos] > 0.15: | |
return 1 | |
return 0 | |
def max_bet(self,stage): | |
lines = self.get_lines(stage) | |
print stage, lines | |
self.known_cards += [int(m) for m in lines[0].split()] | |
bet = max([int(m) for m in filter(lambda(x): x != "Call" and x != "Rise" and x != "-",lines[len(lines)-1].split())]) | |
print "Bet",bet | |
return int(bet) | |
def excessive_bet(self,bet): | |
alarm = min(0.1 * (self.curMon[self.pos] - self.inTable) , 0.2 * sum(a.values())/6) | |
if bet > alarm: | |
return 1 | |
return 0 | |
def rate_pair(self,pair): | |
rankings = { | |
1: [[6, 0, 'o'], [2, 0, 's'], [1, 0, 's'], [5, 0, 'o'], [4, 0, 'o'], [3, 0, 'o'], [2, 0, 'o'], [1, 0, 'o']], | |
2: [[7, 0, 's'], [5, 1, 's'], [4, 3, 'o'], [7, 1, 'o'], [6, 2, 'o'], [4, 1, 's'], [3, 1, 's'], [8, 0, 'o'], [5, 2, 'o'], [2, 1, 's'], [6, 0, 's'], [4, 2, 'o'], [3, 2, 'o'], [6, 1, 'o'], [5, 1, 'o'], [7, 0, 'o'], [4, 1, 'o'], [3, 0, 's'], [3, 1, 'o'], [4, 0, 's'], [5, 0, 's'], [2, 1, 'o']], | |
3: [[5, 4, 's'], [7, 3, 's'], [6, 5, 'o'], [9, 1, 'o'], [9, 0, 's'], [0, 0, 'o'], [6, 3, 's'], [10, 0, 'o'], [7, 4, 'o'], [8, 3, 'o'], [5, 3, 's'], [6, 4, 'o'], [7, 2, 's'], [4, 3, 's'], [8, 2, 'o'], [7, 1, 's'], [6, 2, 's'], [5, 4, 'o'], [7, 3, 'o'], [8, 1, 'o'], [8, 0, 's'], [5, 2, 's'], [9, 0, 'o'], [6, 3, 'o'], [3, 2, 's'], [7, 2, 'o'], [5, 3, 'o'], [4, 2, 's'], [6, 1, 's']], | |
4: [[11, 1, 'o'], [8, 7, 'o'], [10, 1, 's'], [10, 4, 'o'], [9, 4, 's'], [8, 5, 's'], [10, 3, 'o'], [9, 5, 'o'], [9, 2, 's'], [8, 6, 'o'], [10, 2, 'o'], [9, 3, 's'], [7, 5, 's'], [8, 4, 's'], [11, 0, 'o'], [7, 6, 'o'], [8, 5, 'o'], [6, 5, 's'], [10, 1, 'o'], [9, 4, 'o'], [9, 1, 's'], [8, 3, 's'], [9, 3, 'o'], [7, 4, 's'], [10, 0, 's'], [6, 4, 's'], [8, 2, 's'], [8, 4, 'o'], [9, 2, 'o'], [7, 5, 'o'], [8, 1, 's']], | |
5: [[11, 4, 's'], [12, 2, 'o'], [11, 6, 'o'], [2, 2, 'o'], [9, 7, 's'], [10, 6, 's'], [10, 7, 'o'], [9, 8, 'o'], [12, 0, 's'], [11, 3, 's'], [11, 5, 'o'], [12, 1, 'o'], [11, 2, 's'], [10, 5, 's'], [8, 7, 's'], [11, 4, 'o'], [9, 6, 's'], [11, 1, 's'], [10, 6, 'o'], [9, 7, 'o'], [11, 3, 'o'], [10, 4, 's'], [12, 0, 'o'], [9, 5, 's'], [11, 2, 'o'], [1, 1, 'o'], [8, 6, 's'], [10, 3, 's'], [10, 5, 'o'], [10, 2, 's'], [11, 0, 's'], [9, 6, 'o'], [7, 6, 's']], | |
6: [[12, 6, 's'], [4, 4, 'o'], [11, 8, 's'], [11, 10, 'o'], [11, 9, 'o'], [12, 5, 's'], [12, 7, 'o'], [10, 9, 's'], [11, 8, 'o'], [12, 6, 'o'], [12, 4, 's'], [11, 7, 's'], [10, 8, 's'], [12, 3, 's'], [3, 3, 'o'], [12, 5, 'o'], [12, 2, 's'], [10, 9, 'o'], [12, 1, 's'], [11, 7, 'o'], [11, 6, 's'], [9, 8, 's'], [10, 8, 'o'], [11, 5, 's'], [10, 7, 's'], [12, 3, 'o'], [12, 4, 'o']], | |
7: [[6, 6, 'o'], [12, 11, 's'], [12, 10, 's'], [12, 11, 'o'], [5, 5, 'o'], [12, 9, 's'], [12, 10, 'o'], [12, 8, 's'], [12, 9, 'o'], [11, 10, 's'], [11, 9, 's'], [12, 7, 's'], [12, 8, 'o']], | |
8: [[7, 7, 'o']], | |
9: [[9, 9, 'o'], [8, 8, 'o']], | |
10: [[12, 12, 'o'], [11, 11, 'o'], [10, 10, 'o']] | |
} | |
return [i for i in rankings if pair in rankings[i]][0] | |
if __name__ == "__main__": | |
game = Game() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment