Skip to content

Instantly share code, notes, and snippets.

@anilshanbhag
Created December 8, 2011 19:53
Show Gist options
  • Save anilshanbhag/1448274 to your computer and use it in GitHub Desktop.
Save anilshanbhag/1448274 to your computer and use it in GitHub Desktop.
Poker AI
"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