def getAction(self, gameState, index, validActions): if gameState.isLose(): return None actions = gameState.getLegalActions(index, validActions) if index == 0: # human player unrolled = util.unroll_board(gameState.board) x = numpy.asarray(unrolled) x = x.reshape(1, x.shape[0]) if self.feature_transform: x = numpy.log2(x) predictions = [(self.predict[move](x), move) for move in range(4)] predictions.sort(reverse=True) if predictions[0][1] in validActions: return predictions[0][1] else: print('Falling back to second choice since {} was last moved'.format(predictions[0][1])) return predictions[1][1] else: return None if len(actions) == 0 else random.choice(actions)
def write_move(self, board, move): self.inputs_writer.writerow(util.unroll_board(board)) self.labels_writer.writerow((move, ))
def eval_snake(state): ''' Linear combination of all squares' values. Inspired by Hadi Pouransari & Saman Ghili's "AI algorithms for the game 2048". ''' return util.dot_product(SNAKE_WEIGHTS, util.unroll_board(state.board))
def write_move(self, board, move): self.inputs_writer.writerow(util.unroll_board(board)) self.labels_writer.writerow((move,))