手駒の価値を正しく学習させる

知っての通り、Bonanza6では、手駒の価値は駒割の値 + KPのP=手駒としての値の合計値となる。(実際にはKPPの一つ目のPと二つ目のPが等しいときのKPと、 KKPのP=手駒のほうとがあるが、細かい話は割愛する) さて、駒割の値というのは、盤上の駒と手駒をひっく…

棋譜からの学習は何日で収束するのか

Bonanzaで1ヶ月+α*1と保木さんに教えてもらいましたが、当時のPCでBonanzaは1コア当たり250knpsぐらいしか出ませんでした。いまのPCでいまどきの作り(Stockfish風の探索部)であれば、1Mnpsぐらい出ます。 ということは探索速度は4倍になっていることになりま…

次元下げモジュールのプラグイン化計画

NDFがやったKPPの次元下げKPP = 絶対KPP + 絶対PP + 相対KPP + 相対PPを綺麗にプログラムするための方法について考えてみます。このような次元下げは、KPPを与えるとそれに対応する絶対KPP、絶対PP、相対KPP、相対PPの配列のindexを返すものとして設計すると…

やね裏評価関数と38要素化の比較

(前の記事のつづき) Bonanzaのmake_listは全体時間の5〜10%程度です。38要素化ではここが差分計算化できるのでほぼゼロとなります。やね裏評価関数ではここの差分化計算化が難しいのでこの5〜10%がほぼ残ったままとなります。 評価関数の差分計算自体は、や…

Bonanzaのmake_listの38要素化

(前の記事の続き)次に、別のやり方として、先手が歩を3枚持っているときに「先手の1枚目の歩」「先手の2枚目の歩」「先手の3枚目の歩」のような駒があるとみなす三駒関係の設計の仕方があります。 このようにすると、盤上にない駒は手駒にあるわけで、玉以外…

やね裏評価関数とは何か?

電王トーナメントのアピール文書、「やる予定」「やる予定だけど効果かどうかはわからん」みたいな書き方をしているものもたくさんありますが、ソフトがアピール文通りになっていないからと言って罰則があるわけではないのでそれを見越してやねうら王は適当…

BMI使ってますか?

知っている人は知っているかと思いますが、Haswellになってから、Bit Manipulation Instructions Sets (BMI sets)という命令セットが使えるようになりました。http://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#BMI2_.28Bit_Manipulation_Ins…

世界コンピュータ将棋選手権のアピール文書はいつから必要になったのか

ちょうどいま世界コンピュータ将棋選手権が開催されているのでアピール文書のことを書いてみたい。 世界コンピュータ将棋選手権のアピール文書はその将棋ソフトのオリジナリティを主張する部分であるが、上位ソフトのアピール文書には革新的なアイデアも多数…

Bonanzaは何故未知の局面に対して弱いのか

どちらも強いプログラムなのに、未知の局面への対応力に差が生じるのは不思議ですね。http://d.hatena.ne.jp/yaneurao/20140208#c1392482608 棋譜からの学習は、いわゆる「機械学習」の考えを用いていますが、この機械学習にはL1正則化だとかL2正則化だとか…

USIプロトコルへの様々な疑問にお答えします

USIに文句を言うだけ言う http://d.hatena.ne.jp/merom686/20111217 まあ、USIプロトコルがいろいろアレであることは、いまさら言うまでもないことなのですが、なぜこんなプロトコルがコンピューター将棋の標準になっているかと言うと、将棋所という素晴らし…

指し手オーダリングのための高速ソート手法の提案(下書き)

めちゃんこすんごいろんぶんのしたがき著者 : LS3600 & ひよこ ■ 概要指し手のオーダリングを行なうために、生成した指し手に対して何らかの手法で点数をつけて、その点数によってソートしなければならない。これをオーダリングと呼ぶ。本提案は、このオーダ…

置換表に経路に依存する局面のスコアを書き込まない

将棋では連続王手の千日手は王手をしている側が負けです。だからと言って連続王手のループを見つけた時点で攻め方の負けと判断したのではGHI問題を引き起します。さて、いま、定跡を自動構築することを考えます。ここで言う定跡とはプロ棋士の棋譜の何手目ま…

「入玉指向の将棋プログラムの作成」の改善案

GPWSで発表された田中哲郎先生の「入玉指向の将棋プログラムの作成」について思うところがありまして、以下にだらだらと書いておきます。なお、本論文は以下のURLから読めるようです。https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action…

USIプロトコルのponderの仕様と稲庭対策のこと

昨日の記事に対して将棋所の作者様から直々にコメントをいただいたのでお答えします。 相手の正確な残り時間がわからないということですが、そもそも何のために知りたいのでしょうか。相手の残り時間を知って、それをどういうふうに使うのか、少し考えてみま…

USIプロトコルのponderhitについて

将棋所のponderについて http://d.hatena.ne.jp/hiyokoshogi/20111027/1319696413 私が思うに、ponderhitが送られてきたときに持ち時間情報が付与されていないのとかどうなんでしょう。自分の持ち時間はgo ponderのときに送られてきているのを保存しておけっ…

合法手じゃない合法手のこと

■ はじめにBonanzaの指し手生成/合法手判定は結構ややこしく、ややこしい原因は将棋用語にいくつかの用語が不足しているからなのですが、ここではその不足している用語を新たに定義しながら、自分自身のためのメモを書き残しておきます。自分用のメモですの…

3駒関係のパラメーターを計算式で割り出す実験

Bonanzaの3駒関係ですが、このパラメーターを棋譜から学習させたこと、すなわちボナメソがコンピューター将棋のブレークスルーであるように言われていますが、まあ、実際にもBonanzaに関してはその通りなのですが、私は、それより3駒関係という評価関数とい…

Bonanzaの駒の価値はどこに書かれているのか その5

それでは、make_moveでいつ駒割が変動するか考えてみましょう。 指し手を大別すると次の4つに分類されます。1. 駒を取らない、成らない移動 2. 駒を取らない、成る移動 3. 駒を取る、成らない移動 4. 駒を取る、成る移動 1.は駒割は変動しません。 2.は、成…

Bonanzaの駒の価値はどこに書かれているのか その4

p_value , p_value_ex , p_value_pmについて一通り説明が終わったところで、これらの変数がどう使われているかについて見ていきましょう。基本的には、盤面初期化(CSA形式のファイルを読み込んだときや、平手盤面で初期化したときなど)に、ini_game関数(debu…

Bonanzaの駒の価値はどこに書かれているのか その3

p_value,p_value_exの解説は終わりまして、今回はp_value_pmという配列についての解説です。だいたい、Cで書かれたプログラムというのは、型がどれもこれもintになっていたりして、型を見ても何をする変数なのかさっぱりわからないのが実情なんですよね。じ…

Bonanzaの駒の価値はどこに書かれているのか その2

p_valueに関しては、そこから派生する2つの配列があります。p_value_exとp_value_pmです。p_value_exは、p_valueの値を2倍したものです。歩を相手に取られたときには、p_value_ex[pawn]分だけ駒割のスコアが変動します。「自分の駒を失った損」+「相手がその…

Bonanzaの駒の価値はどこに書かれているのか その1

Bonanzaで駒割を計算するときの、駒の価値はどこに書かれているのかというのは、簡単なようで少しトリッキーです。今回はこの問題について説明します。 まず、駒自体の価値は、param.hでdefineされています。 #define DPawn 87 /* 174 */ #define DLance 232…

SEEの高速化について

私は最近何をしているかと言うと…正直、あまりコンピューター将棋の開発はやっていないのですが、まあビールを飲みながらテレビで野球観戦をするような程度の軽いノリでソースコードをいじくりまわして、ああだこうだ言いながら鑑賞(?)するのが趣味です。 最…

CSA形式のデータ書き出し部 解説

さて、今回からはCSAファイルの書き出し部について解説していきます。 と言っても、「CSAファイルの書き出し」の記事は誰も期待してませんよね。 CSAファイルの読み込みにしても、棋譜からの学習のときにCSAファイルを読み込むのにいる程度。 LAN対戦はUSIプ…

探索木のvalidatorを書こう!! その7

前回の問題の解答を。 配列、Board[sq]上に先手玉が二つあるとき、1)〜10)のどこに引っかかるでしょうか。 Bonanzaでは、玉のBitboardというのは存在しなくて(BB_HDKのように他の駒と合成されたBitboardは存在する)、先手玉の位置はSQ_BKINGという変数(実体…

探索木のvalidatorを書こう!! その6

今回はexam_bb(debug.cのなかに書かれている)を見ていきます。exam_bbのbbとはBitboardのことで、Bonanzaの保持しているBitboard盤面の正当性をチェックする関数です。 チェックしている項目は以下のものです。 1) 手番が0か1であること 2) 持ち駒の使ってい…

探索木のvalidatorを書こう!! その5

少し話が脱線してしまいました。 だいたいにして、大学の輪講や、勉強会なんかでは1時間ぐらいでやっちゃうようなことをこのブログでは10回ぐらいに細切れに分けてお送りしております。スローペースすぎてすみません。 毎日10分〜15分程度、こうやって少しず…

駒はsignedがいいのかunsignedがいいのか

Bonanzaでは駒を表現する型はs8(singed char)になっています。 さて、問題です。私のように設計した場合、 -(int)UToCap(move) に相当する部分はどう書けるでしょうか?なるべく速いコードを求みます!http://d.hatena.ne.jp/LS3600/20111001 私が書いたコー…

モンテカルロは公平なシミュレーションではないという話

a) 500手以内に4760局、1000手以内に7294局が終局。(今回の結果) b) 500手以内に5789局、1000手以内に8075局が終局。(前回の結果) 終局数が10%程度減りました。明らかに終局しにくくなっています。 終わらないんです 〜 ランダムプレイヤーは賢くなかった(ひ…

探索木のvalidatorを書こう!! その4

あと、is_move_validのソースコード上で // fromが81未満 == 盤面内の駒の移動 if ( from < nsquare ) { // 動かす駒 piece_move = (int)I2PieceMove(move); if ( turn ) { // 後手ならば // 移動元のところにあるのは後手の駒でなければならない if ( BOARD…