奈良将棋は、1次予選は6勝1敗で26チーム中1位、2次予選は5勝4敗で24チーム中10位で決勝戦に進むことはできませんでした(総合13/42位)。ラッキーな勝ちもありましたので、この順位は実力以上です。
運営、会場設営の皆様、お世話になりました。
また、今年は20回記念大会ということで、参加者皆に、記念メダルがもらえました。
以下、簡単に将棋の内容を振り返ります。棋譜の表示は柿木さんの Kifu for Java を、指し手の検証には 新・東大将棋無双II を使わせていただきます。
棋力アップにつながったネタ、を、と思って開発メモをたどってみますが、
featureの見直しでは、進行度を反映できそうなfeatureを1つ加えました。 「駒割を進行度ごとに持つ」です。今までは序中終盤でただ1つの駒割テーブルでしたが、 加えて進行度別(19通り)の駒割も持つようにしました。 ここで進行度の定義は手軽に「盤上にある守りの歩の枚数。守りの歩とは5〜9段目にある歩」 としています。
また、学習時間の短縮には GPW2008 のポスターセッションにあった 「勾配法を使った学習の収束に関する研究」(北陸先端科学技術大学院大学の松井さんら) による アイデアを参考にさせていただきました。学習時間の短縮に関する研究は一見地味ですが、実は大切な、価値あることと感じています。
それから。。。
実装については、以前、みさきの安武さんが
小宮日記
で、学習時の特徴量の計算コードと、探索時の評価値の計算コードを共通化するための方法を考察されていましたが、そのアイデアを借用させていただきました。
具体的には現在、私のプログラムには例えば駒割に関して
*val += (tbl[p.iKoma[id].kindStat()] += coeff);
というコードがあります。
学習時の特徴量の計算は式の後半部分
tbl[p.iKoma[id].kindStat()] += coeff;
が動作し(このときvalには呼び出し元からダミー変数が与えられます)、
探索時の評価値の計算は式の前半部分
*val += tbl[p.iKoma[id].kindStat()];
が動作する(coeff には呼び出し元から0が与えられます)ようになります。
計算速度が若干犠牲になるのかもしれませんが、同じようなコードを2箇所で
書かなくて良いという保守面のメリットがとても大きかったです。
Bonanza method 実装の1つの公式になるのでは?、
と思いましたが、皆さんどうされていますか?
会場は電気通信大学で、到着前は勝手が分からず少し不安でしたが、大学も宿泊先も市街地というのは予想以上に便利で、例えば24時間のお弁当屋さんがありました。さすが東京ですね。
到着後、すぐにマシンとLAN動作チェックを行ないました。試験対戦はBonanza Feliz チームと行ないました。ありがとうございました。なお、このときの柿木さんからの指摘で、 予測探索時の時間制御が修正できました。相手の手を予測し、それに対する自分の手は かなり長く考えるようにしました。ありがとうございました。
○1次予選 1回戦 GA将!!!! - 奈良将棋(後手力戦中飛車)
後手の奈良将棋が、美濃囲いから端を攻めるというありえない仕掛けをしていました。1局目がコレでは先行き不安に。。
GA将さんは独特の58玉囲いでも1次予選での棋理、2次予選でのツツカナとの勝利を見ると、探索ルーチンが強さの支えかも。HPを見ても独自のアプローチで意欲的に取り組まれているようです。
○1次予選 2回戦 奈良将棋 - 無明(その他)
23手目、銀取り歩取りが決まり、優勢になりました。
david wadaさんはアメリカから初参加。囲碁将棋チャンネルのインタビューに出ておりましたよ。
○1次予選 3回戦 奈良将棋 - なり金将棋(後手四間飛車vs先手居飛穴)
55手目、角銀交換となったあたりは自信がありませんが、その後は居飛穴の暴力(?)で逆転しました。
この棋譜には現れていませんが、なり金さんは違法手を指してしまう(送ってしまう?)バグを抱えたままの出場だったようでした。
○1次予選 4回戦 ツツカナ - 奈良将棋(後手力戦中飛車)
1回戦と同様に力戦中飛車に進みました。今大会ずっと隣の席になった棋理の佐藤さんからは「これ(金銀分裂)ってコンピュータ将棋的にかなり勝ちにくいイメージがありますよね。。」との意見あり。確かにそうです。今の学習の結果、この形を好んでいるようです。将棋は辛くも勝ちきりました。
○1次予選 5回戦 棋理 - 奈良将棋(角換わり)
GPWでは論文発表もされ、優秀賞をもらっている佐藤さん。前回お会いしたときはまだ学生だったと思いますが、社会人になられて精悍な印象を受けました。
将棋は角換わり。後手が細い攻めをつなげられるかどうか、の将棋となりましたが、
78手目の▲62歩がおそらく悪手だろう、
ということでした。替わる手は▲83香(?) ただし、後手は玉が固く攻めに専念できるため、
実戦的には何とやら、というやつかもしれません。
○1次予選 6回戦 奈良将棋 - Ponanza(相矢倉)
将棋世界の連載で活躍されている山本さん作のPonanza戦。角交換後、奈良将棋がガリガリと
攻める展開になりました。途中入玉されそうな感が漂いましたが、なんとか寄せきることが
できました。
この対局中、山本さんと私が並び、そこにWebカメラが向けられておりました。
山本さんは途中、私が退席していた間もお一人で場を持たせようとされていたとのこと。
このエネルギーで、今後もコンピュータ将棋界を盛り上げていってくれるのでは
ないかと思います。
×1次予選 7回戦 奈良将棋 - 芝浦将棋(後手中飛車vs先手左美濃)
1次予選最終戦は、初参加の芝浦将棋。Bonaza ライブラリを使用されての出場で、 ご存知の通り、Bonanzaライブラリはそのままでも決勝クラスの強さなので、 私のプログラムではデフォルトでも勝てなさそうです。 将棋は奈良将棋が馬を作って指しやすくなったはずですが、じっくりした 将棋にせず、作った馬と(銀+成桂)を刺し違える手順が大いに疑問でした。 芝浦将棋は新人賞を受賞されておりました。
これで6勝1敗となり、1位通過できました(2位とはソルコフ差)。 1次予選からの参加は日程的に きつかったですが、1次予選のフレンドリーな雰囲気を味わえたのと、 運良く1位通過が出来たので良かったです。
×2次予選 1回戦 ボンクラーズ - 奈良将棋(相矢倉)
昨年までFPGA将棋で参加されていた伊藤さん、
今年はBonanzaライブラリを使ったクラスター並列で参加されておりました。
相矢倉から後手が先攻される前に端に桂馬を成り捨て、お互い攻めゴマを攻める
B面戦争に。。しかし78手目の▽45金が疑問でしたでしょうか。
▽48銀成(または不成)と飛車をとればまだ難しかったようです。
クラスター並列は、マシンリソースの有効利用の点で、合議制(Bonanza Feliz)への
挑戦のようにも見えましたが、優劣のほどはいかに。
○2次予選 2回戦 棋理 - 奈良将棋(相矢倉)
1次予選に続き、隣同士で対戦となりました。相矢倉からお互いの銀が 37、73に上がる形になりましたが、後手が一足先にその銀を前線に繰り出すことができ、 逆に先手の銀は取り残される展開に。それが勝敗を分けることになったようです。
○2次予選 3回戦 奈良将棋 - 隠岐(相矢倉)
隠岐のプログラマーは、CSA将棋(GUI)の作者の増本さんです。50手目の▽15歩は、むしろ先手から突きたいようなところで、以下、先手の優勢となりました。
○2次予選 4回戦 奈良将棋 - 柿木将棋(相矢倉)
先手の奈良将棋が攻めきれるかどうか、の展開になりました。 端に香車を捨てて攻めていったのが上手かったのでしょうか? 私の棋力では分かりませんが、これで攻めをつなぐことができたようです。
柿木さんは今年で20回連続出場で、現在も継続中のこの最多&連続出場記録は、 不滅の大記録と思います。今回、長年の功績に、CSA特別貢献賞が授与されておりました。 おめでとうございます。
×2次予選 5回戦 奈良将棋 - Blunder(相掛り)
昨年初出場で活躍されたBlunder。HP上で卒業論文、ソースコードなど情報発信
されており、決勝進出の有力候補です。
将棋は相掛りから、後手は85飛戦法に良く出てくる陣形。一方先手は歩の下から駒がでる
コンピュータ将棋でも力の出しやすい形と思いました。
が、39手目の59玉で不安定な形に。さらに先手から▲45桂の桂交換も損な感じです。
53手目の▲56歩が、次の▲27歩成を見落とした悪手で、いっぺんに形勢を損ねました。
Blunderの2次予選4勝5敗の成績は1番勝負の怖さでしょうか、
実力的にはもっと上位のプログラムと思います。来年はまた決勝進出を
狙ってくるものと思われます。
○2次予選 6回戦 Tacos - 奈良将棋(相矢倉)
相矢倉から攻めあいに。いかに攻めゴマを上手くさばくかが重要ですが、 57手目Tacosの▲35歩が好手でした。一方、奈良将棋は次の▽55歩が疑問手のようです、 ここは▽85桂と跳ね、▽33角をちらつかせれば、 先手からの攻めの牽制にもなります。この後、じょじょに形勢に差がついて いきます。 ただし最終盤、Tacosのプログラムが異常終了してしまい、勝負は運よく勝ちとなりました。
×2次予選 7回戦 奈良将棋 - Ponanza(相矢倉)
1次予選に続き、Ponanzaとの対戦。光栄にも勝又プロが解説をしてくださいました。 再び相矢倉。65手目の▲52角、73手目の▲64馬が好手とのことで、このあたりは先手よしの ようです。ところが80手目▽59角に対する▲49飛が悪手。ここは▲87金とと金を払えば 先手よしを維持できたようです。
×2次予選 8回戦 習甦 - 奈良将棋(後手四間飛車vs先手居飛穴)
floodgateでも優勝候補クラスの強さを見せていた習甦。勝ち目が薄そうなので、
意識的に振り飛車を選択しました。が、居飛車穴熊に組まれては、
さらに勝ち目がなくなったかもしれません(涙
習甦は、2次予選は結果的にソルコフでギリギリの決勝進出となりましたが、
決勝では実力どおりの力を見せて、見事2位となりました。
1年目から活躍されており、3年連続で順位を上げ、多くの研究成果が含まれていると
思います、パーティのスピーチでもなんらかの形で発表したいとおっしゃられていました。
2位という成績が「成果発表したい感」を後押ししたのであれば、
強いプログラムにとって、選手権の順位は重要ですね。
○2次予選 9回戦 奈良将棋 - 備後将棋(角換わり)
最終戦は強さの秘訣が今も謎に包まれている感じの備後将棋戦。 お互い、角と銀を持ち合った局面からの指し手は、1手1手がとても難しそう。 62手目▽64飛から飛車と角金の2枚換えとなってからは後手良し、 そして▽59飛と打たれた局面は先手簡単に負けそうな感じがしましたが、 水平線ぽい▽24角が出るところをみると、意外と大変なのかもしれません。 ▲83角が切り札ですが、それに対する▽74金で急に先手の評価値が上がりました。 △39竜(△19竜だと29歩とされるかもしれないので) としておくと、 ▲61角成、▽同玉、▲64桂は、その瞬間先手玉は詰まされてしまうので出来なく、 後手がまだ良かったようです。
これで2次予選は5勝4敗、10位で終わりました。
今年の大会では、1次予選、稲庭将棋が大活躍しました。 アイデアとしては昔からあり、例えば10年くらい前、鈴木将棋の鈴木さん、うさぴょんの池さんらと話題にしたときは、亀戦法と名づけたりしました。 これまで将棋プログラマーは「人間に勝つこと」を目指しており、 対コンピュータに特化した戦法を真面目に研究する方は少なかったと思います。 しかしこれからは強いコンピュータをいかに負かすか、の研究も 盛んになるのかもしれません。
また、優勝した激指。「人手の評価関数調整であれだけ強いのなら、 学習したら一体どんだけ強いんだろう」と思っていた人も多いと思いますが、 予想を裏切らない、期待通りの強さでした。
私は来年に向けては、やる気の継続ができたなら、学習をもう少し頑張って評価関数の精度を あげたいところです。
2010.05.16 奈良和文