sakurapyon’s blog

sakurapyon’s blog

2012-04-01から1ヶ月間の記事一覧

mudflap 便利

悩んでたSEEバグがあっさり取れた。mudflap便利だなー。 きっと私が知らないだけで、他にも便利なツールがあるんだろうな。 http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c904.html

初心者向けの弱いソフトってどうすれば作れるんだろう?

pishogiの出来の良い弱さと、駒得sakurapyonの非人間的な弱さを見ると、弱いソフトを作るのは難しいと思う。機械学習しようにも棋譜が入手困難だし、特徴として何を与えていいのか想像もつかない。「幸福な家庭はみな一様に幸福であるが、不幸な家庭はみなそ…

指し手にどんな情報を含めるべきか?

1から作ると自分が納得できるように書けるんだけど、自分でも悩んでいるところが書きにくい。 (れさぴょん流用のときは悩まずに済んだわけで、その意味でもライブラリには価値がありますね) 駒はunsigned 32bit に pack (64bitは止めた) 6..0bitに移動先 13…

わからん…

なんで後者だけ指摘される? $ cat a.c #include <stdio.h> #include <stdint.h> int main() { typedef unsigned int ui_t; typedef unsigned long ul_t; typedef unsigned long long ull_t; ui_t ui=0; ul_t ul=0; ull_t ull=0; printf("%u\n",ui); printf("%lu\n",ul); printf(</stdint.h></stdio.h>…

オーダリング3

オーダリングって考えれば考えるほど悩ましい。 理想的なアルファベータ探索なら探索木の大きさは 2b^(d/2)、mini-max なら b^d 。 全てのノードで初手でβカットが行われている場合はいいんだけど、平均βカット位置が x のときは、どれぐらいになるんだろう…

名前

脱れさぴょん版も、名前は sakurapyon のままです。 sakurapyon-44.komadoku は、れさぴょんベース+評価関数駒得だけ。どれぐらい探索だけでいけるのかの確認用。

bitboard版

脱れさぴょん版は、とりあえず αβ探索が動くようになった。まだ、どこかから非合法手をもってくるんで、要デバッグ。 *動いてるだけ* なので、速度は遅いし、オーダリングしてないから深く読めない。簡単に速くなりそうなところに手を入れて1桁ぐらい速くし…

王手されてるかの確認が遅いんだな

れさぴょん方式だと利きの有無を確認するコストが低いんだけど、bitboard だと割高なのだな… なぜ bonanza が あのように書かれているのか、だんだんわかってきた。 Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds…

CSAプロトコル・テスト関連メモ

CSA標準棋譜ファイル形式 CSA標準棋譜ファイル形式 (V2.2) サーバプロトコル V1.1.3 コンピュータ将棋選手権出場クライアントに対応していただくこと V1.1.4 2009-12-01 - CSA通信プロトコルの諸問題 -Bonanzaソース完全解析ブログ マルチステートメントは使…

角筋

rotated bitboard から索引を求めるシフト量を最適化するレイアウトにすればよかったかも…いまのレイアウトだと2二角は一等地にいるけど、8八角は僻地なんだよな。 角の存在確率の高い行がbitの若いところにくるような配置にすれば、ほーんの少し速度が稼…

Rotated bitboard角筋メモ

基本的な話はちゃんと下記に書かれていますが、自分なりに理解するために書いたメモ(理解できているかは謎だがいちおう動いた) Using Bitboards for Move Generation in Shogi 2009-11-12 - Rotate Bitboards 事始め 1 - 忘れた頃に、また忘れる 2009-11-13…

はえええ

合法手が生成できるだけの版が出来たので、指し手生成祭り局面を試したら1M回/秒ぐらい出るようだ。駒打ち展開してないから駒打ちが50%ぐらい喰ってるし、実行時間をあまり考えずに素直に書いてるから、いじれば倍ぐらいになる……といいなあ? その前に王手回…

マジ難しい

まだ変だなあ。辺にいる時の利きがおかしいのか。 角に至っては原理はわかるがどう書いていいかわからん。 * 龍の利きチェック 後手:white 後手の持駒: 角二 金四 銀四 桂四 香四 9 8 7 6 5 4 3 2 1 +---------------------------+ | ・ 龍 ・ ・…

覚えたこと

K&Rの時代とは大違いなのだな。最初に使ったのは small-C だったか BDS-C だったか… LSI-Cも速くて良かった。 #pragma once これは楽ちん if条件式の中での変数宣言 if(int n=foo()){ // n!=0 } // ↑これはできるのに、 if((int n=foo())>1){ // n>1 } // ↑…

弱いコンピュータ将棋「こまお」

2012-04-18 - 弱いコンピュータ将棋「こまお」について - IHARA Note たぶん、pishogiよりも弱い。pishogiも良く出来ているのでブラウザ版があるといいのになあ。初心者に「floodgateに来て対戦してください」とはとても言えない。

Killer Moves 4 / 取る手もKillerに登録

金子さんいわく - 毎日がEveryDay! そ、そうかー。言われてみれば…です。ということで、こんな風にしてみた。 MVV/LVAが負の場合と、取らない・成らないキラー手の順番が悩みどころ。 取る手・成る手のうち MVV/LVA 評価が負のものも Killerに登録する オー…

駒打ちルーチン

たぶん、指し手がそこそこ速いのは姑息な展開が利いているのだと思います。こんな感じ。 桂香歩打ちはあまりいじってないです。 class Te { public: uint64 T; inline bool IsNull() { return (T&0x0ffff)==0; } inline Te() {}; inline Te(unsigned char f,…

指し手の速度だけなら

指し手の速度だけならそこそこ出てる気がするなあ。なんで深く読めないんだろ?

サーバーの速度 / 指し手生成速度

sakurapyonの居候しているサーバーは /proc/cpuinfo によると Intel(R) Xeon(R) E5645, 2.4GHz, cache 4MB というものらしいんだけど、これって他のマシンに比べてどれだけ速い(遅い)んだろうか?世の中にはスーパーπランキングというのがあって、CPUごとのラ…

特別なコードを書かずに稲庭将棋に勝つにはどうしたらいいんだろう?

sakuraypon は稲庭対策用の定跡を持っているんだけど、pinaniwa さんは微妙に InaniwaShogi_Atom-D510_1cと 違う手を指してくるので定跡を外されて時間切れで負けてしまう。千日手になるならまだしも時間切れになるのがなー。sakurapyon には千日手回避は入…

pinaniwaさん

Player Statistics pishogiの稲庭特化バージョンだろうか? 「pishogiの戦型」のように自分と相手の囲い名称を送ってくるようだ。囲いが破れたら本気出すバージョンとかもあると楽しいかもなあ。

Killer Moves 3

Killer Moveって、tacticalじゃない手(取らない・成らない手)だけに使うと思ってて そのように実装しているんだけど、ふと bonanza のソースを見るとtactical move でも使ってる。取る手成る手ならその手のSEEの値を使って、オーダリングしてるんだな。実に…

盤面構造・駒情報の持ち方を考える

さくらのvpsに新プラン(2GB 1470円/月)ができたおかげで居候の使えるメモリも増やせるようになった。今までは512MBに全てを納める関係上、sakurapyonの置換表は192MBだしKPPの搭載はまず無理。KKPで高速に回す、という手法を取らざるを得ないのでKKP+MVV/LVA…

Minimal Perfect Hashing

Perfect Hashing gcc -m64 でコンパイルするとうまくいかない。gcc -m32 だと動く。生成されたtab[]がでかい。 生成された phash.c も -m32 じゃないとうまく動かなかったりする。 $ head allmoves.txt 00110012 00120012 00110013 00120013 (中略) $ ./pe…

好手

プログラムを書いていると「好手だから評価値が高くてbeta cutされる」が「beta cutされるのが好手」と、逆転した発想になってることがある。いいのかそれで。

指し手は細かく分類した方がいいのか?

bonanzaのHistoryは ハッシュを使って細かく管理されているようなんだけど、細かく管理した方が本当にいいのかどうかは実に悩ましい。chessprogramming - Countermove Heuristicや、chessprogramming - History Heuristicがfrom,toだけなのは、チェスでは駒…

phashは完全ハッシュのことらしい

なるほど。あの謎の数値はそれかー。 Hashing (4)-Radium Software Development 問題はキーとして与える種別をどうするか。仮に全ての指し手を識別するとしたら、駒種x移動元x移動先x成りの有無をテーブル化して、それを食わせればいいのかな。AddMovesを駒…

カウンター手

私がカウンター手と呼んでいる手法は、世間では別の名前で呼ばれているらしい。CiNii 論文 - コンピュータ将棋におけるキラー手やJAIST Repository: コンピュータ将棋における高精度キラーヒューリスティックの研究では 「premovebest」、shogi programming …

定跡選択と相性

sakurapyonはKKPを使っているせいか、あまり上手に駒を連携させることができない。矢倉には入城しないし、美濃は自分から崩してしまう。穴熊は好きみたいだ。評価関数が軽いおかげで、同じぐらいのレートの相手よりは深く読めることが多いので、終盤の切りあ…

Extended Null Move Reduction

Extended Null Move Reductionという手法があるらしい。確かに探索ノード数は削減されるけど、読みぬけする感じがある。 Abstract - SpringerLink chessprogramming - Null Move Reductions Adaptive Null-Move Pruning は、現局面の評価値がbeta+marginより…