将棋・チェスのプログラムを作っているのですが、自分が作ったもの
では3手先くらいしか先読みができません。市販の森田将棋や東大将棋
は10手ぐらい先読みをするのに・・・。この差はなんなんでしょうか。
サイエンス社の『コンピュータチェス』『コンピュータ将棋』等を読ん
でみるとハッシュ・リンク・チェインなんて言葉がたくさん出てくるの
ですが自分には理解できません。人のよいかたぜひ教えてくださいませ。
>>1 コードを UP してくれヨ!
わしが判断したる。(*´Д`)
その前にその用語を理解できない程度のプログラミング能力なら最初から無理。
ハッシュ・リンク・チェインも分からずに作った
3手先を読むプログラムって・・・・・・・
巨大ifとか、巨大switch/caseの塊のような気がするのは気のせい・・・・・・・
気のせいじゃないと思われ。
むしろ3手先まで頑張って作ったと誉めてあげたい。
対局開始から3手分の定石を入力しただけだったりして。
>4
まったくそのとおり。1次元配列ba[256]をチェス盤に見立てて
ba[x*16+y]=PAWN
などとやっていたのですが、やっぱりちがうの?
2次元配列でも使えよ。
ネット上には、ハッシュやらα-β法などを
解説したページがあるから、そこを探れ!
まぁ、その前に、コードUPキボン。
コードUPをしたいのですが、どのようにすればいいのでしょうか。
「レスが長すぎます。」という表示がでるのですが。
>>1 ノウハウの差。彼らは十年以上将棋のアルゴリズムを考えてるんだからね。
社内でもアルゴリズムは企業秘密扱い。
>>10 東大将棋とか、10年も歴史ないと思うが。
いきなり難しいのを作るのはやめて
オセロくらいからにしたらどーよ?
オセロぐらいならわかります。既にチェッカー、ラスカー(チェッカーの変形)
をC言語で先読みするものを作ったのですが。
どうも配列上に駒を置くのではなく、すべての駒に情報を書き込むというやり方
をみなさんなさっているみたいですね。
15 :
デフォルトの名無しさん:01/11/23 21:37
3手先を読むのと10手先を読むのとでは、何が違う?
時間とメモリは喰うと思うが、コードは一緒でループカウントが
違うだけじゃないの?
それとも、時間を喰う事が話題になってる?
将棋ゲームを作った事の無い者だが、純粋な疑問。
>>14 そのやり方が良いの?私は配列上に駒を置くやり方
しか想像出来ないんだけど、どんな利点があるんだろう?
聞いてばかりで悪いが、
「3手先を読む」とは、3手先の何を読むの?
駒を取る/取られるケース?それとも詰むかどうか?
『コンピュータチェス』や『コンピュータ将棋』に
出てるんだろうけど、気になって眠れない。
18 :
デフォルトの名無しさん:01/11/23 22:09
ってヒロコ、15は勘違いしてない?
>>16 とりあえず、評価関数については理解してる?
>>15 勘違いというか、3手先と10手先とで必要な時間、メモリ、そのたの
リソース消費量を議論に入れていないから、議論にならない。
「すべての可能性を考えることができれば勝敗は戦う前から決まります」
といっている以上の意味はない。
>>15 説明するのが面倒なのでこの2行で理解してくれ。
nの3乗
nの10乗
1よ、そんなに難しい事を考えるな。
初めて作るんだったら、自分が理解できていない知識を使うより
使い慣れた方法で、少しずつノウハウを溜め込んでいけ。
やっぱり最初は、オセロからだ。オセロだって、奥が深いぞ。
将棋同様に、序盤は定跡重視、中盤は形重視、終盤は読みきりが必要。
ここで、オセロを完成させてから将棋で良いじゃないか。
>23
>1です。あちらは高レベル、こちらは低レベルということで・・・。
struct KOMA {
short x,y,z,k,j,pin,dum1,dum2
struct KOMA *next,*prev}
なにかこういう構造体を使うそうですが。
こっから先がわからない・・・。
>>1 将棋やチェスのプログラム作る前に、もっと基本的なことを勉強しなさい。
とりあえず、(一般的な)アルゴズムの本買ってきて読みなさい。
技術評論社『C言語によるはじめてのアルゴリズム入門』河西朝雄とYSSの作者
山下宏さんのサイトを見てなんとなく解ってきました。今現在改良中です。
ちょっと質問、if else、case select、よりも条件演算子を使
ったほうが早くなるのですか?
case selectってなんだ?
30 :
デフォルトの名無しさん:01/11/28 22:48
>>28 状況による。
でも、たいていの場合、気にするほど差はでない。
>>29 case selectって、VBにあったような…。
1よ、C言語なのか?
32 :
デフォルトの名無しさん:01/11/29 01:08
アルゴリズムはlispでやれ
200±MHz〜GHz級のcpuを使っているとすると、3手という事は、
縦型の全件検索でやっていそうですね。たぶん。
→深さを区切って再帰で手をすべて展開。末端で評価してmin-max。
まずは単純なαβ法を適用しましょう。それだけで4手まで行けると思います。
次は反復深化を適用しましょう。これでもう一手伸びると思います。
まずはこのあたりが基本だと思います。
さて、その後は代表的な項目にはこんな物があります。(他にもありますが)
ここらから将棋の知識が入ってくるので作る人も大変です。
1.枝刈り。意味のある手だけ深く読む。意味のある手って何だろう?
2.末端での評価関数の高精度化。相手の効きのある自分の大駒は点が低いとか、。
最近の、10手も(ときには20手を超える詰みを)読む
将棋プログラム達ですが、全部て枝刈りが実装されていますよ。
では、こちら
http://www.computer-shogi.org/ で
来年の5月に会いましょう(^^)
34 :
デフォルトの名無しさん:01/11/29 04:21
>>33 に漏れのお気に入りのAAを紹介する。
∧ ∧ ┌─────────
( ・ω・) < ぼくファ〜ファ
\ < └───/|────
\.\______//
\ / ←ファ〜ファ
∪∪ ̄∪∪
36 :
デフォルトの名無しさん:01/12/10 08:02
この手の本ってあまり見ませんが
何か良い本はあるでしょうか?
「コンピュータ将棋の進歩」シリーズ(part1〜3)でどうでしょ?
共立出版です。
39 :
デフォルトの名無しさん:
∧ ∧ ┌─────────
( ・ω・) < ぼくファ〜ファ
\ < └───/|────
\.\______//
\ / ←ファ〜ファ
∪∪ ̄∪∪