2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

tweet

  • tweets

« まっ白な灰に | トップページ | Commentarii de Bello Kazusso カズサ戦記(後編) »

Commentarii de bello Kazusso カズサ戦記(前編)

コンピュータ将棋のシステムは三種類に分けられる。一つめは前向き枝刈りを用いる古典派ソフト、二つめはBonanza以降の全幅+Pruningのソフト、そして三つめはFPGA上で動くシステムである。

…というわけで、伊藤は第18回世界コンピュータ将棋選手権に参戦した。本稿はその戦闘の記録である。

[開戦前夜]

floodgateに参入したのが4/19から。4/19,20の戦闘を見ていて、玉まわりの評価がぜんぜん足りないのがわかり、あわてて修正。またfloodgate連続対戦対応を入れて、4/26,27 再参加。まだ弱いので更に修正(評価辺り)を入れ、4/29,30 またfloodgate。評価辺りはだいぶよくなったものの、暴走するバグが発覚(「直前にこれかよ…」参照)して、というところで開発時間切れ。FPGAのコンパイルに6時間かかるため、5/1会社行ってたらコンパイル結果の検証ができないので見切り発車、というどたばた状態でした。

ところが、今回はハードとソフトがあるので、ハード(FPGA)のファイルの.sofは検証したんですが、ソフトの方は25分対応にするのを忘れてました。それまでfloodgate用に15分にしてたんで。これだけはしょうがないんで、#defineを900->1500に変えて再コンパイル。結局このバイナリは検証なしでぶっつけ本番で使いました。まあこのくらいの変更なら大丈夫だろうとは思いましたが、甚だ気持ち悪かったです。仕事での習性か、私は未検証のバイナリは使う気にならない、というタチなので。

4/27に気づいたのは、玉辺りの評価に係数をかけたあと「8で割る」つもりが、割る8を2か所でやってしまって実質64で割ってたことが判明。道理で過小評価なはずです。ここに気づいた後は、まだチューン不十分ながらも何とか玉に向かっていくようになってくれました。これはかなり大きかったと思います。

[兵站の確保]

♪Supercalifralogisticexpialidocious...      (ちょっと違う)

宿は3週間ほど前に木更津駅近くのロイヤルガーデンを予約。これまでは02年はオークラに泊まり(でも高いからもうやだ)、05年はぎりぎりに予約しようとしたら木更津はどこもいっぱいで、君津かどっかに泊まるはめになったので、今年は早めに予約しました。皆さんエクセルが多かったみたいですね。Yahooの旅行だかで宿探したのですが、エクセルはレビューがあまりよくなかったんですよね。なのでロイヤルにしたんですが。でもまあみんな泊まってるんなら大丈夫なのか。

5/2,3の2泊予約を入れ、チェックインのとき「もしかしたらもう1泊するかもしれないんですけど…」と言ったら、禁煙は満杯だが、喫煙でよければおさえておきましょうか、と言われ、お願いしました。「5/3の夜には延泊するかしないかはっきりします」とか言って。この辺の融通きいたあたりは、ワタシ的には合格点です。しかし、コン将関係者以外で、GWの木更津で何やるんですかね。隣でやってたSJなんとか?フラワーなんとか?でも泊まってる層はちょっと雰囲気違ったような。

次回どうしようかな。実は好み的には日本旅館にしたかったんですが。でも予選終わって帰ったんじゃ夕食の時間に間に合わなくて。いやしかし温泉というのもいいかも。養老渓谷あたりにいくつかあるな。…などと考えていたら小宮日記に不穏な記述が。また綿密なプランニングが崩れるんでしょうか。

交通手段は、FPGAボードがかさばるため車に決定。ボード自体はまあ小さいんですが、クッションの入った箱に入れてったので。私は多摩ニュータウン在住なので、若葉台付近まで行き、そこから縦に長い川崎市に沿う形で南下し、浮島からアクアラインのルート。5/2も会社さぼって、半日かけて行きました。途中海ほたるで昼食(佐世保バーガー)。

ちなみに竜玉の中谷さんは5/3朝にやはりアクアラインで来たら、渋滞に会って遅刻したと言ってました。5/2昼間はがらがらでしたけど。いやまっとうな人間は仕事してるんだって。車で来る方は気をつけませう。

なお帰りのルートですが、私は行きと帰りで同じルートを通るのはプライドが許さない、というほうで。で、空いてるかぎり16号を行き、千葉過ぎたあたりで混んできたら京葉道路へ。いったん篠崎で降り、平井大橋から中央環状線をぐるんとまわって、池袋から最近開通の山手通り地下(初体験です (*^_^*))を通って新宿経由国立府中へ。道路オタクなんです。いいよ道路じゃんじゃん作って。暫定税率?今の倍くらいでいいんじゃない?

[我が軍の陣容]

大会参加バージョンの概要を以下にまとめます。普通のソフトの感覚からすれば「何でこんな変なことするの?!」という部分もあるかと思いますが、ハードではソフトのように何でもできるわけではないので、ハードでもできるように、ということで一部妥協した実装になっています。また、「とにかく大会に間に合わせよう」と焦って作っていたので、後で直すつもりでとりあえず入れ込んだものが修正の時間なくて結局そのまま、という部分も。

・ハード:Altera社製 CycloneIII 開発キット DK-DEV-3C120N。搭載FPGAはEP3C120。動作周波数 15.6MHz (7.8Mnps)。FPGAチップ内は大きくNios IIプロセサと思考エンジンに分かれています。Niosで動くソフトは、以前に公開したパッケージに入れたものと大差ありません。

・PVS探索
・多重反復深化。といっても各ノードでのループは2回。そのノードの残り深さがNとすると、子ノードははじめのループではN-3で、次のループはN-1で探索する、という超いいかげんバージョンです。
 ハッシュがないので、ほぼすべてのノードで反復深化します。ただし、はじめのループでのベスト手を次のループ(の最初)でトライするときは、その下のノードは(allノードだろう、との予想で)反復深化しません。…って、今書いてて気づきましたが、これPVノードでも反復深化してないですね。だめじゃん…あと、onereplyなら反復しません。
・延長:recapture 0.5手、王手防ぎ 0.5手、onereply 1手、です。ただし常時延長するのではなく、前半ループのベスト手を後半ループの最初で試すとき、その手がrecapture等である場合のみ延長します。
・静止探索はStandPat方式
・詰め探索:なし

・手生成
 ルートから深さ7まで … 全幅
 深さ8        … 移動手のみ生成(「打つ手なし(;_;)」)
 深さ9-12     … 静止探索で、取る手+パスのみ。ただし「自分より下位の
              駒を取る手で、取る先に自分からの他の利きがなく、相手
              の利きがある」なら生成しません。たとえば、飛車で銀を
              取って、すぐ取り返されて終わり、になるなら生成せず。
 深さ13-14    … 直前に動いた駒を取る手のみ生成。
 深さ15       …  王手がかかっているときのみ、王手回避の手すべてを生成

 深さ9から先はいわゆる静止探索なので、私はこれを称して「(全幅)深さ8」と呼んでます。まあ8手めは全幅じゃないですが、固いこと言わないで。あそうそう、深さ7、8(全幅残り深さ2,1)では、「終盤、両方の王からx or yで5以上離れたマスへの、金銀桂歩の打ち」は生成しません。
・Nullmove Pruning
 全幅残り深さ≧6ならR=3、それ以下はR=2で、再帰的にやります。静的評価値がβ以上のときしかやりません。
・(Extended) Futility Pruning(もどき)
 (全幅)残り深さ2か1で、静的評価がαより一定以上下なら、手生成を全幅から「取りのみ」に切り替えます。
・move ordering:ハッシュなし、Historyなし、Killerなし。優先度は
  A 反復深化の後半ループで、前半ループでのベスト手
  B 直前の駒を取る
  C 駒を取る手すべて(深さ9以降 i.e. 静止探索では上述の制限あり)
  D 'refutation table'の行き先マスへ行く/打つ手
  E その他すべて
の順。各カテゴリ(A-E)の中では順序は機械的で、ソートしたりはしてません。たとえばEなら、行き先マスが1一から9九まで順番に、という感じ。
'refutation table'というのは、最善応手手順の三角配列のこと(とどっかの論文読んで解釈してたのですが、間違ってるかも…)
なお王手のときは、深さにかかわらず王手防ぎすべてを生成します。このときの順番は
  F 王手をかけている駒を取る
  G 王が逃げる
  H 合駒(移動手->打ち、の順)
になります。

・序盤はれさぴょんv3が指します。24手めまではれさぴょん。その後は、定跡がヒットするかぎりれさぴょんが指します。それ以降は、ルートからすべてFPGAが考え、れさぴょんは通信を担当するだけになります。
・打ち歩詰めチェック:やります。
・千日手チェック:やってません。最悪、王手千日手で負けを食らいます。
・相手時間は寝てます。ハッシュもないので、とにかく1手ごとにまっさらから「次の1手問題」を解いてるのといっしょです。
・時間制御:残り時間が少なくなったら深さを減らす、くらいはやります。ただし、いったん決めた深さで、とにかくその深さ読み切るまで延々と考えます。なので1手1秒以下のことも1手5分のこともあります。

・評価:考慮してる要素は以下
  駒割 歩64点、香64*4.25点、… 駒種によって定数
  成りのボーナス  小駒のは、進行度によって重みが減ります。大駒は一定
  持ち駒のボーナス 歩のみ枚数によってサチュります。それ以外は枚数比例
  各マスへの利き 各マスに、両王からの距離によって重みをつけます。また各マス
   ごとに自分と相手の利き数によって点数をつけます。各マスごとの(重みX点数)
   を81マスぶん足したものに進行度をかけます。
  金銀の自由度
  王の8近傍の金銀桂香歩の配置
  金銀の浮きペナルティ
  飛角香の前方への利き
  飛角香の自由度
  飛香の前の歩(あれば)のy座標
です。ただ、後の6つは重みたぶんすごく少ないでしょう。大会直前に項目だけ入れたものの、重みのチューンが全然できませんでした。学習?何ですかそれ?

以上です。上に書いてないことは<一切>やってないはずです(私が忘れてないかぎりは)。「書いてないけど、XXXくらいは当然やってるんだろうなぁ」とか思ったら、たぶん大間違い。
まじめにこつこつソフト作ってきた方から見ると「何じゃそりゃー?!やる気あんのかゴルァ!!!」だと思いますが、はいすいません。まあいいじゃないすか旦那。FPGA化するだけで大変だったんスよ。

アルゴリズム的な面では、独自の工夫とかはほとんどなく、「Bonaの完コピ」路線で行ってます。2006年8月「情報処理」の記事を参考に、その中でハードでできるものは(必要なら適当に変更して)パクる、できないものはあっさり諦める、というスタンス。とにかくFPGAというだけでイヤというほど苦労したので、他の面ではできるだけ頭も手も使わない、を目指しました^^;

2次シードのソフトの中で、過去まで含めても、大会2か月前に自動対局もできてない、市販/フリーソフトの最低レベルにも勝てない、という状況だったのはおそらく私くらいではないでしょうか。開発スピードの点でもかなり速い部類に入ると思います。これはもちろん、でたらめな納期を連発されながらも、何とか100点満点ではないながらそこそこの結果を出す、という鍛錬をいやというほど積まされてきた賜物かと思います。ってどういう業界やねん。まとにかく、パクれるものはとにかくすべてパクり、自分のリソースは「ウリ」の部分(私の場合FPGA化)に注力する、という作戦が当たった形です。ま基本っちゃ基本ですが。パクらせていただいた保木さん、うさ親さん(序盤のれさぴょん)には足を向けて寝られません。ちなみに、Deep Purpleの最初のバージョン(InRock, 1999年)は、進歩本②のYSS記事の完コピから始まりました。こちらも足を向けられないので、だんだん立ったまま寝る他なくなりつつあります。

[1次予選]

対戦相手はあうあう、あいちゃん、マイムーブ、うさぴょん、白砂、HIT、なり金。
棋譜は以下のURLで見えます。(右下の「X回戦 Aリーグ対何とか」をクリック)

http://homepage.mac.com/junichi_takada/wcsc18/

あうあう:全般に押し気味で進めてたと思いましたが、最後の方勝勢になったところで、また暴走バグが。大会第1号です。まあこのときはちょっと出ただけで結局すぐ詰ましたのですが。(放送もされてなかったし。)後の波乱を暗示した幕開けでした。

あいちゃん:かなり混戦でしたが、何とか勝ちました。オペレータの方が農工大の学生さん2人で、うちお一人はかなりお強くて、彼の解説を聞きながら見てました^^; 寄せ合いの段階で、若干優勢ながらもこちらの玉もかなり危うく、ちょっと攻めあぐねてる感じで、もたもたしてると逆転されるなー、と思いつつ見ていた100手め。解説者さん(?)が「ここでAリーグが△7七金とかやるともうだめですよね」…!私はまったく見えてなかった手なのでびっくり。ですが、これならたしかに勝勢でしょう。と言いつつ、でもちゃんと指してくれるかなぁ…と思いながら戦々恐々としていましたが、指してくれました(涙)。この後は危なげなく寄せ切りました。
まあ後で冷静に考えてみると、コン将的にはそう難しい手ではなかったかもしれませんが(「全幅7手読めりゃ当然わかるだろ」)、自分にまったく見えなかった正解手を指してくれた、というのが泣かせるポイントでした。まぁAちゃんたらもうこんなに立派になって。もうお母さん出る幕ないわよね。うるうる。

マイムーブ:順当に負け。まあfloodgateで何度かやって勝ったこと1度もないので、想定内でしたが。
マイムーブは例の「これまでの対戦成績」が受けてました。ym将棋さんも書かれてましたが、私も第一声「相撲みたいですね」でした。西村さんは「いや、将棋倶楽部24がこんなふうに出るんですよ」と言ってたのですが、あれは絶対大相撲ですよね。来年はぜひ、上手投げとか押し出しとか、決まり手も出してほしいと思います。これでfloodgateのリーグ戦が「春場所」とかいう名前になったら完璧です。

うさぴょん:これも順当に負け。うさぴょんにも勝ったこと1度もないです。こちらは序盤はれさぴょんそのまま、定跡もうさぴょんそのままなので、まあ同門対決みたいなもん?私は定跡はダウンロードして何も考えないで使ってるだけで、中身まったく知らないのですが、今まで振り飛車が多かった気がしたのだけどこのときはなぜか横歩になりまして。横歩ははじめて見たような気がします。

白砂:まあ無事勝てました。白砂さんはご本人が相当お強いので、プログラムって思うとおり指してくれないね、という話になってうなずきあっていました。私程度でもそう思うので、白砂さんあたりは相当フラストレーションあるんじゃないでしょうか。まあそこを押してプログラムに挑戦する姿勢はなかなか応援したくなるものがあります。あ、ちなみに私の棋力は、十年以上前に将棋世界の問題でとったペーパー四段ですが、実戦はだいぶ長いこと指してないので、今は初段あるかないか、というとこだと思います。(もっと弱いかも)

HIT:3年前は先読みまったくなしで、ちょっとだべってる間にあっという間に終盤になっててえらくびっくりしたという印象が強かったですが、今年は「知識ベースで手をしぼり、7手程度先読みする」とのことで、小刻みに考えていました。まあまだちょっとチューン不足だったようで割と簡単に勝ててしまいましたが、「知識で手をしぼって、深く先読み」というのは方向性として間違ってなさそうに思えるんですけどね。まあ私はPost-Bonaの全幅指向ですが、結局どっちが正しいんでしょうか。

なり金:これも押し気味で進め、最後の方勝勢になったところで、出るものが出ました^^; 今回はかなり危なっかしい指し方をけっこう長い手数指し、私も気が気でなかったですが、なんとか最後には詰ましました。なり金さんは目が点になってました。まあやられた方はさぞびっくりするでしょう。しかしなり金さんは2年連続で頭ハネとのことで、つくづく不運ですね。これにめげず来年は1次突破していただきたいと思います。私はロッキーよ。最後まであきらめないわ。(誰、あんた?)

以上で、5勝2敗。5位で予選通過です。もともと目標は「1次予選通過」だったので、この段階で目的は果たしたつもりになってました。まああと欲を言えば、今までの自己ベストが2次予選1勝だったので、2次で2勝できれば大成功だよね、くらい。ということで、かなり気楽に臨めるなぁ、と思っていたのですが。

…とここまで書いたところでもうかなりの分量になってしまったので、続きは次号にします。六千字もキーボード打つと持病の腱鞘炎が。無事1次予選を突破したA級リーグ指し手1号。2次予選に向けてふくらむ期待。が、暴走バグの影が行く手にさす…強敵揃いの明日は果たして通用するのか?次回、「恥はネットを駆ける」では更なる波乱が!(って、もうみんな結果知ってるんだけど…)

« まっ白な灰に | トップページ | Commentarii de Bello Kazusso カズサ戦記(後編) »

将棋プロセサ」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/507007/21135131

この記事へのトラックバック一覧です: Commentarii de bello Kazusso カズサ戦記(前編):

» [コンピュータ将棋]A級リーグ指し手1号さんの自戦記 [GA将!!! 作ってます 〜gdgd第5クール〜]
http://aleag.cocolog-nifty.com/blog/2008/05/commentarii_de__fb6b.html http://aleag.cocolog-nifty.com/blog/2008/05/commentarii_de__9bab.html id:mkomiya:20080531:1212202924で知りました。最近RSSリーダのチェックしてなかったからなぁ… とりあえずこれは宣言しと... [続きを読む]

« まっ白な灰に | トップページ | Commentarii de Bello Kazusso カズサ戦記(後編) »