コード例 #1
0
def abminval(board, turn, a, b):
    val = 2  # has to be less than owin
    # check whose turn it is...
    if turn == common.constants.O:
        next_ = common.constants.X
    else:
        next_ = common.constants.O

    # Check if the game is already finished or not...
    gstat = common.game_status(board)
    if gstat == common.constants.O:
        val = -1
    elif gstat == common.constants.X:
        val = 1
    elif common.constants.NONE not in board:
        val = 0
    else:
        for i in range(3):
            for j in range(3):
                cval = common.get_cell(board, i, j)
                if cval == common.constants.NONE:
                    newboard = board[:]
                    common.set_cell(newboard, i, j, turn)
                    val = min(val, abmaxval(newboard, next_, a, b))
                    if val <= a:
                        return val
                    b = min(val, b)
    return val
コード例 #2
0
def min_value(board, a, b):
    """ Returns the minimum value for thr board.
    """
    # initialize v = +infinity
    v = 1000000

    # Check state
    result = common.game_status(board)

    # Check results
    if result == common.constants.X:
        return 1

    elif result == common.constants.O:
        return -1

    elif check_tie(board):
        return 0

    # If game is not finished - check the value of v
    for y in range(TICTACTOE_HEIGHT):
        for x in range(TICTACTOE_WIDTH):
            if common.get_cell(board, y, x) == common.constants.NONE:
                new_board = board[:]
                common.set_cell(new_board, y, x, common.constants.O)
                v = min(v, max_value(new_board, a, b))

                # For abprun_tictactoe()
                if (a is not None) and (b is not None):
                    if v <= a:
                        return v
                    b = min(b, v)
    return v
コード例 #3
0
 def is_terminal(self):
     status = common.game_status(self.board)
     # 1 if X wins, 2 if O wins, 0 else
     if is_tie(self.board) or status != 0:
         self.outcome = status
         return True
     else:
         return False
コード例 #4
0
def abprun_tictactoe_helper(board, turn, alpha, beta):
    result = common.game_status(board)
    #common.print_board(board)
    #print("\n")
    if result == common.constants.O or result == common.constants.X:
        return result
    if result == common.constants.NONE and isFull(board) == 1:
        return result
    if turn == common.constants.X:
        return max_val_ABPrun(board, alpha, beta)
    if turn == common.constants.O:
        return min_val_ABPrun(board, alpha, beta)
コード例 #5
0
def min_value(state, turn):
    v = 10000
    status = common.game_status(state)
    if status == common.constants.X:
        return 1
    elif (common.constants.NONE not in state
          and status == common.constants.NONE):
        return 0
    elif status == common.constants.O:
        return -1
    for successor in expand(state, turn):
        v = min(v, max_value(successor, common.constants.X))
    return v
コード例 #6
0
def min_value(board):
    v = common.constants.X
    result = common.game_status(board)
    if ((result == common.constants.X) or (result == common.constants.O)):
        return result
    elif tie(board):
        return common.constants.NONE
    else:
        for i in range(0, len(board)):
            if board[i] == 0:
                board[i] = common.constants.O
                v = minimum(v, max_value(board))
                board[i] = 0
        return v
コード例 #7
0
def minmax_tictactoe(board, turn):

    result = common.game_status(board)

    # terminal state, someone winning
    if result == common.constants.X or result == common.constants.O:
        return result
    # terminal state, tie
    if result == common.constants.NONE and boardFull(board):
        return result

    # otherwise, keep playing
    if turn == common.constants.X:
        return maxX(board)
    if turn == common.constants.O:
        return maxO(board)
コード例 #8
0
def abmin_value(state, turn, alpha, beta):
    v = 10000
    status = common.game_status(state)
    if status == common.constants.X:
        return 1
    if (common.constants.NONE not in state
            and status == common.constants.NONE):
        return 0
    if status == common.constants.O:
        return -1
    for successor in expand(state, turn):
        v = min(v, abmax_value(successor, common.constants.X, alpha, beta))
        if v <= alpha:
            return v
        beta = min(beta, v)
    return v
コード例 #9
0
def ab_min_value(board, alpha, beta):
    v = common.constants.X
    result = common.game_status(board)
    if ((result == common.constants.X) or (result == common.constants.O)):
        return result
    elif tie(board):
        return common.constants.NONE
    else:
        for i in range(0, len(board)):
            if board[i] == 0:
                board[i] = common.constants.O
                v = minimum(v, ab_max_value(board, alpha, beta))
                board[i] = 0
                if (v == minimum(v, alpha)):
                    return v
                beta = minimum(beta, v)
        return v
コード例 #10
0
def minmax_tictactoe(board, turn):
    #put your code here:
    #it must return common.constants.X(1), common.constants.O(2) or common.constants.NONE(0) for tie.
    #use the function common.game_status(board), to evaluate a board
    #it returns common.constants.X(1) if X wins, common.constants.O(2) if O wins or common.constants.NONE(0) if tie or game is not finished
    #the program will keep track of the number of boards evaluated
    #result = common.game_status(board);
    result = common.game_status(board)
    #common.print_board(board)
    #	print("\n")
    if result == common.constants.O or result == common.constants.X:
        return result
    if result == common.constants.NONE and isFull(board) == 1:
        return result
    if turn == common.constants.X:
        return max_val(board)
    if turn == common.constants.O:
        return min_val(board)
コード例 #11
0
def minvalue(board_state):
    score = float('inf')  #initialize the score
    result = common.game_status(board_state)
    if result == common.constants.X:
        return 1
    elif result == common.constants.O:
        return -1
    elif istie_game(board_state):
        # common.print_board(board_state)
        return 0
        # return common.constants.NONE

    else:
        for i in range(0, len(board_state)):
            if board_state[i] == 0:
                board_state[i] = common.constants.O
                score = min(score, maxvalue(board_state))
                board_state[i] = 0
        return score
コード例 #12
0
def abprun_helper(board, turn, alpha, beta):
    result = common.game_status(board)

    # alpha is worst so far for O
    alpha = common.constants.X
    # beta is worst so far for X
    beta = common.constants.O

    # terminal state, someone winning
    if result == common.constants.X or result == common.constants.O:
        return result
    # terminal state, tie
    if result == common.constants.NONE and boardFull(board):
        return result

    # otherwise, keep playing
    if turn == common.constants.X:
        return maxAbX(board, alpha, beta)
    if turn == common.constants.O:
        return maxAbO(board, alpha, beta)
コード例 #13
0
ファイル: code.py プロジェクト: jlw24/artificial-intelligence
def maximizer(board, prune, alpha, beta):

	status = common.game_status(board)

	if (status != 0) or (is_complete(board) and status == 0):
		if status == 2:
			return -1
		else:
			return status
	else:
		v = float('-inf')
		for i in range(9):
			if board[i] == 0:
				board[i] = 1
				v = max(v, minimizer(board, prune, alpha, beta))
				board[i] = 0
				if prune:
					if v >= beta:
						return v
					alpha = max(alpha, v)
		return v
コード例 #14
0
def maxvalue_ab(board_state, a, b):
    score = float('-inf')  #initialize the score
    result = common.game_status(board_state)
    if result == common.constants.X:
        return 1
    elif result == common.constants.O:
        return -1
    elif istie_game(board_state):
        # common.print_board(board_state)
        return 0
        # return common.constants.NONE
    else:
        for i in range(0, len(board_state)):
            if board_state[i] == 0:
                board_state[i] = common.constants.X
                score = max(score, minvalue_ab(board_state, a, b))
                board_state[i] = 0
            if score >= b:
                return score
            a = max(a, score)

        return score
コード例 #15
0
 def set_outcome(self):
     self.outcome = common.game_status(self.board)