大人のための将棋再入門 1

他サイトで公開した将棋系の書き物の評判がいいようなので、内容整理してこちらでもアップ。

———————————————————————————————

昨今の将棋ブームにならって将棋を再開する人は多いようだ。
強い新人の存在、AI との絡み…など興味の方向性は様々だろうが、内容のある将棋を指せると愉しい。

ところで、そのような場合、どういう戦法から入った方がいいだろう?

子供の時と違うのだから、入門書に紹介してあるような棒銀や矢倉棒銀ばかりでは面白くないし、第一勝てない(対矢倉の居角左美濃は優秀。特にウォーズ級位者レベルならほぼほぼ勝てる)。
ノーマル四間飛車を勧める人もいるが、相手が最善手を指し続けた場合、振り飛車が不利になることが明らかになりつつある現在、これをいい大人が採用するのはどうかと思う。なにより、ノーマル四間はノーマル四間で細かい定跡を覚える必要があるので面倒くさい。
変化が多く敬遠される傾向にあるが、ここではあえて先手番・後手番ともに居飛車を採用するのをお勧めしたい。
対振り飛車、相居飛車(角換わり・横歩・相がかり)などバリエーションは多いが、そこは大人になってからやる将棋、アバウトに進行を覚えておけばそれなりに指せる。すべてを網羅しなくても、システマティックに対応できるのが大人の知恵というものだろう。また、プロ棋戦鑑賞時にも手の意味がわかるようになって対局がより深く愉しめるようになると思う。あと、現時点で最強ソフト elmo が振り飛車を指さないというのは、棋理の上でもそれなりの裏付けがあるように思う。

私も、再開当初は、先手番の時は居飛車、後手番の時は四間飛車で指していたのだが、後手番の時に、指し方がわからなくなる場合が多く、結局、先手も後手も居飛車で指すようになった。ただし、相手が見え見えな棒銀・中飛車・早石田の場合は、それ用の対策を立てて指す。角換わりや横歩取りの対策はどうしても後回しになってしまうが、そのときはそのとき。負けても気にしなければ、トータルの勝率はそれなりに維持できるはずだ。

 

 

ところで、将棋コミュニティへの IT 系技術の導入は、世間的にも注目を集めている。elmo や技巧が普通に使えるのは有り難い。「強さ」への追及は高水準にあると思うが、意外に穴もある。

twitter 上でも指摘したのだが、
1.WordPress などで使える(マトモに動く)非 Flash 系の棋譜再生ソフトは存在しない
2.1000局超を扱えるフリーの棋譜管理 DB はない
のは痛い。

1.に関しては、実際に着手した。(→Responsive-Kifu としてある程度実現)
2.に関しても検討中。xampp や CakePHP に手を出した一因にもなっている。Java + WildFly + PostgresSQL で行くか、PHP + MySQL で行くべきか。。。うーん。

でも、まあ、こういったアプローチができるってのも「大人の将棋」の良いところ。

 

air-h-128k-il

 

nkif と DB と検索

今日は、JSKifuForWP (その後のResponsive-Kifu)のコードをいじる。

コメント出力も可能になった。

JSKifuForWP は読み込むことのできるデータ形式は、nkif 形式のみである(→その後、kif 形式も読めるように改変)。nkif というのは、私が勝手に名付けた名称で、その出自が某放送局のためこの名前となっている (笑)。

今日の作業でそのデータ構造はほぼ理解した。

nkif は一局面を例えば

p=1b191716101617191b0014000000000012001d1d1d1d1d1d1d1d1d0000000000

00000000000000000000000000000e000000000000000e000e0e0e0e0e0e

0e0003000000000005000c0a08070207080a0c26;

h1=;

h2=;

という形で表す。p は盤面の駒配置、h1 は先手の持ち駒、h2 は後手の持ち駒、である。

p はここでも調べていた。1一が 1b で香、2一が 19 で桂、‥‥というのはわかっていたのだが、これだと 81 * 2 = 162 文字で盤面の駒配置はすべて決定されるはずだが、実際には、164 文字ある。最後の 26 が余計だ。

今までこれがわからなかったのだが、わかってみればなんことはない、これは着手位置を表すマーカー画像の位置そのものだった。初手▲2六歩と飛車先を突いたので、こうなっている次第。余計な情報なので落としてもいいのかもしれない。

そこまでわかったので、テスト的にデータベースも作ってみた。とりあえず三局ほどデータを挿入。

この状態で

SELECT * FROM tbl_kifu where kifu like ‘%p=1b19171610161719‥(略)‥0a0c26;%’

を実行(SQL文はいつまでたっても慣れないっす)。

結果は、


と同一局面(初手▲2六歩)を正しく2件ひろってくる

問題の処理時間は、

と約 30 ms 。

これだと100局程度でも、同一局面をひろってくるのに数秒かかりそう。

んー、ちょっと遅いかな。

感想としては

・それっぽいシステムは組めそう

・が、「こなれた」システムをつくるのはそれなりのノウハウが必要

と思った。

やはり、データベースとか検索とかは苦手だ。

 

air-h-128k-il

将棋実況系 YouTuber 神動画 その1

なんやかんやで数十年ぶりに将棋を指すようになったわけだが、手っ取り早く勉強になったのは、YouTube で将棋ウォーズなどの実況動画を見ることだった。

YouTube では、アゲアゲさん・アユムさんあたりを押さえておけば、ほぼ間違いないと思う。(アユムの例の問題に関しては後述)

印象深かった回をあげておく。

★アゲアゲさん
ショイジシリーズ・銀多伝の回…カイジではなくショイジ。初めて見たとき実況トークで笑えるということに衝撃を受けた。本当は、このシリーズの一作目を見つけたかったが、残念ながらロスト。かなり面白かったはず。
「教えてアンパンマン!」&ボイスロイドの回…トークの面白さもさることながら、解説も秀逸。
英語実況・向かい飛車の回…英語実況シリーズは他にもあるが、これは駒が漢字表記なのでわかりやすい。
九間飛車の回…「え?飛車そこに振るの?」と思わせながら、勝っちゃうあたりが凄い。
対端角中飛車の回…これは純粋に勉強になる。

ああ、なんかインパクト重視のチョイスになってしまった。。。

★アユムさん
松尾流穴熊の回…将棋再開時、対四間飛車を苦手にしていたのだが、ここで松尾流穴熊の存在を知り、差し回しを真似していたら、けっこう勝てるようになった。
居飛車での対端角中飛車…差し回しに癖がなく、説明もわかりやすい。
後手早石田の回…ウォーズ低級位時には嫌というほど棒銀・中飛車・早石田に出くわす。それなりに対策を立ててなんとかなっていたが、これは逆に後手早石田の可能性を探った回。採用はしないが、参考になる。

他にもいろいろあると思うが、まずはこんなところで。

 

(追記)アユムのソフト指し問題に関して
最近は将棋実況系の動画は見てないんだが、アユム氏がソフト指しをしていたかどうかでけっこう炎上しているようだ。
えーと、こういう局面で分別ある大人は大抵「距離を置く」と思います。
だから私も今後は彼のことは積極的には取り上げません。

 

将棋 NHK 杯サイトのデータ形式

ちょっと解析してみました。

初手が

p=1b191716101617191b00140000000000120……. ;

となっていて最初何のことかわからなかったが、これは局面表示のようです。

1. 最初の2文字を切り出し、16進数として解釈。 ( ‘1b’→27 )

2. 次の2文字も同様に。( ’19’→25)

以下同様

で、27 は後手香車、25 は後手桂馬と別の場所で定義されているので、これは「1一, 2一, … のマスに置かれている駒の種類を 9×9 まで書き出したもの」ということになります。 sfen に似てますが、駒記号の解釈がわかりやすく、ブラウザ(JavaScript)を用いたクライアント・サーバシステムには相性の良い形式といえるのではないでしょうか。

 

air-h-128k-il

 

 

JavaScript 関係

・ウェブ上での開発環境はいくつかあるようだが、 Thimble が使いやすい。

・Ajax。「エージャックス」と読むのね。今まで「アヤックス」と認識していた。欧州の名門サッカークラブとは何の関係もなし。

 

級位者の不愉快な対局 振り穴くん

空き時間などで将棋ウォーズを楽しんではいるが、対局していて不愉快な戦法の筆頭格は『振り飛車穴熊』ではないだろうか?

棒銀くん、中飛車くん、早石田くんのバ○の一つ覚えみたいに一つの戦法に固執する指し方も食傷気味だが、これらの戦法を採用する級位者は、それでも

・こちらの出方に反応して指し方を微妙に変えてくる

・ネット将棋は短期決戦という前提を守ってくれている(勝っても負けても短手数で終わる場合が多い)

という尊重すべき基本理念に沿った指し方をしてくれている。なので、「あー、またか」とは思っても悪い気はしない。少なくとも人として間違ってはいない(笑)。

これに対し、振り穴はどうだろう?

まず、きちんと指そうとすると「穴熊には穴熊」の格言(?)通り、こちらも穴熊に組まなてはならない。が、そうすると手数が延びて居飛車側の時間切れ負けになりやすい。まあ、ウォーズなどでこの囲いを採用する人は基本これを狙っているわけですね。性格悪いというか。。。

それに加え、振り穴くんにはコミュニケーション回避の傾向があるように思う。駒組みしやすい振り穴を選ぶ時点で、下地はあるんだろうが、エスカレートすると、正直、気持ち悪い。

参考棋譜を上げときます。この指し方、相当、気持ち悪いと思いません?


お手軽に将棋AIをさわりたいっ!

タイトル通り。YaneuraOu や 技巧がオープンソースになってるからそれを使えばいいという説もあるが、私のC++力では読解するのに大変そうだ。もっと簡単にあつかえる将棋エンジンはないか物色していたら‥‥、ありましたよ!

not さんが開発した、CNNShougi 。パイソンで書かれているから、実行は楽ちん。

ソースもわずか4ファイルながら、学習機能やUSI インターフェイスも備えている。上手い人が書くと、こうなるものなのかと感心。

そして注目すべきは、いわゆるミニマックス戦略式の探索機能はまったくなしで、ニューラルネットのみで指し手を決定している点。ニューラルネットも勉強したかったのでちょうどよい。なお、ニューラルネットは Chainer の CNN (畳込みニューラルネット)というヤツらしいのが、現時点でここらへんのモデルの差異はよくわかってない。

とりあえず、落として実行させてみたが、若干の修正でしっかり動く。将棋ブラウザQにエンジン登録して対戦したら、なかなか将棋っぽくなった。探索なしでこれはなかなか。

・解説記事は、こことか。

・(おそらく)Chainer のバージョンアップにともないソースは若干の修正の必要あり。構文的なものと型のキャスト。(→ Chainer 2 用に修正したものを github にあげておきました)

・学習を 20 エポック(デフォールトの倍)にしてみたら、指した感覚としてはけっこう将棋っぽくなった。

・将棋ブラウザQへの登録は、エンジンとしてパイソンそれ自体を、引数として usi.py を与えるというかなり乱暴なやり方。でも、しっかり動いている。

 

藤井猛の持ち駒バラマキ伝説

棋士伝説ネタをもう一つ。

今でこそ、藤井といえば藤井聡太名人だが、ちょっと前までは藤井猛九段のことを指していた。藤井システムのインパクトがあまりに強かったため、旧来からの将棋ファンには依然支持されているように思う。

ところで、藤井伝説の一つに逆転負けがあまりにも悔しく「投了時、駒台の持ち駒を盤上にぶちまけた」というのがある。

事実関係は調べやすかった。ネット上にもそのときの写真が流通されている。ここで出しても問題ないと思うので、掲げておくと、これだ。

リアルですね。。。

棋譜を調べてみると、このいきさつがすごくよくわかる。

藤井九段、得意の四間飛車+序盤戦略で初手から着実にリードを広げていく。ちなみに95手目の局面はこうなっていた。

先手の囲いは4枚穴熊で固いものの、後手は馬が二つできていて攻守のバランスが良い。すぐに決め手がある局面ではないと思うが、素人目にみても堅実に指していけば、勝ちきれる将棋という印象はある。

この次の手が▲2三金打。さすがにこれでは間に合わないと思われるが、こういう一種の手渡しに藤井センセは弱い。いわゆるファンタな応手が増えていく。

評価値的(エルモで10秒検討)には

こんな風に推移していき、最終的には

こうなってしまった。8二になにを合駒してもそれぞれ詰みがあります。

確かに感情の矛先をどこにぶつけていいかわからなくなるような進行ですね。なんか納得。

なお、このエピソードはけっこう有名なためか将棋漫画『3月のライオン』にも使われているようです。

「絶対にやってはいけません」なんでしょうが、藤井センセなら許される?

 

air-h-128k-il

 

カッコーはウェブに卵を産むか

将棋ソフトが整ってくると次に欲しくなるのが棋譜だ。

連盟の将棋中継アプリの通信内容からなんとか kif 形式に落とすことはできないか考えてみましたが、がっつり ssl かかってました。

ところで、ssl の筋に入っていく前にアプリはhttp://kak.o.oo7.jp/ShogiLive/ann/iphone.txt というところに GET リクエストを送っている。 “カッコーはウェブに卵を産むか” の続きを読む