Macで将棋所を動かす話

  

なんか妙に早起きしたのでちょっとやってみた。

Core2Duoの古いMacなので現行のHigh Sierraで打ち止めの予定のやつ。

Monoは以下から落とす。

Download - Stable | Mono

 

左がハイライトされてたので,5.10.1ってやつを入れた。

将棋所は最新の4.2.0でしょう。

で,将棋所を展開したところにいって

mono Shogidokoro.exeってやると色々怒られる。

Windows.Formのエミュレートが完全でないので云々とか

エラーメッセージをググってみると,よくあるエラーらしい。

ってことで

「mono --arch=32 Shogidokoro.exe」で起動します。

フォントの関係なのかエミュレート環境の問題か英語なんです。

へぼいマシンだと起動も結構時間かかるし実用的じゃないね。描画もエミュレートのようで非常に重いのでアニメーションは速攻切った方がいい。

で,対戦エンジンはMac上でビルドしたやねうら王が動くので,平岡さんの希望は通るのかな。

 

まぁ,MS社は.NET Core 3でWindows.Form対応するらしいので,これが出たらオープンソース界隈でクロスプラットフォームのバイナリが一気に寄る可能性もあるね。

要するにこんな話がいらなくなるだろうってこと。来年らしいよ。

 

floodgateにもつながるみたい。(対戦はまだ始まってない)

---

お昼に追記。

floodgateは切れ負けしてた。GUIが重いみたい。

monoの起動は上記コマンド以外に直接32bitのmonoを立ち上げてもいいらしいので

「mono32 Shogidokoro.exe」でも同じように動く。(手で打つのなら短い方がいいね)

それと,AperyもMacでビルドしたのが問題なく動いた。うちはsse41でしたけど

棋譜解析の話

コンピュータ将棋の役に立ってるところのひとつだと思う棋譜解析についてちょっとメモっておく。

棋譜解析ってのはその棋譜が誰によって作られたものであれ,それをコンピュータ将棋の手法で解析していくものである。コンピュータの棋譜であれば当然ミスが少ないようにでるが,人間の棋譜では多くミスが発生しているように見える。

 

しかも,昨今コンピュータの方が強いという風潮のため解析結果がコンピュータの方が正しいとみられがちである。概ね正しそうな意見であるが,これがいつのまにか100%に近いものであると妄信しておられる方が出ているように思う。特に自身の棋力がないために局面の複雑さや争点をずらすような駆け引きを理解していない人がそうありがちであるように思う。

 

参考値程度に見ておくのがいいんじゃないかと思ってる。それともう少し分析的な評価をする方法がないかと現在考案中である。まぁ,ひとつはshotgunの内部を可視化するような試みなんだけど,上手な可視化方法が見つかっていない。PVを複数並べるだけでは高段者以外は捉えにくいように思う。玉の堅さや遠さと言ったパラメータの数値化も過去に様々行われているがこれも今一つ人間が見て有用なものに思えない。他にも局面の複雑度や難易度と言った漠然としたパラメータが浮かぶが定量化可能かどうかすら未知である。

 

また,解析における適正パラメータについても色々言われている。もちろん使用PCのスペックに依存するので一概に最適値などは言えるものでもない。比較的低スペックなものであれば時間をかけて解析すればそれなりの解が得られると思われる。

個人的にちょっとオススメのオプションはShogiGUIの「終局面から解析(逆順)」である。解析時に手を進めて局面評価を行うが順方向に解析するのに比べて,逆方向から解析していくと進んだ局面のデータ(置換表とか言う)が既に存在するので比較的早く深い探索が行われる。欠点は棋譜の手順だけ優先的に深く考慮されてしまうため,他の手順が本筋より浅い探索になってしまう傾向があるというところ。少し気を付けた方がいいかもしれない。試される方は興味ある棋譜を順方向と逆方向の二通りの解析順で確かめて頂きたい。

 

順方向で緩手と思われた手が逆順解析で妙手と評価されることが稀にあることが分かると思う。いや,ほんと難しいです。

 

将棋電王トーナメント終了だそうな

将棋電王トーナメント終了だそうです。

私は昨年の第5回に参加させて頂きました。まぁ,幸運にも準優勝しました。

dwango.co.jp

 

去年の今頃はせっかくshotgun作ったので隅っこで参加させてもらおうかと秋のスケジュールを確認してたくらいですかね。

丁度出張予定と合うので,ダブルのスーツで旅行鞄とポスターケースを持って参加させて頂いたのでした。ほんと場違いでしたね(笑)ニコ生にはあまり出たくなかったのでカメラアングルを避けて避けて,事前PVもお断りしてたんですよ。

まぁ,ほんとに決勝行くと思ってなかったので

 

今となっては,いいおっさんが新しいお友達をいっぱい作れる証明になったかなぁと思ってます。(人脈?そういう言葉もあるな)

ほんと久しぶりにコンペの類に参加させて頂きました。楽しかった。

 

この準優勝がなければ今年の選手権にも出てなかったでしょう。人造棋士18号の松下さんと知り合ったのもこの大会ですし,やねうら王の磯崎さん,たぬきの野田さんにサイン頂いたのも,個別に挙げればキリがありませんがその他大勢の開発者の皆様とお会いできたのもこの大会でした。

また,賞金を頂いていなければ開発機を追加していなかったでしょうし,多くの戦友からの貴重な情報がなければ今年の選手権に勝てたとはとても思えません。

 

一回しか参加できなかったのが残念ですが,ドワンゴの運営はじめ関係者の皆様どうもありがとうございました。

 

 

で,参加して色々なことを学びました。運営の苦労も見えましたし,選手権と電王トーナメントの微妙なバランスとネット上のレーティング談義,業界の金の話とか非常に色々なものを考える機会になりました。

特に統一ハードで行う大会の意義ってのは選手権およびゲーム情報学研究会後に強く感じました。所謂勝因とか争点とか言うところに資金力がモロに出るようでは面白くないんですよね。実際機械学習においてマシンパワーは正義と言われるくらいに優位になりますので事前学習においてPonanzaより学習コストをかけたチームは他になかったわけです。対戦時は尚更です。排気量の違うマシンのレースになりかねません。

選手権決勝の大半はAWSのハイエンドインスタンスを使うというある意味統一ハードの戦いになっていましたが,マシンパワーさえあればと考えた方も居たようです。

何かしらの形で統一ハードの大会が運営されるといいなぁと思ってます。お手伝いできるなら手伝いますよ。(選手権側にも言うてますがw)

 

もちろん,無制限の最強を決めるってのも楽しいですよ。(私が勝ったから言うんでなく)

---

8月28日追記

以下の予測で6コアマシン用意してたんだが無駄になったね。残念。

名前に拘りなかったので命名権売って水害地域に寄付しようとかちょっと考えてた。

bleu48.hatenablog.com

不用意にchainer5.0.0b3を入れたメモ

環境構築の覚書

今回はchainerの対応

まず,pythonを入れる。

Windows10の64ビット対応で普通に入れたら十分だが,今回は3.7.0か3.6.6かで迷う。

保守的に3.6.6としておく。

 

VS2017これは最新を入れてみる。

今はこれでいいらしい。必須事項はC++の開発環境。

vs_community__1199910325.1533881368.exe

 

で,CUDA toolkitのバージョンは最新の9.2を入れてみる。

cuda_9.2.148_win10.exe

 

環境変数 

PATH:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64

C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64

INCLUDE:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt

 

ここで,「pip install cupy-cuda92」

これでcudnnも入ってくるそうな。

それから,「pip install chainer」ってやったら,バージョン古いって叱られる。

cupy-cuda92がそもそもchainer5.0.0用だったらしいので,これを入れることにする。

githubから5.0.0b3を落としてきて,「setup.py install」

無事入ったらしい。

 

>>python -c 'import chainer; chainer.print_runtime_info()'
Chainer: 5.0.0b3
NumPy: 1.15.0
CuPy:
CuPy Version : 5.0.0b3
CUDA Root : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2
CUDA Build Version : 9020
CUDA Driver Version : 9020
CUDA Runtime Version : 9020
cuDNN Build Version : 7104
cuDNN Version : 7104
NCCL Build Version : None

 

再インストールが面倒なので不具合なければこれで遊ぶとする。

普通の人はcuda9.1を使おう。

---

10月末に5.0.0が正式リリースされたので

上記が今の最新インストールになる。

もちろん,chainerをGithubから落とす必要はない。

そして,pythonは3.6.7が最新。

---

12月末追記

pythonが3.7.2,chainerが5.1.0でcupy-cuda100が最新。

chainer6.0.0はまだβ版。

将棋電王トーナメントの雑記

なんだか風のうわさだと今年もあるっぽい。

それも10月スケジュールだそうなんだが、7月下旬で公表されてないのはさすがに厳しいんじゃないかな。

個人的にはもう10月予定は半分ほど埋まってるので参加できないかもしれない。

昨年と同じ11月上旬と思ったからねぇ。

 

ちょっと調べ物をしたのでメモっておく。

第1回:インテル6コア12スレッド、Windows 7

第2回:インテル8コア16スレッド、Windows 8.1

第3回:Core i7-6700K(4コア8スレッド)、GTX960 2GB、Windows 10

第4回:Core i7-6700(4コア8スレッド)、GTX1060 6GB、Windows 10

第5回:Core i7-6700(4コア8スレッド)、GTX1080Ti、Windows 10

 

ここ3回は4コア8スレッドでGPUだけが極端に強化されている。

対プロ棋士の興行を意識してスペックダウンされたとかの噂もあるみたい。

PC供給スポンサーの意向とかそういう可能性もあるが、GPU使えって意図とも読める。しかしながら、スペック公表が遅すぎてそれに合わせた開発が出来ない。

もちろん、決め打ちで開発する人や公表後猛スピードで調整してくる人もいるので、そういうのを推奨されているのかもしれない。一部の人だけが事前に知ってたとか言うのはデマの類と思ってる。

 

で、今年あるとすればGPUは1080Tiからスペックダウンって話はないだろうから、維持するかTITANなんだが、さすがにTITAN沢山用意することは難しいと思う。それでも決め打ちはしづらいイメージが有る。

CPUはどうなるんだかわからないけど、さすがにもう6700は在庫も無いんじゃないかな。過去にAMD採用がないので決め打ちで悪いがRyzenも無いだろう。

とすると7700か8700辺りが予想されるんだが、前者だと6700とさほども変わらんので後者で想定しようかなぁと。

 

気にしない人もいるかもしれないけど、うちはスレッド数気にするんで。

昨年度は苦肉の策で3+2+1+1+1=8でしたので。(スレッド数多めで希望出したんですよ。)

つーことで、そういう調整に入るかなぁと思う日曜の早朝。

土曜出勤で疲れて早々に夕飯直後落ちしたせいでボーっとしてる。

---

6コア6スレッドのi5-8400とか持ってこられたら一番困るなぁとかふと思った。

大穴はゲーミングノートPCかな。

コム将ほどpythonを使って欲しい

この記事はpython-shogiの宣伝です。あしからず御了承下さい。

コンピュータ将棋界隈では諸々の事情でC++の天下です。

しかしながら,pythonでできることも沢山ありますし,pythonの方がいいことも沢山あります。

たとえば,コム将対戦の場であるfloodgateの棋譜はCSA形式ですが,このデータの処理,特に集計はpythonでやるのがおすすめです。

たとえばCSA形式のファイルひとつを持って来てjupyterで以下のように三行打ってみて下さい。

import shogi.CSA
kif = shogi.CSA.Parser.parse_file('test.csa')[0]
'startpos moves '+' '.join(kif['moves'])

例えば以下のようにCSA形式のデータがusiプロトコルの局面データになります。

startpos moves 7g7f 8c8d 2g2f 8d8e 2f2e 3c3d 6i7h・・・

 

KIF形式にも対応していますし,少々プログラムを書けばCSAの一行表記などにも簡単に対応できるでしょう。

 

また,ipywidgetsを使うと色々便利になります。

まずは以下の二行をコマンドラインから打ち込んでipywidgetsを有効にしましょう。

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

分からなければipywidgetsでググってください。

出来たら最初の棋譜を読み込んで以下のようなプログラムを走らせてみて下さい。

import shogi.CSA
from ipywidgets import interact

kif = shogi.CSA.Parser.parse_file('test.csa')[0]
@interact(n=(0, len(kif['moves'])))
def interact_board(n):
    board = shogi.Board()
    for move in kif['moves'][:n]:
        board.push_usi(move)
    print(board.kif_str())

 以下のようにスライダーが表示されると思います。

スライダーをマウスで移動させることにより棋譜のn手目の局面がインタラクティブに表示されます。

f:id:the48:20180706005836p:plain

コム将ならこの途中になんらかの評価などの処理を盛り込むと分析が捗ったりするんじゃないでしょうか。

 

ということで,実行速度より開発速度を重要視するような簡単な実験を行うのはpythonがおすすめです。

そういえばローカル対戦をさせるスクリプトがやねうら王で利用されていたと思いますし,dlshogiでも学習用データの管理に利用されていたように記憶しています。

そんな風な話が10月の広島で聞けるとかそういう宣伝も最後に挟んで久しぶりのblog更新を終わりにします。

 

hiroshima.pycon.jp

 

追記:

pythonの正式表記はPythonです。P大文字です。

千田先生の定跡への機械的回答

定跡も公開でしたので,公開私信モードです。

遅くなってすみません。

以下の計算自体は先週末に終わっておりました。(それでも約3日)

うちの定跡との照らし合わせがまだですが職務等で少々時間かかりそうなので,機械的な部分だけ先行します。

 

具体的には以下の2つのファイルです。

行った行為は千田先生の定跡ファイル(5月15日付)をBookConvのR8でやねうら王形式に変換。

その後,各局面と定跡の指し手局面の評価値を比較し,評価値が300以上下がった局面および500以上下がった局面を自動的に抜き出したものになります。思った以上にゴミがある風に感じます。(私が定跡を管理するなら自動削除するレベルという意味です)

ファイルの中身はテキストファイルで1行に1局面のデータがあり,sfen文字に続き,指し手,指す前の評価値,指した後の評価値となります。手番視点の評価値ですのでもちろん符号が異なります。

BookConvの不具合か手数に不自然な数字が入ってるケースがありますが,今回は特に気にしていません。

使用したのは評価関数Qhapaq_wcsc28,実行ファイルYaneuraOu 2018 Otafuku KPPT 4.82 64AVX2,探索深さノード指定1000000です。ノード数指定の理由は所要時間の見積りがやりやすい点と各局面の所要時間がほぼ等しくなる点です。

 

https://1drv.ms/t/s!AqprfPHDsDdxh6pmwyLuX0T5lq_FXA

https://1drv.ms/t/s!AqprfPHDsDdxh6pl9yPG6AwLQtVggg

 

コメント等頂ければ幸いです。

序盤限定に絞ってもう少し探索ノード数を増やせばよかったとかは自覚してます。