Giter Club home page Giter Club logo

yaneuraou's Introduction

Make CI (MSYS2 for Windows) Make CI (DeepLearning for Windows) Make CI (MinGW for Windows) Make CI (for Ubuntu Linux) Make CI (DeepLearning for Ubuntu Linux) NDK CI (for Android) Make CI (for macOS) Make CI (for WebAssembly)

About this project

YaneuraOu is the World's Strongest Shogi engine(AI player) , WCSC29 1st winner , educational and USI compliant engine.

やねうら王は、WCSC29(世界コンピュータ将棋選手権/2019年)、第4回世界将棋AI電竜戦本戦(2023年)などにおいて優勝した世界最強の将棋の思考エンジンです。教育的でUSIプロトコルに準拠しています。

やねうら王エンジンの大会での戦績

  • 2024年 第34回 世界コンピュータ将棋選手権(WCSC34)『お前、CSA会員にならねーか?』優勝。(探索部やねうら王V8.20 GitHub版)
  • 2024年 第2回 マイナビニュース杯電竜戦ハードウェア統一戦 『水匠』準優勝 (探索部やねうら王V8.10開発版)
  • 2023年 第4回世界将棋AI電竜戦本戦 『水匠』優勝 (探索部やねうら王。やねうらおは、チームメンバーとして参加)
  • 2023年 第1回 マイナビニュース杯電竜戦ハードウェア統一戦 『水匠』優勝。(探索部やねうら王)
  • 2023年 第33回 世界コンピュータ将棋選手権(WCSC33)『やねうら王』準優勝。
  • 2023年 第4回世界将棋AI電竜戦TSEC4 ファイナル『やねうら王』相居飛車部門優勝。総合2位。
  • 2022年 第3回世界将棋AI電竜戦本戦 『水匠』優勝。(探索部やねうら王)
  • 2021年 第2回世界将棋AI電竜戦TSEC 『水匠』総合優勝。(探索部やねうら王)
  • 2020年 第1回 世界コンピュータ将棋オンライン大会(WCSO1) 『水匠』優勝。(探索部やねうら王)
  • 2019年 世界コンピュータ将棋選手権(WCSC29) 『やねうら王 with お多福ラボ2019』優勝。
    • 決勝の上位8チームすべてがやねうら王の思考エンジンを採用。
  • 2018年 世界コンピュータ将棋選手権(WCSC28) 『Hefeweizen』優勝
  • 2017年 世界コンピュータ将棋選手権(WCSC27) 『elmo』優勝
  • 2017年 第5回将棋電王トーナメント(SDT5) 『平成将棋合戦ぽんぽこ』優勝

やねうら王の特徴

  • USIプロトコルに準拠した思考エンジンです。
  • 入玉宣言勝ち、トライルール等にも対応しています。
  • Ponder(相手番で思考する)、StochasticPonder(確率的ponder)に対応しています。
  • MultiPV(複数の候補手を出力する)に対応しています。
  • 秒読み、フィッシャールールなど様々な持時間に対応しています。
  • 256スレッドのような超並列探索に対応しています。
  • 定跡DBにやねうら王標準定跡フォーマットを採用しています。
  • 定跡DBのon the fly(メモリに丸読みしない)に対応しています。
  • 定跡DBの様々なメンテナンス用コマンドをサポートしています。
  • 置換表の上限サイズは33TB(実質的に無限)まで対応しています。
  • Windows、Ubuntu、macOS、ARMなど様々なプラットフォームをサポートしています。
  • 評価関数として、KPPT、KPP_KKPT、NNUE(各種)に対応しています。

ふかうら王の特徴

  • dlshogi互換エンジンです。
  • やねうら王の思考エンジンオプションをサポートしています。
  • 定跡DBにやねうら王標準定跡フォーマットを採用しています。
  • 定跡DBのon the fly(メモリに丸読みしない)に対応しています。
  • GPU無しでも動作するDirectML版、TensorRT版を用意しています。

やねうら王の解説記事

記事内容 リンク レベル
やねうら王のインストール手順について やねうら王のインストール手順 入門
ふかうら王のインストール手順について ふかうら王のインストール手順 中級
やねうら王のお勧めエンジン設定について やねうら王のお勧めエンジン設定 入門
ふかうら王のお勧めエンジン設定について ふかうら王のお勧めエンジン設定 入門
やねうら王のエンジンオプションについて 思考エンジンオプション 入門~中級
やねうら王詰将棋エンジンについて やねうら王詰将棋エンジン 入門~中級
やねうら王のよくある質問 よくある質問 初級~中級
やねうら王の隠し機能 隠し機能 中級~上級
やねうら王の定跡を作る 定跡の作成 中級~上級
やねうら王のUSI拡張コマンドについて USI拡張コマンド 開発者向け
やねうら王のビルド手順について やねうら王のビルド手順 開発者向け
ふかうら王のビルド手順について ふかうら王のビルド手順 開発者向け
やねうら王のソースコード解説 やねうら王のソースコード解説 開発者向け
AWSでやねうら王を動かす AWSでやねうら王 中級~開発者
大会に参加する時の設定 大会に参加する時の設定 開発者
やねうら王の学習コマンド やねうら王の学習コマンド 開発者
ふかうら王の学習手順 ふかうら王の学習手順 開発者
USI対応エンジンの自己対局 USI対応エンジンの自己対局 中級~開発者
パラメーター自動調整フレームワーク パラメーター自動調整フレームワーク 開発者
探索部の計測資料 探索部の計測資料 開発者
廃止したコマンド・オプションなど 過去の資料 開発者
やねうら王の更新履歴 やねうら王の更新履歴 開発者

現在進行中のサブプロジェクト

プロジェクト名 進捗
やねうら王 現在進行形で改良しています。
ふかうら王 現在進行形で改良しています。
やねうら王詰将棋エンジンV2 省メモリで長手数の詰将棋が解ける詰将棋用のエンジン。
Bloodgate floodgateに取って代わる対局場です

過去のサブプロジェクト

過去のサブプロジェクトである、やねうら王nano , mini , classic、王手将棋、取る一手将棋、協力詰めsolver、連続自己対戦フレームワークなどはこちらからどうぞ。

やねうら王ニュース記事一覧

やねうら王公式ブログの関連記事の見出し一覧です。

各エンジンオプションの解説、定跡ファイルのダウンロード、定跡の生成手法などについての詳しい資料があります。初心者から開発者まで、知りたいことが全部詰まっています。

ライセンス

やねうら王プロジェクトのソースコードはStockfishをそのまま用いている部分が多々あり、Apery/SilentMajorityを参考にしている部分もありますので、やねうら王プロジェクトは、それらのプロジェクトのライセンス(GPLv3)に従うものとします。

「リゼロ評価関数ファイル」については、やねうら王プロジェクトのオリジナルですが、一切の権利は主張しませんのでご自由にお使いください。

やねうら王プロジェクト関連リンク

やねうら王関連の最新情報がキャッチできる主要なサイトです。

サイト リンク
やねうら王公式ブログ https://yaneuraou.yaneu.com/
やねうら王mini 公式 (解説記事等) http://yaneuraou.yaneu.com/YaneuraOu_Mini/
やねうら王Twitter https://twitter.com/yaneuraou
やねうら王公式ちゃんねる(YouTube) https://www.youtube.com/c/yanechan

上記のやねうら王公式ブログでは、コンピュータ将棋に関する情報を大量に発信していますので、やねうら王に興味がなくとも、コンピュータ将棋の開発をしたいなら、非常に参考になると思います。

質問箱

やねうら王関連の質問は、以下のブログ記事のコメント欄にお願いします。 https://yaneuraou.yaneu.com/2022/05/19/yaneuraou-question-box/

yaneuraou's People

Contributors

bleu48 avatar cfewl avatar ddugovic avatar grafi-tt avatar hiraokatakuya avatar ishidakei avatar iwkjosec avatar kazapps avatar kazu-nanoha avatar koba-e964 avatar komori-n avatar lefu777 avatar mizar avatar nodchip avatar qhapaq-49 avatar quiver avatar select766 avatar takotakot avatar tama4649 avatar tasanuma avatar test597 avatar tttak avatar wandererxii avatar yaneurao avatar ynasu87 avatar yuk-to avatar yuricat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yaneuraou's Issues

採用回数が0の指し手が採用される

定跡データベースの指し手の採用回数に0が代入されているものについて、ConsiderBookMoveCountをtrueにした場合でも、その指し手が採用される場合があります。これによりまふ定跡の一部で、意図しない指し手が指される場合があります。

原因は以下のコードで採用回数を1以上に強制しているためです。
https://github.com/yaneurao/YaneuraOu/blob/master/source/extra/book/book.cpp#L1365
このコードを削除し、採用回数が0の指し手を無視することでバグを修正できると思います。

ただし、ある局面における定跡データベースにおける全ての指し手の採用回数が0の場合、0割により意図しない動作をします。この場合にのみ全ての指し手を等確率で選択すると良いと思います。

学習時にメモリ破壊エラーが表示される

学習時、「Error! : evaluate memory is corrupted」と表示されます。
5c8a039 からのコミットで発生します。

また、benchやgensfenでは起こりません。


実行環境

  • OS
    CentOS 7.3
  • メモリ
    64GB
  • 使用コンパイラ
    gcc 6.2.1

Handicap evaluation

test.sfen:

lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1R5R1/LNSGKGSNL b - 1
#!/bin/bash
../script/build.sh -a AVX2 -c clang++ -e MATE_ENGINE -t normal && \
../build/linux/MATE/tanuki_MATE-linux-clang++-normal-AVX2 bench 16 1 5 test.sfen depth

王手のかかっている局面をPosition::set_from_packed_sfen()で読むと状態が不正になる

いつもお世話になっております。
王手のかかっている局面をPosition::set_from_packed_sfen()で読むと、Position::pos_is_ok()がfalseを返します。内部でst->checkersBBが0となっているためのようです。
Position::set_from_packed_sfen()内で、 set_state(st) 後に pdate_bitboards() していますが、pdate_bitboards() 後に set_state(st) を呼ぶのが正しいのでしょうか…?

set_state(st);

お手すきの際に確認・修正いただければ幸いです。よろしくお願いいたします。

position.cpp の PieceNumber piece_no =...

こんにちは。

position.cpp の 199行目付近について、
すいません、コードの意味合いを理解できてないのですが、

		PieceNumber piece_no =
			(idx == B_KING) ? PIECE_NUMBER_BKING : // 先手玉
			(idx == W_KING) ? PIECE_NUMBER_WKING : // 後手玉
			piece_no_count[raw_type_of(Piece(idx))]++; // それ以外
			PIECE_NUMBER_ZERO; // とりあえず駒番号は使わないので全部ゼロにしておけばいい。

って、ひょっとして、
piece_no_count から始まる行と PIECE_NUMBER_ZERO から始まる行のどっちかが不要では?
あるいは、piece_no_count から始まる行の最後が ; じゃなくて、, っすかね?

ソースコードの整形ルール

現在のソースコードは、インデントだけでも tab、2space、4space が混在しており、pull requestを送ったりする際に何に合わせたら良いのか分からなくなる状況です。

そういや、やねうら王は基本4 tabです。スペースに変換されているところがいくつかあるかもですが、基本4 tabで、NNUEとかプルリクもらったままマージしたので2 tabになっている箇所がありますが、何か手を入れたときに 4 tab化してます。
// 2 tabのままになっているのは私がまだ未踏の地だということですね。

という話ですが、そういう所を手伝うにしても、ソースコードの整形部分ばかりでdiffが膨れ上がってしまうので支障が大きそうです。

clang-format などの整形ツールで使えるようなルールの作成を進められないものでしょうか。

参考:

YaneuraOu minimal hardware requirements and evaluation files

Hello yaneurao!

Someone said: "YaneuraOu also cannot run without evaluation parameters, which have to be downloaded from another Google Drive. Unfortunately the zip file is 5.7GB. This might take me several hours. I dread to see how large it will get when I unzip it. As the evaluation parameters probably have to be in memory, it is likely that YaneuraOu cannot run on a machine with less than 16GB RAM. My biggest machine has 8GB."

Well I own a desktop computer with Windows 7 SP1 64 bit and the following components:

Intel Core i5 3470 @ 3.20GHz Ivy Bridge 22nm Technology> .bmi2.executables are not supported
4,00GB RAM Dual-Channel DDR3 @ 798MHz (11-11-11-28)
Motherboard ASRock H61M-DGS R2.0 (CPUSocket)

Where can be found the exact download link of the evaluation parameters on Google Drive? Has this connection a torrent-file for the download procedure? I cannot find these necessary informations.
Are 5,7 GB data volume indeed required to run YaneuraOu with a GUI respectively it is possible for you to develop Yaneura Ou program without evaluation parameters like other USI engines?

WinBoard 4.8.0 graphical interface is able to use USI compatible engines cf. http://home.hccnet.nl/h.g.muller/shokidoki.html and
http://www.open-aurec.com/wbforum/viewtopic.php?f=19&t=51528 plays normal chess , Japanese / Chinese and many other variants.

SkillLevelのオプション名について

すみません質問なのですが・・・

Android版をビルドして動作確認したのですがよく使われているShogiDroidというアプリだと一部の設定が正常に動かないことが分かりました。
調べてみるとShogiDroidの作者の方はOwnBookを追加してSkillLevelをUSI_SKillLevelに変更してビルドしているということが分かりました。
やねうら王の側のオプション名を変更するのはまずいのでしょうか?

http://siganus.php.xdomain.jp/phpBB3/viewtopic.php?t=347

投稿記事by 管理人 » 2019年1月03日(木) 15:54

オプションのネーミングは一応USIは規約があって、定跡のON/OFFはUSI_OwnBookという名前になってます。
ShogiDroidではこれに元になったチェスのOwnBookにも対応してます。

SkillLevelはUSI側にないので(USI_Strengthという似たようなものはある)、
StockfishのSKill LevelとそれをUSI風のUSI_SKillLevelに対応しています。

基本的にGUI側に共通設定を持っておくオプションは規約にそったほうがよいかと、
なのでこれらはGUI側ではなく、エンジン側でオプション名を合わせたほうがよいと思います。

v5.20 -> v5.30 bad evaluation?

On the most recent version (5.33), and since v5.30 or v5.21, there seem to be a problem when evaluating some positions with a time limit.

Position: sfen l6nl/6k2/+P3p2p1/1B1p1Pp1p/1p7/7nP/3P1SP1L/2+p3GK1/L6+r1 b B2G2S5Prgs2np 0

Expected evaluation: mate -8

v4.91-v5.20 evaluation (byoyomi 20000): mate -8
v.5.30-v5.33 evaluation (byoyomi 20000): cp 1953 (info depth 2 seldepth 3 score cp 1953 nodes 616 nps 205333 time 3)
v.5.30-v5.33 evaluation (go infinite): mate -8 (info depth 17 seldepth 9 score mate -8 nodes 26057 nps 2368818 time 11)

This is problematic for game analysis, as it shows a very high score (winning) when it should be very low (losing).

Example session:
Built with "make tournament", eval function elmo_wcsc29
Reproduced on two different computers

Bad session (v5.30)

usi
id name YaneuraOu NNUE 5.30 64AVX2BMI2 TOURNAMENT
(...)
usiok
isready
info string Hash table allocation: Linux Large Pages used.
info string eHash Clear begin , Hash size =  1024[MB]
info string USI_Hash Clear begin , Hash size =  16[MB]
(...)
readyok
position sfen l6nl/6k2/+P3p2p1/1B1p1Pp1p/1p7/7nP/3P1SP1L/2+p3GK1/L6+r1 b B2G2S5Prgs2np 0
go btime 0 wtime 0 byoyomi 20000
info depth 1 seldepth 1 score cp 345 nodes 178 nps 89000 time 2 pv 2h2i
info depth 2 seldepth 3 score cp 1953 nodes 616 nps 205333 time 3 pv 2h2i 2f3h+ 4g3h
bestmove 2h2i ponder R*1i

Good session (v5.20)

usi
id name YaneuraOu NNUE 5.20 64AVX2BMI2 TOURNAMENT
(...)
usiok
isready
info string Hash table allocation: Linux Large Pages used.
info string eHash Clear begin , Hash size =  1024[MB]
info string Hash Clear begin , Hash size =  16[MB]
(...)
readyok
position sfen l6nl/6k2/+P3p2p1/1B1p1Pp1p/1p7/7nP/3P1SP1L/2+p3GK1/L6+r1 b B2G2S5Prgs2np 0
go btime 0 wtime 0 byoyomi 20000
info depth 1 seldepth 1 score cp 345 nodes 176 nps 88000 time 2 pv 2h2i
info depth 2 seldepth 3 score cp 1953 nodes 395 nps 197500 time 2 pv 2h2i 2f3h+ 4g3h
info depth 16 seldepth 9 score mate -8 nodes 23394 nps 2126727 time 11 pv 2h2i R*1i 2i2h S*3i 2h2g 1i1h+ 2g2f G*3e
bestmove 2h2i ponder R*1i

There are some problems with the software initialization on my computer

Hello, when I use ShogiGUI to run 6.0.3 nnue's avx2 or any other exe, initialization failure is displayed in the software window. When I change to Shogidokoro to run the software, the operation failure message displayed at the bottom is: Hash table allocation: Windows Large Pages not used. Excuse me, where did the settings go wrong? My CPU is 8750h supports avx2, and everything goes well when running stockfish 14. Thank you for your answer.

makebookでnoneが出力されることがある

最新のバイナリlearn_avx2+Kristallweizen評価関数でのことです。
いくつかの局面で定跡を掘った際に「none none 0 0 1」などの行が出ることがあります。
multipv 3の4行目に出たりするので余計なものと思います。

局面依存があるかどうか分かりませんが例えば以下の局面depth28で出ました。
sfen sn1gk3l/4s4/p2pp1+P1p/1p3+b1r1/9/2P+BLp3/PG1PP3P/3K1PS2/LNS1GG1NL w Prn4p 74

Feature request: tsume shogi support

Hi Yaneurao,

just wanted to quickly ask if there are any plans for supporting tsume shogi with this engine? Right now if you set a tsume position the app just crashes.

for example this:
position sfen 7nl/9/5S1kp/6R1s/9/7p1/9/9/9 b Gr2b3g2s3n3l16p

Regards,
Stefan

SSE無しのときのBitboard ">>="演算

SSE無しの時に領域外アクセスで異常終了していたので調べてみると、
Bitboardのシフト演算が逆になっているようです。

Pullリクエストは使い方がよくわからないのでIssueで失礼します。

diff --git a/source/bitboard.h b/source/bitboard.h
index 6429786..648a238 100644
--- a/source/bitboard.h
+++ b/source/bitboard.h
@@ -121,7 +121,7 @@ struct alignas(16) Bitboard
Bitboard& operator -= (const Bitboard& b1) { this->p[0] -= b1.p[0]; this->p[1] -= b1.p[1]; return *this; }

Bitboard& operator <<= (int shift) { ASSERT_LV3(shift == 1); this->p[0] <<= shift; this->p[1] <<= shift; return *this; }

  • Bitboard& operator >>= (int shift) { ASSERT_LV3(shift == 1); this->p[0] <<= shift; this->p[1] <<= shift; return *this; }
  • Bitboard& operator >>= (int shift) { ASSERT_LV3(shift == 1); this->p[0] >>= shift; this->p[1] >>= shift; return *this; }
    #endif

Running YaneuraOu in the browser

We at Lishogi.org are requesting a YaneuraOu version that is runnable in the browser. Theoretically, this would be possible with WASM and Emscripten. Emscripten is a toolkit that compiles, with a few modifications, C or C++ code to WASM, and thus allows running those programs in the browser, inside a webpage. WASM is already supported by new versions of Firefox, Chrome, Safari, and Edge. Something similar has already been done with an NNUE chess engine by Hiroshi Ogawa (Github repo), who compiled the Stockfish NNUE to WASM. And so Lichess.org implemented it on their website and made a blog post about it. Please do try it out in this example game (works best with Chrome/Chromium).
image

We would like to request this YaneuraOu client-side version for the purposes of our Shogi site. A very strong engine like YaneuraOu running in the browser would be highly beneficial towards Lishogi players, who will be able to use it to analyse their own games right after playing it. Currently our browser analysis is running Fairy-Stockfish which is good in the endgame but does not do well in the opening and middlegame. Of course, we will also give proper credit, following the GPLv3 license.

俺のメモ

・x86用のコンパイルは通ったけど、thread作るときに落ちる。(アライメントを要求するSSE命令で) thread.cppにaligned_new()というアロケーター書いたが、これを使っても落ちる。(ランタイムチェックで) 原因、よくわからんので誰か助けて欲しい。

・1手詰め判定ルーチン、もう少し作業が残っている。長い利きをPositionクラスに持たせて差分更新しないといけなくてそちらのコードがBitboardと相性が悪くてちょっと難しい。いま考え中。

・評価関数の差分計算まだ。探索部書いてから書く。

・探索部手付かず。Bonanza6に勝てるだけでいいならすぐ書けると思うけど、自己対戦を自動化するためのサーバーを作らないと勝率の計測が面倒なのでそれを先に作るかも。

・GitHubにアップロードしようと思ってフォルダ整理したときに、新しい形式に変換した評価関数バイナリの入ったフォルダを誤って消してしまった。お、、おい…。また変換部を書いてもってくる。泣きそう。

weak_mate_n_ply()の「!effected_to(them, to)」

N手詰めについて、もしまだ作成途中でしたらすいません。
weak_mate_n_ply()の
if ((around8 & to) && effected_to(us, to) && !effected_to(them, to) )
について、近接王手なのでtoには必ず相手方の玉の利きがあるためeffected_to(them, to)がtrueになり
if文全体としては必ずfalseになってしまうように思うのですが、いかがでしょうか?

Ubuntu Linux build error

https://github.com/yaneurao/YaneuraOu/actions/workflows/make.yml

For example https://github.com/yaneurao/YaneuraOu/runs/2496128375?check_suite_focus=true

/usr/bin/ld: cannot find -lomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:465: YaneuraOu-by-gcc] Error 1
make: *** [Makefile:482: evallearn] Error 2
make[1]: Leaving directory '/home/runner/work/YaneuraOu/YaneuraOu/main/source'
Error: Process completed with exit code 2.

王手将棋から発展し

終盤だけに特化したソフトは作れますか。
従来のソフトで序盤や中盤は十分強いので。

gensfenが途中で落ちる

gensfenコマンドを実行し、数万局面生成した段階で落ちます。(スレッド数を変えても同様)
VS2019でデバック実行したところ、affine_transform.h 105行目でアクセス違反が発生しました。
また、このときproduct m256i_i8 と m256i_u8の要素に全角文字が含まれおり、文字列中に無効な文字があると警告が出ています。

実行環境
OS : Windows 10 1903
CPU : Ryzen7 3700X
RAM : 32 GB

カンマの右側が先に評価される可能性

バグと思われる内容

カンマ演算子の左右の評価順序は環境依存のはず。
そのため、pop_backが先に評価されて、メモリリークが発生する。

問題の場所

https://github.com/yaneurao/YaneuraOu/blob/master/source/thread.cpp#L97

void ThreadPool::set(size_t requested)
{
	if (size() > 0) { // いったんすべてのスレッドを解体(NUMA対策)
		main()->wait_for_search_finished();

		while (size() > 0)
			delete back(), pop_back();   <-これ
	}

解決方法

カンマ演算子で連結せずに独立した文にする。

定跡hit時のinfoコマンドでのpv出力位置について

定跡hit時info出力でのpvの位置が最後になっていません。
USIプロトコルでは、pvは他のサブコマンド(depth, score cpなど)よりも後に書くようにしなければならない認識なのですが、これは意図したものでしょうか。
cf. http://shogidokoro.starfree.jp/usi.html

  • 現在の定跡hit時におけるinfo出力例
    info pv 2g2f 3c3d 7g7f 8c8d 2f2e 8d8e 2e2d 2c2d (4.17%) score cp 59 depth 33 multipv 1
    info pv 7g7f 4a3b 2g2f 8c8d 2f2e 8d8e 8h7g 3c3d (4.17%) score cp 51 depth 25 multipv 2
    info pv 6i7h 8c8d 2g2f 3c3d 7g7f (4.17%) score cp 46 depth 3 multipv 3
    info pv 3i4h 3c3d 6i7h 8c8d (4.17%) score cp 34 depth 2 multipv 4
    info pv 4i5h 4a3b (4.17%) score cp 30 depth 0 multipv 5
    

Tsume solved incorrectly

tanuki_MATE-tournament-clang++-zen2.exe and YaneuraOu_MATE-tournament-clang++-zen2.exe say this tsume is 13 moves long when it is actually 3 moves long.
sfen 5pk2/7P1/4+R1+P1+b/8b/6R2/9/9/9/9 b 4g4s4n4l15p 1

将棋所にエンジン登録する時にUSIエンジンではありませんエラーが発生する

将棋AIを知るきっかけにしようと思いYaneuraOuをgitからcloneしてVisual Studio 2015 Community Editionで使っています。問題といいますか、同じことで悩んでいる方もきっといるのではないかと想像しますのでコメントを書かせて頂きます。

YaneuraOu nano KPP 2.86 64 SSE4.2で使っていますが、将棋所にエンジン登録するときに「USIエンジンではありません」とのエラーが発生します。

原因を調べていたのですが、YaneuraOu.exeを実行すると、直後にbook/standard_book.dbを読み込むための処理が発生します。これに私の環境では、40秒くらいかかっています。この処理は将棋所へのエンジン登録のタイミングでも発生しているため、usiokを返すのが遅れ「USIエンジンでは無い」と診断されてしまうようです。

対局開始時にも同じ処理が発生し40秒ほど待たされますが、しかしこちらはエラーにはならず、動作しています(Bonanza6.0と連続対局中。負けているようです……)

ユーザ側として可能な回避策としては、エンジン登録時にはbook/standard_book.dbを別の名前に変えておくこと(これで短時間でusiokが返るようになる)、エンジン登録が済んだら、もとのファイル名に戻すことが考えられます。

通常版使用時に評価関数識別用チェックサムが異なる場合がある

通常版(非tournament版)で、評価関数識別用チェックサムがevaluate.cpp内の値と異なる場合があります。
tournament版では発生しません。

SSE4.2版でbenchコマンドを実行して確認しました。

左側はevaluate.cppの値(tournament版での値)、右側が通常版での値

  • ShinYane(20161010)
    7171a5469027ebf7171a4e69027eb3
  • Ukamuse(sdt4)
    同じ(71fc7fd40c668cc
  • elmo
    同じ(65cd7c55a9d4cd9
  • Yomita(WCSC27)
    3aa68b055a020a83aa687c55a02303
  • Qhapaq(WCSC27)
    同じ(702fb2ee5672156
  • tanuki(WCSC27)
    6c54a1bcb5a63386c549f3cb5a63b2

evaluate.cppにはありませんが、以下の評価関数でも確認しました。

  • リゼロepoch8
    58e206e66c06a5858e204466c068b2
  • 野生の読み太(20170703)
    5445b1088b165885445add88b17343

また、tanuki(WCSC27)ですがtournament版でもチェックサムが異なるようです。
tanuki-(WCSC27)のcheck_sumの値を修正による修正前と同じ6c54a1bcb654e37になっています。


実行環境

  • OS
    Windows Server 2012 R2
  • メモリ
    32GB
  • 使用コンパイラ
    MSYS2(clang)

mate1ply_with_effect.cppにおけるHandKind

いつもお世話になっております。
LONG_EFFECT_LIBRARYを有効にしてソースコードをビルドしようとすると、mate1ply_with_effect.cppにおいてコンパイルエラーが起きます。
8ffbaa0
上記のコミットでHandKindを削除したのが原因だと思います。お手すきの際に修正をお願いできませんでしょうか?
よろしくお願いいたします。

Can this software be used by overseas users?

Hello author, I am a shogi fan from China. Can the software be used in China? Do I need to connect to the Internet every time I use it? Because when I use shogigui to run the software, it shows that the initialization failed

df-pnベースの詰将棋の品質をもう少しあげたい

現状の問題

  • 詰むはずなのに不詰と返す局面がある
  • df-pnの最適化では攻め側が手数を最短にするように最善を尽くさないことに起因して、本来早詰めの変化が想定解よりも長い詰み手数になってしまってる可能性がある

詰まない局面の例

barcodehair様より

解けない詰将棋はいろいろありそうです。少し試しただけですが、以下の2つは解けませんでした。
(本当は詰むのに短時間で不詰を返す)
馬鋸の例題
sfen 7k1/5+Bp2/7Ss/9/9/9/1n7/9/9 b 2rb4g2s3n4l17p 1
使用駒9枚長手数 (https://www.ne.jp/asahi/tetsu/toybox/challenge/c1056.htm)
sfen 1+P2l4/2P6/9/p5+R2/2k6/B3+P3B/9/9/9 b r4g4s4n3l14p 1

また、以下の問題は明らかにおかしな手順を解答します。玉方がループを避けているように見えます。
以前のバージョンでは正しく解答するようなので、デグレかもしれません。
sfen 4+P+P+P+P1/+P1+P5+P/7kP/PP5pp/1+P2+P1pP1/6+P1+P/9/9/9 b 2r2b4g4s4n4l 1

今後作りたいもの(上にあるものほど先に作る?)

詰み局面、不詰局面の検証エンジン

  • go mateコマンドやgoコマンドに対してbestmoveを返すようにする。詰む局面では詰ませるための手を、詰まない局面では逃れるための手を返すようにする

局面合流に強いというWPNS

https://www.researchgate.net/publication/220962458_Weak_Proof-Number_Search

劣等局面を使った高速化

https://tadaoyamaoka.hatenablog.com/entry/2018/05/20/150355

ponderおよびbookの両方にヒットした時の挙動

一点要望を挙げさせていただきます。
現在のやねうら王の実装では、ponderおよびbookの両方にヒットした場合、bookに登録されている指し手が指されます。これを、

  1. bookの指し手を優先する
  2. 探索深さが深いほうを優先する
    の2通りから選べるようにできませんでしょうか?

2.については、bookに深さ24で探索した指し手が登録されており、ponderが深さ27まで進んでいる場合は、後者を採用するといった感じです。ご一考いただければ幸いです。

突然自陣内にて飛車を成ってしまう

再現性が高いわけではないのですが、
YaneuraOu_6.03_NNUE-tournament-clang++-avx2において、
sfen l5snl/1r1gk1gb1/p1nspp1pp/2pp5/1pP3R2/6P2/PPSPPP2P/1BG1K1S2/LN3G1NL w 2P 28

sfen l6nl/1r1gksgb1/2ns1p1p1/p1p1p1P2/3p4p/PPR6/2SPPPNSP/1BG1KG3/LN6L w 4P 46
のような局面等で、後手番の読み筋に8三飛車成や8一飛車成といった非合法手が読み筋に入ってしまうといった不具合があるようです。不具合は後手番の読み筋でしか起こらず、かつ、飛車成に関する不具合である確率が高いようです(私自身は再現できておりませんが、7六歩、3四歩、2六歩と初期局面から3手進めただけの局面でも後手番に5二飛車成という読み筋が入ってしまう場合があるとの報告も受けております。)

BookOnTheFlyで正しく定跡を検索できないことがある

BookOnTheFly有効の場合にソート済みの定跡を使っても一部の局面がヒットしないことがあります。
例えば、以下のような小さな定跡ファイルを作ってBookOnTheFly有効で平手初期局面を読むと存在するはずなのにヒットしません。
BookOnTheFlyの実装に何らかの問題があるのではないでしょうか。


#YANEURAOU-DB2016 1.00
sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/7P1/PPPPPPP1P/1B5R1/LNSGKGSNL w - 2
3c3d 7g7f -59 32 1
8c8d 2f2e -64 20 1
4a3b 2f2e -64 20 1
6a5b 2f2e -95 0 1
7a6b 2f2e -97 8 1
3a4b 2f2e -100 0 1
7a7b 2f2e -119 0 1
1c1d 2f2e -124 0 1
9c9d 2f2e -124 0 1
sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/8P/PPPPPPPP1/1B5R1/LNSGKGSNL w - 2
3c3d 6i7h -14 1 1
sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1
2g2f 3c3d 59 33 1
sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1BG4R1/LNS1KGSNL w - 2
8c8d 7g7f -53 21 1

また、この件とは無関係で些細なものなのですが、ファイルに空行が入っている場合(テラショック定跡700だとファイル末尾に空行がある)のBookOnTheFlyの挙動もおかしい気がします。
その局面を出すと定跡にヒットして定跡の指し手を候補手として出力しているのに、別に通常の探索を開始してしまいます。

あと、公開されているテラショック定跡700はソート済みのはずですが、やねうら王4.88でテラショック定跡700に対してsortのコマンドを打つとファイルサイズが変わるのですが、これって重複局面があるからでしょうか??

makebookコマンド,

think時(clusterで分配)に表示される思考局面数とmerge時に表示される思考局面数が異なる

【共有】NNUE-K-P-256-32-32用評価関数バイナリの使い方

いつもお世話になっております。
ちょっと躓いたので、手順を共有いたします。
Makefileの編集がミソです。

  1. YaneuraOu NNUE-K-P-256-32-32用評価関数バイナリ nn.binから
    20190115_k-p-256-32-32.zipSource code (zip)をダウンロードする。
  2. Source code (zip) を unzipし、sourceフォルダーに入る
  3. nnue/nnue_architecture.h
    #include "architectures/halfkp_256x2-32-32.h"
    をコメントアウト。代わりに
    #include "architectures/k-p_256x2-32-32.h"
    とする。
  4. MakefileYANEURAOU_EDITION = YANEURAOU_2018_TNK_ENGINEを有効にする
  5. make 実行し、実行バイナリ YaneuraOu-by-gcc を作成
  6. mkdir -p eval の上、 20190115_k-p-256-32-32.zipに含まれる nn.bin を取り出して、 eval フォルダーに置く

https://dev.to/vochicong/yaneuraou-nnue-k-p-256-32-32-47k5

トライルール有効時にトライをしない

入玉ルールでトライルールを選択している場合、一手でトライが可能な局面になってもやねうら王はトライをしません。
また、対戦相手がトライをしても対局終了になりません。
検討モードでもトライの指し手だけ表示されません。

Mate Engine: nomate when there is a rook on 1st file

For all positions I tried, if there is Gote's rook on the 1st file, the engine answers "nomate".

Screenshot from 2020-09-14 15-17-56

make -j8 tournament TARGET_CPU=AVX2 COMPILER=g++ YANEURAOU_EDITION=MATE_ENGINE ENGINE_NAME="tanuki- mate engine"^C

jean@jean-desktop:~/shogi/engines/yengine2/YaneuraOu/source$ ./YaneuraOu-by-gcc
usi
id name tanuki-mate-engine Material 4.91 64AVX2BMI2 TOURNAMENT
id author by yaneurao
option name Threads type spin default 4 min 1 max 512
option name USI_Hash type spin default 4096 min 1 max 1048576
option name WriteDebugLog type check default false
option name NetworkDelay type spin default 120 min 0 max 10000
option name NetworkDelay2 type spin default 1120 min 0 max 10000
option name MinimumThinkingTime type spin default 2000 min 1000 max 100000
option name SlowMover type spin default 100 min 1 max 1000
option name MaxMovesToDraw type spin default 0 min 0 max 100000
option name DepthLimit type spin default 0 min 0 max 2147483647
option name NodesLimit type spin default 0 min 0 max 9223372036854775807
option name Contempt type spin default 2 min -30000 max 30000
option name ContemptFromBlack type check default false
option name EvalDir type string default eval
option name MorePreciseMatePv type check default true
usiok
isready
info string USI_Hash Clear begin , Hash size = 4096[MB]
info string USI_Hash Clear done.
readyok
position sfen 4k4/9/4P4/8r/9/9/9/9/9 b Gr2b3g4s4n4l17p 1
go mate infinite
info string pn 100000000 dn 0 nodes_searched 0
checkmate nomate
go matedebug G*5b
口 口 口 口^玉 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 歩 口 口 口 口
口 口 口 口 口 口 口 口^飛
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
先手 手駒 : 金 , 後手 手駒 : 歩17 香4 桂4 銀4 角2 飛 金3
手番 = 先手
sfen 4k4/9/4P4/8r/9/9/9/9/9 b Gr2b3g4s4n4l17p 1

pn-dn100000000,0
key-gen2086237944,1
口 口 口 口^玉 口 口 口 口
口 口 口 口 金 口 口 口 口
口 口 口 口 歩 口 口 口 口
口 口 口 口 口 口 口 口^飛
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口
先手 手駒 : , 後手 手駒 : 歩17 香4 桂4 銀4 角2 飛 金3
手番 = 後手
sfen 4k4/4G4/4P4/8r/9/9/9/9/9 w r2b3g4s4n4l17p 2

pn,dn = 1,1
key-gen = 4029583722

やねうら王詰将棋エンジンde

以下の詰将棋がメモリ16GBの設定で解けません。
sfen 3+R1gknl/4+B1s2/6pp1/5p3/8p/9/9/9/9 b RSNPb3g2s2n3l13p 1

合駒なども出てこないので、このメモリ量で解けないのはさすがに変だと思います。
ちなみに、tanuki詰や脊尾詰なら一瞬で解けます。

Learner::qsearch() および Learner::search() でnullポインタアクセスする

Learner::qsearch() および Learner::search() で ss->pv = pv; でPV格納用のバッファのアドレスを格納したあと、init_for_search()内でmemset()で0クリアしています。このためYaneuraOu2017Early::qsearch()内でnullポインタアクセスを起こし、プログラムがクラッシュします。

ss->pv = pv; // とりあえずダミーでどこかバッファがないといけない。

お手すきの際に確認・修正頂けませんでしょうか?よろしくお願いいたします。

駒の価値が最適化されていない

KOMA型のやねうら王を見ていて思ったのですが、駒の価値は本当にこれでいいのでしょうか。
元々は、駒の価値がおかしくても(SEEなどを除けば)KKPによって学習した値が加算されるので気にする必要がないということで、Aperyの平岡さんが雰囲気で決めた値だったはず。

他のソフトを調べてみると、技巧ではparams.binに学習した駒の価値が入っています。

#include "evaluation.h"
int main(void) {
std::unique_ptr g_eval_params(new EvalParameters);
std::FILE* fp = std::fopen("params.bin", "rb");
std::fread(g_eval_params.get(), sizeof(EvalParameters), 1, fp);
std::fclose(fp);
for (PieceType pt : Piece::all_piece_types())
std::printf("%s %d\n", Piece(kBlack, pt).ToSfen().c_str(), g_eval_params->material[pt]);
}

として技巧2のparams.binから取り出した値とやねうら王(Apery)の値を大雑把にスケールを合わせて比較してみます。

駒 技巧 やねうら王
歩兵 99 83
香車 265 289
桂馬 286 372
銀将 441 455
金将 521 496
角行 668 786
飛車 729 910
と金 615 496
成香 540 496
成桂 569 496
成銀 573 496
龍馬 957 868
龍王 1096 1282

こうしてみると、やねうら王は歩や金を過小評価し、大駒を過大評価していることが分かります。
実際の例でいうと例えば飛と金桂の2枚替えをしたときなどに逆転現象が起きています。

KPPTなどの既存の評価関数はこれまでの駒の価値を前提に学習しているので変更するとまずいようにも思いますが、KOMA型は技巧の値にしたほうが強くなるのではないでしょうか。
人間が見た場合に分かりやすい100刻みの数値とした場合でも、金を上げて大駒を下げて歩100 香300 桂400 銀500 金600 角800 飛900 と600 杏600 圭600 全600 馬1100 龍1200くらいにしたほうが適切な値に近くなります。

現在わかっているissue

電王トーナメントの関係で10月までこのGitHubの更新をしないのでここに現在わかっているissueを書いておきます。

■ evaluate_kppt_learn.cpp

eta2を定義してあるところ、defineで書かないとetaを参照しているのでゼロのままになってしまう。(学習ルーチンを使っている人向け)

     正)       #define eta2 (eta / 4)

■ 王手生成時の歩成りで上位bitに格納する駒が間違っている。

movegen.cppのL122

    if (canPromote(Us, to))
    {
    削除)          mlist++->move = make_move_promote(from, to) + OurPt(Us,Pt);
    追加)          mlist++->move = make_move_promote(from, to) + OurProPt(Us,Pt);

■ その他

その他、気づいたことがあれば、ここに追記していきます。

CI入れるなら

私だけですかもですが

CI(Action)がリポジトリに入っての時にうまくいかなく

具体的には、本リポジトリからプルして自前のにプッシュ時にエラーでて;
自前にはプッシュできてないと思ってリベースもしてしまって
結果はプッシュはできていて自前でのリベース等は;^^

ごめんなさい
issuesへ書く内容では無いですね

自前は消して再Folkでし直しました

告知あたらと思います

learn shuffleコマンドで偏りが出る

learn shuffleコマンドで、シャッフルする局面数が10Mの倍数でない場合にシャッフル結果に偏りが出るようです。例えば10M+1局面シャッフルした場合、10M局面のふぁいると1局面のファイルが生成されます。これらのファイルからランダムにファイルを選択し、局面を書き出していった場合、1局面しか無いファイルの局面がかなりの確率でファイルの先頭に来てしまいます。お手すきの際に確認をお願いできませんでしょうか?よろしくお願いいたします。

本バグはynasu87さんより教えて頂きました。

nodestimeを設定すると2手目から即指しになる

nodestimeを使おうとすると1手目はちゃんと指定した時間考えてくれますが2手目からノータイムで指すようになってしまいます。
その手を指すために思考したノード数ではなく通算のノード数をカウントしてしまっているのでは?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.