0

チェス AI を構築しようとしていますが、奇妙なエラーが発生します。序文として、私はスタックオーバーフローを調べて同様の問題を見つけようとしましたが、タプルのアンパックを正しく実装していると思っていたので役に立ちませんでした。コードにバグが見つからないようです。

以下は私の negamax 関数のコードです。チェス盤、現在のプレイヤー、現在の深さを受け取ります。
ボード位置の値を表す数値を現在のプレイヤーに返す board.evalFunction() 関数を使用します。その機能は正常に動作しています。エラーが発生している行にマークを付けました: ValueError: need more than 0 values to unpack.
誰かが私を助けることができますか?

    def negamax(board, player, depth):
        if player == 'human':
            opposite = 'computer'
        else:
            opposite = 'human'
        if depth == 0:
            return (board.evalFunction(player), None)
        moveset = board.generateMoves(player)
        maximum = -99999999999
        optMove = ""
        for move in moveset:
            newBoard = copy.deepcopy(board)
            newBoard.makeMove(move)
            newBoard.rotate()
            #The following line throws the error
            score, move = -1 * negamax(board, opposite, depth - 1)
            if score > maximum:
                maximum = score
                optMove = move
            elif score == maximum:
                if(random.choice([True, False])):
                    maximum = score
                    optMove = move
        return (maximum, optMove)
4

3 に答える 3

2

このステートメントを変更します

score, move = -1 * negamax(board, opposite, depth - 1)

score, move = tuple(-1 * x for x in negamax(board, opposite, depth - 1))

関数argsでジェネレーター式を使用すると、はるかに優れたものになります。

于 2015-12-13T16:28:04.980 に答える
0

タプルに数値を掛けると、空のタプルが得られます

>>> -1*(1,2)
()

これがエラーの原因です。タプルのすべての要素を手動で否定する必要があります。また、この質問を確認する必要があります: Multiplying a tuple by a scalar

于 2015-12-13T16:17:54.243 に答える