我はこれよりBonanzaのソース読み

http://www.geocities.jp/bonanza_shogi/

...に入ります。検索エンジンのアルゴリズムは理論さえ解れば自力で組めますが、評価関数は作者の経験値によりかなり違ってきます。

一から始めるのも一考ですが先人の苦労から学ぶこともまた人類の英知なりです。さらっと読んで6~8割ほど「わかた!!!111!!!1」までたどり着ければ十分ですね。

でも...ソースにほとんどコメントが付いていないので(作者の陰謀か?「勉強しなさい」とのご教示か???)それなりに時間は掛かりますね。それでも無からスタートよりは数ヶ月~1年(もっと?)の節約になるはずです。

最後に...ボナの評価関数を移植するなどの不敬なことはしませんのでよろしくです。

(追記)評価関数を移植する...にはデータ構造等コピーする物が多すぎて全部書き直すことになるので無理な話です。

投稿者: 紫外線 投稿日時: 日, 09/06/2009 - 11:07 categories [ ]

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。

大体わかた 3

...で色々文献を漁った後に(多分、それなりに、もしかして)アイデアが閃いたのですが、いざ実装するのは全然別の次元の話ですのう。はぁ~~~。

ちょいと悩んでいる途中なのでした。

大体わかた 2

あれれ、ボナ・GPSに使用されている評価関数で論文書けるのですか...(GPSの評価関数はボナのそれを更に発展させたものと言われています)

http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/index.php?%B3%AB%C8%AF%A5%E...
http://ci.nii.ac.jp/naid/110006530805

『将棋の評価関数として,駒(所有者,種類,位置を含む)の2項関係を評価するモデルと,棋譜を使った自動的な調整方法を提案する.将棋の評価関数では駒の損得を基本としたうえで,駒の働きや玉の危険度など様々な評価項目が用いられている.しかしそのような駒の損得以外の評価項目は設計が難しく,また自動的な値の調整も困難であった.本稿では,駒の関係という単純な評価項目を提案し,既存の評価項目の多くが駒の関係により表現可能であることを示す.さらに, 棋譜で指された指手と指されなかった手の差分に注目した判別分析を行うことで,重みを自動的に調整することを提案する.実際に評価関数を作成したところ, 形を評価する実験で良い結果が得られた.さらに,対戦でも提案した評価関数を使ったプログラムが有為に勝ち越し,提案手法の有効性が示された.』

...作者中の一人、金子氏はGPS開発チームのメンバーです。

敵の玉を『山の頂上』に例えてゴールへの距離により加点・減点を行う...他の駒にも同様の評価を計算する...ってところですか。(もちろん駒割り等も評価のうちです...『駒の損得を基本としたうえで』ですから)

わかた11111!!!111!!!!

でも我がこれをヒッチハイクするとは限らないのよね~~。

これだけ解れば(演算速度・効率は別として)同等の評価関数を書くのは難しくはありません。ある意味、アルファ・ベータを書くよりラクです。

大体わかた

ボナのソースと...

http://d.hatena.ne.jp/mkomiya/20070401/p4
http://www.graco.c.u-tokyo.ac.jp/~kaneko/papers/gpw03.pdf

...を合わせて読むと大体わかた!!!!111!!111感じ。

今後の予定

>コンピュータ将棋選手権に出場予定

次回の開催まで8ヶ月ありますので「成長次第」...かな?

現在のところ

 ①それなりに使える評価関数
 ②我流の「枝切り」による検索時間の短縮...といっても論文を読んでアイデアを拝借するだけなんですがね。

...を煮詰めているところです。②が理論通り機能すると10手以上サクサクと読めるはずなんですが...

>複数の人が開発に携わっている?

一人で仕事の合間とか、夜中にぐにぐに書いております。この手のソフトは開発途中かなりの迂回徘徊があるので一人で組む方が楽ですね。

無明くん、今後の予定は?

ある程度強くなったらコンピュータ将棋選手権に出場予定はありますか?
熱烈応援しますよ~。

管理人さんの育児日記を読んでいると、ソフトを育てるのも楽じゃない感じですね。
それで複数の人が開発に携わっている?一人でやるのは大変でしょうね。
管理人さんはどうやら一人でやっているようですね。賢いソフトに育て上げてください。

C言語

>英語のコンピュータ用語(?)

Cにかかわらず、ほぼ全部のプログラミング言語は英語圏での開発なので言語中の単語は英語になります。

1970年代に登場したCは当時のコンピュータの現実(メモリーが少ない)に対処するため記述が(上品に言えば)物凄く簡素に出来ています。

>無明君が強くなるといいですね。

ご期待にそえるように努力します。ちょいと閃いたアイデアがあるのでその方向を研究中です。

C言語?

管理人さんはすごいですねぇ~。私などは、英字を読むのも苦痛なのに、英語のコンピュータ用語(?)なのでしょうか、全く理解不能の世界です。

ボナちゃんとは最近対局していませんが、黄金週間の選手権では最近シード権を失うほどに他のPCが強くなったのでしたか?

ボナちゃんは、角を切って金を入手し、飛車&銀取りなどに打ってきて、結局「二枚替えの駒得」を狙っているんですよね。最初は狙いがよくわからずに全く勝てませんでしたが、乱暴されないようにジワジワ指せば時々勝てるようになりました。初期のボナちゃんに30勝200敗くらいですけど・・・

いつも楽しく拝見しています。無明君が強くなるといいですね。

新マシンのベンチマーク

...は8手読みでテストした所。全然変化無し。(弩怒、弩怒、弩怒、弩怒、弩怒、弩怒、弩怒、弩怒!!!)

はて...と考慮後、つい先日「ちょいと楽しましょう」と変更した箇所が足を引っ張っていると判明。作り直して再テスト。

結果、約12秒(ラップトップ)から約5秒(新マシン)に短縮成功。ふぅ~~~。

Vistaのアップデート

...に半日かかりました。(怒)

Vistaは二回インストールするハメになりました。まだ新マシンのベンチマークすら取れていない...ふぅ~。

新しいPC

...やっぱり極小のケースに詰めるのは無理でした。冷却が追いつかず、CPUが過熱気味になるのでケース交換です。(涙) CPUの温度は現在のところ52度程度で安定。ふ~~。

うっ、苦痛

http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E
http://ja.wikipedia.org/wiki/Java

C のソース読むなんて何年ぶりかな?頭痛くなってきた... (「これだから軟弱なJava使いは...」とお叱りの声が聞こえる)

ボナのソースの説明書は

...なぜか英語。その内我が主に読むべき箇所は「brute-force search」...「しらみつぶし検索」の部分

brute-force search

- iterate.c iterative deepning search at root node
- searchr.c alpha-beta search at root node
- search.c alpha-beta search
- next.c obtains next move
- quiesrch.c quiescence search
- evaluate.c static eveluation function
- evaldiff.c easy and fast evaluation function
- swap.c static exchange evaluation
- hash.c transposition table
- thread.c thread-level parallelization
- root.c root move genelation and shallow min-max search
- mate3.c 3-ply mate detection
- ponder.c pondering
- book.c creates and probes opening book
- problem.c auto problem solver
- valid.c examine move validity

うじゃうじゃ有りますが、重要なのは太字の部分だけ...のこりは①自前でもう作成済み(例・searchr.c alpha-beta search at root node - アルファ・ベータ検索)、②理解すれば作れる(例・quiescence search)...なので割愛です。

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。