2018年05月30日

NHK杯テレビ囲碁トーナメントの棋譜をSGF形式で管理できるようにする

NHK杯テレビ囲碁トーナメントでおこなわれた対局の棋譜は、すべてウェブサイトで公開されているのですが、ブラウザで碁盤を表示させてその碁盤上に着手を再現していく仕組みになっています。

NHK杯テレビ囲碁トーナメント公式ウェブサイト

2018年5月27日(日)に放送された「第66回NHK杯テレビ囲碁トーナメント一回戦第9局 伊田篤史八段対藤沢里菜女流立葵杯」戦の場合、トップページから該当する対局の「棋譜を見る」ボタンをクリックすると、「http://cgi2.nhk.or.jp/goshogi/kifu/igs.cgi?d=20180527」というURLで棋譜を見ることができます。
最後の八桁番号が放送日をあらわしており、たとえば2018年3月18日(日)に放送された前回第65回の決勝戦だったら、「http://cgi2.nhk.or.jp/goshogi/kifu/igs.cgi?d=20180318」というURLになります。
ただたんに棋譜を追いかけるだけならこれでもいいのですが、じっさいに検討してみたいと思った場合は、やはりSGF形式に変換して棋譜管理ソフトにかけられたほうがはるかに便利です。
棋譜管理ソフトで一手一手入力していくわけにもいきませんから、なんらかのかたちで棋譜データを取得のうえ、SGF形式に変換できるツールがあればなあと思っていたところ・・・。
NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 1. 棋譜データの取得」「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 2. SGF 形式への変換」に情報があり、棋譜データの取得用とSGF形式への変換用に、それぞれRubyスクリプトも公開されていました。
もしRuby環境がない場合は、たとえばUbuntuなら以下のコマンドを実行して、あらかじめRubyをインストールしておく必要があります。

$ sudo apt install ruby


棋譜データの取得は、「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 1. 棋譜データの取得」に記載されているとおりの「get-score.rb」スクリプトを作成し、第xx回の棋譜であれば「$ ruby get-score.rb xx」を実行するだけ。
ただし、事前に「./date/date-xx.txt」ファイルを作成し、そこに棋譜データを取得したい対局の放送日を列記しておく必要があります。
このファイルの内容は、たとえば第65回の準決勝戦二局+決勝戦の計三局を対象とするなら、以下のようにその三局の放送日を列記するかたちです。

3月4日
3月11日
3月18日


棋譜データをうまく取得できれば、「./score/score-xx」ディレクトリが作成され、そのなかに取得した棋譜データが「xxxxxxxx.txt」形式で保管されます。
取得した棋譜データをSGF形式へ変換するには、「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 2. SGF 形式への変換」に記載されているとおりの「score2sgf.rb」スクリプトを作成し、「$ ruby score2sgf.rb ./score/score-xx/xxxxxxxx.txt」を実行します。
もともとのNHK杯独自形式の棋譜データ「xxxxxxxx.txt」がSGFファイル「xxxxxxxx.sgf」に変換され、お好みの棋譜管理ソフトから管理できるようになります。
なお、取得した第xx回の棋譜データを一括してSGF形式に変換するには、Ubuntu上のbashターミナルから以下のコマンドを実行すればO.K.です。

$ for f in ./score/score-xx/*.txt; do
> ruby score2sgf.rb $f
> done
$


これまではテレビを見ながら一手一手入力してSGFファイルをつくったりもしていたのですが、上記の方法を導入することによってhatakazuの人生からひとつの困難が取りのぞかれ、すこし幸せになることができました。
記して感謝もうしあげます。


参考ウェブページ一覧表(順不同)

http://cgi2.nhk.or.jp/goshogi/gotou/
https://ochaochaocha3.hateblo.jp/entry/2013/01/31/getting-score-files-of-go-nhk-cup-in-sgf-format-part-1
https://ochaochaocha3.hateblo.jp/entry/2013/02/09/getting-score-files-of-go-nhk-cup-in-sgf-format-part-2
posted by hatakazu at 21:31| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月29日

第66回NHK杯テレビ囲碁トーナメント一回戦第9局 伊田篤史八段対藤沢里菜女流立葵杯

一昨日5月27日(日)に放送されたNHK杯テレビ囲碁トーナメント、伊田篤史八段対藤沢里菜女流立葵杯という楽しみな組み合わせでした。
意欲的な布石を採用した黒番の伊田篤史八段が、中盤までたくみに打ちすすめ、基本的にはずっと黒が打ちやすい形勢だったと思います。

20180527-1.png
白番の藤沢里菜女流立葵杯としても、黒にこのまま下辺と中央をまとめられたら勝ち目がないという状況で、白1から下辺を荒らしにいきました。
白5まですすんだところで、伊田篤史八段が黒6と打ったのに、見ていてとてもびっくりしました。
というのも・・・。

20180527-2.png
白1に対して黒2とハイますが、そこで白3にマゲられてみると次にAとBが見合いになっており、両方を同時に防ぐ手はないように見えたからです。
もしそうだとしたら、白は黒のどこかはもぎとることになり、それにともなって下辺に見こまれていた黒地をすっかり消してしまうことができます。
実戦も白3まですすみました。

20180527-3.png
しかし、ここで黒1がありました。
白2とキラれたときに黒3からアテるのがうまく、白4とトラせてから黒5とツグ呼吸、なんですね。
白二子を飲みこんで左右の黒石がきれいにつながり、結果として下辺の黒地が無傷で確定してしまっては、いくら藤沢里菜女流立葵杯とはいえども逆転のチャンスはなくなりました。

藤沢里菜女流立葵杯としては残念な棋譜で、見せ場なくやぶれてしまいました。
しかし、国内にとどまらず海外までも活躍の場を広げている藤沢里菜女流立葵杯のこと、来年以降またすばらしい戦いを見せてくれることを期待しています。
序盤から優勢をきずき、あぶなげなくリードをたもって勝ちきった井田篤史八段、強かったですね。
NHK杯は、初出場で最年少優勝をかざった縁起のいい棋戦でもあり、どんどん勝ちすすんでほしいと思います。
そしてやはり、またタイトル戦の舞台へもどってきてくれることを、期待しています。
posted by hatakazu at 20:52| Comment(0) | 囲碁とか | 更新情報をチェックする

2018年05月28日

米朝首脳会談開催へ、調整本格化

https://www.reuters.com/article/us-northkorea-missiles/south-korea-says-north-korea-committed-to-complete-denuclearization-summit-with-trump-idUSKCN1IS01K
https://www.bloomberg.com/news/articles/2018-05-27/trump-says-u-s-north-korea-talks-start-after-moon-meets-kim
https://edition.cnn.com/2018/05/24/asia/north-korea-donald-trump-summit-intl/index.html
https://edition.cnn.com/2018/05/27/politics/us-team-north-korea-summit/index.html

当初の予定どおり、6月12日シンガポールにて開催の方向で、米朝両国による調整が本格化しています。
すでに米使節団が北朝鮮へはいっており、米政権チームもシンガポールへ飛び、準備をはじめているとのこと。
これまでのところメッセンジャーの域を出ていないようにみえる文韓国大統領が、今後の進捗のなかでより強い存在感をしめすことができるのか、かなり悲観的な見方をされているようではありますが、はたしてどうなるでしょうか。
posted by hatakazu at 06:00| Comment(0) | 気になるニュース | 更新情報をチェックする

2018年05月26日

米朝首脳会談実現の可能性は

https://www.reuters.com/article/us-northkorea-missiles/trump-us-in-productive-talks-about-reinstating-june-north-korea-summit-idUSKCN1IQ02Y

トランプ大統領はいったん米朝首脳会談の中止を発表したあとも、さらに含みをもたせた発言をくりかえしていましたが、まだ6月12日シンガポールにて開催の可能性は残っているとのこと。
おそらくいまも、水面下では首脳会談実現へむけた北朝鮮との調整がつづいている、ということでしょう。
トランプ大統領としては、アメリカがわの態度をはっきりさせたうえで、北朝鮮の出方しだいで対応を決めることになります。
当初のプランどおり6月12日ということなら、残された時間はそれほどありません。
ここ数日の間に、事態が急に動き出す可能性もありますね。
posted by hatakazu at 19:38| Comment(0) | 気になるニュース | 更新情報をチェックする

2018年05月25日

「GoGui」で「ELF OpenGo」を思考エンジンとして使う

「ELF OpenGo」を「~/ELF」以下にインストールし、「pretrained-go-19x19-v0.bin」を「~/ELF/bin/pretrained-go-19x19-v0.bin」に設置したとして、けっきょくのところ以下の方法で「GoGui」から「ELF OpenGo」を思考エンジンとして使うことができるようになりました。

$ cd /home/username/ELF/
$ source scripts/devmode_set_pythonpath.sh
$ cd /home/username/ELF/scripts/elfgames/go/
$ gogui


そうして起動した「GoGui」メニューバーから「プログラム」 -> 「新規プログラム」とすすんで、「コマンド:」欄に以下のコマンドを入力します。

/home/username/ELF/scripts/elfgames/go/gtp.sh /home/username/ELF/bin/pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 100 --resign_thres 0.05 --mcts_virtual_loss 1


「OK」ボタンを押すと、しばらくして警告メッセージが表示されますが、それは今後表示されないようにして閉じてしまいます。
すると今度は、「プログラムが反応していません、待ちますか、それともプログラムを終了しますか」という画面があらわれます。
ここで「待つ」を選択すると、新規プログラムのラベルを編集する画面になるので、「OK」を押して画面を閉じます。
ここまでで、「GoGui」から呼びだす思考エンジンとして、「ELF OpenGo」が登録されています。
あとは「GoGui」から「ELF OpenGo」を起動、プログラムの手番や置石などの条件を決めて新規対局を開始すれば、「ELF OpenGo」との対局を楽しめるようになります。

「GoGui」をランチャーなどから起動した場合でも「ELF OpenGo」を使えるようにしたい場合は、以下の内容を記述したスクリプトを作成してそれを「~/ELF/ELF-OpenGo.sh」として保存、実行権限を付与したうえで「GoGui」の新規プログラム画面で「/home/username/ELF/ELF-OpenGo.sh」コマンドを指定してやればO.K.です。

#!/bin/bash
cd /home/username/ELF/
source scripts/devmode_set_pythonpath.sh
cd /home/username/ELF/scripts/elfgames/go/
./gtp.sh /home/username/ELF/bin/pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 100 --resign_thres 0.05 --mcts_virtual_loss 1


「ELF OpenGo」と対局してみたいとはいっても、ターミナル上でGTPコマンドを打ち込むのはたいへんなので(というかまったくやる気になれないので)、なんとかGUIで打てるようになってよかったです。


参考ウェブページ一覧表(順不同)

https://github.com/pytorch/ELF/issues/27
https://github.com/pytorch/ELF/issues/33
posted by hatakazu at 22:13| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

歴史的瞬間とおざかる、米朝首脳会談が中止へ

https://www.reuters.com/article/us-northkorea-missiles/trump-cancels-summit-with-north-koreas-kim-warns-that-military-ready-idUSKCN1IP1RY
https://www.reuters.com/article/us-northkorea-missiles/trump-style-solution-north-korea-says-still-open-to-talks-after-summit-canceled-idUSKCN1IQ02Y
https://edition.cnn.com/2018/05/24/politics/trump-north-korea/index.html
https://edition.cnn.com/2018/05/24/politics/trump-north-korea-summit/index.html
https://www.bloomberg.com/news/articles/2018-05-24/trump-kim-summit-failure-improvised-diplomacy-skipped-meetings

6月12日にシンガポールにて、というところまで決まっていた初の米朝首脳会談の中止を、トランプ大統領が発表しました。
さまざまな不確定要素をはらみながらも、ここまで話がすすんできていただけに、予兆がなかったわけではないとはいえ、じゃっかん唐突とも見える中止発表にはすこしおどろきました。
これから状況分析がすすんで、会談開催をめざして動いているあいだは出せなかった情報なども出てくるでしょうから、それを追跡していきたいと思います。
posted by hatakazu at 18:03| Comment(0) | しょもない日常 | 更新情報をチェックする

2018年05月24日

第73期本因坊戦七番勝負第二局

井山裕太本因坊(本因坊文裕)に山下敬吾九段が挑戦している第73期本因坊戦七番勝負、山下敬吾九段の先勝を受けて第二局が打たれました。
結果は井山裕太本因坊の黒番中押し勝ち、シリーズ戦績を一勝一敗としました。
出張中のため、棋譜を見ることができていませんが、帰ったら棋譜を追いかけてみたいと思っています。
posted by hatakazu at 21:28| Comment(0) | 囲碁とか | 更新情報をチェックする

Facebook「ELF OpenGo」を動かしてみる

1. 前提となる環境の整備
「ELF OpenGo」を走らせるためには以下の環境が前提となっているので、それぞれ確認のうえ、不足がある場合はあらかじめインストールしておきます。
ただし、今回はGPUのない古いラップトップで走らせることを目的としているため、CUDA関連環境については無視してすすめます。

Ubuntu 18.04
Python 3.6
GCC 7.3
CUDA 9.0
CUDNN 7.0
NCCL 2.1.2

今後の作業をすすめていくために必要となるパッケージを、事前にインストールします。

$ sudo apt-get install git cmake g++ gcc libboost-all-dev libzmq3-dev


2. 「Anaconda」インストール
「Pytorch」ライブラリなどをインストールするため、「Anaconda」環境を構築します。
「Anaconda」サイト「Download」ボタンを押してダウンロードページへすすみ、「Python 3.6 version」の「64-Bit (x86) Linux Installer」をダウンロードします。
ダウンロードしたディレクトリに移動のうえ、以下のコマンドを実行して、「Anaconda」のインストールを開始します。
インストール手順ページの記述にしたがいますが、なにか問題が発生した場合はFAQページにヒントがあるかもしれません。

$ chmod +x Anaconda3-5.1.0-Linux-x86_64.sh
$ bash ./Anaconda3-5.1.0-Linux-x86_64.sh


ライセンス条項への同意を求められるので、全文を表示してから「yes」と回答すると、インストールがはじまります。
途中で「~/.bashrcにPATHを追加するかどうか」確認を求められるので、そこは確実に「yes」と回答します。
もし「No」ですすめてしまった場合は、あとから「~/.bashrc」をエディタで開き、ファイルの最後に「export PATH="/home/username/anaconda3/bin:$PATH"」という行を追加してやればO.K.です。
インストールが完了したら、いったんターミナルを閉じてあらためて開き(もしくは「$ source ~/.bashrc」コマンドを実行)、「$ anaconda-navigator」コマンドを実行してみます。
「ANACONDA NAVIGATOR」が起動すれば、ちゃんと「Anaconda」がインストールされている、ということです。
「Anaconda」環境で必要なパッケージを追加します。

$ conda install numpy zeromq pyzmq


3. 「Pytorch」インストール
ソースからインストールするには、「Pytorch」GitHubレポジトリにあるインストラクションにしたがって、以下のコマンドを実行していきます。
GPUをもたない古いラップトップで動かすため、環境変数「NO_CUDA=1」をエクスポートしてから、インストールスクリプトを実行します。

$ export NO_CUDA=1
$ export CMAKE_PREFIX_PATH="/home/username/anaconda3/"

$ conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
$ conda install -c intel mkl-dnn

$ cd
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ python setup.py install


もしくは、上記ソースからのインストールに代えて、「pythorch nightly build」をインストールすることもできます。

$ conda install -c pytorch pytorch-nightly


4. 「ELF OpenGo」のビルド
ここまでの環境整備が終わったら、「ELF OpenGo」のソースを取得し、ビルド処理にすすみます。

$ cd
$ git clone https://github.com/pytorch/ELF
$ cd ELF
$ git submodule sync && git submodule update --init --recursive
$ make


ビルド処理が完了したら、「$ make test」コマンドを実行して、問題がないことを確認しておきます。

5. 「ELF OpenGo」の実行
「ELF OpenGo」を走らせるためには、あらかじめ「~/ELF」ディレクトリから「source scripts/devmode_set_pythonpath.sh」を実行したうえで、「~/ELF/scripts/elfgames/go」ディレクトリから「gtp.sh」を走らせることになります。
推奨される設定値は以下のとおりで、「mcts_rollout_per_thread」値を変更することで思考時間を調節できます。

./gtp.sh path/to/modelfile.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 8192 --resign_thres 0.05 --mcts_virtual_loss 1


まずは「ELF OpenGo」リリースページから、学習ずみモデル「pretrained-go-19x19-v0.bin」をダウンロードし、それをたとえば「~/ELF/bin/pretrained-go-19x19-v0.bin」などに設置します。
そのあと、以下のようなコマンドを実行していくと、「ELF OpenGo」がGTPコマンドを受けつける画面が開くはずです。
GPUをもたない非力なラップトップで動かすため、GPU指定「--gpu 0」をはずしたうえで、「mcts_rollout_per_thread」値をとてもちいさくしてあります。

$ cd /home/username/ELF/
$ source scripts/devmode_set_pythonpath.sh
$ cd /home/username/ELF/scripts/elfgames/go/
$ ./gtp.sh /home/username/ELF/bin/pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 100 --resign_thres 0.05 --mcts_virtual_loss 1


「genmove b」で黒の着手、「genmove w」で白の着手を「ELF OpenGo」に思考させて、ゲームをすすめていくことができます。
どちらかを自分で担当したい場合は、黒番なら「play b d4」、白番なら「play w q16」のように着点を指定します。
現状では、ターミナル上でGTPコマンドを打ち込むことでしか「ELF OpenGo」を動かせないので、「Sabaki」や「GoGui」などの囲碁GUIから対局ができるように設定する方法を模索していくつもりです。


参考ウェブページ一覧表(順不同)

https://www.digitalocean.com/community/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-16-04
posted by hatakazu at 20:45| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする