2014/08/10 15:46
タイトルどおりなんだが、
将棋エンジンの通信方法には、
・USIプロトコル通信
・CSAプロトコル通信
(など?)
があり、電王トーナメントは CSAプロトコル を使う。
というあたりを ようやく理解してきた☆wwww
土・日ぶっ続けで (途中、
天下一プログラマーコンテスト2014予選Aに参加したり☆ww)
まだまだ 将棋GUIの開発途中だぜ☆
ソフトの見た目が変わらないので、アップするほどのスクリーンショットがないんだぜ☆
USIプロトコル通信
===============
これは、「usi」とか、「usiok」(牛オッケー)といった挨拶に始まり、
「bestmove 7g7f」とか、「position startpos moves 7g7f 3c3d」といった文章を
やりとりする方のルールなんだぜ☆
CSAプロトコル通信
================
これは、「LOGIN tiger 0123」とか、「LOGIN:tiger OK」といった挨拶に始まり、
「+7776FU」とか、「+3334FU,T1」といった文章を
やりとりする方のルールなんだぜ☆
プロトコルというのは、
・こっちが こう送る手はずなので、
・決まりだから 合わせろ
という意味なんだぜ☆ コンピューターに限った用語ではなく、
・ポンに合わせて チャンカンする
・司会に紹介されてから 舞台に上がる
・お賽銭は、祈る前でも祈った後でも どちらで入れてもよい
など、プロトコルは どこにでもある☆
もう1つ理解しておくべきことがあるんだぜ☆
USIプロトコル通信
===============
標準入出力を使う。
・Console.ReadLine()
・Console.WriteLine( "7g7f" )
CSAプロトコル通信
================
TCP/IPを使う。
・(ストリーム).Read( buffer, 0, buffer.Length )
・(ストリーム).Write( "+7776FU\n", 0, 8 )
何が違うのかと言うと、ざっくり まとめてみたぜ☆
標準入出力
=========
・超簡単。
TCP/IP
===========
・サーバーとク
…と書こうとしていたところで、『将棋所』にUSI通信ができれば、
あとは『将棋所』が TCP/IP 通信をしてくれるんだと
ツイッターで 教えてくれたので 将棋所を もっと調べてみよう☆wwwwww
『将棋所』を ただの将棋盤 ぐらいにしか思っていなかった私には
通信の仲介に利用できるというのは 無かった発想なんだぜ☆
確かに この画面は見たことがある☆wwwww
3日ぐらい前に rubyで shogi-server を立てて、
れさぴょんin将棋所 相手に、 SFIinわたし で
対局していたやつなんだぜ☆wwwww
8/10(土)・11(日)の間に
①マウスで駒の動きを入力する機能 ②合法手を くじ運で 適当に選ぶ機能 ③CSAプロトコル1.1.3対応 ←まずは これを終わらすぜ☆!
と意気込んでいたんだが、
①マウスで駒の動きを入力する機能 ←将棋所をつかえばよい☆
②合法手を くじ運で 適当に選ぶ機能
③CSAプロトコル1.1.3対応 ←将棋所で将棋エンジンが動いていれば
他のサーバーの将棋エンジンと対戦できる☆
まさか 2つも もう終わっていたとは☆
計画変更☆
①局面を与えると、くじ運で 合法手を1つ返してくる機能
この1個だけ まず作ろう☆ww
『れさかい1.3.6』と遊んでいるのだが、
電王戦で ちらちら みかける評価値バーが ナイアガラの滝 のようなんだぜ☆
わたしのプログラムでは、
送られてくる「position startpos move ~」みたいな文字から
駒の場所をセッティングするところまでは作れているので、
次は どんな合法手があるか、を得られる方法を 調べるんだぜ☆
うさぴょんや れさかいのソースのどこかにあるはずなんだぜ☆
『れさぴょん』には 次のようなコードがある☆ (kyokumen.cpp)
int Kyokumen::IsLegalMove(int SorE,Te &te)
{
・動かしているのは相手の駒だ → ×
・駒を打つぜ
そんな駒持ってないぜ → ×
・駒を指すぜ
そんな駒、盤上にないぜ → ×
・自分の駒を取った → ×
・IsCorrectMove(~)
○→ 試しに1手動かす
・自玉が詰んだ → ×
・自玉は詰んでいない → ○
× → ×
}
int Kyokumen::IsCorrectMove(Te &te)
{
・駒を打つぜ
・駒を打とうとした先に駒があった → ×
・歩だぜ
打った列には別の歩があったぜ→ × 二歩
相手の王様を詰ませたぜ → × 打ち歩詰め
・それ以外 → ○ 打てた☆
・王を動かすぜ
・敵の利きに飛び込むぜ → ×
・それ以外 → ○
・桂馬は跳ね~るぜ~☆ → ○ なんの邪魔もない
動かした距離を測るぜ☆
・動かしてないぜ☆ → ×
・1枡横(縦、ナナメ)へ動かしたぜ☆ → ○
・2枡以上動くんだぜ☆
・途中に、空でない枡があった☆ → ×
・それ以外 → ○
}
といった感じなんだぜ☆ わたしが読んだ感じ、多分☆
2014/08/10 19:41
コンピューターに、
①駒の動きを覚えさせる。(前に進むだけ → ちゃんと動く
→ 味方の駒を取らない → 王手に突っ込んでいかない …など)
②好きな駒を指させる。(違法手・パスあり)
③好きな駒を指させる。(合法手のみ・パスなし)
といった 将棋のルールを作りこんでいく段階なんだぜ☆
今、わたしのコンピューター将棋が どんな感じかというと。
①将棋盤の上の、自分の駒を ランダムに選ぶ。
②その駒を 前に1つ 進ませる。
③敵・味方 関係なく駒を取れる。
④先手の駒が1段目より上に行こうとしたとき 棋譜の符号が壊れる。
⑤後手の駒が9段目より下に行こうとしたとき 棋譜の符号が壊れる。
という感じなんだぜ☆
将棋のルールを全部覚えさせるのは まだまだ だな☆
2014-08-10 23:11
これが土日の成果なんだぜ☆
(1)将棋エンジンを起動できるボタンを付けた。
9三の歩を ちょっと突く、ぐらいまでは やってくれる☆www
(2)USIプロトコルで ゲームエンジンと “お会話” をするところが
まだ きっちり できていない☆ だが、ぼんやり付けることはできた☆
(3)「コンピューターの最善手(作りかけ)」ボタンを置いた☆
やってることは 駒を直進させるだけだぜ☆wwwww
(4)上の 1~3 ができるように、土曜日はぶっとおしで
ソースコードを整理した☆ 下地整備というやつなんだぜ☆
このアプリは ホームページで公開しているんだぜ☆
・
『きふならべ Ver 1.07.1』
http://grayscale.iza-yoi.net/shogi/download.html
[1回]
PR
http://grayscale.dou-jin.com/Entry/32/【将棋】目指せ電王戦(5) 将棋エンジンの通信方法には、USIプロトコル通信や、CSAプロトコル通信(など)があり、電王トーナメントはCSAプロトコルを使うというあたり理解してきた☆