Exemplo n.º 1
0
    def test_ayane2(self):
        print("test_ayane2 : ")

        usi = ayane.UsiEngine()
        # usi.debug_print = True
        usi.set_engine_options({
            "Hash": "128",
            "Threads": "4",
            "NetworkDelay": "0",
            "NetworkDelay2": "0"
        })
        usi.connect("exe/YaneuraOu.exe")

        # usi.send_position("startpos moves 7g7f")
        # → 局面を指定しなければ初期局面のはず。
        # "isready"~"readyok"は完了してからしかusi_go()は実行されないのでここで待機などをする必要はない。

        # 時間を指定せずに思考させてみる。
        usi.usi_go("infinite")

        # 3秒待ってからstopコマンドを送信して、エンジンがbestmoveを返してくるまで待機する。
        time.sleep(3)
        usi.usi_stop()
        usi.wait_bestmove()

        # 思考内容を表示させてみる。
        print("=== UsiThinkResult ===\n" + usi.think_result.to_string())

        usi.disconnect()
        self.assertEqual(usi.engine_state, ayane.UsiEngineState.Disconnected)
Exemplo n.º 2
0
    def test_ayane3(self):
        print("test_ayane3 : ")

        sfens = [
            "sfen 5R3/8k/9/9/7+b1/9/PP1+p5/LS7/KN7 b GSNrb3g2s2n3l15p",
            "sfen 5B1k1/9/9/5R3/9/9/1+P7/PP1+p5/K+P7 b Srb4g3s4n4l13p",
            "sfen 8k/6+Pg1/4+Bs2N/9/7+b1/9/PP1+p5/LS7/KN7 b GN2r2g2sn3l14p",
        ]

        usi = ayane.UsiEngine()
        # usi.debug_print = True
        usi.set_engine_options({
            "Hash": "128",
            "Threads": "4",
            "NetworkDelay": "0",
            "NetworkDelay2": "0"
        })
        usi.connect(self.__class__.engine_path)

        for sfen in sfens:
            usi.usi_position(sfen)

            # MultiPVで探索してMultiPVの2番目の指し手がMateスコアであるかで判定する。
            usi.send_command("multipv 2")
            # 5秒考えてみる
            usi.usi_go_and_wait_bestmove("btime 0 wtime 0 byoyomi 5000")

            if len(usi.think_result.pvs) < 2:
                print(f"sfen = {sfen} : only one move")
            else:
                print(f"sfen = {sfen} : 1つ目の指し手の評価値 {usi.think_result.pvs[0].eval.to_string()},"
                      f" 2つ目の指し手の評価値 {usi.think_result.pvs[1].eval.to_string()} ,"
                      f" 余詰めあり? {ayane.UsiEvalValue.is_mate_score(usi.think_result.pvs[1].eval)}")

        usi.disconnect()
Exemplo n.º 3
0
    def test_ayane4(self):
        print("test_ayane4 : ")

        # エンジン二つ
        usis = []

        for _ in range(2):
            usi = ayane.UsiEngine()
        #    usi.debug_print = True
            usi.set_engine_options({
                "Hash": "128",
                "Threads": "1",
                "NetworkDelay": "0",
                "NetworkDelay2": "0",
                "MaxMovesToDraw": "256",
                "MinimumThinkingTime": "0"
            })
            usi.connect(self.__class__.engine_path)
            usis.append(usi)

        # 棋譜
        sfen = "startpos moves"
        # 手数
        game_ply = 1
        # 手番(先手=0 , 後手=1)
        turn = 0

        # 256手ルール
        while game_ply < 256:
            usi = usis[turn]

            # 局面を設定する
            usi.usi_position(sfen)

            # 0.1秒思考させる
            usi.usi_go_and_wait_bestmove("time 0 byoyomi 100")

            bestmove = usi.think_result.bestmove

            # 評価値を表示させてみる
            # print(usi.think_result.pvs[0].eval)
            # print(usi.think_result.pvs[0].eval.to_string())

            # 投了 or 宣言勝ち
            if bestmove == "resign" or bestmove == "win":
                break

            # 棋譜にこのbestmoveを連結
            sfen += " " + bestmove

            # 手番反転
            turn ^= 1
            game_ply += 1

        # 棋譜の出力
        print("game sfen = " + sfen)

        for usi in usis:
            usi.disconnect()
Exemplo n.º 4
0
    def test_ayane2(self):
        print("test_ayane2 : ")

        usi = ayane.UsiEngine()
        # usi.debug_print = True
        usi.set_engine_options({
            "Hash": "128",
            "Threads": "4",
            "NetworkDelay": "0",
            "NetworkDelay2": "0"
        })
        usi.connect(self.__class__.engine_path)
        self.do_test_ayane2(usi)
Exemplo n.º 5
0
    def test_ayane1(self):
        print("test_ayane1 : ")

        # エンジンとやりとりするクラス
        usi = ayane.UsiEngine()

        # デバッグ用にエンジンとのやりとり内容を標準出力に出力する。
        # usi.debug_print = True

        # エンジンオプション自体は、基本的には"engine_options.txt"で設定する。(やねうら王のdocs/を読むべし)
        # 特定のエンジンオプションをさらに上書きで設定できる
        usi.set_engine_options({
            "Hash": "128",
            "Threads": "4",
            "NetworkDelay": "0",
            "NetworkDelay2": "0"
        })

        # エンジンに接続
        # 通常の思考エンジンであるものとする。
        usi.connect("exe/YaneuraOu.exe")

        # 開始局面から76歩の局面
        # ※ "position"コマンド、"go"コマンドなどについては、USIプロトコルの説明を参考にしてください。
        # cf.「USIプロトコルとは」: http://shogidokoro.starfree.jp/usi.html
        usi.usi_position("startpos moves 7g7f")

        # 現局面での指し手の集合を得る
        moves = usi.get_moves()
        self.assertEqual(
            moves,
            "1c1d 2c2d 3c3d 4c4d 5c5d 6c6d 7c7d 8c8d 9c9d 1a1b 9a9b 3a3b 3a4b 7a6b 7a7b 8b3b 8b4b 8b5b 8b6b 8b7b 8b9b 4a3b 4a4b 4a5b 5a4b 5a5b 5a6b 6a5b 6a6b 6a7b"
        )

        # 現在の局面の手番を得る
        turn = usi.get_side_to_move()
        self.assertEqual(turn, ayane.Turn.WHITE)

        # multipv 4で探索させてみる
        # 2秒思考して待機させる。
        usi.send_command("multipv 4")
        usi.usi_go_and_wait_bestmove("btime 0 wtime 0 byoyomi 2000")

        # 思考内容を表示させてみる。
        print("=== UsiThinkResult ===\n" + usi.think_result.to_string())

        # エンジンを切断
        usi.disconnect()
        self.assertEqual(usi.engine_state, ayane.UsiEngineState.Disconnected)
Exemplo n.º 6
0
    def test_ayane1(self):
        print("test_ayane1 : ")

        # エンジンとやりとりするクラス
        usi = ayane.UsiEngine()

        # デバッグ用にエンジンとのやりとり内容を標準出力に出力する。
        # usi.debug_print = True

        # エンジンオプション自体は、基本的には"engine_options.txt"で設定する。(やねうら王のdocs/を読むべし)
        # 特定のエンジンオプションをさらに上書きで設定できる
        usi.set_engine_options({
            "Hash": "128",
            "Threads": "4",
            "NetworkDelay": "0",
            "NetworkDelay2": "0"
        })

        # エンジンに接続
        # 通常の思考エンジンであるものとする。
        usi.connect(self.__class__.engine_path)

        self.do_test_ayane1(usi)