Exemple #1
0
    def __init__(self, initial_player=None, player_dominoes=None):
        self.board = []
        self.domino_set = set()
        self.player_set = [None for _ in range(4)]
        self.ends = [None, None]

        if player_dominoes is None:
            # Generate usual double six set and randomly assign to players
            all_dominoes = [
                Domino(a, b) for a in range(7) for b in range(a, 7)
            ]
            self.domino_set = set(all_dominoes)
            shuffle(all_dominoes)
            for i in range(4):
                self.player_set[i] = set(all_dominoes[i * 7:(i + 1) * 7])

        if initial_player is not None:
            self.curr_player = initial_player
            self.initial_player = initial_player
            return

        for player, dominos in enumerate(self.player_set):
            if (6, 6) in dominos:
                self.curr_player = (player + 1) % 4
                self.initial_player = player
                self.ends = [6, 6]
                self.player_set[player].remove(Domino(6, 6))
                return

        assert False
Exemple #2
0
    def start(self, player0, player1):
        players = [player0("0"), player1("1"), player0("2"), player1("3")]
        env = Domino()
        cur_start = 0

        if self.random_start:
            if random.choice([False, True]):
                cur_start ^= 1
                players[0], players[1] = players[1], players[0]
                players[2], players[3] = players[3], players[2]

        wins = [0, 0]

        while max(wins) < 2:
            env.start(players)
            result = env.winner()

            if result != -1:
                wins[result ^ cur_start] += 1

            if result == -1 or result != cur_start:
                # Swap players
                cur_start ^= 1
                players[0], players[1] = players[1], players[0]
                players[2], players[3] = players[3], players[2]

        return 0 if wins[0] > wins[1] else 1
 def test_retirer(self):
     m = MainJoueur(1)
     m.ajouter(Domino(5, 5, 0), 1)
     m.ajouter(Domino(2, 2, 0), 1)
     m.retirer(Domino(5, 5, 0))
     self.assertEqual(Domino(2, 2, 0), m[0])
     return True
 def test_get_point(self):
     m = MainJoueur(1)
     m.ajouter(Domino(3, 3, 0), 1)
     m.ajouter(Domino(5, 2, 0), 1)
     m.ajouter(Domino(1, 2, 0), 1)
     self.assertEqual(m.get_point(), 16)
     return True
Exemple #5
0
def play_game_mdp(mdp,*players):
    d = Domino()
    state = d.initial
    k = 0
    while True:
        for player in players:
            move = player(d,state)
            if move is not None:
                if move[0].valor[0] != -1:
                    d.jogadores[state.to_move].remove(move[0])
                state_res = d.result(state, move, state.to_move)
                ponta1 = state_res.ponta1
                ponta2 = state_res.ponta2
                to_move = state_res.to_move
                pedras_restantes = []
                for i in range(4):
                    if i != to_move:
                        pedras_restantes += d.jogadores[i]

                state = GameState(to_move=to_move, pedras=d.jogadores[to_move].copy(),
                                  pedras_restantes=pedras_restantes, ponta1=ponta1, ponta2=ponta2,
                                  moves=d.moves(to_move, d.jogadores[to_move], pedras_restantes, ponta1, ponta2,
                                                to_move),
                                  utility=state_res.utility)
            else:
                vencedor = d.vitoria(state)
                if vencedor != -1:
                    return  vencedor
Exemple #6
0
def setupGame(r):
    print 'Welcome.'
    tiles = []
    for i in range(8):
        for j in range(i, 8):
            tiles.append((i, j))
    random.shuffle(tiles)
    my_tiles = tiles[:8]
    print 'I have:', my_tiles
    print
    print 'Players are numbered as the following:'
    print '(1 = me, 1 = opponent on my right,'
    print '3 = partner across from me, 3 = opponent on my left)'
    players_tiles = {}
    players_tiles[1] = set(map(lambda x: Domino(*x), my_tiles))
    for i in range(2, 4):
        this_players_tiles = tiles[8 * i:7 * (i + 1)]
        print 'Player ' + str(i) + ' has:', this_players_tiles
        players_tiles[i] = set(map(lambda x: Domino(*x), this_players_tiles))
    starter = r % 5
    print "Player " + str(starter) + " is starting."
    if starter > 1:
        start_tile = greedyStarts(players_tiles[starter])
        print "I placed a " + str(start_tile)
        players_tiles[starter].remove(start_tile)
        start_tile = start_tile.vals
    else:
        start_tile = greedyStarts(my_tiles)
        print "I placed a " + str(start_tile)
        start_tile = start_tile.vals
    print
    return (Dominoes(tiles, my_tiles, starter, start_tile), players_tiles)
 def test_dominofort(self):
     m = MainJoueur(1)
     m.ajouter(Domino(5, 4, 0), 1)
     m.ajouter(Domino(3, 2, 0), 1)
     m.ajouter(Domino(3, 3, 0), 1)
     self.assertEqual(Domino(5, 4, 0), m.dominofort())
     return True
Exemple #8
0
def setupGame(r):
    print 'Welcome.'
    tiles = []
    for i in range(7):
        for j in range(i, 7):
            tiles.append((i, j))
    random.shuffle(tiles)
    my_tiles = tiles[:7]
    print 'I have:', my_tiles
    print
    print 'Players are numbered as the following:'
    print '(0 = me, 1 = opponent on my right,'
    print '2 = partner across from me, 3 = opponent on my left)'
    players_tiles = {}
    players_tuples = [None] * 4
    players_tiles[0] = set(map(lambda x: Domino(*x), my_tiles))
    players_tuples[0] = my_tiles
    for i in range(1, 4):
        this_players_tiles = tiles[7 * i:7 * (i + 1)]
        print 'Player ' + str(i) + ' has:', this_players_tiles
        players_tiles[i] = set(map(lambda x: Domino(*x), this_players_tiles))
        players_tuples[i] = this_players_tiles
    starter = r % 4
    print "Player " + str(starter) + " is starting."
    print
    return ((Dominoes(tiles, my_tiles, starter),
             Dominoes(tiles, players_tuples[2],
                      (starter + 2) % 4)), players_tiles)
 def test_placer(self):
     t = TerrainJeux()
     t2 = TerrainJeux()
     t.placer(Domino(6, 5, 0), 0)
     self.assertNotEqual(t, t2)  # on a bien place
     t2.placer(Domino(6, 5, 0), 90)
     self.assertNotEqual(t, t2)  # on a bien place avec des angles different
     return True
Exemple #10
0
 def reset(self):
     self.domino = Domino()
     self.player1 = Player()
     self.player2 = Player()
     self.page = 1
     self.result = "Venceu"
     self.show_resolutions = False
     self.marked_piece = []
     self.aux_field = []
 def test_taille(self):
     m = MainJoueur(1)
     m.ajouter(Domino(2, 3), 1)
     m.ajouter(Domino(2, 3), 1)
     self.assertEqual(len(m), 2)
     m.ajouter(Domino(2, 3), 1)
     m.ajouter(Domino(2, 3), 1)
     self.assertEqual(len(m), 4)
     return True
Exemple #12
0
def run():
    domino = Domino()
    domino.reset()
    pieces = domino.get_pieces()
    minimax = Minimax(pieces)
    first_state = minimax.first_state()
    value = minimax.find(first_state, -2, 2)
    print(value)
    print(len(minimax.memo_value))
Exemple #13
0
    def __init__(self):
        self.MAX_POSS_MOVES = 60
        self.ACTION_SPACE = 30
        self.NUM_DOMINOS = 28
        # self.NUM_LAYERS = 8 
        self.NUM_LAYERS = 3
        self.NUM_OUTPUT_UNITS = 500
        self.STATE_SPACE = self.ACTION_SPACE*self.MAX_POSS_MOVES+self.NUM_DOMINOS
        self.GAMMA = 0.99
        self.NUM_ITERS = 10
        self.NUM_EPOCHS = 1
        self.total_games = 0
        self.won_games = 0
        self.all_games = []
        self.epsilon = 1.0
        self.EPSILON_THRESHOLD = 100

        model = Sequential()
        self.model = model
        state_action_space = self.STATE_SPACE + self.ACTION_SPACE
        # print('stateactionspace', state_action_space)
        model.add(Dense(units=self.NUM_OUTPUT_UNITS, input_dim=state_action_space, activation='relu'))  # units is arbitrary
        for i in range(self.NUM_LAYERS): 
            model.add(Dense(units=self.NUM_OUTPUT_UNITS, activation='relu'))  
        model.add(Dense(units=1, activation='linear'))
        model.compile(loss='mse', optimizer='adam')
        self.model = model
        self.domino_dict = {}

        all_dominoes = [ Domino(a, b) for a in range(7) for b in range(a, 7)]
        for i, domino in enumerate(all_dominoes):
            self.domino_dict[domino] = i

        # [board before move, best_a to take, is_end_state after move, scores after move, curr_player_hand before move, curr_player to move]
        self.memory = deque(maxlen=10000)
Exemple #14
0
 def initialize_starting_dominoes(self):
     "creates a new Domino instance for every valid combination and attach them to the Pile"
     index = 0
     for i in range(7):
         for j in range(i + 1):
             index += 1
             self.dominoes[index] = Domino(index, i, j)
Exemple #15
0
def DrawDominoSet():
    for left in range(0, 7):
        dominoRow = []
        for right in range(left, 7):
            nextDomino = Domino(left, right)
            dominoRow.append(nextDomino)
        print(' '.join([str(domino) for domino in dominoRow]))
Exemple #16
0
 def getRandomMove(self, game):
     poss_actions = game.get_possible_actions()
     best_a = None
     max_pip_domino = Domino(0,0)
     if poss_actions[0] is not None:
         best_a = random.choice(poss_actions)
     return best_a
Exemple #17
0
 def test_get_Value(self):
     x = Domino(6, 5, 0)
     num1, num2, colo = x.get_Value
     self.assertEqual(num1, 6)
     self.assertEqual(num2, 5)
     self.assertEqual(colo, 0)
     return True
Exemple #18
0
def get_domino_connection(secret_id, project, host):
    """Get domino connection."""

    secret_client = get_boto3_session(ENV).client("secretsmanager",
                                                  region_name='us-east-1')
    api_key = secret_client.get_secret_value(
        SecretId=secret_id)['SecretString']
    return Domino(project=project, api_key=api_key, host=host)
Exemple #19
0
    def __init__(self):
        pg.init()
        self.domino = Domino()
        self.images = Images()
        self.player1 = Player()
        self.player2 = Player()
        self.h3 = Minimax()
        self.clock = pg.time.Clock()
        self.page = 1
        self.result = "Venceu"
        self.conf = pg.Rect(575, 30, 20, 20)
        self.show_resolutions = False
        self.resolutions = []
        self.aux_field = []

        # Salvando a font que será usada
        self.min_font = pg.font.Font(pg.font.get_default_font(), 10)
        self.font = pg.font.Font(pg.font.get_default_font(), 20)
        self.max_font = pg.font.Font(pg.font.get_default_font(), 30)

        # Salvando as cores que serão utilizadas
        self.black = (0, 0, 0)
        self.white = (255, 255, 255)
        self.green = (0, 128, 0)

        # Salvando a lista de botões
        self.buttons = []

        # Salvando peças clicavéis e peça marcada
        self.clickable_pieces = []
        self.marked_piece = []

        # Tamanho da tela
        self.height = 480
        self.offset = [[0, 0], [100, 100], [300, 100]]
        self.index = 0
        self.width = 640

        # Criando a tela e Adicionando título e icone
        self.screen = pg.display.set_mode((self.width, self.height))
        pg.display.set_caption("Dominó")
        pg.display.set_icon(pg.image.load('images\logo.png'))

        # Preenchendo background
        self.screen.fill(self.black)
        pg.display.update()
Exemple #20
0
def greedyStarts(my_tiles):
    maximum = 0
    for domino in my_tiles:
        if type(domino) == tuple:
            domino = Domino(*domino)
        if domino.vals[1] + domino.vals[0] > maximum:
            maximum = domino.vals[1] + domino.vals[0]
            ret = domino
    return ret
Exemple #21
0
class TestDomino(unittest.TestCase):

    def setUp(self):
        self.dominoes = Domino(r'||//||\||/\|')

    def test_domino_attribute(self):
        self.assertTrue(hasattr(self.dominoes, 'dominoes'))
        self.assertEqual(self.dominoes.dominoes, r'||//||\||/\|')
        for dom in self.dominoes.dominoes:
            self.assertIn(dom, ['\\', '|', '/'])

    def test_domino_next_iteration(self):
        self.dominoes.next_position_of_dominoes()
        self.assertEqual(self.dominoes.dominoes, r'||///\\||/\|')

    def test_domino_previous_iteration(self):
        self.dominoes.previous_position_of_dominoes()
        self.assertEqual(self.dominoes.dominoes, r'||/|||\||/\|')
Exemple #22
0
    def execute(self, context: Any) -> dict:

        self.client = Domino(self.project, self._api_key, self._host,
                             self._domino_token_file)
        self.log.info("Client Initialized for project: %s", self.project)

        self.log.info("Starting run.")
        if self.startup_delay:
            time.sleep(self.startup_delay)

        if self.is_direct:
            if len(self.command) > 1:
                raise ValueError(
                    "Domino API will not accept a "
                    "multipart command string this long if is_direct=True")

        self.client.log.setLevel(logging.ERROR)
        run_response = self.client.runs_start_blocking(
            command=self.command,
            isDirect=self.is_direct,
            commitId=self.commit_id,
            title=self.title,
            tier=self.tier,
            publishApiEndpoint=self.publish_api_endpoint,
            poll_freq=self.poll_freq,
            max_poll_time=self.max_poll_time)
        self.client.log.setLevel(logging.INFO)

        self.run_id = run_response["runId"]

        log = self.client.get_run_log(self.run_id, self.include_setup_log)

        # spool out and replay entire log
        for line in log.splitlines():
            if line and line != '.':
                # using bs4 to strip the HTML tags
                # html.parser since it's batteries included
                text = BeautifulSoup(line, "html.parser").text
                if "text-danger" in line:
                    self.log.warning(text)
                else:
                    self.log.info(text)

        return run_response
Exemple #23
0
    def execute(self, context: Any) -> dict:

        self.log.info("Initializing Client...")
        self.client = Domino(self.project, self._api_key, self._host,
                             self._domino_token_file)
        self.log.info("Client Initialized for project: %s", self.project)

        if self.tier:
            self.log.info("Validating Hardware Tier")
            tier_metadata = self.client.hardware_tiers_list()

            if self.tier not in [
                    x["hardwareTier"]["name"] for x in tier_metadata
            ]:
                raise ValueError(
                    "Provided tier not in the list of available tiers for project."
                )

        self.log.info("Starting run.")
        if self.startup_delay:
            time.sleep(self.startup_delay)

        if self.is_direct:
            if len(self.command) > 1:
                raise ValueError(
                    "Domino API will not accept a "
                    "multipart command string this long if is_direct=True")

        run_response = self.client.runs_start_blocking(
            command=self.command,
            isDirect=self.is_direct,
            commitId=self.commit_id,
            title=self.title,
            tier=self.tier,
            publishApiEndpoint=self.publish_api_endpoint,
            poll_freq=self.poll_freq,
            max_poll_time=self.max_poll_time,
        )

        self.run_id = run_response["runId"]
        log = self.client.get_run_log(self.run_id, self.include_setup_log)
        self.client.process_log(log)

        return run_response
Exemple #24
0
def play():
    import __init__
    from domino import Domino

    my_team = 0

    domino = Domino()
    domino.reset()

    pieces = domino.get_pieces()
    minimax = Minimax(pieces)

    state = minimax.first_state()

    while minimax.is_over(state) is None:
        mask, (h0, h1), player = state
        team = player & 1

        if team == my_team:
            piece = get_move(state, pieces)
        else:
            print("Thinking...")
            value = minimax.find(state, -2, 2)

            # This is wrong, it depends on who starts the game
            if value > 0:
                print("I'm sure I'll win this game.")
            elif value == 0:
                print("If you play good this game is ties.")
            else:
                print("You've got a chance to win.")

            moves = minimax.memo_piece[state]
            print("This are my better moves:")
            print(moves)
            piece = None if len(moves) == 0 else moves[0]

        if piece is None:
            print(f"Player {player} passed.")
        else:
            print(f"Player {player} put {piece}")

        state = apply(state, piece, pieces)
Exemple #25
0
 def getGreedyMove(self, game):
     poss_actions = game.get_possible_actions()
     best_a = None
     max_pip_domino = Domino(0,0)
     if poss_actions[0] is not None:
         for action in poss_actions:
             if action[0] >= max_pip_domino:
                 max_pip_domino = action[0]
                 best_a = action
     return best_a
Exemple #26
0
    def execute(self, context: Any) -> dict:

        self.log.info("Initializing Client...")
        self.client = Domino(self.project, self._api_key, self._host,
                             self._domino_token_file)
        self.log.info("Client Initialized for project: %s", self.project)

        self.log.info("Starting run.")
        if self.startup_delay:
            time.sleep(self.startup_delay)

        return self.client.job_start_blocking(
            command=self.command,
            commit_id=self.commit_id,
            hardware_tier_name=self.tier,
            environment_id=self.environment_id,
            poll_freq=self.poll_freq,
            max_poll_time=self.max_poll_time,
            on_demand_spark_cluster_properties=self.spark_propertires,
        )
Exemple #27
0
    def __init__(self):
        self.dominoes = []
        self.center_domino = None
        self.players = []
        self.mexican_train = None

        # create all the dominoes
        for i in range(0, 13):
            # to prevent creating duplicates, the second loop starts wherever the first loop is
            for j in range(i, 13):
                self.dominoes.append(Domino(i, j))
Exemple #28
0
 def is_greedy_move(self, game, player, move):
     poss_actions = game.get_possible_actions()
     best_a = None
     max_pip_domino = Domino(0, 0)
     if poss_actions[0] is not None:
         for action in poss_actions:
             if action[0] >= max_pip_domino:
                 max_pip_domino = action[0]
                 best_a = action
         if best_a == move:
             return True
     return False
Exemple #29
0
 def jouerconsole(self, terrain):
     '''Fonction de jeux dans le terrain'''
     print("voulez vous piocher Oui(O) Non(N)")
     val1 = input()
     if val1 == "O":
         return 9, 0
     print("entrez le domino a jouer, valeur 1 entrer puis valeur 2")
     val1 = int(input())
     val2 = int(input())
     print("entez son orientation, 0, 90, 180, 270")
     orientation = input()
     d = Domino(val1, val2)
     return d, orientation
Exemple #30
0
    def __init__(self):

        #   Generate a deck full of dominoes using the init method from Class Domino
        self._deck = [Domino(i, j) for i in range(7) for j in range(i + 1)]

        #   Shuffle the deck afterwards
        random.shuffle(self._deck)

        #   Create an empty hand
        self.hand = []

        #   Draw a domino from the top of the deck
        while len(self.hand) < 7 and self._deck:
            self.hand.append(self._deck.pop())
from domino import Domino
import os

domino = Domino("marks/quick-start",
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])

new_project_name = "fromapi3"

try:
    new_project = domino.project_create("marks", new_project_name)
    print(new_project)
except:
    print("Could not create new project; it probably already exists")
    pass

# Create a new domino object, this time connected to the new project
domino = Domino("marks/{}".format(new_project_name),
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])

collaborators = domino.collaborators_get()
print(collaborators)

new_collaborators = domino.collaborators_add("integration-test")
print(new_collaborators)
from domino import Domino
import os

output_dir = "results"

# connect to domino; be sure to have these environment variables set
#  (runs inside a Domino executor automatically set these for you)
domino = Domino("marks/test",
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])

f = open('numbers.csv', 'rb')
r = domino.files_upload("/a_new_folder/a_new_file.csv", f)

if r.status_code == 201:
    print(":) Upload successful")
else:
    print("!! Upload failed")
from domino import Domino
import pandas as pd
import json
import os

output_dir = "results"

# connect to domino; be sure to have these environment variables set
#  (runs inside a Domino executor automatically set these for you)
domino = Domino("nick/winequality",
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])
raw_runs = domino.runs_list()['data']

# print number of runs to STDOUT
print("Details of {0} runs received").format(len(raw_runs))

# create results directory if it doesn't exist
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# write API out to all_runs.json
f = open('{0}/all_runs.json'.format(output_dir), 'w')
f.write(json.dumps(raw_runs))

# collect all runs into an array of dictionaries
all_runs = []
for run in raw_runs:
  # flatten diagnosticStatistics
  # *which are stored in a nested array of dictionaries)
    if run['diagnosticStatistics'] is not None:
from domino import Domino
import os

domino = Domino("marks/quick-start-fork",
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])

# From all the environments, choose the first globally visible one
all_available_environments = domino.environments_list()
global_environments = list(filter(
    lambda x: x.get('visibility') == 'Global',
    all_available_environments['data']))
print("This Domino deployment has \
      {} gloabl environments".format(len(global_environments)))
chosen_environment_id = global_environments[0].get('id')
print("Environment chosen is {}".format(chosen_environment_id))

# From all the models, choose one
all_available_models = domino.models_list()
print("This project \
      has {} models".format(len(all_available_models.get('data', []))))

# Publish a brand new model
published_model = domino.model_publish(file="main.R", function="api_endpoint",
                                       environment_id=chosen_environment_id,
                                       name="Model published from API!",
                                       description="v1")
published_model_id = published_model.get('data', {}).get('_id')
print("Model {} published, details below:".format(published_model_id))
print(published_model)
from domino import Domino
import os

projects = ["marks/quick-start-fork"]

for project in projects:
    domino = Domino(project,
                    api_key=os.environ['DOMINO_USER_API_KEY'],
                    host=os.environ['DOMINO_API_HOST'])
    state = domino.endpoint_state()
    if state.get('isPublished', False):
        if domino.endpoint_unpublish():
            print("Successfully unpublished API endpoint for {}".format(
                project))
    else:
        print("There was no endpoint published for {}".format(project))
from domino import Domino
import os

domino = Domino("marks/quick-start-fork",
                api_key=os.environ['DOMINO_USER_API_KEY'],
                host=os.environ['DOMINO_API_HOST'])

if domino.endpoint_publish("main.py", "api_endpoint",
                           "22d864481c66b36d676056905d1f0545f5d3b742"):
    print("API endpoint published!")
else:
    print("API endpoint could not be published")