TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

世界コンピュータ将棋選手権でのMulti Ponderのヒット率

先日の世界コンピュータ将棋選手権で、dlshogiはMulti Ponderを実装していた。相手番で相手局面を探索するStochastic Ponderという手法と組み合わせることで、追加コストゼロで候補手をN手取得できるため、Multi PonderはMCTSと相性がよいクラスタリング手法…

将棋AIの実験ノート:Fixup Initialization 続き

以前にBatch Normalizationを使用しないFixup Initializationを試したことがある。その際、Leela Chess Zeroでは、Batch Normalizationの統計情報に関連する問題が報告されていることに言及した。 Pawn promotion issues in T40 · Issue #784 · LeelaChessZe…

cshogiをGitHub ActionsでビルドしてPyPIに公開する

Pythonの将棋ライブラリcshogiをPyPIで公開しているが、PyPIに公開するまでの手順が多いため、GitHub Actionsを使って自動化を行った。 前提 cshogiは、CythonとC++を使用しているため、ビルドが必要になる。 WindowsではVisual Studioが必要になる。 Linux…

gMLPを試す

ほぼ個人メモです。画像認識のモデルで、畳み込みを使わずMLPのみ同等の精度が出せるというMLP Mixerの発展形であるgMLPを試してみた。 gMLP チャネル方向と、空間方向に分けてMLPを適用する構成は、MLP Mixerと同じだが、Spatial Gating Unit (SGU)という仕…

優勝決定戦について

第32回世界コンピュータ将棋選手権決勝の優勝決定戦について、dlshogi側の評価値は以下のようになっていました。112手目まではほぼ互角と判断していました。 114手目くらいから徐々に先手優勢になって、逆転となった166手目の手前では、評価値-720でした。 …

第32回世界コンピュータ将棋選手権 結果報告

5/3~5/5に開催された第32回世界コンピュータ将棋選手権に参加しました。HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ…

Unityで将棋アプリの開発 その14(実戦寄せ問題)

作成している将棋アプリに実戦寄せ問題を実装した。アプリを継続利用してもらうには、飽きずに上達につながるコンテンツが必要だと思うので、序盤、中盤、終盤それぞれ棋力を鍛えられる内容を盛り込みたいと思っている。序盤については、定跡の戦型予想と、A…

dlshogiはどれくらい人間の指し手に近いか

コンピュータチェスでは、ディープラーニング系のAIは、従来型に比べて人間の指し手に近いという研究がある。 従来、人間の相手になるように、レーティングを下げるために、探索のノード数や深さを下げるということが行われていた。 しかし、人間にとっては…

将棋AI実験ノート:20ブロックの学習

ResNet15ブロックのモデルで生成した教師データを用いて、20ブロックのモデルを学習し、精度と強さを比較してみた。 モデルサイズ 15ブロックのモデルは、15ブロック224フィルタ 20ブロックのモデルは、20ブロック256フィルタ 1ブロックは畳み込み2層 活性化…

Unityで将棋アプリの開発 その13(棋譜解析)

作成している将棋アプリに、対局後の棋譜解析機能を実装した。 機能内容 対局終了後に表示されるダイアログで、「棋譜解析」ボタンを押すと棋譜を解析して形勢グラフを表示する。 対局中のプレイヤー手番では、プレイヤー側の評価を非同期で行っているので、…

UnityのLineRendererのアンチエイリアシングを有効にする

LineRendererで斜めの線を引くと、以図のようにジャギーが発生する。 原因がわからずネットの情報をいろいろ試したが解決しなかった。 プロジェクトのアンチエイリアシングの設定 たまたま、新規に作成したシーンでLineRendererで線を引いて、プロジェクトの…

Unityで将棋アプリの開発 その12(詰み探索)

作成している将棋アプリに詰み探索を実装した。 AIのレベルと詰み探索 スマホ向けにMCTSで少ないプレイアウトだと、どうしても詰みの見逃しが多くなる。 練習用の強さだと、長手数の詰み探索はいらないが、一番強いレベルでは詰みを見逃さないようにしたい。…

Unityで将棋アプリの開発 その11(棋力測定)

作成している将棋アプリに棋力測定モードを実装した。 実装内容 先日の調査で、dlshogiの探索で測定した勝率の平均損失とレーティングに相関があることがわかったので、AI相手に対局した棋譜を蓄積して、そこからレーティングを推定する機能を実装した。1棋…

dlshogiを使って棋譜から棋力を推定する

たややんさんが実施していた棋譜から棋力を推定する方法をdlshogiを使って検証してみた。棋譜から棋力を推定する手法を検証しており、水匠の評価値をシグモイド関数で疑似的な勝率に変換した上で平均損失を計測する+計測する局面の勝率の閾値を設定するとい…

Unityで将棋アプリの開発 その10(AIの戦型指定)

作成している将棋アプリにAIの戦型指定を実装した。 実装方法 先日実装した定跡の戦型予想を使って、指定した戦型が定跡の候補手に含まれる場合、その手の採用率と戦型の確率に応じて、次の手を選択する。 そうすることで、指定した戦型になるように誘導でき…

Unityで将棋アプリの開発 その9(定跡と戦型予想)

作成している将棋アプリに定跡検索と戦型予想を実装した。定跡ボタン(ノートのアイコン)を押すと、現在の局面の定跡の候補手と、各手を指した後にどの戦型になるかの確率を表示する。候補手は、出現率と勝率も合わせて表示する。 定跡の元データ 定跡の元…

Unityで将棋アプリの開発 その8(ヒントの実装)

作成している将棋アプリに、ヒント機能を実装した。ヒントボタン(電球アイコン)を押すと、下の図のように候補手の上位3つを矢印で表示する。 複数候補手表示 下側のテキストボックスには候補手を10まで表示する(表示領域は5行までだがスクロールできる)。 テ…

Unityで将棋アプリの開発 その7(待ったの実装)

作成中の将棋アプリに、ボタンを追加して、「待った」ができるようにした。 UIデザイン 頻度の高い機能をゲーム画面から直接押せるボタンとして、それ以外はメニューを開いてから選べるようにする。 「待った」「ヒント」「定跡」を直接押せるボタンとして、…

Unityで将棋アプリの開発 その6(駒音)

前回駒のアニメーション処理ができるようになったので、合わせて駒音も鳴らすようにした。 駒音の素材 商用でも利用可能な駒音の素材を探したところ、素材を配布しているサイトがあったので、使わせてもらうことにした。 音素材: 「駒」のカテゴリー | ノタ…

Unityで将棋アプリの開発 その5(形勢グラフ)

AIの探索結果を形勢グラフに表示するようにした。プレイアウト数が64なので誤差は大きいが、リアルタイムで確認できることで初級者には形成判断の練習になればよいと思っている。強さのレベルの調整のために接待dlshogiの機能を、実装したいと考えているので…

Unityで将棋アプリの開発 その4(駒のアニメーション)

前回Androidの実機で確認しているときに、着手時に駒をアニメーションさせると、AIが思考中の待ち時間を感じにくくなることに気付いた。 効果を確認するために、駒のアニメーションを実装した。Unityは、フレームごとの処理をオブジェクトのUpdateに記述する…

Unityで将棋アプリの開発 その3(Android対応)

前回、WindowsでOnnxRuntimeで探索を動かせるようになったので、Androidでも動くようにした。後で書くが、Unity Barracudaでもコルーチンを使うことでメインスレッドで非同期処理ができるようになったので、OnnxRuntimeは必須ではなくなった。OnnxRuntimeをA…

低レーティング帯での探索ノード数と強さの関係

以前に、R4000以上でのdlshogiの思考時間と強さの関係について調べた。今回は、低レーティング帯で、dlshogiの探索ノード数と強さの関係について調査した。 調査方法 floodgateに、探索ノード数を変えて放流し、レーティングを調べた。 基本はバッチサイズ1…

Unityで将棋アプリの開発 その2(AIと対局)

先日から作り始めた将棋アプリをAIと対局できるようにした。 とりあえず指せるようにしただけで、形勢グラフなどはできていない。 Unity Barracuda使えなかった 事前に調査したUnity Barracudaだったが、メインスレッドでしか使えないという致命的な欠点があ…

Unityで将棋アプリの開発

先日試していたUnity Barracudaでのdlshogiのモデルを使用した探索が、Androidでもそこそこの強さになりそうなので、Android上でGUIで動かせるようにしたいと思っている。接待dlshogiの機能を実装して、将棋の練習に使えるアプリにしたい。 また、1手に数秒…

Unity Barracudaでdlshogiのモデルを推論する その4(探索)

前回、Androidでのモデルの推論速度を調べた。 今回は、MCTSで探索を行った際の探索速度を調べた。前回、推論をバッチにしても同じデータ数を処理する時間がほとんど変わらないことが分かったため、MCTSの探索もバッチで並列化を行わないように実装した。 ま…

Unity Barracudaでdlshogiのモデルを推論する その3(Android)

Unity Barracudaによるdlshogiのモデルの推論をAndroidで試してみた。 Android対応 プロジェクト設定でプラットフォームをAndroidにするだけで、測定用コードは前回実装したをそのまま使用した。測定端末には、Pixel5を使用した。 モデルサイズ 15ブロック22…

Unity Barracudaでdlshogiのモデルを推論する その2(推論速度)

前回、Unity Barracudaでdlshogiのモデルを推論できることを確認した。今回は、dlshogiで使用しているTensorRTと、推論速度を比較した。モデルは、15ブロック224フィルタのdlshogiのモデルを使用した。 前回の記事で書いた通り、そのままではBarracudaでdlsh…

Unity Barracudaでdlshogiのモデルを推論する

Unity Barracudaは、Unity用のマルチプラットフォームに対応した推論パッケージである。ONNXのモデルをロードでき、WindowsでもAndroidでもiOSでも(WeGLでも?)同じコードでディープラーニングモデルの推論ができる。Barracudaで、dlshogiのモデルが扱える…

dlshogiにおける思考時間と強さの関係 追試2

前回、dlshogiにおける思考時間と強さの関係を調べた。 今回は、水匠5の思考時間と強さの関係を調べた。同一系統のソフト間では、レーティング差が大きくでるため、基準ソフトを思考時間1秒のdlshogiとした。 測定条件 水匠5は8スレッドで、思考時間4秒と32…