Как включить ввод определения как необязательного? - PullRequest
1 голос
/ 20 мая 2019

У меня есть определение, которое повторяет некоторые функции. Тем не менее, аргумент или другими словами ввод этой функции должен быть необязательным. Для моей проблемы я пытаюсь сделать параметр глубины необязательным. Например, это минимаксный алгоритм, но иногда для экспериментов может не потребоваться сокращение глубины. Поэтому это должно быть необязательно.

Я попробовал метод * args. Тем не менее, это не сработало для меня. Кроме того, я сделал это «глубина = Нет», но я получил ошибку из-за значения «глубина - 1» в динамическом программировании.

def minimax(self, board_state, a, b, *args):
    for x in args:
        depth = x
    turn, board = board_state
    if super().terminal_state(board_state, depth):
        return super().heuristic_value(board_state)
    else:
        if turn == -1:
            value = 250
            for x in super().successor_generator(board_state):
                value = min(value, self.minimax(x, a, b, depth-1))
                b = min(b, value)
                if b <= a:
                    break
        elif turn == 1:
            value = -250
            for x in super().successor_generator(board_state):
                value = max(value, self.minimax(x, a, b, depth-1))
                a = max(a, value)
                if b <= a:
                    break

    result = board_state, value
    return value

object.minimax(state, a, b, depth=None)
value = min(value, self.minimax(x, a, b, depth-1))
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

Желаемая функция должна работать в обоих направлениях:

object.minimax(state, a, b) 
object.minimax(state, a, b, depth=5)

1 Ответ

1 голос
/ 20 мая 2019

Ваши звонки

object.minimax(state, a, b) 
object.minimax(state, a, b, depth=5)

верны, и вы должны определить свой метод как

def minimax(self, board_state, a, b, depth=None)

Но после того, как вы это сделаете, вы не должны делать это

value = min(value, self.minimax(x, a, b, depth-1))

потому что вы знаете, что при некоторых обстоятельствах depth будет None, и поэтому depth-1 не имеет смысла в этом случае.Вы должны сами обработать исключительное значение None.Один из способов сделать это -

value = min(value, self.minimax(x, a, b, depth-1 if depth is not None else None))
...