おまいら最強の将棋プログラムしてみろよ part2 952 :
◆R/rLuLKeEI :03/09/14 22:23
アマ4段を超える―コンピュータ将棋の進歩〈4〉を購入した。 最良優先探索ってコンピュータ将棋では廃れたとばかり思っていたけどそうとも言い切れないんだね。 ただ、メモリの大量消費はどうしようもないらしい。 私の将棋プログラムではメモリ不足になる程時間をかけたことがないんで、そこら辺の対策は実装していない。 もしメモリ不足になったらルート局面で最も有りそうにない手から先の部分木をfreeして、最後の一手になったら探索終了などと漠然と考えている。 それ以前にうさぴょんに全然勝てないんですけど。 係数も収束しない内から評価関数いじくってんのがダメなんかな。
953 :
デフォルトの名無しさん :03/09/14 23:17
>>952 将棋プログラムがC言語で作れるだけでもすごい◎
954 :
◆R/rLuLKeEI :03/09/15 00:24
>>953 ありがとう。でも挫折3回、4度目の挑戦です。
>>952 うさぴょんの40秒に楽々勝てるならそれはもう決勝レベル(w
それはおいておいて、うさぴょんの一番弱いレベルの『2手読み』も
純粋な2手読みじゃないので、全幅探索みたいなプログラムだったら
5手読めないと確実に勝つのは辛いはず。
ところで、メモリ不足の話だけど、うさぴょんはあんまり普通でないので…だけど、
全部の探索木を覚えておくような必要はないんじゃないの?
参考URL:
http://citeseer.nj.nec.com/cachedpage/23521/6 Aske Plaatの MTD(f)の論文のP.6
MemoryEnhanced αβの基本形。
956 :
◆R/rLuLKeEI :03/09/15 03:05
\100将棋を相手に変えよかな。 うさぴょんが普通でないって、β4の場合、何度も対戦してるとリソースが減っていくという現象のことじゃないですよね。 う…、異国の言葉…。明日読みます。 >全部の探索木を覚えておくような必要はないんじゃないの? もしや私は基礎的なところで誤解または混同しているのかも。 コンピュータ将棋の進歩<4>p.100「最良優先探索にはメモリを大量に消費し、メモリを使い尽くした後の一般的な解決方法は知られていないという大問題がある。」ってのは探索木の節点の数が問題だと思っていた。 自分の指した手以下を全部覚えておいて次の自分の手番で相手の指した手以外の手を除いた部分木から再探索をしたいなぁと思って今のところ全部覚えてます。 深さはバラバラですけど。 なにはともあれ論文読んでみてからです。
松下システムソフトの中津と申します
先日、メールサーバテストのためにメールの募集をいたしましたが、
まだまだ足りませんでした(200通ぐらいしかきませんでしたので)
ですので、今回またメールの募集をいたします。
前回も書きましたが、送ってきていただいた方から抽選で
薄礼ですがしたいと思いますので、必ず連絡の取れるアドレスにて送信してください。
それではよろしくお願いします。
中津繁人
[email protected]
958 :
デフォルトの名無しさん :03/09/16 19:40
959 :
デフォルトの名無しさん :03/09/16 22:00
960 :
デフォルトの名無しさん :03/09/16 23:37
>>959 ちゃかしてる場合じゃない。
どんな理論も前提となる状況は限定されていることを
すっかり忘れている(知らない)プログラマは多い。
962 :
デフォルトの名無しさん :03/09/17 00:43
>>961 そうね。
でも、ムーアの法則など社会現象に左右されるものであることに変わりはない。
>>958 -
ねぇ、何にそんなにイライラしてるの?
このスレで何かムーアの法則に関する誤解あったっけ?
自作自演くらい そっとしといてやれ
966 :
デフォルトの名無しさん :03/09/17 06:16
>>965 なんにでも自作自演を疑うものは
自分の背中に傷があるのだろう。
俺は一度たりとも自作自演はしたことがない。
真っ向勝負馬鹿だからだ。
鈴木宗男も涙を流しながら言ってたな。 天地神明に誓って、何一つ悪いことなどしていないと。
968 :
デフォルトの名無しさん :03/09/17 10:50
>>967 だからおまえと一緒にするなって。
悪口は己が鑑って知ってるか?
969 :
◆R/rLuLKeEI :03/09/23 02:33
3秒読みの私の将棋プログラムの係数が収束しつつあった。 負けてはいるが、どうせ負けるならもっとましな負け方しろよと言う基準で教育して来たのに、何か変だ。 上の方で誰かが書いたように王より飛の価値が高くなったが王の価値がほとんど0になってしまった。 更にほとんど攻めない、ただで取れるはずなのに取らない。 評価関数のソースをぼんやり眺めていると、利いている先にある敵の駒の評価をするはずが、移動前の、つまり自分の駒の評価をしていた。 こりゃアカンわ。 で、直してみると激しく攻めるようになったが、読みが浅いので見掛けの駒得に邁進してしまう。 またうんざりする程の時間をかけて次の極大点に向かって係数空間を動き回らせようっと。
最近のプログラムはオブジェクト指向が流行ってますが、 将棋プログラマーのみなさんも、将棋プログラムはオブジェクト指向でやっているのですか? 将棋にはあまりオブジェクト指向は合ってない気がするのですが、、。
971 :
◆R/rLuLKeEI :03/09/25 01:28
>>970 それは多分気のせい。いやわからんけど。
オブジェクト指向でないC言語で将棋プログラムやっていて気付いた点:
・リストやキュー、ツリーの追加/削除などでうっかりミスが相次いだ。
・駒の種類毎に動作を分けるためにswitch文を多用しているが関数が長く見通しが悪くなりがち。
・アルゴリズムの実験では本質的な部分に集中したいが、本質的でない部分のコーディングに時間が食われる。
まあ、無きに等しい設計といき当たりばったりなコーディングと適当なモジュールテストが諸悪の根源かもしれんが、
オブジェクト指向言語の支援があればもっと楽にすっきりとしたコードになりそうな気がする。
プロの将棋プログラマの皆さんはオブジェクト指向言語あるいはオブジェクト指向的な考えでやっているのでしょうか?
972 :
デフォルトの名無しさん :03/09/25 04:18
こんちわ。 かの昔、このスレッドのPart1に投稿していろいろアドバイスを受け、 Part2の頃にうさぴょんさんとの通信対戦で、待ち将棋になった者です。 かれこれ半年ほど開発止めてるんですけど。。 ちなみに私はC++で作成しています。 クラス単位で役割(盤面評価用クラス・再起関数用クラス・利き関連計算クラス・等)を 分けやすかったんで、C++っす。
974 :
(*∠_*) ダカラドーシタ :03/09/27 17:45
975 :
◆R/rLuLKeEI :03/09/28 04:35
今まで定時後の会社のリソースをこっそり使って作っていたのがバレてしまった。 他の社員の志気に関わるというので、仕方無く自宅の少し遅いLinux機に移した。 元々思考部分はLinux上で作っていたから全く問題ないが、それを駆動していたCSA将棋(のsikou.dll)のようなドライバが無いのでJavaで自作中。 ドライバとの通信プロトコルをCSA形式98年版(最新版)の(2)通信条件、(3)ケーブル、コネクタを除いた形式に書き直すのは面倒臭いのとCSA将棋用に作ったsikou.dllと互換性が無くなるので当分しないつもり。 また手間が増えたよ。
やろうとしていることが福将棋に似てきた
>>977 まずいよな。
実はこんな時間に会社でサービス残業やってるので、nice値を最低にして動かしていたりする(恐々)。
明日の始業までに本業の方を治さないと!!
◆R/rLuLKeEIさん。 もう、AI作成止めてしまわれるのですか? 残念PO。
>>979 止めはしないよ。歩みがゆ〜っくりになるだけ。
書き込みペースが2.5倍以上遅くなると思う。
書き込みペースの件は大多数の人はどうでもいいことでしょうけど。
最良優先です。多分。
>>983 次スレ立てご苦労様です。
さて、王の価値がほとんど0なのは正しいような気がしてきた。
というのは、王手をかけた時相手が何もしなければ駒得するという評価をしたくて王の持ち駒としての価値を決めようと思っていた。
が、別の評価にその局面の着手可能数の差(係数1.0固定)があるので、王手をかけると相手の着手可能数がかなり減る。
このことが王の持ち駒としての価値を無にしているような気がする。
985。
でも普通王の価値で+9999とかにしない? その方が便利そうだし。
>>986 ある本には「玉はどの駒とも比較できないので,非常に高い重みを与えておく.」として+9999を表に挙げていた。
まだ、収束していないのでどう転ぶかわからないが、係数の自動調節部が王の価値を十分大きな値に落ち着かせると思っていた。
可能性としては
1.他の評価値との兼ね合い。
2.局所最適解に落ち込んだ。
3.係数の自動調整部のアルゴリズム不良。
4.未知のバグ。
もうちょっと様子見。
係数の自動調整って、係数がちょっと違うAとBを戦わせて、Aが勝ったら Aの係数を残して、それをちょっと乱数でずらしたCとまた戦わせる、 という感じなんでつか?
989 :
◆R/rLuLKeEI :03/10/04 13:32
>>988 乱数は使わない。
a(X):=XをAと戦わせた場合の評価(例えば勝率。千日手or持将棋は0.5勝0.5敗などとする)
とする。明らかに
a(X)=0.5
さて、係数がちょっと違うAとBを戦わせて、Aが勝ったら
a(B)<a(A)
である。ここで、BのAに対する鏡像をCとしてAと戦わせた場合次の3つの場合に分ける。
1)a(C)≦a(B)<a(A)
2)a(B)<a(C)≦a(A)
3)a(B)<a(A)<a(C)
続く
990 :
◆R/rLuLKeEI :03/10/04 14:08
1)a(C)≦a(B)<a(A)の場合 Cは捨てる。AとBの間の点C'とAを戦わせて a(B)<a(C')≦a(A) C'を見つけてBを捨てる(係数の範囲縮小)。 2)a(B)<a(C)≦a(A)の場合 Bを捨てる(係数の範囲変わらず)。 3)a(B)<a(A)<a(C)の場合 Bを捨てる。AのCに対する鏡像をC'としてAと戦わせた時次の3つの場合がある。 3-1)a(C)<a(C')⇒C'を取る(係数の範囲拡大)。 3-2)a(C)>a(C')⇒Cを取る(係数の範囲そのまま)。 3-3)a(C)=a(C')⇒どうしよう(汗)。 というような感じで最弱の係数Bを更新していって互角になったら終了。 係数空間が1次元の場合は上記のように2つの係数が必要であるが、14種の駒の価値を決めるのに15個の係数の組を使う。 最弱の組B、Bのそれ以外の組の重心Gに対する鏡像C、GのCに対する鏡像C'、最強の組Aの強さ比べをして最弱の組を更新していく。 あたかも係数空間の中を居心地の良い所を探して蠢くアメーバのように。 ポリトープ法の類です。
991。
992 :
◆R/rLuLKeEI :03/10/05 14:28
>>989 全然明らかじゃなかった。
すんません。
993。
994 :
デフォルトの名無しさん :03/10/06 15:39
だれかpart3立ててください。
995 :
デフォルトの名無しさん :03/10/06 17:08
995
996 :
デフォルトの名無しさん :03/10/06 17:52
うさぴょんの育ての親さん、part3立ててください
998 :
デフォルトの名無しさん :03/10/06 18:27
>>997 本当だ。新スレがビンビンに勃ってた。申し訳ない。
999 :
デフォルトの名無しさん :03/10/06 18:54
てすと
1000 :
デフォルトの名無しさん :03/10/06 18:58
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。