def rnd_func(): c = random.sample(range(52), 5) hi.board[0] = c[0] hi.board[1] = c[1] hi.board[2] = c[2] hi.board[3] = c[3] hi.board[4] = c[4] pub_types[7:10] = -1 lzp.set_st_from_hand_info(C.pointer(zp.i), C.pointer(hi), pub_types.ctypes.data_as(C.POINTER(C.c_int16)), priv_types.ctypes.data_as(C.POINTER(C.c_int16))) return np.array((pub_types[9], pub_types[8], pub_types[7]), dtype=np.int16)
else: pub_types[8] = -1 #hi.board[4] = hi.board[3]-1 hi.board[4] = 51 while hi.board[4] >= 0: if hi.board[4] == hi.board[0] or hi.board[ 4] == hi.board[1] or hi.board[4] == hi.board[ 2] or hi.board[4] == hi.board[3]: hi.board[4] -= 1 continue else: pub_types[7] = -1 lzp.set_st_from_hand_info( C.pointer(zp.i), C.pointer(hi), pub_types.ctypes.data_as(C.POINTER(C.c_int16)), priv_types.ctypes.data_as(C.POINTER( C.c_int16))) #print zp.get_board_slots_all_gs([i1,i2,i3,i4,i5]) #print pub_types #t = (pub_types[9],pub_types[8], pub_types[7]) t = np.array( (pub_types[9], pub_types[8], pub_types[7]), dtype=np.int16) #dist_func2(board_combo_types, t, new_diffs) #s = new_diffs.argmin() #lzp.get_board_combo_diffs(C.pointer(zp.i), max_diff.ctypes.data_as(C.POINTER(C.c_float)), board_combo_types.ctypes.data_as(C.POINTER(C.c_int16)), t.ctypes.data_as(C.POINTER(C.c_int16)), 3, 16384, new_diffs2.ctypes.data_as(C.POINTER(C.c_float))) #pdb.set_trace() s2 = lzp.get_board_combo_slot( C.pointer(zp.i),
def parse_matchstate(ms, p): global priv_types global pub_types ms_spl = ms.split(":") #print >>sys.stderr, ms_spl cmd, pos, hand_n, betting, cards = ms_spl bets = betting.split("/") #print >>sys.stderr, bets hi = dt.hand_info() hi.root_us = C.pointer(p.root_state.unique_root_node) hi.cur_us = C.pointer(p.root_state.unique_root_node) for i in xrange(4): hi.acts_i[i] = 0 lzp.add_action_to_hi(C.pointer(hi), 0) lzp.add_action_to_hi(C.pointer(hi), 0) #test_path = np.zeros(256, dtype=np.int8) #test_path_i = 2 for i, street in enumerate(bets): for act in street: act_i = 1 if act == "r": act_i = 0 elif act == "c": act_i = 1 elif act == "f": act_i = 2 lzp.add_action_to_hi(C.pointer(hi), act_i) #test_path[test_path_i] = act_i #test_path_i+=1 #us = p.get_unique_state_from_path(bets) if not hi.cur_us or hi.cur_us.contents.gamestate == 4: #print >>sys.stderr, "No unique state" return None pos = int(pos) hand_n = int(hand_n) if hi.cur_us.contents.root_idx == 2: #new hand pub_types = np.zeros(p.zp.i.n_type_types[1], dtype=np.int16) pub_types.fill(-1) #test_pub_types = np.zeros(p.zp.i.n_type_types[1], dtype=np.int16) priv_types = np.zeros(p.zp.i.n_type_types[0], dtype=np.int16) priv_types.fill(-1) else: pub_types[:7] = -1 if hi.cur_us.contents.cur_seat != pos: #print >>sys.stderr, "NOT MY TURN" return None print >>sys.stderr print >>sys.stderr, "ACTS", bets #print >>sys.stderr, "MY TURN" cards_spl = cards.split("/") hole_cards = cards_spl[0] board = cards_spl[1:] bc = [] print >>sys.stderr, "BOARD", for b in board: print >>sys.stderr, b, while len(b) >= 2: bc.append(ct.stoi[b[:2]]) b = b[2:] print >>sys.stderr for i, c in enumerate(bc): hi.board[i] = c hole_spl = hole_cards.split("|") self_hand = hole_spl[pos] print >>sys.stderr, "HOLE", self_hand assert(len(self_hand) == 4) self_hand = [ct.stoi[self_hand[:2]], ct.stoi[self_hand[2:]]] for i, c in enumerate(self_hand): hi.hole_cards[i] = c lzp.set_st_from_hand_info(C.pointer(p.zp.i), C.pointer(hi), pub_types.ctypes.data_as(C.POINTER(C.c_int16)),priv_types.ctypes.data_as(C.POINTER(C.c_int16))) #lzp.set_mutable_types_from_path(test_pub_types.ctypes.data_as(C.POINTER(C.c_int16)), test_path.ctypes.data_as(C.c_char_p), test_path_i, C.pointer(p.root_state.unique_root_node)) #print >>sys.stderr, pub_types #print >>sys.stderr, test_pub_types action_odds = p.us_by_id(hi.cur_us.contents.root_idx).get_action_odds_from_file(p.model_path, pub_types, priv_types, src) #print >>sys.stderr, self_hand, board print >>sys.stderr, "ACTION ODDS", action_odds # hs = p.zp.get_hand_slot(bc, self_hand) # print >>sys.stderr, "self hand", self_hand, hs # board_slots = p.zp.get_board_slots_all_gs(bc) # print >>sys.stderr, board_slots # us = p.get_unique_state_from_path(bets) return action_odds
def parse_matchstate(ms, p): global priv_types global pub_types ms_spl = ms.split(":") #print ms_spl cmd, pos, hand_n, betting, cards = ms_spl bets = betting.split("/") #print bets hi = dt.hand_info() hi.root_us = C.pointer(p.root_state.unique_root_node) hi.cur_us = C.pointer(p.root_state.unique_root_node) for i in xrange(4): hi.acts_i[i] = 0 lzp.add_action_to_hi(C.pointer(hi), 0) lzp.add_action_to_hi(C.pointer(hi), 0) #test_path = np.zeros(256, dtype=np.int8) #test_path_i = 2 for i, street in enumerate(bets): for act in street: print act, act_i = 1 if act == "r": act_i = 0 elif act == "c": act_i = 1 elif act == "f": act_i = 2 lzp.add_action_to_hi(C.pointer(hi), act_i) #test_path[test_path_i] = act_i #test_path_i+=1 #us = p.get_unique_state_from_path(bets) print "|", print if not hi.cur_us or hi.cur_us.contents.gamestate == 4: #print "No unique state" return None pos = int(pos) hand_n = int(hand_n) # if hi.cur_us.contents.root_idx == 2: # #new hand # pub_types = np.zeros(p.zp.i.n_type_types[1], dtype=np.int16) # pub_types.fill(-1) # #test_pub_types = np.zeros(p.zp.i.n_type_types[1], dtype=np.int16) # priv_types = np.zeros(p.zp.i.n_type_types[0], dtype=np.int16) # priv_types.fill(-1) #else: # pub_types[:7] = -1 if hi.cur_us.contents.cur_seat != pos: #print "NOT MY TURN" return None #print "MY TURN" cards_spl = cards.split("/") hole_cards = cards_spl[0] board = cards_spl[1:] bc = [] print cards_spl for b in board: while len(b) >= 2: if b[:2] == "10": bc.append(ct.stoi[b[:3]]) b = b[3:] else: bc.append(ct.stoi[b[:2]]) b = b[2:] #print for i, c in enumerate(bc): hi.board[i] = c hole_spl = hole_cards.split("|") self_hand = hole_spl[pos] assert(len(self_hand) == 4) self_hand = [ct.stoi[self_hand[:2]], ct.stoi[self_hand[2:]]] for i, c in enumerate(self_hand): hi.hole_cards[i] = c pub_types.fill(-1) priv_types.fill(-1) lzp.set_st_from_hand_info(C.pointer(p.zp.i), C.pointer(hi), pub_types.ctypes.data_as(C.POINTER(C.c_int16)),priv_types.ctypes.data_as(C.POINTER(C.c_int16))) #lzp.set_mutable_types_from_path(test_pub_types.ctypes.data_as(C.POINTER(C.c_int16)), test_path.ctypes.data_as(C.c_char_p), test_path_i, C.pointer(p.root_state.unique_root_node)) #print pub_types #print test_pub_types #print pub_types, priv_types pub_types[0] = 0 #action_odds = p.us_by_id(hi.cur_us.contents.root_idx).get_action_odds_from_file(p.model_path, pub_types, priv_types, src) us = p.us_by_id(hi.cur_us.contents.root_idx) pmn = lzp.get_first_matching_situ_weighed_random(us.unique_root_node.model_tree, pub_types.ctypes.data_as(C.POINTER(C.c_int16)), 0, rng, 0) slot_i = lzp.get_closest_local_type(pmn, priv_types[hi.cur_us.contents.gamestate]) lzp. #print pmn.contents.data_index, slot_i # pdb.set_trace() # r = us.avg_odds_mmap[pmn.contents.data_index*3+slot_i] # c = us.avg_odds_mmap[pmn.contents.data_index*3+pmn.contents.len+slot_i] # f = us.avg_odds_mmap[pmn.contents.data_index*3+pmn.contents.len*2+slot_i] # tot = r+c+f # r/=tot # c/=tot # f/=tot # action_odds_avg = (r,c,f) r = float(us.byte_odds_mmap[pmn.contents.data_index*2+ slot_i*2]) c = float(us.byte_odds_mmap[pmn.contents.data_index*2+ slot_i*2+1]) f = 255.0-r-c if f >= 0: #r*=2 tot = r+c+f r/=tot c/=tot f/=tot else: print >>sys.stderr, "ZERO INFO", r,c,f, ms r = 0.0 c = 1.0 f = 0.0 # pdb.set_trace() # if us.gamestate == 3: # td = np.zeros(1, dtype=dt.types_data_np) # deck = np.array(bc, dtype=np.int8) # lzp.gen_types_data(C.pointer(p.zp.i), deck[:5].ctypes.data_as(C.POINTER(C.c_int8)), td.ctypes.data) # assert(tuple(td["public_types"][0][7:10]) == tuple(pub_types[7:10])) # pdb.set_trace() action_odds = (r,c,f) #print action_odds_avg #print action_odds #print #print self_hand, board #print action_odds # hs = p.zp.get_hand_slot(bc, self_hand) # print "self hand", self_hand, hs # board_slots = p.zp.get_board_slots_all_gs(bc) # print board_slots # us = p.get_unique_state_from_path(bets) return action_odds