def odv_forward_mrv_mcv_lcv(row, col, domains, board, assignment):
    max_count = 0
    max_index = 0
    domain = domains[str([row, col])]
    dictionary = {}
    for i in range(len(domain)):
        val = domain[i]
        count = 0
        # row checking
        for r in range(board.BoardSize):
            if (not sudoku.is_assigned(r, col, board, assignment)) and domains[str([r, col])].count(val):
                count += 1
        # column checking
        for c in range(board.BoardSize):
            if (not sudoku.is_assigned(row, c, board, assignment)) and domains[str([row, c])].count(val):
                count += 1
        # subsquare checking
        subsquare = int(math.sqrt(board.BoardSize))
        squareRow = row // subsquare
        squareCol = col // subsquare

        for r in range(subsquare):
            for c in range(subsquare):
                if (
                    not sudoku.is_assigned(squareRow * subsquare + r, squareCol * subsquare + c, board, assignment)
                ) and domains[str([squareRow * subsquare + r, squareCol * subsquare + c])].count(val):
                    count += 1
        dictionary[val] = count

    sorted_dictionary = sorted(dictionary.iteritems(), key=operator.itemgetter(1))

    dom = []
    for dom_val in sorted_dictionary:
        dom.append(dom_val[0])
    return reversed(dom)
Пример #2
0
def select_unassigned_variable_mrv(board,assignment,domains):
    min_row = 0
    min_col = 0
    min_len = len(board.CurrentGameboard) + 1
    constraining_val = 0

    mrv = []

    for r in range(board.BoardSize):
        for c in range(board.BoardSize):
            if not sudoku.is_assigned(r,c,board,assignment):
                key = str([r, c])
                if len(domains[key]) < min_len:
                    # val = constraining_value(r, c, board, assignment)
                    # if(val >= constraining_val):
                    min_len = len(domains[key])
                    min_row = r
                    min_col = c
                        # constraining_val = val
                elif len(domains[key]) == min_len:
                    val = constraining_value(r, c, board, assignment)
                    if(val > constraining_val):
                        min_len = len(domains[key])
                        min_row = r
                        min_col = c
                        constraining_val = val
    return min_row, min_col
Пример #3
0
def constraining_value(row, col, board, assignment):
    count = 0;
    for i in range(board.BoardSize):
        if not sudoku.is_assigned(row, i, board, assignment):
            count += 1
        if not sudoku.is_assigned(i, col, board, assignment):
            count += 1
        # print count

    subsquare = int(math.sqrt(board.BoardSize))
    squareRow = row // subsquare
    squareCol = col // subsquare
    # return count  
    for r in range(subsquare):
        for c in range(subsquare):
            if not sudoku.is_assigned(r, c, board, assignment):
                count += 1
        # print count
        return count
Пример #4
0
def select_unassigned_variable(board,assignment):
    for r in range(board.BoardSize):
        for c in range(board.BoardSize):
            if not sudoku.is_assigned(r,c,board,assignment):
                return r, c