GameAILab2/util.py

66 lines
1.8 KiB
Python

from hanabi import *
def is_playable(knowledge, board):
possible = get_possible(knowledge)
return all(map(playable(board), possible))
def maybe_playable(knowledge, board):
possible = get_possible(knowledge)
return any(map(playable(board), possible))
def is_useless(knowledge, board):
possible = get_possible(knowledge)
return all(map(useless(board), possible))
def maybe_useless(knowledge, board):
possible = get_possible(knowledge)
return any(map(useless(board), possible))
def has_property(predicate, knowledge):
possible = get_possible(knowledge)
return all(map(predicate, possible))
def may_have_property(predicate, knowledge):
possible = get_possible(knowledge)
return any(map(predicate, possible))
def probability(predicate, knowledge):
num = 0.0
denom = 0.0
for col in ALL_COLORS:
for i,cnt in enumerate(knowledge[col]):
if predicate(Card(col,i+1)):
num += cnt
denom += cnt
return num/denom
def playable(board):
def playable_inner(card):
return card.is_playable(board)
return playable_inner
def useless(board):
def useless_inner(card):
return card.is_useless(board)
return useless_inner
def has_rank(rank):
def has_rank_inner(card):
return card.rank == rank
return has_rank_inner
def has_color(color):
def has_color_inner(card):
return card.color == color
return has_color_inner
def get_possible(knowledge):
result = []
for col in ALL_COLORS:
for i,cnt in enumerate(knowledge[col]):
if cnt > 0:
result.append(Card(col,i+1))
return result
def filter_actions(type, actions):
return [act for act in actions if act.type == type]