おまいら最強の将棋プログラムしてみろよ Part3

1 名前:デフォルトの名無しさん :03/10/01 13:54
できたら沖ノ鳥島2泊3日ツアーへご招待。

前スレ
おまいら最強の将棋プログラムしてみろよ part2
http://pc2.2ch.net/test/read.cgi/tech/1043246252/l50
おまえら最強の将棋プログラムしてみろよ!!
http://pc2.2ch.net/tech/kako/1004/10043/1004395614.html
関連スレは>>1-6ぐらい

2 名前:デフォルトの名無しさん :03/10/01 13:56
MTD(F)
http://www.cs.vu.nl/~aske/mtdf.html
ゲーム木の探索問題
http://tt.sakura.ne.jp/~suzu/search_problem/index.html
反復深化
http://tt.sakura.ne.jp/~suzu/search_problem/i_deepening.html
最良優先探索
http://kyu.pobox.ne.jp/softcomputing/ai/ai3.html

遷移確率、激指
http://www.logos.t.u-tokyo.ac.jp/~gekisashi/algorithm/abstract.html
GNU shogi
http://www.cs.caltech.edu/~mvanier/hacking/gnushogi/gnushogi.html
福将棋
http://touch-mi.hp.infoseek.co.jp/csa2001/prog.htm

3 名前:デフォルトの名無しさん :03/10/01 13:57
お仲間スレ
コンピューター将棋スレッド11
http://game.2ch.net/test/read.cgi/bgame/1064575087/l50
おまいら最強の麻雀プログラムしてみろよ!!
http://pc2.2ch.net/test/read.cgi/tech/1048299493/l50
俺主催囲碁プログラミングコンテスト
http://pc2.2ch.net/test/read.cgi/tech/1024024666/l50
prologでオセロ
http://pc2.2ch.net/test/read.cgi/tech/1028644157/l50

4 名前:デフォルトの名無しさん :03/10/02 08:41
「飛行機墜落編」

副長:機長!!エンジントラブル発生!!もうだめぽ!
機長:湖ハケーン!あそこに降臨しる!
乗客:何が起こってるんですか!?教えてくらはい。
機長:教えてチャソハケーン!晒すぞゴルァ!
副長:教えてチャソ逝って良しっ!!
スチュワーデス:厨房はひっこんでろ!
客A:(((( ;゚Д゚)))ガクガクブルブル
機長:トラブルをトラブルであると見抜けないと(機長を務めるのは)難しい。
副長:いまさら何ほざいてるんですかゴルァ。ちょっと機長!高度sage過ぎ!
機長:sageてるんじゃなくてsagaってんだよ!むしろ強制sage!?
客B:age!! age---!!!
客C:くそう、こんなことならもっと糞スレたてておくべきだった・・・。
客D:ジサク(・∀・)The End
客E:地面キタ━━━━(´Д`;)━━━━!!!!!

   ゴゴゴゴゴゴゴゴ・・・・

・・・死ゲットズサー

5 名前:デフォルトの名無しさん :03/10/05 17:27
オセロならつくったのに・・・

6 名前:デフォルトの名無しさん :03/10/06 18:22
<丶`∀´>ニダ

7 名前: ◆R/rLuLKeEI :03/10/07 09:00
>>5
最強ですか?

8 名前:デフォルトの名無しさん :03/10/07 09:16
最強の脱衣将棋?

9 名前: ◆R/rLuLKeEI :03/10/07 14:28
最強のブルゲ的脱衣将棋?

私のプログラムをプロファイルしたら評価関数関連が非常に時間を食っていた。
本業が落ち着いたら等価な高速版に変える予定。当分先の話。

10 名前:デフォルトの名無しさん :03/10/10 20:05
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=102
のプログラムを見てください。Cです。オセロの駒の枚数を意識しています。
少しすれ違いかもしれませんが、全く違うとも言えないのでここで質問します。
乱数なので説明が難しいですが、先手、後手お互いが共に最善手を指しつつ、
ポイントが一番高くなる物がある1手目が、次の一手の最善手になると思いますが、
それの選び方が分かりません。ただ、得点の高いのを選ぶと、先手が最善手、
後手は最悪手を指した物になってしまいます。また、先手が1手目に最高点を
選ばなかったとしても、それによって後で高い得点を選べるようになり、
結果最終的に最高点を出せたりします。どう考えれば良いのでしょう。

11 名前: ◆R/rLuLKeEI :03/10/11 01:03
Cのプログラムを見ました。そのままだと大変見づらいのでちょっと改善。
 printf("(%3d) \n", n);
この配列全体が4手目までのゲーム木を完全に示しているようですね。私の実行環境では最初の部分が次のように出ました。
12 -5 7 -9( 5)
12 -5 7-16( -2)
12 -5 7 0( 14)
12 -5 9-13( 3)
12 -5 9-15( 1)
12 -5 9 -1( 15)
12 -5 15 -8( 14)
12 -5 15-15( 7)
12 -5 15 0( 22)
レスが少し長くなりますが、ご勘弁ください。考え方としては最もシンプルな最大最小戦略を示します。今、
12 -5 7
と手を進めると後手番ですので-9,-16,0の内から最小値を選んで3手目の値とします。つまり、
12 -5-16 -9( 5)
12 -5-16-16( -2)
12 -5-16 0( 14)
とします。

12 名前: ◆R/rLuLKeEI :03/10/11 01:10
(続き)同様に
12 -5 9
12 -5 15
の場合もそれぞれ最小値を選んで
12 -5-15-13( 3)
12 -5-15-15( 1)
12 -5-15 -1( 15)
12 -5-15 -8( 14)
12 -5-15-15( 7)
12 -5-15 0( 22)
とします。次に
12 -5
と手を進めた場合、先手番ですので-16,-15,-15から最大値を選んで2手目の値とします。
12-15-16 -9( 5)
12-15-16-16( -2)
12-15-16 0( 14)
12-15-15-13( 3)
12-15-15-15( 1)
12-15-15 -1( 15)
12-15-15 -8( 14)
12-15-15-15( 7)
12-15-15 0( 22)
以下、1手目の値は最小値を、0手目(?)は最大値を選ぶことで結果最終的に最高点を出せたりします。でいいですよね?皆さん。

13 名前:10 :03/10/11 06:17
>>11-12
お答えありがとうございました。分かりました。
かぶっているのを得点で削って行き、残ったのの中で最高点のが最善手と。
プログラムはこんな感じです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=103

14 名前: ◆R/rLuLKeEI :03/10/11 11:37
>>13
乱数の種を引数で与えていつでも再現できるようにした。
 srand(atoi(argv[1]));
次のようになった。
[ 6][ 7]のところを見てほしい。
最小値9を取るので[ 6]を採用するはずだが、[ 7]がとられているっぽい。
何故に?
# ./main 10
[ 0] 15-18 15 -4( 8)
[ 1] 15-18 15 -1( 11)
[ 2] 15-18 11 0( 8)
[ 3] 15-18 11-18(-10)
[ 4] 15 -5 7-11( 6)
[ 5] 15 -5 7 -8( 9)
[ 6] 15 -5 7 -8( 9)
[ 7] 15 -5 7 -4( 13)
(続く)

15 名前: ◆R/rLuLKeEI :03/10/11 11:38
(続き)
[ 8] 8-18 3-15(-22)
[ 9] 8-18 3 -1( -8)
[10] 8-18 13 -2( 1)
[11] 8-18 13 -8( -5)
[12] 8-17 8-12(-13)
[13] 8-17 8 -3( -4)
[14] 8-17 13 -8( -4)
[15] 8-17 13 -6( -2)

[ 0][ 1][ 2][ 3][ 4][ 5][ ][ 7][ 8][ 9][10][11][12][13][14][15]
[ 0][ ][ ][ 3][ 4][ ][ ][ ][ 8][ ][ ][11][12][ ][14][ ]
[ 0][ ][ ][ ][ 4][ ][ ][ ][ ][ ][ ][11][ ][ ][14][ ]
[ ][ ][ ][ ][ 4][ ][ ][ ][ ][ ][ ][11][ ][ ][ ][ ]

最善手は[ 4]
#

16 名前:デフォルトの名無しさん :03/10/11 13:14
1手目、2手目、3手目はすべて0点にして4手目だけの点で動かせば?

17 名前:10 :03/10/11 14:19
>>14-15
自分と表示内容が違うなー。
ただ、1回目の削りは、全ての数値が同じ時に削っています。
1回目では、[5][6]のどちらかのみを削っています。
16種類に対して、0~19だからちょくちょく全かぶりが出てきます。
2回目では左から3つの数値が同じ時に削り、3回目では2つの数値、
4回目では1つの数値が同じ時に削ります。残る個数は≒16→8→4→2となります。
BUNKI 3、FUKASA 6だと、729→243→81→27→9→3となります。

>>16
もっとくわしくおながいします。

18 名前: ◆R/rLuLKeEI :03/10/11 15:13
>>17
[5][6]を比較しているなら納得。
違和感は残るがそれを上手く表現できない。
乱数の種が同じでも擬似乱数の生成規則が異なるのでしょう。
ANSI Cでも処理系定義ですし。
なお、当方の環境はLinux 2.4.2-2 i686です。

19 名前:10 :03/10/11 16:30
>>18
>違和感は残るがそれを上手く表現できない。
何でしょうね。自分も少しあります。
プログラムの内容が点数分岐の為だけのと言うのもあるかもしれません。
早くオセロの方に組み込んで試してみたいですが、
難しくて時間が掛かってしまいそうです。

>乱数の種が同じでも擬似乱数の生成規則が異なるのでしょう。
>ANSI Cでも処理系定義ですし。
なるほど、そうでしたか。なお当方のは98、VC6です。

20 名前: ◆R/rLuLKeEI :03/10/11 18:28
 #define FUKASA 2 //読む深さ
 #define KIND 4 //手の種類 BUNKIのFUKASA条
として、乱数ではなく外部からデータを与えるようにした。
 //手の生成
 for (k = 0; k < KIND; k++) {
  scanf("%d\t%d\n", &(te[k].point[0]), &(te[k].point[1]));
 }
# cat data
10 -21
10 -20
10 -16
10 -20
# ./main 2 < data
[ 0] 10-21(-11)
[ 1] 10-20(-10)
[ 2] 10-16( -6)
[ 3] 10-20(-10)

[ 0][ 1][ 2][ ]
[ 0][ ][ ][ ]

最善手は[ 0]
#
最善手は[ 3]だと思う。

21 名前:10 :03/10/11 19:15
>>20
結果通り[0]だと思います。先手は高値にしたく、後手は逆。
例だと先手の指しては1種類しかなく、後手は4種類ある。
先手が置いて10枚得た後、後手が何枚得るかを決める。
当然21枚得られる[0]が一番得だから、[0]が最善手だと思います。

22 名前:10 :03/10/11 20:20
>>16
なんとなく言っている意味が分かりました。
オセロだとスピードとか容量とか気にしないといけないから、
いろいろ考えていたのですが、その時にピンときました。
うまく説明できませんが。

23 名前: ◆R/rLuLKeEI :03/10/11 20:22
>>21
正しくないことを示す効果的な方法は反例を見つけることですが、私は反例を見つけることが出来ませんでした。
解説ありがとう御座いました。多分正しいのでしょう。事実上の敗北宣言です。

24 名前:10 :03/10/11 21:18
>>23
敗北宣言って・・。こちらが教えてもらった側なのですから。
いろいろ例を挙げてもらう事で理解も深まりますし、感謝しています。

25 名前:16 :03/10/11 21:36
将棋の評価の類推で言ったまでで、特に考えての発言ではありません。
途中経過はどうであれ、4手目終わった状態での駒数が問題になると考えました。
それを3手目、2手目の評価としてあげていくわけですから。
全滅した場合は別ですが。


26 名前: ◆R/rLuLKeEI :03/10/11 21:39
>>24
>>19
>>違和感は残るがそれを上手く表現できない。
>何でしょうね。自分も少しあります。
未だにこれが引っかかるんで反例を挙げたくてしょうがない。
でも…自分の力の無さが痛い。

16さんは最大最小戦略を愚直にやるのであれば
 ttp://tt.sakura.ne.jp/~suzu/search_problem/minimax.html
の「Minimax 法の手順」の項にある図のように末端の値だけで十分だと言いたいに違いない。
10さんはpointの値は枝刈りと他のノードとの区別に使っているのですよね。


27 名前:10 :03/10/11 22:09
>16さんは最大最小戦略を愚直にやるのであれば 〜
>末端の値だけで十分だと言いたいに違いない。
>>22でなんとなく理解したという意味は、オセロだと手の種類が10の8条とかに
なるから、うpしたプログラムのやり方だと容量不足になる。だから小さく絞って
調べる必要があり、その時関係ない部分がいっぱいあるから、その部分は使わずに
0で良いという意味と受け取りました。

>10さんはpointの値は枝刈りと他のノードとの区別に使っているのですよね。
枝刈りとか良く分かりませんが、将棋で言う関係ない所に駒を打つ手は考えない
見たいな物ですよね。そういうのはたぶん無く、駒がたくさん取れる手、
殆ど取れない手を区別せずに全て調べます。

28 名前: ◆R/rLuLKeEI :03/10/11 22:30
うpされたプログラムが今後どんな風に化けるか楽しみです。

29 名前:10 :03/10/11 23:41
>>28
期待されても困りますが・・。でも何とか形にしたいです。

30 名前: ◆R/rLuLKeEI :03/10/12 01:03
もう知っていると思うが参考URL(広島市立大学 情報科学部 知能情報システム工学科 情報認識学講座なんちゃって鶯教(AI)-鶯教-コンピュータ・リバーシ講座)
 ttp://www.cv.its.hiroshima-cu.ac.jp/~kazutaka/othello/index.html
私は持ってないが『リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装』ていう本がある。
Amazonで「和書」「リバーシ」を探すと出てくる。

31 名前:10 :03/10/12 07:45
>>30
知りませんでした。オセロを作り始めたのは質問する1日前でしたし。
PLAYER同士で遊べるようになったのでCONと対戦させるにはどうすれば良いかと
思い質問しました。見てみると凄く面白いです。ただ、少しオセロをなめて
いました。とにかく枚数を稼ぎつつ、端ならより良いと言う評価関数を考えて
いたのですが、終盤で枚数的な大逆転を起こせるので、その評価関数はまったく
意味を持たない事が分かりました。完成した暁には、作ろうと思っていた初心者
プログラム勉強サイトのネタの1つに加えようと思っていたのですが、数日で手に
終えない代物と分かったので、オセロはあきらめようと思います。ただ、せっかく
点数の計算方法が少し身についたので、それを生かした何かを作りたいと思います。

32 名前:10 :03/10/12 09:03
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=105
以下のような順序で計算するプログラムです。コメントは自分もよく理解して
いない為付いていませんが、実行するとなんとなく分かると思います。
何かの役に立つような気がするのですが、頭がこんがらがってて分かりません。
_____________40
____13________26________39
_4__8__12__17__21__25__30__34__38
12356791011141516181920222324272829313233353637

33 名前:デフォルトの名無しさん :03/10/12 13:20
>>10
思いつきで恐縮だけど。

逆オセロを作ってみたら?
オセロと同じルールで駒を置いていき、獲得枚数が少ない方が勝ちってことで。
つまり、相手の手番で相手に自分の駒を全部取らせることに成功したら無条件勝利。
これなら逆転が少なくなるので割りと単純な点数評価でいけると思う。
#思うだけ。

34 名前: ◆R/rLuLKeEI :03/10/12 14:01
しまった、URL出すの早すぎたな。
でも、プログラム技術の向上に手頃な題材なので気が向いたら再挑戦してみるのが吉です。
プログラム自体は基本的なデータ構造とアルゴリズムの組合せと言えなくも無いし。
どちらかというと、ちょっとした思いつきと根気と諦めないこととが肝要だと思う。
かく言う私は三度諦めて四度目の挑戦なんですけどね。

10さんの書き込みに触発されてしばらく触っていなかった将棋のプログラムの評価関数の高速化をしようと見ていたらバグを見つけた。
局面の評価をするつもりが兄弟局面のどれかの評価をしてその局面の評価値にしていた。
何ヶ月もこねくり回していて気が付かなかった。
道理で弱いわけだ。
王の価値がほとんど0らしいという結果も意味が無くなってしまった。

というようにバグ取りの楽しみもあるので色んな何かをたくさん作って再挑戦を期待。

35 名前:10 :03/10/12 19:42
>>33
面白い案ですね。割りと簡単な点数評価と言うのにまだ実感が無いですが、単純に
枚数で評価するやり方の予定だったので、もしそうなら良いのが出来そうです。

>>34
将棋は昔少し作った事があったのですが、定跡に頼るのが嫌で、自分の棋風見たく
力将棋を出来るのを目指していたのですが、挫折しました。
1手毎を4種にしぼって、16手ぐらい読むのを考えていました。

36 名前: ◆R/rLuLKeEI :03/10/14 04:53
>>35
私も定跡に頼るのはなんかなぁ、と思ってる。
ただ、力将棋というのもなんかなぁとも思ってる。
システムが自分の価値観=評価関数に従って、手筋や定跡のデータベースを更新し、
学習から新しい特徴を評価関数に組み入れて調整し…そんなのが出来たらいいな。
どうやったらいいのかさっぱりわからんが。

高速化検討中:評価関数を(着手可能数の差+駒の損得)→(駒の損得)とすると初手で1秒間に展開した局面の数が29倍になった。

37 名前:デフォルトの名無しさん :03/10/14 05:11
>>36
着手可能数って評価に入れる意味あります?特に序盤で。
持ち駒を打てなくなったり、角道を止める手を指せなくなったりしません?

38 名前:10 :03/10/14 07:58
オセロ製作再開。今は単純に枚数を得やすい所に置くようにしている。
端、角は加点する。半分ぐらい埋まると手を見つけてくれなくなったり、
4手読みだと置けない所に置いたりとバグ満載です。

>>36
>システムが自分の価値観
自分のだけでなくて、プロ騎士の棋風も選べると面白いかも。
羽生なら終盤でマジックって、丸山は受け中心で指してきたり。

>どうやったらいいのかさっぱりわからんが。
ここまで来ると人工知能とかに入って来そう。

>高速化検討中:評価関数を(着手可能数の差+駒の損得)→(駒の損得)とすると
>初手で1秒間に展開した局面の数が29倍になった。
難しくてわかんないス。でも、29倍ってとんでもない数字なんじゃ・・。

39 名前: ◆R/rLuLKeEI :03/10/14 11:16
>>37
>着手可能数って評価に入れる意味あります?特に序盤で。
さあ?よーわからん。

>持ち駒を打てなくなったり、角道を止める手を指せなくなったりしません?
確かに着手可能数だけでやると持ち駒は打ちにくくなりました。
但し、同じ種類の駒が2つ以上あるとむしろ指した方が着手可能数が多くなるので全く指さなったり、駒コレクターになったりはしませんでした。
同様に自分とこの角道を止める手は打ちませんね。
代りに、次に取れそうな駒は全て取ったことにするようにしています。
これだと両取りはより高く評価されるのでいい感じです。
それと着手可能数の係数が他の係数と比べても極端に小さくはなってないので多少成りとも意味があるのかもしれないです。

40 名前:デフォルトの名無しさん :03/10/15 14:56
今日コンピューター将棋の進歩4を読み終えました。
それで、皆さんに質問なのですが、長井歩さんの書かれてた「df-pnアルゴリズム」に関する論文があるサイトをご存知の方はいないでしょうか?
がんばってみたけど、
http://www.ipsj.or.jp/members/Journal/Jpn/4306/article020.html
しか見つかりませんでした。
ちなみに、論文のタイトルは
「A. Nagai and H. Imai: Proof for the Equivalence Between Some Best-First Algorithms and Depth-First Algorithms for AND/OR Trees. Proceedings of the Korea-Japan Joint Workshop on Algorithms and Computation, 1999, pp.163-170. 」
です。

ご存知の方がいらっしゃったら、よろしくお願いします。

41 名前:うさぴょんの育ての親 :03/10/15 19:38
>>40
Webサイトは残念ながら知りませんが、df-pnアルゴリズムに関する論文で最も
詳しいものはコンピュータ将棋の進歩4に掲載されたものと同じものだったと
記憶しています。
…でも、元の論文をどこで見たのか記憶が曖昧(^^;


42 名前:うさぴょんの育ての親 :03/10/15 19:49
僕が読んだのはこれですね。

df-pnアルゴリズムの詰将棋を解くプログラムへの応用

http://www.ipsj.or.jp/members//Journal/Jpn/4306/article020.html

情報処理学会の会員なら、中身も読めます(^^;

大学の図書館などなら、情報処理学会の論文誌のVol.43 No.06を探せば読めるかと
思いますが、この内容はそのままコンピュータ将棋の進歩4に載っています。


43 名前: ◆R/rLuLKeEI :03/10/15 21:11
>>38
>自分のだけでなくて、プロ騎士の棋風も選べると面白いかも。
 評価関数:=2*羽生+1*丸山
などと混合したり…。中途半端な棋風になりそう。

>ここまで来ると人工知能とかに入って来そう。
問題解決のための探索は既に人工知能の領域なんですけど。

>29倍ってとんでもない数字なんじゃ・・。
とんでもないです数字です。
如何に手を抜いてきたかが良く分かります。

44 名前:デフォルトの名無しさん :03/10/16 00:30
ソフトの中の人も大変だな。

45 名前:40 :03/10/16 17:55
>>うさぴょんの育ての親さん
情報処理学会の会員だったら苦労しないんですよぅ。(;´д⊂

46 名前:デフォルトの名無しさん :03/10/16 18:11
おらもdf-pnの詳しい解説がある論文探してるんだけど、>>40のやつか
長井歩さんのマスター論文読まないといけないみたい。
コンピュータ将棋の進歩4に掲載されているプログラムリストだけだと難しいでつ・・・

47 名前:40 :03/10/16 18:17
>>うさぴょんの育ての親さん
↑、失礼しました。
つい勢いで・・・

レス、ありがとうございます。
とりあえず、
http://www.ipsj.or.jp/members//Journal/Jpn/4306/article020.html
が「コンピュータ将棋の進歩4」に載っている事はわかるました。
しかし、この論文では、df-pnに関する説明が、「詳しくは文献を参照されたい」の一言で終わってしまっているんです(「4」の102ページ)
その参照するべき文献として、上に書いた英語の論文があげられていたので、その所在を聞きました。

48 名前:うさぴょんの育ての親 :03/10/16 22:11
>>47
その論文の所在は分からないんだけど、PowerPointのファイルが読めるなら、

http://www.cs.ualberta.ca/~games/go/notes/020717/GoMeeting2.ppt

は参考になるはず。

しかし、上記のPowerPointでも触れているのだが、背尾さんのアルゴリズムが
分かっていれば、df-pnのプログラムリストがあれば十分df-pnを理解可能だと
思うのだが…。
背尾さんのアルゴリズムがまだ分からないのなら、そちらから理解した方が早いと思う。


49 名前:40 :03/10/17 18:29
 ∧||∧   
(  ⌒ ヽ PowerPointもありません。
 ∪  ノ
  ∪∪

それでは、脊尾さんのアルゴリズムの論文は見つかったので(私は脊尾のアルゴリズムを理解していません)うさぴょんさんの言う通り、こちらから調べてみる事にします。
http://www.csl.sony.co.jp/jsai/cdrom/articles/titles/a10-6-4.html

レス、ありがとうございました。

50 名前:うさぴょんの育ての親 :03/10/18 01:51
う、この論文だとちょっと背尾さんのアルゴリズムは分かりにくいと思う(--;
背尾さんのアルゴリズムに至るまでに理解しておくと良いことは全部書いてあるけど。

諦めて、コンピュータ将棋の進歩2を買うのがお勧め。
背尾さんの論文が収録されてます。


51 名前:デフォルトの名無しさん :03/10/18 10:56
>>49
持ってなくても
http://www.microsoft.com/downloads/details.aspx?FamilyID=7c404e8e-5513-46c4-aa4f-058a84a37df1&DisplayLang=ja
こんなのとか
http://ja.openoffice.org/
とか、あるけどな。


52 名前:40 :03/10/18 15:38
うさぴょんの育ての親さんと>>51さんのおかげで脊尾さんのアルゴリズムとdf-pnアルゴリズムが理解できました。
近いうちに、このアルゴリズムでプログラムを組んでみようと思います。

ありがとうございました。

53 名前: ◆R/rLuLKeEI :03/10/19 20:14
評価関数の高速化:駒毎に利きの表を作成して、表を更新させるようにしてみたところ1秒間に評価した局面の数が約16倍になった。
といっても高々5000局面/秒になっただけです。
しかし、評価方法が同じはずなのに結果がかなり違う。
どうやら、バグを作りこんでしまったらしい。難儀な…。

54 名前: ◆R/rLuLKeEI :03/10/21 13:57
『コンピュータ将棋の進歩2』を買いました。
『コンピュータ将棋の進歩4』と合わせて検討中です。
詰め将棋では先手番は証明数最小、後手番は反証明数最小を選ぶのが最良のようですが、
指し将棋だとどちらの手番も証明数、反証明数ともに最小を選ぶのが良いような感じですが、
どうなんでしょうか?


55 名前:デフォルトの名無しさん :03/10/21 18:19
証明数ってこの場合は「可能な手の数」のことでしょ?
先手から見れば
証明数=後手の可能な手の数
反証数=先手の可能な手の数
だよね。
終盤になって王手がかかるようになると可能な手の数が激減するから
結構有効に働きそうな気はするけど、序盤ではどうなのかな?

56 名前: ◆R/rLuLKeEI :03/10/22 04:19
いつの間にかコンピュータ将棋協会からTCP/IP通信プロトコルが公開されてますね。
 ttp://www.computer-shogi.org/protocol/

57 名前: ◆R/rLuLKeEI :03/10/22 05:40
この場合の証明数が「可能な手の数」のことなら、後手からみても
証明数=後手の可能な手の数
反証数=先手の可能な手の数
だよね。
後手にとっては先手を詰ませたいわけだから反証数最小の手を選びたいはず。逆に
先手にとっては後手に詰まされたくないから反証数最大の手を選びたいはず。つま
り、
  :証明:反証
先手:最小:最大
後手:最大:最小
だよね(さっき書いてたことと違ってしまった)。終盤で無くともあわよくば詰ま
せたいはずだ。この探索を中盤でやるということは探索中に現れる全ての局面で
詰み探索をやるようなものというのは言いすぎかな…それが有効ならもう既に誰
かがやって成功してるはずだ。そうでないということはまだ誰もやってないとい
うのは考えにくいから既に誰かがやって結果が芳しくなかったに違いない。やは
り通常の探索と詰み探索は統合できないのかな。

58 名前:デフォルトの名無しさん :03/10/22 09:43
>>57
もともと証明数は共謀数のAND/OR版。
指し将棋の場合は、共謀数で考えた方が良いかも。

あと、指し将棋の内部ノードに詰め探索を入れるのもあるよ。
あまり深いところではやらないようだけど。

59 名前: ◆R/rLuLKeEI :03/10/22 14:24
>>58
指し将棋でも勝ち(true)、負け(false)としてAND/OR木とみなすのは無理ですか?

60 名前:58 :03/10/22 16:53
>>59
詰め将棋は手を制限することで深く読めるから、
AND/OR木探索で(30手を超えるような)勝ちを発見できることがある。
でも、指し将棋はAND/OR木探索しても手が多くて深く読めず
勝ち負けは普通わからないので、αβ法を基本とした局面評価による探索をするんだと思う。

61 名前: ◆R/rLuLKeEI :03/10/22 18:32
>>60
ありがとう、諦めます。

62 名前:デフォルトの名無しさん :03/10/23 02:04
おいら最強の将棋プログラムしたいです。。。
で何を勉強したらいいのかさぱーり分からないので、これはやっとけゴルァ!見たいなのがありましたら教えてください。
とりあえず今C++勉強してますにゃ♪
昨日「Hello world」が出せるようになりますた(感涙(意味はよく分かってないのですが・・・
まだ相当時間がかかりそうですが、気長にやっていこうと思います。
またちょくちょく質問に来ますのでよろしくです。
打倒羽生名人目指してがんばるぞぉ!えいやぁ!!

63 名前:ハブ夫 :03/10/23 02:39
c++で良いはずですよ。
ただ動けばいいってだけならvbとかで楽してやるのが良いんだろうけど、
一応最強と言う夢をを目指すならc++が1番高い候補になるはず。

64 名前:デフォルトの名無しさん :03/10/23 15:34
最強プログラム共同開発者募集。
ソース非公開、インターフェース公開、最初最弱可、言語不問。
1.序盤40手まで担当者:やります
2.中盤41手目から80手まで担当者
3.終盤一般担当者
4.指し手、盤面経過をファイルとして共有ディレクトリに書き出して渡す。

65 名前:デフォルトの名無しさん :03/10/23 19:19
1.序盤のソース完成しました。
if ( 振飛車  )▲76歩
if ( 横歩取り ) ▲26歩

66 名前:デフォルトの名無しさん :03/10/23 22:10
5.GUI完成しました。

後手:級位者
後手の持駒:なし
9 8 7 6 5 4 3 2 1
+---------------------------+
|v香v桂v銀v金v玉v金v銀v桂v香|一
| ・v飛 ・ ・ ・ ・ ・v角 ・|二
|v歩v歩v歩v歩v歩v歩v歩v歩v歩|三
| ・ ・ ・ ・ ・ ・ ・ ・ ・|四
| ・ ・ ・ ・ ・ ・ ・ ・ ・|五
| ・ ・ ・ ・ ・ ・ ・ ・ ・|六
| 歩 歩 歩 歩 歩 歩 歩 歩 歩|七
| ・ 角 ・ ・ ・ ・ ・ 飛 ・|八
| 香 桂 銀 金 玉 金 銀 桂 香|九
+---------------------------+
先手:有段者
先手の持駒:なし
手数=0 まで

67 名前:デフォルトの名無しさん :03/10/23 22:28
3.終盤できますた。

if ( (rand() & 7) == 7 )
{
  printf("詰みました\n");
  適当に王手();  // ノータイム
}
else
{
  printf("せんてしょうせい\n");
  乱数で指す();  // 30秒考える
}

68 名前:デフォルトの名無しさん :03/10/24 07:29
>>66
そういうのはGUIとは言わねw

69 名前:デフォルトの名無しさん :03/10/24 08:35
× printf("詰みました\n");
○ System.out.print("詰みますた\n");


70 名前:デフォルトの名無しさん :03/10/24 17:18
なんか急激にレベルがさがってないか?

71 名前:デフォルトの名無しさん :03/10/25 03:17
>>63様どうもでつ。
         ↑スヌーピー
それで、そろそろ将棋盤を作っていこうと思っているのですが、どのように書いたらいいのですかね?
#include "windows.h" というのを使ったら、鬼のようにエラーが出てしまいますた。
って言うより使い方がよく分からないです(大涙
いろいろ調べているのですが、サパーリ分からないです。
分かりやすい書籍、あるいは他の方法があればご教授ください★彡。

72 名前:デフォルトの名無しさん :03/10/25 05:24
>>71
まずは下を見てわ?
うさぴょん
将棋プログラムの作り方
http://homepage1.nifty.com/Ike/usapyon/HowToMakeShogiProgram.html

他には参考になりそうなソースを公開してるサイト
初代すれ
814 名前: デフォルトの名無しさん 投稿日: 02/10/26 01:59
から引用+α。

ソース公開してるソフト

うさぴょん http://homepage1.nifty.com/Ike/usapyon/
デーモン将棋 http://www.users.yun.co.jp/~tokita/daemonshogi/index.ja.html
gnushogi http://www.gnu.org/directory/games/gnushogi.html
将棋もば http://www.incl.ne.jp/~satofumi/shogimg/shogimg.html
杉将棋 http://www.ss.iij4u.or.jp/~kazzz/
YSS 1.0 http://plaza15.mbn.or.jp/~yss/yss100.html
Winshogi http://www.nexus.carleton.ca/~ttidman/WinShogi
TM将棋 http://www2k.biglobe.ne.jp/~tomo/aigames/shogi.html

73 名前:ハブ夫 :03/10/25 09:02
俺も色々と勉強さしてもらってるリンクを張っておくよ。
http://game.2ch.net/test/read.cgi/bgame/1064575087/l50

74 名前:デフォルトの名無しさん :03/10/25 09:03
http://524.teacup.com/yss/bbs

75 名前:ハブ夫 :03/10/25 09:04
http://www.hakusa.net/bbs2/shogi/index.html

76 名前:ハブ夫 :03/10/25 09:08
将棋はグラフィック部分はあんまり頑張ってもしょうがない。
もともと将棋ゲームにグラフィックなんか求められてないし、
そこに拘ってもあまり意味が無い。そんなところ誰も評価しないだろう。
やはり、思考ルーチンの強さ、が1番求められてる部分だと思う。
ここが1番難しいし、1番効率良くしなければいけない部分だ。
だから、グラフィック部分は適当に、もっと言えば自分から見て
見やすい程度に作っておいて
後は思考ルーチン作成に走るのが良いと思う。

77 名前: ◆R/rLuLKeEI :03/10/25 22:16
ほとんどハブ夫さんと同じですが…

将棋を指すプログラムを目指しているという前提で、
作り始めにグラフィック部分をあまりに頑張ってしまうといつまでたっても完成しないどころか挫折してしまう(最初の試作版はそれで失敗した)。
しかし最低限なグラフィックは求められているとは思っている。
思ってはいるが、奇麗なGUIとかではなくCUIで十分用が足りる。
GUIに拘るのは後回しで良い。
評価してくれる人はいるだろうが肝心の思考ルーチンが弱くては何にもならない。

そういう私のプログラムは次の1手サーバーとして働くコンソールアプリです。
正確にはデバッグ用にモニタ表示をさせていて、GUI部分は出来合いのものを利用しています。
つまり、こんな構成:
 sikou.exe⇔CSA将棋+sikou.dll⇔sikou.exe
最近CSA TCP/IP通信プロトコルが公開されたので、ローカルホストで動く審判サーバーが欲しくなった。
 sikou.exe⇔自前の中継クライアント⇔自前の審判サーバー⇔自前の中継クライアント⇔sikou.exe
ほとんど自己満足の世界です。

78 名前:デフォルトの名無しさん :03/10/26 03:24
皆様レスどうもです。
リンク先一通り回ってきますた。
英語のサイトは??でしたがw、とても参考になりました(感謝

>>76
グラフィック部分はとりあえず適当なのを作りたいのですが、どうもうまくいかないです。
いろいろ調べたのですが、画像を表示したり、窓を作ったりする関数が私のレベルでは、難解なようで。。
で、>>72のリンク先のTM将棋のサイトから将棋盤をダウンロードしてきたのですが、
将棋盤をそのまま流用して、思考ルーチンだけ作成するってのは可能ですかね?
当面の間はそうしていこうかなと思ってるのですが。。。

>>77
CUIというのはコマンドプロンプトのことでしょうか?
サーバーとかよく分からないので、ローカルで動くようにしたいです。

えっと、そういうわけで昨日アルゴリズムの入門書買ってきますた。
評価関数とか作るのはまだ大分先になりそうですがこつこつやっていこうと思います。
これからも漏れを応援してくださいね。誰もしてないでつか(大涙
                                 ↑スヌーピー 

79 名前: ◆R/rLuLKeEI :03/10/26 07:23
> 将棋盤をそのまま流用して、思考ルーチンだけ作成するってのは可能ですかね?
可能です。
TM将棋と違ってソースコードは付属していないが
http://www2.ttcn.ne.jp/~tsuma/download.htm
の自前で思考ルーチンを作成する他に使い道のないCSA将棋もどうぞ。

>>78
CUIとは概ねコマンドプロンプトのことです。
サーバー/クライアント方式ですが、当然ながらローカルで動いています。

応援してまっせ!

80 名前:デフォルトの名無しさん :03/10/26 09:42
RS232Cの通信ができるようにすれば、
市販ソフト(柿木将棋とか)のGUIで遊べるよ。
市販ソフトのほうを人vs通信にするわけ。

81 名前:デフォルトの名無しさん :03/10/26 09:48
>>80
それってマシンが2台必要ってこと?

82 名前:64 :03/10/26 11:09
>>80-81
RS232でなくLAN仕様なら1台でOKのよう。試しに柿木将棋を2枚立ち上げて
TCP/IPで先手7、後手7で対戦できました。相手が思考している間、片方は
TCP接続待ちになっています。スゴクおもしろい。 (127.0.0.1使用)  
RSでも1台で出来る方法がどこかの掲示板でみたような。


83 名前:82 :03/10/26 11:24
TCP/IP入力待ち

84 名前: ◆R/rLuLKeEI :03/10/26 17:46
>>82
COMポートが2つあるなら、代理将棋通信プログラム「木偶の坊」(でくのぼう)Version 0.67ヘルプファイルの「初めて使用される方へ」の「1台のパソコンで対戦させるには?
」を読んでみては?
COMポートが1つしかないなら、仮想COMポートを導入するか、COMポート増設はどう?

ところで柿木将棋のTCP通信プロトコル仕様って公開されてるの?

CSA将棋(LAN対応仮バージョン)が出来たらしい。
早速ダウンロードしました。
おおっ、擬似サーバーもある!感激!

85 名前:82 :03/10/26 19:45
来年の選手権の通信はどちらですか。

86 名前: ◆R/rLuLKeEI :03/10/26 21:17
>>85
[実施要領]が出てないんでわからん。
でも「きのあ掲示板」にこんなん投稿されてあった。
>コンピュータ将棋選手権の採用が来年、来来年が試用、3年後本格運用


87 名前:85 :03/10/26 21:30
>>86
サンクス。

88 名前:デフォルトの名無しさん :03/10/26 23:07
>>79
レスサンクス!
早速CSA将棋落としてきました。
これはSIKOU.DLLの所で思考ルーチン作成するのですよね?
dllでいろいろ検索したのですが、訳分かりませんでしたw
今更ですが、将棋のプログラムをするのは少し早すぎるのに気づきました。
そういう訳で、今日からオセロのアルゴリズムで練習していこうと思います。
>>30で紹介されていた本が手に入りましたので(最後の一冊だった)これを使って
勉強していこうと思います。
かなり詳しく書かれてあるので漏れでも何とかなりそうな気が・・・
今までレス下さった方、本当にありがとうございました。
またこっちに帰って来たときには、よろしくお願いします。

89 名前:デフォルトの名無しさん :03/10/26 23:10
自分も将棋プログラム作っていて(手を進める・戻す程度、評価・探索なんてもちろん無し)
簡単な詰め将棋部分に取り組んでいるんですが、

王手の生成は、ある局面で生成できる手を片っ端から
「手を進める→王手を確認→手を戻す」作業を繰り返して王手が掛かる手だけを
残していく方法が簡単だとは思いますが、実際のところどうなんでしょうか?

今は、手を進めないで王手を調べようと頑張って、
空き王手調べるところまでこぎつけましたが頭がパンクしそうです。


>うさぴょんの育ての親さん、
将棋プログラムの作り方、参考にさせて頂いています。


90 名前: ◆R/rLuLKeEI :03/10/27 18:15
>>88
>これはSIKOU.DLLの所で思考ルーチン作成するのですよね?
はい、SIKOU.DLLの所で思考ルーチン作成するのです。
付属のSIKOU.DLLを変更無しでコンパイル出来る環境が整ったら後は試行錯誤です。
dllの仕組みがわからなくても摩訶不思議な機構でdllにある関数が適切に呼び出されることさえわかればただのC/C++プログラミングですよ。
main関数がどうやってOSから呼び出されるか知らなくったって"Hello World!"が書けるのと大差ないと思う。

91 名前:質問です(低レベルな) :03/10/27 22:53
今YSSの技術解説を読んでいたのですが、
http://plaza15.mbn.or.jp/~yss/book.html#SEC4

本文中の「ハッシュテーブル」によると、山下さんはハッシュコードとして64ビットの値をつかっているようです。
どうやってハッシュテーブルに64BITの数字を使っているのでしょうか?
(私は、64BITのハッシュコードを使用する方法として、2^64のメモリーを用意する方法しか知りません)
山下さんがどのような方法をもちいているのか知っている方がいたら教えていただけないでしょうか?

92 名前:デフォルトの名無しさん :03/10/27 23:14
サイエンス社「コンピュータチェス」を読む?

93 名前:デフォルトの名無しさん :03/10/27 23:26
>>91
英語だけど。
http://www.seanet.com/~brucemo/topics/zobrist.htm

94 名前:デフォルトの名無しさん :03/10/27 23:31
検索したらこの板にも情報がありますた。
http://pc2.2ch.net/test/read.cgi/tech/1024024666/269-


95 名前: ◆R/rLuLKeEI :03/10/28 01:17
>>89
>王手の生成は、ある局面で生成できる手を片っ端から
>「手を進める→王手を確認→手を戻す」作業を繰り返して王手が掛かる手だけを
>残していく方法が簡単だとは思いますが、実際のところどうなんでしょうか?
私もそれが簡単で確実だと思います。
手を進めないで王手を調べるとしたら…
・駒毎に個別に処理を書き分けるのはやめて
212 010 000
1馬1 1金1 0桂0
212 111 000
000 000 101
ていう3×4の初期化された配列を用意して統一的に書く。桂歩香はその中で特殊処理。
・駒毎に利きの9×9配列を用意して各要素のビットに意味を持たせる。利きかなければ0とする。
第0ビット…成りでない利き
第1ビット…成りの利き
第2ビット…角飛馬龍香による飛び利き
・手番毎の利きの9×9配列を用意してその手番の駒の利きのビットORを取っておく。
・駒毎に空き王手になっている駒を覚えておく。なければNULL。
・王手をかけている駒を覚えておく。なければNULL。
という前処理をしておいてからというのはどうでしょう?
攻め側、守り側どちらも使えそうですが、詰将棋はまだ考えていないんで役に立つデータかわかりません。
一応、私のプログラムが持っている情報です。

96 名前:デフォルトの名無しさん :03/10/28 03:27
>>95
ありがとうございます。

>・駒毎に個別に処理を書き分けるのはやめて
見事に駒毎に処理して -いると思い- ます(^^;

一応、手を進めないで調べる手順は
王手がかかる位置(玉の周りなど)に利いている味方の駒をチェックして
その駒が、その位置に移動した時に王手がかけれるかどうかというものです。

データに関しては大雑把?に考えていて
駒毎に利き配列は用意してますが、利きがあるところにはその駒の座標を書き込んでいます。
(そこに利きがあるという事がわかればいいという程度です。工夫のしどころかもしれませんね。)

ビット処理は、盤上の空き、駒の先手/後手の判別ぐらいにしか使ってないです...
もう少し勉強します(^^;



97 名前: ◆R/rLuLKeEI :03/10/28 09:00
>>96
実は、駒毎に分けないように書きなおし始めたところで、まだ大部分が前のまま
です。

手を進めないで調べる手順(案(例:銀))
銀利き、銀-王手、成銀-王手パターンを用意する
111 101 010
0銀0 0玉0 1玉1
101 111 111
今、玉と銀が
 銀
 玉
であったとする。銀&&銀-王手、銀&&成銀-王手を取る。すると
000 000
0銀0 0成0
0玉0 1玉1
000 000
となって、銀で王手にするには成って玉の横に付けなければならないことが判
る。
駒-王手パターンは駒の利きパターンの上下反転。
あと「そこには味方の駒がありますよパターン」も作ってあれば
 銀&&銀-王手&&(!味方駒)
 銀&&成銀-王手&&(!味方駒)
が真となるところが王手になりうるところです。


98 名前:96 :03/10/28 10:39
>>97
なるほど...そういうことですか。かなり参考になりました。ありがとうございます。


99 名前:91 :03/10/28 21:53
>>93-94さん。ありがとうございます。
ゾブリストキーなんて知りませんでした。
けれど、私が>>91で教えていただきたかったのはそういう事ではなくて……

ハッシュ法って、一般的にはある要素Aを特定の値aで割り、その余りをハッシュテーブルに登録して、探索etcの所要時間をO(1)にするアルゴリズムですよね。
ですが、ハッシュコードに64bit数を使うと、それが出来なくなります(よね?)
だから、長いハッシュコードを使用する方法にはどんな物があるのか、知りたかったんです。
どんな方法があるのでしょうか?

100 名前:デフォルトの名無しさん :03/10/28 22:36
>>99
やはり>>92の本を読むのがいいと思われ。
http://www.amazon.co.jp/exec/obidos/ASIN/4781907237/

101 名前:うさぴょんの育ての親 :03/10/28 22:53
>>99
出てきたものを全部しまうのは諦めて、例えば64ビットの下位16ビットを使う。
65536エントリーになる。

ハッシュテーブルは、以下のような構造体を例えば用意して、
struct {
unsigned int64 HashCode;
int Alpha;
int Beta;
int depth;
} HashEntry;

HashEntry HashTable[65536];

実際にハッシュへの登録は、

void Regist(HashEntry x)
{
HashTable[x.HashCode & 0xff]=x;
}

ハッシュから値を返す時は、

HashEntry* Retrieve(unsigned int64 c)
{
if (HashTable[c & 0xffff].HashCode==c) return &HashTable[c &0xffff];
return NULL;
}

こんな感じ。

102 名前:うさぴょんの育ての親 :03/10/28 22:54
欝だ。訂正。

void Regist(HashEntry x)
{
  HashTable[x.HashCode & 0xffff]=x;
}



103 名前:うさぴょんの育ての親 :03/10/28 22:59
なお、実際には、登録時にほんとに上書きするかどうかの判定を行ったりするかも
しれないし、よく知られているように、ある適当な値を加算したりして別の
エントリにしまうかもしれないし、リスト構造のようにして全部保持するかも
知れない。

将棋の場合、精度より速度が大切なので、あんまり複雑なことはしてないと思う。

うさぴょんのハッシュのソースにもテクニックがいくつも入っているので、
C++読めるんだったら読めばいいと思う。
TsumeHashとHash,Hash2それぞれ実装が目的毎に微妙に違っている。


104 名前:91 :03/10/30 20:01
>>うさぴょんの育ての親さん
丁寧な解説ありがとうございます。
私はどうやら考えすぎだったみたいですね(苦笑

とりあえず、16(変わるかも)ビットでハッシュした後、重複があれば二分木で分けていく、という方法を取る事にしました。


(しっかし調べれば調べるほど疑問点が出てくるなぁ……

105 名前:デフォルトの名無しさん :03/10/31 07:34
論文読みにいけるなら、ハッシュに関してはこれも読むと良いよん。

ttp://www.ipsj.or.jp/members/SIGNotes/Jpn/16/2001/079/article004.html

106 名前: ◆R/rLuLKeEI :03/10/31 16:57
スレ違いかもしれない。
どうしてほしいというわけでもないので無視して頂けたら幸いです。
acceptするだけのテストサーバーを作って、CSA TCP/IP通信プロトコルのペー
ジにあったサンプルプログラムを使って、間髪入れずにメソッドopenConnection、
login、logout、closeConnectionを実行したところ
# java CSAClient 127.0.0.1 test test
CsaReaderWriter.start().1…openConnection、スレッドスタート
CsaReaderWriter.write(LOGIN test test).1
CsaWriter.write(LOGIN test test).1
CsaReaderWriter.write(LOGOUT).1
CsaWriter.write(LOGOUT).1
CsaReaderWriter.stop().1…closeConnection、スレッド停止
CsaWriter.stopThread().1…スレッド停止(ループフラグfalseにセット)
CsaWriter.run().1…スレッド実行開始(ループフラグfalseなのでLOGIN、LOGOUT送出されず)
CsaWriter.run().2…スレッド実行終了
^C
#
LOGIN、LOGOUTを送り出す前に切断されてしまいました。
原因はCsaWriter.stopが未送信のメッセージがあってもループフラグをfalseに
セットしてしまうからです。
スレッドのスケジューリングに依存しますね。
環境はLinux i686 2.4.2-2、
java version "1.4.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_03-b04)
Java HotSpot(TM) Client VM (build 1.4.0_03-b04, mixed mode)

ま、サンプルだからしゃぁないかな。


107 名前: ◆R/rLuLKeEI :03/11/02 00:54
>>106
解決しました。
サンプルコードの読み違いでした。
CsaCommnunicationクラスのlogin、logoutメソッドは審判サーバーからの応答を待ってくれないんですね。
サーバーからの応答はCsaRecieveインターフェスの唯一のメソッドで通知されるらしい。
まだ、サンプルコードを読んでいる最中なんで間違ったこと書いてるかも…。
すんません。

108 名前:デフォルトの名無しさん :03/11/04 14:27
棋譜データベース使っちゃだめ?

109 名前:デフォルトの名無しさん :03/11/04 20:53
問題なしと思われ。


110 名前:デフォルトの名無しさん :03/11/13 00:26
うさぴょんの育ての親は東京大学卒らしい。

111 名前:デフォルトの名無しさん :03/11/13 14:18
来年の受付日はいつですか?

112 名前:うさぴょんの育ての親 :03/11/17 18:34
>>110
デマです。

>>111
例年、11月の末ごろになると発表されていたような…。
もうしばらく待ちましょう。


113 名前: ◆R/rLuLKeEI :03/11/23 18:34
>>112
「うさぴょんの育ての親さん達は東京大学卒業後に結成されたらしい」という噂もデマですか?

自分の将棋プログラムはここ3週間程、全然進んでない。
構造がごちゃごちゃし始めていて、収拾がつかなくなりそうで作り直そうかと思案中。

114 名前:うさぴょんの育ての親 :03/11/25 16:34
>>113
大学卒業して社会人になってからなのは確かですが、東大卒はいませんです。
来る者はあんまり拒まない(<かなりウソ)ので、この先東大卒のメンバーが
増える可能性はありますが。

> 構造がごちゃごちゃし始めていて、収拾がつかなくなりそうで作り直そうかと思案中。
作り直さないで、無理して最後まで作ってしまうのもまた一つの道。
最後まで一回作っちゃうと、二回目はどうすればいいのか、見通しの良い状態で
作りはじめられるし。


115 名前: ◆R/rLuLKeEI :03/11/26 00:26
>>114
どこらへんまで作り込んだら最後って言えるのだろう…それは私が決めることですね。
4回目の中途半端なプログラムを完成させるにしても、5回目に取り組むにしても、一番これを改善したいというものは決まっている。
結構、大きな修正になるのと他にもたくさんの欲があって、いっそのこと…となってしまう。
でも、一番の問題は十分に考察する時間的ゆとりが作れないことだ。
今週末は休めますように、倒れませんように。

116 名前:デフォルトの名無しさん :03/11/27 00:24
>>115
東大6にガチで勝ったら最後と認めてあげますが

117 名前: ◆R/rLuLKeEI :03/12/07 01:55
>>116
それを読んで挫折しました。
今のプログラムは5度目の挑戦までもう少し寝かせておきます。
皆さん、ありがとう。
そして、さようなら。

118 名前:デフォルトの名無しさん :03/12/07 21:30
俺なんか、もう、10回ほど最初から作り直してるよ。
マジで。

119 名前:デフォルトの名無しさん :03/12/07 21:31
自分でも鬱になるよ、、。

120 名前: ◆R/rLuLKeEI :03/12/07 22:54
>>118 に勇気づけられて復活。
Eclipse導入記念で5回目に挑戦します。
風呂に入って寝るんで、続きは明日以降気が向いたら。

121 名前:デフォルトの名無しさん :03/12/07 23:12
コンピュータ的な強さを求めるよりも、
2〜3級レベルでいいから柔軟な人間らしい
指し方をするものをつくるとか、
接待将棋っぽく指せるようにするほうが
需要あるかもね。(ものすごく難しそうだけど)

東大や激指みたいにアマ4段レベル以上のソフトつくっても、
ごく一部の将棋オタしか対等に勝負できないでしょ。

122 名前:デフォルトの名無しさん :03/12/07 23:29
>>120
良く解らんが、やる気が出てもらって嬉しいです。
自分は、118−119ですが、
自分も頑張ります。
お互い頑張りましょう。

123 名前:デフォルトの名無しさん :03/12/08 18:24
>>121
つーか頼むから構想ぐらい持ってくれ

124 名前:121 :03/12/09 00:02
>>123
構想としては、
たとえば序盤ならば、ガチガチに定跡通りに指すのではなくて、24の24万局集の
データを統計的に処理して候補手を数個に絞って、それらの手を優先的に深く読む。
(もし絞った候補手を読んだ結果、評価関数がすべてマイナスとかだったら
改めて他の手を読み直す。)

また、Shotestという将棋ソフトが使っているスーパーソマという
手法は特に中盤の駒がぶつかり合う局面で有効かもしれない。
(日本の将棋ソフトはこの手法を取り入れてないらしい)

あとは、将棋の格言や手筋をプログラムに取り入れるという姿勢も強化する。
(たとえば持ち駒に歩が3つあったら、端攻めできないかまず読むとか。
プログラムにどう組み込むかめちゃ難しいが。)

終盤は、コンピュータが即詰の場面でも、ノータイムで指さない。長手数の場合、
詰まし方を間違えることもあるようにする。即詰みを狙うより必至をかけて勝つ筋の
評価を高くする。

もちろんランダム的要素や学習機能を取り入れて、同じ手順で負けないようにするなど。

構想は他にもありますが、肝心の将棋ソフトは最近作ろうと始めたばかりです。
社会人にもなると趣味でプログラムする余裕がなかなかないです…。
しかも仕事やる業務用プログラムより、将棋プログラムを組むほうが数段難しいっす。

125 名前:デフォルトの名無しさん :03/12/09 01:03
2,3級で人間らしさを目指すならあまり深く読む必要とかはなさそう。

24の棋譜を大量に取り込んでパターンマッチングで似た局面があるほど
高得点、みたない評価関数で3手先まで読むのとかでどうよ?

126 名前:デフォルトの名無しさん :03/12/09 10:35
開発者の構想を聞いてるわけじゃなくて、ソフトが構想を持つように
してくれってことじゃない?

127 名前:デフォルトの名無しさん :03/12/09 18:26
Intel研究者も予言する「ムーアの法則の限界」
http://book.2ch.net/test/read.cgi/bizplus/1070372326/l50


128 名前:デフォルトの名無しさん :03/12/09 20:48
今詰将棋ソフトをプログラムにとりかかってみたんですが,とりあえず
最初なんでまずは短手数5手詰めくらい解ければいいやくらいのレベルで
作成してるんですけど, とりあえずAND/OR木の深さ優先探索で
やってみとうとおもってるんですが木のノードにはどんな情報をもたせたらいいんですか?
その場の局面の情報も持たせないといけないですよね?ノードごとの局面を
構造体のメンバの中に配列でも作って毎回記憶させてるんですか?
初心者なのでなにとぞお願いしますm(__)m


129 名前:デフォルトの名無しさん :03/12/09 23:58
>>128
その前に日本語をどうにかした方が・・・・・・

130 名前:デフォルトの名無しさん :03/12/10 12:48
>>128
局面は記憶しなくてもいいです。
文献当たればそのあたりの必要な情報はなんでも手に入るはずですよ。


131 名前:うさぴょんの育ての親 :03/12/15 20:42
第14回世界コンピュータ将棋選手権の案内、でましたね。

http://www.computer-shogi.org/wcsc14/


132 名前:デフォルトの名無しさん :03/12/20 10:40
参加しまーすって申し込んでおいて、
実際には、不都合があったのでやっぱり止めます、、、
とか言うことは可能なのですか?
申し込み金額の1万円を自分が損するだけですかね?

133 名前:デフォルトの名無しさん :03/12/20 10:59
>>132
でしょうね。
なんせPC環境を担いでいくんだから、都合が悪くなるなんて事よくあるでしょうし。

134 名前:うさぴょんの育ての親 :03/12/20 11:26
>>132
前日までに不参加の連絡をCSAにすれば、1万円損するだけです。
連絡しないで不参加だと、以後、参加を断られることがあります。

135 名前:デフォルトの名無しさん :03/12/20 12:27
将棋プログラムを作ってる人たちよりも

プログラムの方が強くなったりしてるんですかね?
この間アマチュアの大会で柿木、AI、東大(?)の連合チームが優勝したじゃないですか。

どうなんでしょう?

136 名前:デフォルトの名無しさん :03/12/20 12:41
>>135
アフォですか?

137 名前:デフォルトの名無しさん :03/12/20 16:38
>>135
そうらしいですよ。
すでに大抵のプログラマーよりは強くなってしまっているらしいですね。

138 名前:デフォルトの名無しさん :03/12/20 19:06
えっとルールがわからないのですが・・・
将棋倒しのゲームでもかまいませんか?

139 名前:デフォルトの名無しさん :03/12/21 10:20
>>138
マジレスするとダメです

140 名前: ◆R/rLuLKeEI :03/12/23 22:54
>>128
木のノードに局面(と利きの表など)を記憶するとすぐに記憶領域が溢れかえりま
す。
しばらく寝かしている4度目のプログラムはまさにそれで、同一マシン上で戦わせ
てみたところ中盤で物理メモリ384MBと仮想メモリ???MBを食い尽くしてダウンし
てしまいました。
当面の課題は木のノードから局面の情報を取り除くことです(面倒臭いなぁ)。

Googleで探すとXMLで棋譜や定跡の表現をしているのがあるようですね。
入れ子構造が自然にゲーム木の表現になってるのでしょうかね。
これは来年末にでも考えます。多分。

141 名前:デフォルトの名無しさん :03/12/24 22:03
>> 140
将棋や囲碁のような盤面の大きなゲームでは普通は局面のハッシュ値(96bit)と深さと結果だけを保存します
詰将棋なら王手と逃げる手も保存できます

局面は一つだけ管理して,手を指す時に更新してその手の探索が終わったら元に戻します

142 名前: ◆R/rLuLKeEI :03/12/25 12:37
>>141
将棋や囲碁のような盤面の大きなゲームで普通でないことをしたらどうなるか?
調べたり人に聞くよりやってみよう!とうわけで実験してみました。
ハッシュは、一度に色々な修正をやると訳が分からなくなりそうなので後回し。
局面のハッシュ値が96bitでいいという理由も後で考えます。
ノードに入れるのは、棋譜情報(深さと手、手番)と結果(評価値と確定値/推定値
のフラグ)くらいですかね。

管理する局面は二つ、根と探索中の局面だけにするつもり。
根の局面は探索中の局面から手を逆に辿れば復元できるので不要ですが、ちょっ
と実験したいことがあるので。

143 名前:デフォルトの名無しさん :03/12/29 07:59
最強のプログラムを作るのに絶対必要な要素は学習させる事だと思う
基本のプログラムを準備して、そのプログラム同士を戦わせる。一瞬で終わるだろう
そしてその勝負で負けたほうの理由を、同じくプログラムで調べて克服する・・・@
そして新しく書き換えたプログラム同士で再び戦わせる・・・・
これの繰り返し

コンピューターは処理が早いから、全部を自動で行えば1日で何百局と打てる
少しずつ強くなっていくとしても、短時間で恐ろしく成長する

問題は・・誰でも気づく@の製作
敗着を調べるまでは至っても、その後のプログラムを作るプログラムをどうするか・・・
その一手を打った経緯を調べても、どう書き換えるか

144 名前:デフォルトの名無しさん :03/12/29 08:07
人間の手でやるならまだ出来るかもしれん
全ての1手に対して、その一手をどういう理由でプログラムが選んだかを保存させておく
後から敗着の部分を選んで、どういう経緯でそれを選んだかを見て克服する
みんながやってる事だよな・・・・

145 名前:デフォルトの名無しさん :03/12/29 08:13
むしろ・・・・
強くもなるけど弱くもなってしまう全自動プログラム書き換えプログラムのほうがいいか・・・@
それで書き換えたのと元のを何度か戦わせて、優れている方を採用すると
元より弱くなったら破棄
また元を書き換える
もし強くなったらそれを元のプログラムとして同じ作業をする
何億、何兆回をこなせば絶対かなり強くなるはず

問題は・・・誰でも気づく@の製作法か・・・・

146 名前:デフォルトの名無しさん :03/12/29 10:00
最強の定跡があれば学習は
それほど多くは必要ないんじゃないかな。
(学習した手が本当に正しいのかはかなり吟味が必要だと思う。)
あとは中盤と定跡選択と終盤の正確性。


147 名前:デフォルトの名無しさん :03/12/29 10:44
将棋プログラムができてこそ最強を語れるプログラマー
はいないだろう。と、思う漏れ;
SLGでもなんでも基本は将棋、
将棋プログラム=AI(人工知能)プログラム
遥かなる未知な思考。
生涯だれもそのプログラムを完成させること
は無いと思うが、人間である以上「人間」の
思考に近い最強AIプログラムを完成できると思う
それができた奴こそ最強プログラマーではないか?



148 名前:デフォルトの名無しさん :03/12/29 15:59
>>146
プログラムをちょっとずつ改良するプログラムはどう?
それを無限にやって、強くなった時だけ採用して、それをベースに進めるようにすれば、いつかはかなり強くなると思うけど

149 名前:デフォルトの名無しさん :03/12/29 22:10
対戦からの学習というとチェスでは TDleaf がありますね
問題は何百局ではたりないことかな
でも夢のある話です


150 名前:デフォルトの名無しさん :03/12/29 23:39
>>149
そこでネットワーク学習ですよ。

151 名前:デフォルトの名無しさん :03/12/30 08:31
>>149
コンピューターなら1年で何億、何兆局も出来ないかな?
ネットワークが最強か

人間が作る以上、そのプログラムの強さには限界がある
でも人間の意志を超えた偶然の産物なら可能性は無限だろう
例え1億回に一度しか、今を上回るプログラムが作り出せなくなったプログラムでも、先には進める
しかもこれはコンピューターが最も得意な要素だろうし

人間は理や発想
コンピューターはとにかく数

問題はランダムにプログラムを改造するプログラムだけどね
しかもパターンは無限におよぶという

ほんとは相性の問題もあるんだろうけどね

152 名前:デフォルトの名無しさん :03/12/30 08:55
抽象的な言い方で申し訳ないが、俺の描くイメージとしては

サイコロを10億個振るようなプログラム
いつかは奇跡的に5、995、534、244とかも出るだろう(今のPCじゃ何億年かかるかもしれないけど)
とにかく全ての性能の99%以上の結果を出したような偶然と奇跡の結果というか
それまで全自動で動かし続ける

その間に、サイコロを1億個で済むようなプログラムをひたすら考える
こうやって、いかに最高得点に近いパーセンテージのスコアを出せるかを追求していくしかない
100%は諦めるにしても、99,9999%までいけば十分に神のレベルだろうと思うし

まあ、その改造プログラムの性能によってAさんの90%よりBさんの80%が強いような結果になるかもしれないけど

153 名前:いなむらきよし :03/12/30 11:53
キケー!

154 名前:デフォルトの名無しさん :03/12/30 12:53
今の思考ルーチンは、
例えば、駒をちょっと改造して、歩を2マス進めるようにするとか、
盤面のマスを一回り大きくして、10×10マスにするとか、すると、
とたんに弱くなってしまうのでしょうか?

155 名前:デフォルトの名無しさん :03/12/30 20:34
序盤はかなり弱くなるね。
人間のような大局観ないし、定跡のデータが使えないから。

終盤の強さは今と変わらない。

156 名前:デフォルトの名無しさん :03/12/30 21:03
>>146
序盤感覚の裏付けのない定跡は張り子の虎。

今のソフトはデータベースとしてもまだまだで、
序盤の感覚も全くない。はっきり言って序中盤は糞。

おまいらなんとかしろ。

157 名前:デフォルトの名無しさん :03/12/30 21:12
>>155
なるほど。
それで、その終盤と言うのは要するに詰めルーチンのことなのですか?
詰めのちょっと前の、終盤とかはどうなんですかね?
良く解らないですが、例えば、1手スキとかそう言う言葉があったりするじゃないですか。
これは、中盤に含まれる概念なのでしょうか?

158 名前:デフォルトの名無しさん :03/12/30 21:33
>>157
手すきは終盤の話。
終盤は必死まで実装済み。
手すきの計算も時間の問題。

ただ、戦略や大局観や構想はだめだめ。
萌芽も見られない。

159 名前:デフォルトの名無しさん :03/12/30 22:14
>>158
必死ってのは、要するに詰め将棋状態なんですよね。
こっちがミスらなければ絶対に相手が詰む状態まで持っていけると言う状態で
つまり、人間が詰め将棋をやっているような状態に相当するわけですよね。
手すきってのはつまり、その1つ前の段階ですよね。
相手がミスって、こっちがミスらなければ(又は良い手を指せば)、
必死状態に持っていけるような段階ですよね。
なるほど。

160 名前:デフォルトの名無しさん :03/12/30 23:28
>>159
なんか微妙にズレているかも…。

必至とゆーのは、自玉が即詰みでなければ次の手番で
相手玉を即詰みもっていける状態のことで

○手スキというのは、たとえば2手スキならば、
攻めを2手放置すると詰んでしまう状態のことだと思います。

161 名前:デフォルトの名無しさん :03/12/31 00:38
ああ、なるほど。解りました。
ありがとうございます。

162 名前:デフォルトの名無しさん :03/12/31 00:50
つまり、
片方だけでなくて、お互いの状況が関係してるわけですね。
解りました。

163 名前:デフォルトの名無しさん :03/12/31 17:05
上の方にハッシュテーブルへの登録の仕方が書いてあるのですが、
ハッシュ値の求め方は、

long table[32][81];/* [先手後手の駒の総数][全ての枡] */

void init_table()
{
  for(全ての駒)
   for(全ての枡)
     table[駒][枡] = hash_rand();
}

/* 32ビットの乱数を返す */
long hash_rand()
{
 return (rand()) ^ (rand() << 15) ^ ((rand() % 2 << 30);
}

で、table[32][81]にそれぞれ32ビットの乱数を入れておいて

164 名前:デフォルトの名無しさん :03/12/31 17:07
現局面のハッシュ値を求める時は

long get_hash()
{
 long hash = 0;

 for(全ての枡)
  if(駒があれば)
   hash ^= table[駒][枡];

 return hash;
}

で、駒に当たる度にあらかじめ作っておいた乱数でXOR演算をしていく、ってので良いですか?

165 名前:デフォルトの名無しさん :03/12/31 17:58
>>164
それでいいと思われ。
後は64bitにしてやれば完璧かと。

166 名前: ◆R/rLuLKeEI :03/12/31 18:20
持ち駒は?

167 名前:デフォルトの名無しさん :03/12/31 19:57
>>165
ありがとうございます
でも、>>166さんご指摘の通り、持ち駒は?と気になったんですが・・・
これはどうするんでしょう、、
取りあえず、持ち駒用のハッシュ表を作るか、
同じように持ち駒もXOR演算する、のどちらかになるんでしょうが。
この辺は他のプログラムを参考にしてみます。

168 名前:デフォルトの名無しさん :04/01/01 10:40
持ち駒はハッシュしないで何が何枚か分かるように持っておくと、
盤面が同じで持ち駒だけ違う局面があればすぐにわかるので便利たぬ


169 名前:デフォルトの名無しさん :04/01/01 13:43
>>168
>盤面が同じで持ち駒だけ違う局面
実戦でそんな局面あるのか?

持ち駒が同じで盤面が違う局面はあると思うが。

170 名前:デフォルトの名無しさん :04/01/01 14:54
>>169
思いっきりあるだろ。水平線効果を知らんのか?

171 名前:デフォルトの名無しさん :04/01/01 19:05
>> 169
歩を無駄に成り捨てては打ちなおすプログラムみたことない?

172 名前:デフォルトの名無しさん :04/01/03 02:21
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用

173 名前:デフォルトの名無しさん :04/01/03 20:24
実際にはパスできないのになんで、パスもよんでいるんだろう。


174 名前:デフォルトの名無しさん :04/01/04 11:26
http://www.google.com/search?q=%22null+move%22

175 名前:デフォルトの名無しさん :04/01/06 22:04
第14回世界コンピュータ将棋選手権
申し込み期限 2004年1月15日

176 名前:デフォルトの名無しさん :04/01/08 11:36
http://www.phoenix-c.or.jp/bluegale/index2.html
あの【脱衣将棋】が帰ってきた!

177 名前:デフォルトの名無しさん :04/01/09 23:59
>>173
指し手を絞り込んだときなどで他にいい手がなかったから。
駒をとる手、成る手、逃げる手などを中心に生成してるとパス手を入れないと読みがおかしくなる。



178 名前:デフォルトの名無しさん :04/01/10 00:07
>>173
他にもパス手を読んでおくといろいろおいしことがある。
詳しくは「コンピュータ将棋の進歩」とかを読むべし。


179 名前:デフォルトの名無しさん :04/01/11 14:35

ttp://gps.tanaka.ecc.u-tokyo.ac.jp/osl/pukiwiki.php?OpenShogiLib

OpenShogiLibとは
主に研究目的に将棋プログラミングをする人のために提供する高速将棋ライブラリです。
BSD風のライセンスを採用しているので、商用ソフトに使うこともできます。

180 名前: ◆R/rLuLKeEI :04/01/12 00:00
>>178
ずーっと在庫切れなんですけど…
http://www.amazon.co.jp/exec/obidos/ASIN/432002799X/249-5731267-8887519
買っときゃ良かった。

181 名前:うさぴょんの育ての親 :04/01/12 00:15
「コンピュータ将棋の進歩」はなくてもそんなに困んないよ。
2,3,4を持ってれば十分。


182 名前:ハブ夫 :04/01/12 00:18
>>180
よっしゃ、それは、過去の積み重ねに頼らずに
自己流でやりなさいと言う、神のお告げでありますよ。

183 名前: ◆R/rLuLKeEI :04/01/12 02:08
2、3、4は入手困難になる前に買いました。
コードはすべて自己流ですが、基本的な戦略は典型的なものの組み合わせになってしまう予定です。

今、思考部分は後にしてUIをいじくってます。
まあ、OOPの自由研究を兼ねてがんばってみます。

184 名前:うさぴょんの育ての親 :04/01/12 02:34
>>182
>>183
『過去の積み重ね』をある程度丁寧に実装すれば、「うさぴょん」程度の強さの
ものは作れます(笑)。
しかし、それだけでは「うさぴょん」を超えるのは…(^^;

うさぴょんよりも強いかも知れないプログラムの一つとして、きのあ将棋の
「きのあ」さんなんかがきのあさんの自己申告に拠るとかなーり自己流で
プログラムを作っています。
が、話を実際に聞いてみると、基本的なツボは押さえてます。

それから、明らかにうさぴょんよりも格上の成績を例年残している、
磯部将棋もなかなか独特な手法を使っているようです。
でも、やっぱり基本的な骨格は『過去の積み重ね』の上にあります。

何だかまとまりのない話になってしまいましたが、
せっかく使える『過去の積み重ね』があるんだから、使えばいいんじゃないかなーと。

それから、一度は大会に出てきて、強豪の工夫の自慢話?を聞いてみるのも、
強いプログラムを作る上での近道かなーと思います。

185 名前: ◆R/rLuLKeEI :04/01/12 08:34
>>184
自分の過去の積み重ねはもちろん他人のもせいぜい使います。
インターネットでただで辿り着ける所は一通り回ってアイデアを集めて練っているところです。

GWはお客さんの工場が止まる絶好のシステム切り替えの時期なんで難しいな。

186 名前:ハブ夫 :04/01/13 01:46
>>184
はい。ありがとうございます。

187 名前:ハブ夫 :04/01/17 11:25
将棋と言うのは例えば、香車を一番上まで進めた場合、
移動できる場所がなくなるから、絶対にならなければいけないと言うルールが
存在するのでしょうか?
もちろんこの場合はなった方が有利に決まってますが、
ルールとして強制的に成らないと駄目っていうのがあるのでしょうか?

188 名前:デフォルトの名無しさん :04/01/17 11:38
なんなきゃだめってルールあるC

189 名前:デフォルトの名無しさん :04/01/17 11:48
ttp://www.ricoh.co.jp/SHOGI/rules/erules.html

190 名前:ハブ夫 :04/01/17 12:06
おお、早速ありがとうございます。

191 名前: ◆R/rLuLKeEI :04/01/18 18:18
この週末は「コンピュータ将棋の進歩」探しと最強の将棋プログラムを練り直しのために泊り掛けで久美浜・小天橋に行って来た。
しかしながら、宿にまともな分厚い碁盤・将棋盤もあったにもかかわらず、全く進展無し。
地方の本屋に残ってないかと思ってたのに本屋が見つからなかった。
まあいいや。


192 名前:ハブ夫 :04/01/18 21:03
久美浜、小天橋って将棋の聖地か何かですか?

193 名前: ◆R/rLuLKeEI :04/01/18 22:07
先の書き込みのmail欄を見て頂けたら分かります。
そっちが真の目的です。
ごめんなさい。

194 名前:ハブ夫 :04/01/18 23:16
いえいえ、
良かったですね。

195 名前: ◆R/rLuLKeEI :04/01/19 00:15
5度目の挑戦。
ようやくGUI版簡易表示機能が一段落したんで明日から局面の着手可能な手を列挙する部分に取り掛かる予定。
今日はもう寝る。

196 名前: ◆R/rLuLKeEI :04/01/21 21:38
αβ探索で使う局面表って忘却機能付き記憶場所のようなものですか?
ハッシュとリストで全局面を覚えていたらSSS法のようにメモリ不足になりません?

197 名前:うさぴょんの育ての親 :04/01/21 21:56
>>196
なります(w
なので、ハッシュだけ使って、ハッシュ上でぶつかったら新しい局面で上書き
してしまうのが普通のやり方です。凝ったことを考えるなら、より重要な局面が
ハッシュに残るようにするとなお良いでしょう。

ちなみに、『局面表』はHash tableの日本語訳です。


198 名前: ◆R/rLuLKeEI :04/01/21 22:15
局面表とTransposition Tableは似て非なるもの?

エントリの衝突時にどちらを選ぶかは将来その局面を再訪する可能性の高い方とか?
コンピュータ将棋の進歩2〜4に何かヒントが書いてあったような気がする

199 名前:うさぴょんの育ての親 :04/01/21 23:17
>>197,198
あぅ、自分ですごい間違い書いているのに気が付いて訂正しにきたけど既に突っ込まれてる(--;

そうです、Transposition Tableの日本語訳が局面表で、Transposition Tableの
実装は、通常、単なるHash Tableです。

上書きの話だけど、
再訪する可能性の高い方という考え方もあるけど、結果を得るのに時間がかかる方
(つまり、より探索ツリーの根に近い方、末端から遠い方)という考え方もある。

それから、十分にテーブルが大きければ、衝突回数なんてたかが知れているので
無視するというのもありでしょう。


200 名前: ◆R/rLuLKeEI :04/01/22 01:33
弘法にも筆の誤り

ほとんど衝突がないなら局面表の初期値を定跡で埋めておくのはありかな。
ある局面Aが定跡内なら最善手は局面表内にあるはず。
なければ定跡ファイルを検索。
定跡ファイルになければ通常の探索へ移行。
ある局面Aが定跡外なら通常の探索。
途中で局面表に残った定跡に戻れるかもしれない。

201 名前:うさぴょんの育ての親 :04/01/23 22:08
>>200
面白いアイデアです。

でも、実際に考えてみると、相手が定跡を外した(指し手の前後を間違えた)
時に、読みで咎めることが出来るはずなのに定跡に戻す手順を選びそうで
ちょっとイヤかも。

202 名前:ハブ夫 :04/01/23 23:03
うさぴょんはどれくらいのつよさなんですかね?
自分の棋力ではこの前、
序盤を定石どおりに戦って、後半ひたすら守りに徹したら千日手になって終わったのが
一番いい成績ですね。
つまり、それ以外では全部自分が負けてますね。
まあ、自分は激弱なんですが、
他のソフトと比べてどれくらいなんですかね?
やっぱり、最強クラスの東大とかとは全然次元が違ったりするのですか?
もう、話にならないくらいの差があるものですかね?
例えば、東大が100としたらうさぴょんは80とかそれくらいは行きますかね?
確か、以前の成績とかではたまには
うさぴょんの方が勝てるような話もあった気がしたんですが、、。


203 名前:ハブ夫 :04/01/23 23:07
あ、そうだ。

最近ダウンロードして、
楽しませてもらってます。
ありがとうございます。

204 名前:うさぴょんの育ての親 :04/01/23 23:21
>>202
東大を100としたら、っていう質問には答えるのが難しいですね(^^;
じゃぁ0は何?とかいう感じで(^^;

24のRで言うと、東大は最高2200くらいらしいので、うさぴょんの最高が
1550なので、東大を100とするとうさぴょんが70くらいでしょうか。

ちなみに、Rで400の差があったら絶対に勝てないくらいの差です(w
次元が違うと言ってもいいかも知れません。

世間向けの無難な答えとしては、大会版の東大を4.5段としたら、
大会版のうさぴょんが2段くらいですが、これは普通にやったらまず勝てない
というくらいの差です。

でも、この間の大会ではうさぴょんがまぐれとはいえYSSに勝ったわけで、
絶対に勝てない差ではなく、多分50000回に1回くらいは勝てるのでしょう(w


205 名前: ◆R/rLuLKeEI :04/01/25 04:08
スレッド違い、御免。
>>204
レーティングと勝率の関係がよくわからん。
 http://www2.saganet.ne.jp/a-sim/mhp0726.html
より
 レーティング200点差=1段差=勝率半減   (*)
とすると、うさぴょんの東大に対する勝率は
 0.5^((2200-1550)/200+1)≒0.05256。
うさぴょんは20回に1回は東大に勝つ?!何故に?
まあ、24のレーティングの解説には勝率については何も触れられていないが…。
前提(*)が間違えてんのかな。

>>201
十分な時間を掛けて平手から通常の探索をした結果を定跡集と称して対局開始前に
ロードしておくのはずるいかな?どうなんでしょ。

206 名前:デフォルトの名無しさん :04/01/25 05:15
>>205
20回やれば1回ぐらいは勝つのでは?

207 名前:白砂青松 ◆HakusaRWQc :04/01/25 09:05
>>205
 完全探索に近い探索をして定跡外しの補完をする、という意図ですよね。
その場で読むくらいだったら前もって読んどいてやる、みたいな。
 別にズルくないと思いますよ。
 どれくらい「役に立つ」かは判りませんけど……。

>>206
 うさ親さんからの開発者としてのコメントの方が信用できるとは思いますが、
将棋を指しているものからすると、うさぴょんが20回に1回勝つ、というのは
難しい気がします。

 人間でもそうですけど、格下が格上に勝つには、格下の出来がよくて格上の出来が
悪くないと無理ですよね。この「出来」にはポカやミスも当然含まれます。戦形の
得手不得手もあるでしょう。
 人間は、戦形の得手不得手でミスる(相手の得意な形に敢えて合わせる)ことは
しないでしょうから、ポカやミスなどしか期待できません。
 しかしするんですね人間は(笑)。
 一方、コンピュータ同士は、ポカやミスはほとんどしません。とすると戦形による
力の出具合によっては一発、という期待しかありませんが、それもやっぱりよっぽど
「運」がよくないと期待できないと思います。

 100回に1回くらい、が妥当かなあ……と個人的には思ってます。

208 名前:ハブ夫 :04/01/25 10:17
>>204
ああ、なるほど。
詳しい説明ありがとうございます。
良く分かりました。
強さをどう、数値化するかという問題ですね。

例えば、腕相撲をした場合、
100キロの力を出すマシンと、90キロの力を出すマシンでは
必ず100キロの方が毎回勝つに決まってます。
この場合、勝率は100:0ですが、
実際に出す力を数値化して強さを計った場合は、
100:90に成るわけでね。


209 名前:デフォルトの名無しさん :04/01/25 11:32
>>206
R400の差が絶対勝てない手合いでないことは24の対戦を見ていれば分かると思います。
実際に対戦させてみないと分かりませんが、400点差なら32回対戦させれば1回は勝つでしょう。

> しかしするんですね人間は(笑)。
> 一方、コンピュータ同士は、ポカやミスはほとんどしません。とすると戦形による

しかしするんですね、コンピュータも(笑)。

というのが正しいと思います。
苦し紛れに無意味に歩を損してくるのは少ないとはいえ相変わらずありますし。

210 名前: ◆R/rLuLKeEI :04/01/25 16:26
>しかしするんですね、コンピュータも(笑)。
しかもポカやミスだと思ってないんですね、コンピュータは(笑)。

地平線効果で歩を損した方がお得と思っているらしい。

211 名前:妖精リーチ :04/01/25 16:27
最近囲碁の方が面白い。


212 名前:うさぴょんの育ての親 :04/01/25 20:26
>>209
R400の差の人間同士を実際に対戦させれば、少ない方が勝つことがあるでしょうね。
…コンピュータ同士だと、まずなさそうですが(^^;

人間同士でも、Rのシステムを考えた時、R400差があるのに32回に1回以上勝てる
ようだと、Rが400以上上の人間に挑戦し続ければ、Rが実力よりもかなり上まで
上がることになるわけで、R400差って、本来32回に1回も勝てないような、
絶対的な差でないといけないんですよね。

もっとも、>>205 での議論のように、実際にはR200の差で勝率半減、400差
ならさらに半減程度の差しかないのかも知れません。その場合、24のRのシステム
自体、上位者に挑戦しまくる人がRが高くなるという、やっぱりちょっと問題ありっ
てことにもなりますが。(いや、実際に問題起きているような気もしますけど…。)



213 名前:うさぴょんの育ての親 :04/01/25 20:27
>>207
うさぴょんが東大に20回に1回勝つのは難しいでしょうね…。

配布しているうさぴょんは、定跡を乱数で選択しているので、自分の不得意な
形も指しますし、東大の不得意な形を指すこともあるんでしょうけど、
そういった『穴』はどう考えてもうさぴょんの方が多いので、500回に1回
勝てればいいとこじゃないでしょうか。

それでも、市販版の東大になら、時間をかけて序盤作戦で工夫を重ねていけば、
20回に一回勝てる定跡くらいなら作れるかも知れません。
#多分、坂田流向かい飛車とかそう言った変な戦形でしょう(^^;

東大将棋の1とか2の頃には、駒組みを上手く進めると一方的に好きな作戦を
選べて、先手なら勝率100%、後手でも勝率75%とかいう定跡もあったの
ですが(笑)。

でも、この間のYSS戦みたいに、コンピュータじゃなくて人間が油断して
くれれば、勝てる可能性は増えます。
実際、あの将棋はYSSにうさぴょんが勝ったのではなくて、山下さんが戦略=
定跡の選択を間違えて、うさぴょんの得意な形にぴたりとはまり、その結果
ああなった、という将棋でした。山下さんが勝手に転んだんだと認識してます(笑)。


214 名前:うさぴょんの育ての親 :04/01/25 20:29
>>211
囲碁、作ってるけど基本的なところが難しすぎ(笑)
勝敗を判定することすらまだ出来ないよ。

215 名前: ◆R/rLuLKeEI :04/01/26 02:06
五度目の挑戦。
この一週間で進んだのは先手後手を別スレッドで開始させるところまで。
着手可能手の列挙はいつになることやら。
時間が足りない。

216 名前: ◆R/rLuLKeEI :04/01/27 01:19
開始した両スレッドの内、現在の手番以外は停止、現在の手番が
探索開始局面に全ての着手可能手を問い合わすメソッド(中身は
空。nullを返す)を書いた。
先に終局/投了時の処理を書く予定。

前向き枝刈りを入れるなら局面に着手可能手を問い合わすメソッ
ド内に入れるべきか、得られたリストから不要な手を消してやる
べきか考え中。
最初は単純に前向き枝刈りはしないほうが見通しが良さそうな気
もする。

217 名前:デフォルトの名無しさん :04/01/27 23:52
全ての着手可能手の列挙は早目に作るのがいいよ
動いて楽しいから

多分そこが山場
その内 詰将棋では王手だけ列挙とか工夫をしたくなるけど工夫の段階に
入ればやる気が続くから


218 名前: ◆R/rLuLKeEI :04/01/28 03:14
>>217さん、ありがとう。
まずは遅くてもいいから正しく漏れなく生成するやつを目標にやってみます。
前回の挑戦末期はここの高速化をいじり始めて発散してもうたから今度は慎重に。

Pascal/Cなら考えながらでもコードが出てきたのにJava/C++だとうまくいかんね。
AIとはあまり関係ない部分の話ばかりで申し訳ない。

219 名前:デフォルトの名無しさん :04/01/30 00:17
(おそるおそる)
プログラミング=C言語をDOS窓のだけ少し
将棋の棋力=24で7級
という漏れでも、将棋ソフトつくれますか?

220 名前: ◆R/rLuLKeEI :04/01/30 02:04
(おそるおそる)
高品質・短納期を求めなければ作れます。

221 名前: ◆R/rLuLKeEI :04/01/30 02:22
ちなみに、私の棋力=知人とは未だ勝ちなし(笑)。
24に入ろうとしてガイドに従ったら最低ランクだったのでまだ一度もやっていない小心者です。
なのに作ろうとしている。
人工知能と言語学習の格好の題材だと言い訳しつつ滑稽だなと自分でも思う。

222 名前:うさぴょんの育ての親 :04/01/30 11:24
>>221
うさぴょんを作り始めてから将棋のルール覚えたから全然問題ない。
>>219
C言語の腕はもう少し磨いた方が…。

223 名前: ◆R/rLuLKeEI :04/01/30 13:13
>>222
[うさぴょんの育ての親]さんチームの人やベースになった鈴木将棋のへっぽこ鈴木さんも作り始めてから将棋のルール覚えたのですか?

本来の将棋プログラムを離れて、JavaとOOPとデザインパターンを勉強中。
将棋プログラムに適用できそうなパターンが幾つかあるのに気が付いたところです。

あ、ハブ夫さんに続いてうさぴょんダウンロードしました。
フリー最強ではなくなって1日のダウンロード数が減っているそうですね。

224 名前:うさぴょんの育ての親 :04/01/30 14:22
>>223
へっぽこ鈴木さんは一応4段です。将棋を覚えたのは小学生の頃らしい。

ところで、実は『うさぴょん』は、フリー『最強』になったことがないんですよねぇ。
『最強クラス』なのは確かだと思いますけど。

最近、ダウンロード数が伸びないのは、また別の原因で、要するに宣伝不足かと。

K−ShogiがVectorに登録されているし、棋力もまともになった(
あまりうさぴょんと変わらないと思う)ので、相対的にうさぴょんが目立たなく
なったんでしょう。うさぴょんもVectorにでも登録すれば、相当ダウン
ロードされるのかなーと思います。


225 名前:219 :04/01/30 23:09
誠実な回答ありがとうございます。
とりあえずは、コンソールでデータ構造がシンプルで、プログラムの見通しのよい物を作ってみます。
(最強を目指せっていう突っ込みはなしね^^;;)
3目並べは以前作ったことがあので、将棋の前にオセロあたりをまず作ってみます。
11月くらいに将棋が動けばいいかな・・・と。のんびりやります。

226 名前:デフォルトの名無しさん :04/01/30 23:51
ついにvc6.0++を落としたぜ^^;;)
しかし使い方がさっぱり分からんw


227 名前:デフォルトの名無しさん :04/01/31 00:12
通報させていただきました。

228 名前:219 :04/02/01 00:31
のんびりオセロを作成中・・・
「局面」の初期化と表示はできるようになりました。
さて・・・
「指し手」のデータ構造/生成を考えてみます。
後戻りできるようにしないと・・むむむ。
ってことは・・
・指し手生成
・指し手実行
・指し手取り消し(undo)
・入力
かな・・・
(オセロならいっぱいソース転がってるでしょうけれど、とりあえず自力で)
将棋まで遠いけれど、カンベンです。

229 名前: ◆R/rLuLKeEI :04/02/01 05:50
初期局面の着手可能手の列挙が一応出来た。
まだこの局面では打つ、行き場のない、成る、敵の駒を取る、自玉を晒す、千日手などは起こらないので手抜きしている。
前回C言語で思考部分の同じ処理を書いた時はもっと苦労した。
今回はUIも含めてやっているが、これがOOPの威力なのか!と、ちょっと感動。

オセロの人も頑張れー

230 名前:オセロの人(219) :04/02/01 06:20
>>229
お疲れ様ー&ありがとー

こちらの進捗状況は、
・指し手生成 →未テストだけど動作するようです。
・指し手実行 →同上
・指し手取り消し(undo) →まだ
・入力 →手抜きで作成済み
んで、undoを実装するまえに、
「局面をファイルからの読み込む」機能があると便利かなぁと思って、それを作成中です。
テストとかも自動化できそうかも、とか考えてます。

・・・将棋だとCSA形式っていうフォーマットがあるけれど、アレの局面データの読み込み大変そう・・・

231 名前: ◆R/rLuLKeEI :04/02/01 12:27
夜更かしの反動でまだ布団の中。
>>オセロの人さん
局面の読み込みはCSA形式のサブセットもどきを実装済。
持ち駒と成りのない局面なら読み込める。

今後の予定は先手:人工無能、後手:手入力(他の将棋ソフト)で対戦。
人工無能、局面表示の更新、後手番で局面のSAVE、UNDO/REDO、入力を実装する。
三手目までいけたら後は細々としたルールを実装しながらSAVE、終局まで対戦。
終局したら定跡学習の実験と人工無能の改善。

必要な機能は必要になったときに実装する方針。

つい長くなってしまった。
申し訳ない。

232 名前:デフォルトの名無しさん :04/02/01 17:34
Delphiで作り始めてみたものの...
クラスメソッドは一つのファイルに記述しないといけないみたいなのでDelphiで作るのは諦めました。

勉強を兼ねてC++で作り直すことにします... _| ̄|○

233 名前:オセロの人 :04/02/01 18:56
>>R/rLuLKeEIさん
昔いきなり将棋を組もうとしてCSAファイルで挫折したので、すごいなぁと思います。
作り方や方針を聞くと、刺激になります。
こちらはボトムアップで作ってます。
そちらはトップダウンで作ってるのかなと思っています。

こちらは、のんびり作成中です。
指し手生成/実行/取り消し(undo)、局面表示/読み込みは実装済み。
今後は、上の実装はチェック不足なので、チェックできるようにインタプリタみたいなの組もうと思います。
文字列"p"が入力されたら盤面表示、"g5"とか入力されたらオセロの指し手とみなして手を進めるとか。
インタプリタが出来たら、終局チェックとか、パスなのかって判定を作って。
ああ・・・思考部への道は遠いです。ごちゃごちゃ、書いてますが・・・書くと方針が決まるので(^^;;

>>232 ふぁいと!

234 名前:オセロの人 :04/02/02 00:03
インタプリタというかコマンド解釈部を作ってテストしてました。
エラーは全部コマンド解釈部にありました。
オセロの基本動作部にはエラー見つからず・・・なんだかなぁ。
ということで、今日はお終い。
今度は終局判定とパス判定を作ります。
そしたら人対人のゲームができる・・・かな。

235 名前: ◆R/rLuLKeEI :04/02/02 01:45
>>232
implementation以下に全部入れないといけないみたいですね。
こっちは将棋プログラムには向いていないJavaですが、Javaも似たようなも
んです。
C++やObject-Pascalと違ってヘッダみたいなのがソースにはないんで、メソ
ッドがコードに埋もれていく。javadocあるからいいけど。

>>オセロの人さん
他の将棋ソフトが出したCSAファイルはまだ読めません。
良く似た別物です。
具体的にはCSAサーバープロトコルのBEGIN POSITION〜END POSITIONの一部分
だけしか読めません。

設計はトップダウンで実装はボトムアップというか混合でというか適当。

C言語でそんなにあっさり作れるんですね。

昔、窓じゃないDOSでTourbo Pascalを使ってJIS-PASCAL水準0の範囲内でオ
セロを作ったことがありますが、とっても恰好悪いインターフェイスで待っ
たはないし、読み込みもない、弱い遅いメモリ食いと良いとこ無しで、修論
をいじくっている内にソースごと何処かへ行ってしまった(笑)。
UUCPでメールをたらい回しにしていたような頃です。

実装の続きは多分次の土日。
それまではデザインパターンの記事(Cマガ1999/4〜11)を精読。

236 名前:デフォルトの名無しさん :04/02/02 02:04
このスレ地道に続いてますね。

個人それぞれの作った将棋の思考ルーチン同士をネットワーク上で
戦わせるためのプロトコルと、そのライブラリって簡単にできたりしないかね?
比較的簡単だと思うんだが。

既に話がでていたらごめん。

237 名前:デフォルトの名無しさん :04/02/02 02:24
>>236
>個人それぞれの作った将棋の思考ルーチン同士をネットワーク上で
>戦わせるためのプロトコルと、そのライブラリって簡単にできたりしないかね?
ええと、既にある。
一番使われているのはCSA将棋じゃないかな。

238 名前: ◆R/rLuLKeEI :04/02/02 08:51
補足
コンピュータ将棋協会が公開しているシリアル及びTCP/IPプロトコルとサンプルルーチンがありますよ。
都万さんによる思考部のない実装(上で挙がった"CSA将棋")があります。
CSA将棋を使わないのは素では自宅の開発環境で動かないから。
通信プロトコルは自前のPlayer抽象クラスが安定したら
CsaPlayerサブクラスを作るつもり。
予定は未定であり決定では…

239 名前:オセロの人 :04/02/02 21:52
のんびり、ソースファイルの整理と勢いで書いたところへのコメント追加中。
あ・・・ソース300行超えてる・・・。

>>235 ◆R/rLuLKeEIさん
> C言語でそんなにあっさり作れるんですね。

まだ、難しいことしてませんし・・・。
ここからが難しいのじゃないかと思っています。

ちょっとおせっかいですけれど、
Javaでデザインパターンの勉強をなさるなら、
ttp://www.hyuki.com/dp/
ttp://www.hyuki.com/dp/dp2.html
が分かりやすいって聞きます。

240 名前: ◆R/rLuLKeEI :04/02/03 00:09
>>239 オセロの人さん
ありがとう、既に訪問済みです。
でも電子媒体より紙の方が扱いやすいのでこの記事でいいです。

関係ないが風邪ひいてもた。

241 名前: ◆R/rLuLKeEI :04/02/03 02:08
>>236
前スレッドで分岐した「おまいら最強の麻雀プログラムしてみろよ」も地道にAI開発が進んでいますね。
興味津々。
関係が薄いのでsageます。

242 名前: ◆R/rLuLKeEI :04/02/03 12:30
>>239 オセロの人さん
>>240で墓穴掘りました。書籍紹介でしたね。ありがとう。

243 名前:デフォルトの名無しさん :04/02/03 19:15
このスレでゲームうpした人いる?
ソース無し、思考激弱又はユーザー対戦のみでよいから見てみたい。

244 名前:ハブ夫 :04/02/03 23:46
皆さんがんばってますね。
関係ないけど、なんか、同士ががんばってる気がして、
嬉しいですね。
同じ目標を持ってる仲間見たいのが居ると、なんだか励みになりますね。
お互いがんばりましょう。
いずれ、最弱決定戦くらいは開きたいですね。
それには、24を利用しても良いですしね、、、。

245 名前:オセロの人 :04/02/04 00:29
簡単にレス
>>242
失礼、書籍名書かなかったので勘違いさせちゃいました。
お風邪は大丈夫ですか?

>>243
私はUPしてないです・・・今やってるオセロは公開しないつもりです。

>>244
ですよね。
私もこちらの書き込みを読んだり、
こちらに書き込んだりすることが励みみなってます。

オセロの近況:
現在、思考ルーチン同士の対局が出来るようになってます。
・最初に発見した手を指す
・1手指してみて、自分の数が最大になる手を指す
・全幅探索
ってのがあります。
で・・・全幅探索が納得いってないので、
・思考中の評価値をプリントする(正しいかチェックできない)
・プログラムがすっきりしてないので、綺麗にする(自分で書いたものが分からない)
・性的評価関数と探索の深さを外部から指定できるようにする(いちいちコンパイルしなおすのはちょっと)
やっぱし、勢いで書いちゃだめですね。

246 名前: ◆R/rLuLKeEI :04/02/04 02:34
>>243
私を含めてこのスレッドでは誰もupしていない。
いつか自分のページを作って公開する予定。

>>244 ハブ夫さん
頓挫しないのは皆さんのお陰。
最弱決定戦いいですね。
何れやりましょう。

>>245 オセロの人さん
風邪はひどくなりました。
薬用酒飲んで寝ます。
貴方も熱中して体壊さんように。

Javaの言語仕様を読み始めた。
なんか将棋から離れていってる…。
なお悪いことに次の土日は少なくとも一日は仕事が決定したし、
翌週の土日に至っては二日とも出張。
ほとんど注釈入れてないから解読が不安だなあ。

247 名前:ハブ夫 :04/02/04 14:24
俺はついに悟った、、、。
将棋とは攻めないほうが強い、、、ひたすら守って、相手が無謀に攻めてきたときだけ、
その無謀な敵の駒をゲットする動きだけを繰り返せば良いということを、、、。
大体、俺がうさぴょんとやって負けるときは大抵攻めてるからだ、、、。
そこで、銀金王金銀の駒だけをそれぞれ1枡だけ上げて、その状態をひたすら維持した、、、。
すると、、、







千日手になって終わった、、、。

248 名前:ハブ夫 :04/02/04 14:30
ふう、俺の中ではかなりの好成績だ。
何しろ、いつも負けてるからな、、、。
やはり、将棋とは守った方が強い、
将棋=待ちゲー理論、ガイル理論成るものを提唱したいと思う。
大体、攻めるってことは自分の駒を前に進めると言うことだ。
すると、どうなるだろうか?
そう、自分の駒の中から1駒だけ全体の中から突出してしまうわけだ。
すると、その駒は、当然餌食になりやすい。
逆ならどうだろうか?
敵が無謀に攻めてきた場合、自分の強力な駒組みの中に一つ、又は少数の駒が進入してくるわけだから
その駒をとって駒得を果たせばよいのだ。
これを繰り返せば、駒得を繰り返した結果、少しずつ、有利になってくるわけだ。


249 名前:ハブ夫 :04/02/04 14:31
ただ、問題は千日手になるだけの結果しか起きないと言うことだ、、、。
これが最大の問題である、、、、。

250 名前:ハブ夫 :04/02/04 14:34
アホか!?

251 名前:デフォルトの名無しさん :04/02/04 15:37
>>247
>銀金王金銀の駒だけをそれぞれ1枡だけ上げて、

端攻めや棒銀で一点突破を狙われると即死しそうな。
大概のソフトは守りが堅いわりに攻めが下手だと思うけど、
その辺り、人間の読みと何が違うのかな。

252 名前:243 :04/02/04 16:25
>>245>>246
今、目標が無いから、2,3人うpしてくれれば、前作ったのを修正して
参加しようと思った。1番目は何か嫌だし。うpお待ちしてます。

>>247
将棋の駒は前に動きやすいように作られているから攻めの方が強く
上級になるとそれでは通用しにくくなる。駒を盛り上げてって攻めの体勢
自体を作らせないように指すやり方はあるけど。

その囲は玉頭がかなり薄い。中住まいに似ていると思うけど、
金銀が逆なだけで大きく違う。5筋の歩、桂だけで簡単にやられそう。

>>251
指手が多い序盤は定跡で、少ない終盤はコンピュータの読む速さを
利用してだけど、中盤はまだ難しいとされているね。
相掛りの時に、歩の突き捨が必要なことが多いけど、一時的な駒損に
なるから苦手だったり。

253 名前:ハブ夫 :04/02/04 21:27
>>252

なるほど。私がただ、へたくそだと言うだけですね。

254 名前:232 :04/02/04 23:03
>>243

・思考激弱(というよりただ単にαβがプログラムに書いてあるというだけで、実際は何とか駒が動いているレベル)。
・手数や指し手の記録および表示なし。
・粗末なGUI。
・見辛いソース。

という、お笑いレベルのものでよければうpしますが(^^;


255 名前:オセロの人 :04/02/04 23:04
今日はコーディングしてません。(^^;;
昨日書いた目標で

・思考中の評価値をプリントする
→どうしよ
・プログラムがすっきりしてないので、綺麗にする
→どうしよ
・性的評価関数と探索の深さを外部から指定できるようにする
→これは簡単。引数に評価関数と読む深さを追加すればいい

どうしよ・・・のところは書いてみないことにはわからん・・・
って停まってます。

とりあえず、ちょっと後退して、
読む深さは無視して1段目の評価値だけプリントするようなプログラムを書きますか・・・
考えをまとめるための捨てルーチンですね。速度&汎用性は考慮しない、分かりやすいもの。

ここに書くと、考えがまとまります。ではでは。

256 名前:オセロの人 :04/02/04 23:12
>>254
おお、すごいー。私はCUIの人なので、尊敬!

257 名前:デフォルトの名無しさん :04/02/05 00:01
>>254
師匠と呼ばせてください。
いろいろ研究したが、GUIの作り方がさっぱり分からん。
っていうかCUIの方も途中で挫折したわけだがw
そういう訳で、是非うpしましょう。
できれば、コメントたっぷりでお願いします。
あとそれとは別に、詳細を綴ったテキストファイルを同封するとみんなが喜びます。

258 名前:243 :04/02/05 00:13
>>253
逆に急戦の方を覚えたほうが効果があると思う。

>>254
ぜひ!おながいします。

>>255
自分のオセロは6手読みで角端をねらうだけ。
指せる手の種類が多いとき時間が掛かるので、中盤は1手30秒掛かる事もある。

259 名前:257 :04/02/05 00:22
えっと、とりあえず今のところ将棋プログラムするのが難しいので
うさぴょんの、定石強化しようと企んでいるのですが、うまくいかないです(TT;;
一本道の定石ならうまくいくのですが、分岐が入るとどうも、うまくいきません。
将来的にはKIF形式に対応したいのですが、どうすればいいのやら、さっぱりですな。



260 名前:232(254) :04/02/05 01:18
ソースに関しては、うさぴょんを参考にしている部分があるので
うさぴょん育ての親さん(作者)に連絡をとってみます。


261 名前: ◆R/rLuLKeEI :04/02/05 08:04
232さん、すばらしい御決断です。
などと病床から応援します(咳が止まらない)。

262 名前:うさぴょんの育ての親 :04/02/05 12:52
>>260
ソース確認しましたよん。
既にメールでお返事しましたが、どうぞ公開してください。

263 名前:232(254) :04/02/05 13:11
うさぴょんの育ての親さん、有難うございます。
(メールでもお礼させていただきました)

下記にて うp しております。
http://www.geocities.co.jp/Playtown/3325/



264 名前:243 :04/02/05 15:03
>>257
自分はCUIで最初はA∀とかで表示してたのだけど、
GUIにしていろいろめんどくさくなって製作を中止していた。
うp楽しみにしています。

>>262
ありがとうございます。

>>263
うpありがとうございます。遊ばせてもらいました。
シンプルですが、作っていく上で土台となる部分はしっかり出来ている。
まず、基本的なルール部分が出来ていて、ドラッグ操作というのでもすごい。
思考は、いきなり角交換、95角という手でびっくり。
でも自分でもこう指すという手を結構指してきてやるなと思った。
これからも製作を頑張ってください。

265 名前:257 :04/02/05 21:39
>>263
お師匠様うpサンクスです。
おいらの実力では、ソース見てもさっぱりですたw
もう少しプログラムの修行をせねばならんな。。。



266 名前:オセロの人 :04/02/07 01:21
>>262さん
>>うさぴょんの育ての親さん
公開ありがとうございます。

こちらのオセロの近況:
全幅探索(mini-max法)は納得いったので、次はalpha-beta法に挑戦予定。
その後、評価関数を作成して比較・・・って構想です。
パスした後の探索してませんが、オセロを強くするのが目的ではないので、捨て置くつもり。

今月中には将棋に移行したいと考えてます。
プログラムの構成方法や、調整のしかたをオセロで演習するつもりでしたが、
構成方法はオセロで理解できても、
調整のしかたは私にオセロの知識がないので、
調整のしようがないなぁと・・・。
あ、知識を使わないで調整する方法を探します。

いつもどおり、ここに書いて、頭を整理するオセロの人でした。

267 名前: ◆R/rLuLKeEI :04/02/07 02:46
近況:
毎日終電or徹夜and休出で全く進まん。
以前のように時間外の会社のリソース使って最強(予定)の将棋プログラムしてみたくなってきた。
夜食の代わりに日曜プログラミング。

まだupされたソースをじっくりみていないが駒のドラッグ&ドロ
ップはラベルのようなコントロールではなくピットマップを都度
描き直してるようだ。
Javaでもそうするのが自然なのかな。本質的でない所で躓いてる。

オセロの人さんの将棋の方が先に完成する予感。

268 名前:デフォルトの名無しさん :04/02/07 03:09
>263の思考ルーチンって、自分が有利な状況でも割とあっさり投了する気がするのは気のせいだろうか。

269 名前:263 :04/02/07 04:00
>>268
正直、思考してません(^^;
添付のreadme.txtにも書いてあるように適当な評価関数で動いているだけです。
投了の件も含め、色々バグがあるかもしれません。大目に見てやってください(^^;

うさぴょんの育ての親さんのHPに「将棋プログラムの作り方」が載ってますが、(>>72
その中に、
「ここまでは基礎技術で、将棋プログラムを書き始めれば
誰でも調べものをしながら到達できる地点です。
ここからが各将棋プログラムの工夫になります。」
とコメントされている場所があります。
>>263のプログラムは、「ここまでは」に当てはまるレベルです。

270 名前:デフォルトの名無しさん :04/02/07 12:10
「ここまでは」でこれほどむずい。もう少し低レベルで共同開発、研究できないか。

271 名前: ◆R/rLuLKeEI :04/02/07 13:47
大会に出ないのであれば上の方で紹介されてたライブラリを使うか大会に出るのであればUIはCSA将棋に任して思考部分に集中する
くらいが現状では最も楽な選択肢かと。
CSA将棋が内部で持っているであろう局面の複製や合法手判定、局面の遷移などのサービスルーチ
ンが利用できたらもっと楽なのに。
今、JavaでUIから作り直しているやつはUI側からPlayer側へ現在の局面を複製したインスタンスが
渡ってくるようにして解決しようと思っている。
思考部分を除いたものをソースなしで公開して他の人がこれを利用したらやはり大会規約に抵触するのか?

272 名前:263 :04/02/07 16:21
>>271
どこまでを「思考部分」と判断するのか...ですね。

「探索速度に影響を与える部分」まで含めて思考と考えるならば、
手の生成どころかデータ構造までも含まれてしまいますし。
極端な話、MiniMax探索やαβ探索を取り入れることですら抵触してしまうことになります。

自分としては、
ソースの流用(一字一句間違ってないようなという意味で)が問題にされるのであって、
アルゴリズムの流用については問題ないのでは思ってますけど...
(つまり、全く同じ結果を得るものだとしても、その結果を得るアプローチが異っていればいい)

UIの話は、大会に出ることを前提としているならばCSAに問い合わせるのが無難かと。


273 名前:デフォルトの名無しさん :04/02/07 18:54
>>259
あらゆる棋譜をぶち込む。
対局者の強さや結果の勝敗の程度で重み付けした頻度で管理する。
定跡としてどの値以上を選択させるかを後から指定できる。

そういうデータベースを新たに考えてみてはいかがでしょう。
一億局あたりでほぼ定跡はずれなしになると思いますが。

274 名前: ◆R/rLuLKeEI :04/02/07 23:59
データ構造は思考部分に当然含まれるでしょう。
となるとサービスルーチンを用意しても結局は利用されなくなるということですね。

275 名前:デフォルトの名無しさん :04/02/08 04:27
>>273
世の中に棋譜が1億局もないんですよ。残念ながら。
ましてや信頼出来るものとなるともっとずっと少ないです。


276 名前:47 :04/02/08 06:16
>>275
>>273で言っている1億というのは局面の数だと思われ。
つまり76歩で1局、34歩で1局と逝った要領。
この調子で仮に1手につき3局面分岐させたとしたら、17手目で1億を超えます。
無論というか言うまでもなく、上記の中には手順前後などによる同一局面が半分以上(8割ぐらいか?
含まれると思います。
これらを、うまく木構造にまとめることができれば、確かに無敵に成れると思うのですが、如何ともしがたい
ものがあるのですよね。そういうわけで、2ちゃんネイチブなデータベースつーのを作ってみるわ。
少しまちなー。

277 名前:ハブ夫 :04/02/08 06:35
なんか、結構活動が本格的に成ってきましたね。
>>276
同一、重複局面ってそんなにあるのですか?
かなりあるんですね。
まあ、当たり前か、1四歩と2四歩はどっちが先だろうが後だろうが、同じだけど、
どっちから探索しても絶対に出てくる局面ですしね、、、。

278 名前: ◆R/rLuLKeEI :04/02/08 10:11
>>276-277
1局終了毎に勝者が遭遇した局面と勝者が選択した手の組をDBに保存。
同一局面なら遭遇数をカウント。
同一局面で異なる手があれば上書き。
DBがいっぱいになったら遭遇数最小の局面を全て削除。

ダメだな。1億局面覚えても大半の局面が遭遇数1だろうな。
より強い相手の思考結果を記憶するのは良い案だと思ったんだが。

279 名前:デフォルトの名無しさん :04/02/08 10:28
全手順持つのはオセロならできそうだな

280 名前: ◆R/rLuLKeEI :04/02/08 11:14
>>289
DBから削除するのを平手から遠い局面からにしたら将棋でも序盤は最強に!ならんかなあ。
最強のオセロはそんなDBで序盤は最強になったとどっかのサイトで読んだ。

281 名前:デフォルトの名無しさん :04/02/08 16:30
>>278
遭遇数をそのまま記録したらどうだろ。
まさに頻度管理でいくと。

282 名前: ◆R/rLuLKeEI :04/02/08 17:02
>>281
>同一局面で異なる手があれば…
のところですね。手を上書きしないで追加して…遭遇数は局面に、頻度は手に持
たせることになるのか?

オセロにはLogistelloが対戦から自動収集したLogistello bookなる良質の定石
集があるようだが、とりあえず>>276さんの2ちゃんネイチブなデータベースつー
のを期待しよう。

283 名前:デフォルトの名無しさん :04/02/08 17:13
とりあえず激指3の棋譜集解析でどのくらい棋譜を集めたらいいかの見当はつくんじゃないのか。
頻度もそのまま出てきてるみたいだし。

284 名前: ◆R/rLuLKeEI :04/02/08 23:50
>>283
まずは激指3でも買うか…Linux版はないよな。仮想機械から導入っと…後回しにして寝よ。

ところでゲーム製作技術板とここは敵対してはるんですか?

285 名前:デフォルトの名無しさん :04/02/09 00:52
>>276
局面数でも人間が指した局面が1億局面も集めることは出来ないでしょう。
プロなど信頼できる人間が指した手に限ると100万手くらいのものである
ことは、市販ソフトがいずれもそれくらいの数の定跡を搭載していることから
予想されます。
仮に1億局集めてデータベースを作ったとしても、序盤で20手も指せばすぐに
未知の局面が出てきて大して役立たないでしょうね。


286 名前:デフォルトの名無しさん :04/02/09 01:08
>>285
ちゃんとイメージできてますか?
一億局の人間の試行錯誤の集大成ですよ?

一億局の効率的なデータベースで有効そうな定跡はずしが残るとは思えませんが。

287 名前:デフォルトの名無しさん :04/02/09 01:27
>>286
よく言われてることだけど、仮に各局面で平均3通りの定跡手があるとすると、
一億 < 3^17 (3の17乗) = 129140163
なので17手目の局面から既に定跡外しが存在することになる。


288 名前:デフォルトの名無しさん :04/02/09 01:33
あ、あと、定跡は下手に外された時にそれを咎められなくちゃいけないけど、
既存の棋譜には「全ての失敗」が載っているわけじゃないから、
咎める手を自力で捻り出すしかなくて、結局咎め切れないってことはあるね。

というわけでたとえ一億局でも効果は限定的なものになるだろう、に漏れも一票。

もちろん一億局のデータがあればあったで何か使い道があるだろう、にも一票。

289 名前:デフォルトの名無しさん :04/02/09 01:42
>>287
その通りで、一億なんて全然大した数じゃないですよ。
しかも、それだけの数のデータを得ることさえ無理だと言ってるわけです。

290 名前:オセロの人 :04/02/09 01:43
近況:
オセロで煮詰まってたので、気分転換。
将棋の基本データ構造をどないしょ。とか考えています。
考えてるだけで、作業のほうでいえば、成果ゼロの日。
メモはたくさん書きました(^^;;

291 名前: ◆R/rLuLKeEI :04/02/09 03:43
お早うございます。
オセロの人さんの真似をして覚え書き;
・定跡DBの構造を探索に使う局面表と同様にする。
・つまり局面と最善手の組をたくさん用意する(多分実戦経験からの蓄積で)。
・どのエントリから始めても1本道の定跡手順が得られるようにしたい。
・定跡外しの手で得られる局面がDBにあればその局面の手は咎めの手に他ならず、外しの手を記録する必要はない。
・次善の手についても同じ。
・もちろん未知の局面については通常の探索を行う。
・探索の途中でも参照する。

これはもはや定跡じゃなくて部分解木カタログだ。

292 名前:オセロの人 :04/02/09 05:51
おはようございます。
珈琲飲みつつ。
頭の回転が速い時間(朝飯前)に
・オセロのコードのいらないところをバッサリカット
・コマンド駆動部再構築。
・時間があれば、手の生成部分を改定。
さて、どこまでできるかな。

293 名前:オセロの人 :04/02/09 06:59
手順:
・ソースばっさりりカット
・コマンド駆動部(インタフェース入力部)書き換え

結果:
玉砕。

失敗したところ1:
コードの要らないところをカットしたが、
その作業結果を確認できない形でカットした。
そのため、確認をせずに次の工程にすすんでしまい、
次の工程でぐちゃぐちゃになった。
→作業結果を確認できる形で目標を立て、
次の工程に入る前に確認をきちんとましょう(;_;)

失敗したところ2:
何も考えないで、入力部をプログラム組みだし、ぐちゃぐちゃになり、まったく進まず。
→きちんと設計しましょう。
設計があいまいにしか出来ないのなら、捨てプログラムなどを書いて、具体的にしていきましょう。
いきなり本番で試すのはダメです(;_;)

リカバーをどうするか:
・ソースをバッサリカットする前に戻す
・確認できる形でソースのカットをするよう考え直す
・入力部の設計をする

ぐすん。朝の作業は、これまで。

294 名前:デフォルトの名無しさん :04/02/09 07:44
>>293
>玉砕
ワロタ

でも細かく分かり易く書かれているな。参考にさせていただく。

295 名前: ◆R/rLuLKeEI :04/02/09 07:52
>>293
転ばぬ先の杖。
昨日の自分は赤の他人。
バージョン管理ツールを使ってないことを激しく後悔する瞬間ですね。

296 名前: ◆R/rLuLKeEI :04/02/09 08:17
CVSやRCSやVSSやソース丸ごとアーカイブとかやっていて簡単に戻せるなら私の早とちりです。
すんません。
VC++ならVSSがIDEに統合されてて便利ですね。

297 名前:デフォルトの名無しさん :04/02/09 10:01
>>287-289
あんたら将棋知らんだろ?
一億局の初心者からプロの棋譜を管理してるんだぞ?
定跡はずしできるもんならしてみろ。
定跡は手順前後を処理さえできれば
予定軌道に戻ってこれる可能性が高いんだ。


298 名前:デフォルトの名無しさん :04/02/09 10:18
確かに人間が打つならそうなんだろうけど一億局の局面使って評価しても
うまく評価できるとは限らないと思うのですがいかがでしょうか。
定跡はずしできるもんならしてみろといいますが
実際には定跡はずしできないようにきちんと評価をするのが難しいのではないでしょうか?

299 名前:デフォルトの名無しさん :04/02/09 11:13
>>297
十分良く将棋もコンピュータ将棋も知ってる者ですが。
比較的似たような手順が多く指されるプロの将棋でも、例えば昨日の
NHK杯の森内−谷川戦は6手目で既に過去のプロの棋譜で現れてないようですね。
この局面はまだかつて人類が指したことがあるでしょうが、さらに10手
くらい進んだ局面は、おそらく誰にも指されたことがないでしょう。
将棋の探索空間というのはあなたが考えるよりもずっと大きいですよ。
何しろ指数関数的に局面数が増えますから。

まあいくら理で説いても分かってもらえないようなので、ご自分で
動くシステムを作って、一億局とやらをどこかから集めれるものなら
集めて、試してみるといいでしょう。


300 名前:デフォルトの名無しさん :04/02/09 13:04
最強のオセロを作るのは簡単だと思ふ…
まぁ、実用的な速度は全く期待できないけど…

301 名前:デフォルトの名無しさん :04/02/09 14:12
昔ならともかく、今のスペックならあまり速度も問題に
ならないんじゃないかな

将棋で最強にするにはどのくらいのメモリとクロックがいるかねえ

302 名前:デフォルトの名無しさん :04/02/09 16:19
>>300
LOGISTELLOに勝たないと最強とは呼べないぞ。

303 名前:デフォルトの名無しさん :04/02/09 16:34
Logistelloとは簡単に対戦できないから中盤はLogistelloと同等で
終盤は10倍以上速いフリーで手に入るZebraがいい対戦相手になりそう。

オセロも強い人間に勝てるプログラムを書こうと思ったら
作者もその人間と同じくらいの強さを持っているか
最初からオセロの評価関数についての文献を読まないと難しいかもね。

304 名前:300 :04/02/09 18:14
>>302
全検索をすれば良いだけ
ただ、300で書いた通り、速度に問題があるけど…

305 名前:デフォルトの名無しさん :04/02/09 18:34
>>304
それを言ったらどのゲームも同じなんじゃ…

306 名前:デフォルトの名無しさん :04/02/09 18:41
>>305
ループするもの(このスレの将棋等)では、全検索はムリ

307 名前:デフォルトの名無しさん :04/02/09 18:42
>>304
メモリは何GB積んでいるの?
というのはさておき、Part1の最初期に出てきそうな発言をかまさないでください。

308 名前:デフォルトの名無しさん :04/02/09 18:50
速度を問題にしないならそれまでの一本道を戻って同一局面かチェックするだけだから
ループ自体は問題にはならないでしょ?

309 名前:デフォルトの名無しさん :04/02/09 18:57
>>307
メモリは殆ど必要ないよ

>>308
将棋の場合、どんな局面でも、ほぼループ出来るし、
終局の形が多すぎるので、単純に、全検索をするのは、難しいと思うけど…?

310 名前:デフォルトの名無しさん :04/02/09 19:00
>>309
ループがあっても原理的には解けないわけじゃないのではと言いたいだけで
現実的には全く無理だと思ってますよ。

311 名前:デフォルトの名無しさん :04/02/09 19:03
>>310
>ループがあっても原理的には解けないわけじゃないのではと
…すまそ。確かに、そやね。

312 名前:デフォルトの名無しさん :04/02/09 19:39
>>299
相振りにはようやくトッププロが本気になって取り組みだした。
相振りの定跡はこれから充実してくる。

おまえら、とりあえずやれることやってから御託述べろや。

なにが指数関数的だ。
有効そうな局面はあらかた開発済みで、
その近辺も過去にアマの実戦で指されてるんだよ。
24の棋譜みたことあんのか?

313 名前:デフォルトの名無しさん :04/02/09 20:12
>>312
24の棋譜ってなんぞや?

314 名前: ◆R/rLuLKeEI :04/02/09 20:37
>>312
はい、やってみます。
ただ週一位しかプログラムに触れないので実装・テスト完了に半年以上かかると思います。

五度目の挫折が訪れないことを祈りつつ前進したい。

315 名前:デフォルトの名無しさん :04/02/09 21:13
イメージする代わりに妄想されてもね…


316 名前:デフォルトの名無しさん :04/02/09 21:21
24の棋譜って100万局以上以下?

317 名前:デフォルトの名無しさん :04/02/09 21:36
>>312
>相振りの定跡はこれから充実してくる。

そんな都合いいこと言われても…


318 名前:デフォルトの名無しさん :04/02/09 21:53
24の棋譜に
9八香、3四歩、5八玉、8四歩の棋譜あるか。


319 名前: ◆R/rLuLKeEI :04/02/09 22:00
将棋人口の上位2万人に毎日1局ずつベストの状態で指してもらって年間365万局。1億局まで27年!
へぼ将棋も含めれば1年で達成するかもしれんが意味あるのでしょうか?
実装を見送りたくなってきた。

320 名前:デフォルトの名無しさん :04/02/09 22:18
>>317
棋界のおおまかな流れぐらい知っておいてくれよ。
昔は相振りはアマチュア主流のマイナー戦法で
ちょっと前まではB級プロ棋士しか研究に取り組んでこなかった。
プロ棋戦での実践例も少なく、少なくとも群としての定跡と呼べるものはなかった。

ところが最近、振り飛車対策で居飛車感覚を使う相振りがよく見られるようになった。
そして、ここ数年の羽生の興味はタイトルや勝率ではなく、
トッププロを相手に実戦で新しい将棋を切り開くこと。

そしていま、相振りの新しい世界が開けようとしている。

>>318
それで反例をあげて「定理」を否定した気になってるの?
だれも定理なんか書いてないよ。

かなりの程度有効な定跡データベースをつくろう。
そのためにはまず形式を詰める必要がある。

そういってるだけだが、なぜムキに反論する?
確率的に起きうるすべてをカバーする必要はない。
棋理的にありそうな有効そうな比較的狭い世界を
できるだけカバーできる定跡データベースをつくることを
考えようと言ってるだけ。

>>319
まず、あたらしい棋譜データベース形式を考える。
次に、久米氏を説得して24の全棋譜を取り込む。
これだけでかなりのデータベースができると思うんだが。
24との提携だな。どちらにもメリットはあるはずだ。

321 名前:オセロの人 :04/02/09 22:37
こんばんは、玉砕の人です。
朝の課題は次のようにして片付けるつもりです。

・ソースをバッサリカットする前に戻す
→バックアップから回復。

・確認できる形でソースのカットをするよう考え直す
→ソースのカットはプログラムの変更があるわけだから・・・
 要らないことろを使わないようにプログラムを変更→残した部分が今まで通り動くかチェック。
 その後、ソースの使わない部分をカットし、同じチェックが通ることを確認する。

・入力部の設計をする
→変数や制御構造や式はない行指向のインタプリタ。
 ・引数の渡し方はmain()と同じようにするか、char *arg(int n)というようにアクセス関数を用意するか?
 ・別プログラムとして作る。
 ・各命令を実行するC関数にジャンプするところまで組んでみる
 ・各命令を実行するC関数は命令名と、引数を表示するだけのもの

設計ではなくって、作業の進め方の話になってますね(^^;;

322 名前:デフォルトの名無しさん :04/02/09 22:40
>>320
んじゃ言っとくけど、24の棋譜集の中身は多分多くの人が抜いたことあると思うよ。
漏れでも1時間もかからずプログラム書けた記憶がある。
誰も「やらずに」反論してるわけじゃないよん。
まぁそもそも反論してるわけじゃないし。やってみればいいんじゃないの?

323 名前:デフォルトの名無しさん :04/02/09 22:48
勘違い君はほっとけ


324 名前:デフォルトの名無しさん :04/02/09 22:51
>>320
コンピュータが指すために使う定跡データベースという考え方は、止めたほうがいいんじゃないかな?

最終手までの定跡は存在しないわけだから、
当然途中でコンピュータは自分の思考に入る。
が、定跡が終了した時点での正しい評価がコンピュータに出来かどうかが問題。
そのギャップが、今の問題点だと認識しているんだけど...

定跡というのは手順にそって指せば有利な局面に導いてくれるものと自分も理解しているが、
それは研究過程での分岐手順や局面の評価が存在しているからこそ、思っている。
だから、コンピュータが、そういった手順や局面を正しく評価し、
有効活用できるデータとして保存できなければ、
意味の無いものになってしまうと考えている。

簡単にいえば「有利にならない手」をコンピュータが正しく判断できないと意味が無い、
ということ。


325 名前:324 :04/02/09 23:41
>>320
「確率的に起きうる全てをカバーする必要はない。」とあるけど、この考え方が問題かもね。

人が手を考える時は、確率的に起きうる全てを「個々の知識(記憶)に頼って」カバーしてる、よね。
個々の知識(記憶)から判断して手の取捨選択するから。


326 名前:名無しさん@お腹いっぱい。 :04/02/10 00:04
I'm just doing my job, nothing personal, sorry

327 名前: ◆R/rLuLKeEI :04/02/10 01:34
>>320
新しい棋譜データベースの設計にあたって既存の各棋譜データベースの構造とその欠点を挙げたい
のだが、残念ながら将棋に関しても既存の棋譜データベースに関しても無知なので何から手をつけ
たらよいのやら。
既に問題点の洗い出しがすんでおられるのならお聞きしたいのですが如何でしょう。
24から全棋譜を取り込むこちら側のメリットはまあわかるのですが24側に一体どんなメリットがあ
るのでしょうか?

データベース型将棋ソフトというと都万さんのところにある"お城将棋"が思い浮かびます。
その内、評価してみるかもしれません

328 名前:デフォルトの名無しさん :04/02/10 04:39
百万局ならDBいらない。1手2バイト、1局100バイト、100万で200MB。(席は止まりましたか)

329 名前:ハブ夫 :04/02/10 06:55
>>284
>ところでゲーム製作技術板とここは敵対してはるんですか?

何でですか?
何かあったのですか?

330 名前: ◆R/rLuLKeEI :04/02/10 07:28
>>328
ありがとう、咳はほぼ止まりました。
DBといってもオラクルやADBASとかは考えていません。
仰る通りファイルベースです。

>>329
正確にはスレッド:【オセロ,将棋】ボードゲーム【囲…がこちらを意識しているようなので舌足らずなこ
とを書いてしまった。

331 名前:デフォルトの名無しさん :04/02/10 09:06
>>324
>「有利にならない手」をコンピュータが正しく判断

そんなことができればソフトに定跡は必要ない。

有利かどうかは、実戦譜の頻度に表れる。
だから重み付けをした頻度管理定跡データベースを提案してるの。
圧倒的な量の一本化されたデータベースであって、
後の加工が楽(分離できる、値を変えられる、誰が指したものかわかる)なもの
であれば、ソフトにかかわらず人間にも有益。

>>325
将棋という空間は純粋に確率的な事象ではないんだよ。
有意義的に絞られる全組合せに比べれば比較的狭い空間なんだ。

>>327
プロ棋士や24の利用者に対してのメリットは、
十分に整理された定跡体系をつくるための土台を提供できること。
チェスにはあったが将棋にはなかったものをつくる機会を与えられる。

332 名前:デフォルトの名無しさん :04/02/10 10:17
SETIとか白血病のプロジェクトみたいにや、
一手打ったびに棋譜をたらい回しにしたらええんや。
枝の末端だけ仕事しとりゃええんや、累乗やいうても知れとろうわな。
せやけどそれはやっぱりプログラムとちがうんか、ちがいまっか、
そうか、わかったもう帰る。

333 名前:デフォルトの名無しさん :04/02/10 10:25
>>331
とりあえず誰か棋譜たくさん持ってる人で激指で棋譜集解析かけた人
定跡ファイルあぷキボンヌ。
頻度分布がどうなってるか見てみたい。

334 名前:デフォルトの名無しさん :04/02/10 15:05
>>331
「有利かどうかは、実践譜の頻度に表れる。」
だから、表れない手の場合、どのように対応するのかを聞いているんだけど。
理想的な定跡木を求めすぎ。

将棋初心者に、いきなりプロの定跡を教えるのといっしょ。
手順どおり指したところで、なぜその手順なのかを理解できないし、
もちろん手順以外の手を指されても、その手を理解できない。

初手に▲7六歩や▲2六歩を指すのは、みんなが指しているから、自分も指すの?そうじゃないでしょう。
大駒を働かせようという考えのもとに指される手であって、
結果、初手に▲7六歩や▲2六歩を指すのが他の手を指すより有利という個々の知識として蓄えられ、
さらに、大多数の人が同様の判断や知識によって指すから、
ほとんどの棋譜が初手▲7六歩もしくは▲2六歩になってるの。

極端な話、先手が初手から1六歩、1七香、1八飛と端を狙った場合、
定跡データベースとして、どう対応させたいと考えているの?


335 名前:324,325,334 :04/02/10 17:31
>>331
一般的に「〜戦法」と書かれた定跡本には色々な局面での分岐手順、それらの評価が
こと細かくかかれているけど、その分岐全てが実戦譜で表れるかといえば、疑問だよね。

ただ単に実戦譜の指し手統計を取るという定跡データベースを目指すのであれば
自分の見当違いということで、今まで言ったこと謝ります。すいません。

336 名前:デフォルトの名無しさん :04/02/10 21:00
>>332
局面から分岐する手の先を他のPCに投げて、そのPCでも同じことを繰り返せばいずれ最初の発信者
のモニタに先手必勝!などと出たりして。
数時間で世界中のPCがダウンするワームになる予感。
累乗<階乗だからまだましか

337 名前:デフォルトの名無しさん :04/02/10 21:47
263氏のUPで、「おお! 盛り上がってきそう!」とか思ってたのだが、
なんか違う盛り上がりになってるな(笑)

>>263 今まで見たフリーの中では盤駒が最も見やすく、感動しました。

338 名前:デフォルトの名無しさん :04/02/10 22:43
>>334
ソフトが初手の意味なんかわかってなくても、頻度はそれを代替してくれる。

>1六歩、1七香、1八飛

こんなありきたりのはずし方は、膨大な蓄積の中に包含されている。

もっと根本的なことをイメージしてもらえるかな?
漏れは完璧を求めていない。
確率的に有効な手段を提起している。

339 名前:デフォルトの名無しさん :04/02/10 22:47
>>334
>初手に▲7六歩や▲2六歩を指すのは、みんなが指しているから、自分も指すの?そうじゃないでしょう。
大駒を働かせようという考えのもとに指される手であって、
結果、初手に▲7六歩や▲2六歩を指すのが他の手を指すより有利という個々の知識として蓄えられ、
さらに、大多数の人が同様の判断や知識によって指すから、
ほとんどの棋譜が初手▲7六歩もしくは▲2六歩になってるの。

底まで考えてるなら、構想を持たせるアイデアを練ろうとしてるんだろうな?
現実的に有効そうな手法を提案しているのに対して、
やりもしないことで反論されても困る。

ソフトに構想を持たせろ、と前から言ってるのに誰もまともに考えて無いじゃないか。
ゲーム研究の根幹に関わることを、即効性がないからと
後回しにしてるくせに。

340 名前:オセロの人 :04/02/10 23:33
近況:
プログラムの要らない部分をカットするため、
関数呼び出しグラフを作成中。地味にやってます。

>>330 咳が止まられてなによりです(^^)

341 名前:デフォルトの名無しさん :04/02/10 23:35
>>339
後半部分だけ。

「ソフトに構想を」ってのはもうずいぶん言い古されてるね。
世界じゅうの研究者が考えてるよ。
ちょっとした研究会に出て、誰でもいいからつかまえてその意見ぶつけてみたら?
「うん、そうだね」って言われると思うよ。

研究者はいつだって一発当てたいと思ってるから、その辺は世界中で形に残らない感じで色々試されてるから。死屍累々だけど。
人工知能屋のコミュニティに入って呑んでみたら?

まぁ非難されてもこちらとしては苦笑するしかないね。


342 名前:デフォルトの名無しさん :04/02/11 01:32
「ソフトに構想を」っていうのもよくよく考えてみればなんか変だね。
ソフトはソフトなりにプログラムによって作られた構想を持ってるはずだよ。

「ソフトに「人間的な構想」」って言うんなら話はわかるけど...
まぁ、そういう研究テーマを掲げておけば、すごいことやってますよみたいには見えるけどね。

丸電さんの文章を思い出すなぁ〜


343 名前: ◆R/rLuLKeEI :04/02/11 02:15
>>340
ありがとう。
まだ故障箇所を抱えてますがなんとかなりそう。
昔、静的コールグラフを作るツールをαサーバーで見たけどフリーになかったかな。
仕様書工房は大袈裟で有料だしなぁ。

とうとう会社にソースを持ってきた。
そしたら、文字コードが異なるせいでコンパイル出来なかった。
簡易表示用の駒などの漢字をソースに直書きしているのが原因だった。
とりあえず会社で開発するのは視線が気になるので止める(かも)。
開発環境に左右されないように駒をビットマップファイルにしなくては。
今日もやはり停滞中。

344 名前:デフォルトの名無しさん :04/02/11 02:25
端歩を継ぐ者

345 名前:オセロの人 :04/02/11 08:15
>>343 情報ありがとうございます。調子が早く完全になりますように。

近況:
静的コールグラフの作成を地味にやっています。
欲張って、関数のグループ分けもコールグラフに書き込み中です。
・・・ツール自作しようかしら・・・。

現在、ソースが700行超えていて、全体を把握できなくなっています。
このままでも無理やり進めば1000行はいけるでしょうけれど、2000行は難しそう。
オセロでこの状態です。将棋は1万行は行くでしょうから、
大きいプログラムの作り方を習得するいいチャンスだと感じています。

346 名前:デフォルトの名無しさん :04/02/11 09:22
柿木将棋でLAN対RS232C通信を戦わせるこができますか?

347 名前:デフォルトの名無しさん :04/02/11 10:52
>>345
なんつーか、プログラミングに微妙に慣れてないのかな。
・ソースのリビジョン管理はすること
・コールツリーを作るよりもクラスの設計をきちんと行なうこと

ちなみに私がこの前作ったプログラムは約60ファイルで10000行弱だ。
全体を把握するにはメインとなるソースを眺めるだけだし、
大きなクラスもすべて独立しているから何の問題もない。

348 名前:デフォルトの名無しさん :04/02/11 11:31
ユニットテスト

349 名前:デフォルトの名無しさん :04/02/11 12:57
>>345
オブジェクト指向じゃないなら。
名前空間を細かく分割して(ファイルを分割するかC++ならnamespace)
局所的な関数が必要な所以外にもれないようにすると、コールグラフは要らない。

350 名前:オセロの人 :04/02/11 12:58
コールグラフは・・・結局完成させました。視覚的に捉えることが出来ました。
関数のグループ分けが上手くいっていなかった部分を確認できて役にたちました。

>>347-348 ご意見ありがとうございます。
慣れてないです(^^;;
慣れるためのプログラミングをしているところです。
実力は>>219に書いたとおりです。
普段は100行以内、大きくてせいぜい200行以内のプログラムを作っていました。

ユニットテスト・・・作ったものが期待どおり動くか確認しています。
リビジョン管理・・・一段階達成したと感じたら、ソースのバックアップを取るようにしています。
クラスの設計をきちんと行うこと・・・これ、一番できてないです。

クラスの設計をきちんと行うことは、私が使う言語がCですので、
多分、変数やデータ構造、関数の分け方、名前の付け方をきちんとすること
にあたると思います。これ、なかなか出来ていません。

それぞれ言葉はわかるのですが、自己流で場数もなく、
具体的にどうしたらいいというノウハウは持っていません。
どうやったら、筋のよい方法が身につくのかなぁ。
オセロをプログラムしながら、身につくといいのですが・・・。

ツッコミどころ満載なオセロの人でした(^^;;

351 名前:オセロの人 :04/02/11 13:11
>>349さん
コールグラフは要らない、といのは理解できます。
初めから、上手に分割できるできていれば・・・ですが。
私は出来てなかったので、コールグラフが必要でした(^^;;

>>347さんにも指摘いただいてますけれど、
「設計をきちんと行うこと」が大事なんですね。
上手い設計ができるようになりたいです。

352 名前: ◆R/rLuLKeEI :04/02/11 15:32
>>346
>柿木将棋でLAN対RS232C通信を戦わせるこができますか?
開発終了してRS232C通信しか出来ない古い将棋ソフトとLAN通信しか出来ない将
棋ソフトを柿木将棋経由で対戦させたいのかな。
柿木将棋持ってないしPC1台しかないので誰か実験していただけませんか。
>>346さんがやってレポートしていただけると一番嬉しいのですが。
出来ないから書きこんでいるのですよね。
失礼しました。

353 名前:デフォルトの名無しさん :04/02/11 16:11
>>346
>>352

出来ると思って試したら、そもそもその条件では対局開始出来ませんでした。
「先手、後手共に通信にすることはできません」と言われます。

余談ですが、柿木を2つ起動してCOM vs LAN対戦をすると(PC一台でOK)、
定跡・思考時間等を違えて対局させられて面白い。

また、柿木とLAN対戦可能なソフトを作れば、柿木(LAN vs 人)を媒介にして
操作性最強のフリーソフトになりますね。

354 名前:デフォルトの名無しさん :04/02/11 17:30
プロトコル決めて、盤と駒とルール提供して
ソフトをそれぞれが作ってオンラインやオフラインで対戦できるようになるといいね

355 名前:デフォルトの名無しさん :04/02/11 17:56
>>352,353
ありがとうございます。 8に期待しています。

356 名前:デフォルトの名無しさん :04/02/11 18:17
>>354
「盤と駒とルール」は、
製作者のオリジナリティが関与する可能性がある部分のため、
供用は難しいかもしれませんね(フォーマットに従うための手間は極力省きたいでしょうし)。

UI提供はCSA将棋で実現してるので、あとはサーバーでしょうかね。
(思考部分とCSA将棋でどういうやりとりをしているかは理解してませんが...)



357 名前: ◆R/rLuLKeEI :04/02/12 01:46
>>350
>ユニットテスト・・・作ったものが期待どおり動くか確認しています。
『プログラムを調べるのに、それが意図されたように動くかどうかをみただけでは、なかば成功したにすぎない。
残りの半分は、意図されなかった動きをするかどうかを調べることである。』
誰の格言だったかなぁ?

>>354
>>356
CSA通信プロトコル
 http://www.computer-shogi.org/protocol/
テスト用公開審判サーバは接続したこと無いけど生きてるのかな。
あと、上のURLにあるサンプルプログラムのCSA将棋はtest56.exeというローカルで動く擬似サーバーが入っている。


358 名前:デフォルトの名無しさん :04/02/12 09:47
将棋ゲームの思考部分のテストって難しいような。
状況による、テスト結果は予め想定しなければならないから、膨大な棋譜と次の一手の集合か?w


359 名前:デフォルトの名無しさん :04/02/12 10:29
思考の部分はテクニックがいるけど
ゲームのルールの部分ならできるよね > テスト

XP的には「期待どおり動くか」だけでよいと思う
どうせ完璧なテストは難しいので
意図しない動きを見つけたらテストを追加する方針で気楽に始めましょう

テストは自動化して手間を省くのがポイント


360 名前:デフォルトの名無しさん :04/02/12 11:22
>>359
でもさ、思考ルーチンがゲームの売りじゃない。
それをどのように検証するんだろうね。市販のソフトって。
(ルール部分でミスは流石に今のソフトじゃ論外でしょ。w)

そもそも、企画・設計段階でどうやって思考ルーチンをきめるんだろう?
場面における評価式を仕様にしたり、定石DBのテーブルを決めたりするのかな。


361 名前:デフォルトの名無しさん :04/02/12 11:25
想像だけどそんなにシステマティックにはやってないんじゃないの。
なんか将棋ソフト開発ってもろ零細って感じじゃない?
DeepBlueはちゃんとやってそうな気がするのはただの偏見かw

362 名前:デフォルトの名無しさん :04/02/12 11:44
>>361
まあ、そうだろうね。
多分、いろんなソフトを集めて、テスターの人が条件を変えて適当に打っていると。
で、とりあえず勝てるように微調整を繰り返していくのかな。

363 名前:デフォルトの名無しさん :04/02/12 20:36
今は山下さんの作られた木偶の坊があってメジャー市販ソフトとの連続対戦が
自動的に出来ます。


364 名前:オセロの人 :04/02/13 03:58
おはようございます。変な時間に目が覚めました。

近況:
一休み中。

365 名前:愚痴りたいが板違いなのでしない ◆R/rLuLKeEI :04/02/14 04:32
おはようございます。こんな時間に会社で徹夜です。

当然、最強(予定)の将棋プログラムは触れることは出来ません。

>>355
期待するだけじゃなくて要望を出しましょう。

366 名前:デフォルトの名無しさん :04/02/14 20:49
人工知能やるなら必読の本特集
http://page.freett.com/intteliart/index.htm

367 名前:オセロの人 :04/02/15 04:48
おはようございます。
また、ヘンな時間に目が覚めました。

近況:
風邪ひきました。37度前半の微熱が続き、脳みそがうにになっています。
・・・いつものパターンだと、これが1ヶ月くらい続きます(;_;)
ってわけで、1週間ほど作業中断するつもりです。

コールグラフはいらん!
といわれたのに、作ってしまったんで、
今までの作業の足跡としてUPします。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1076074304_4/a.png

368 名前: ◆R/rLuLKeEI :04/02/15 07:11
>>367 オセロの人さん
お大事に〜。

cpu2の枠内がよくわからない。
minimaxみたいだけどminimaxは別のところにあるし、先手用、後手用に分けて考
えたminimaxアルゴリズムの検証用なんかな?
dynamic callになってんのは色々な思考アルゴリズムをとっかえひっかえ出来る
ようにするための細工?
実はdynamic callって良く知らないんだけど関数ポインタによる呼び出しという
ことでいいんかな?

金曜からのエンドレス残業で頭が回らない。
では、お休みなさい。

369 名前:オセロの人 :04/02/15 10:42
>368 R/rLuLKeEIさん おつかれさまです。しっかりやすまれてください。

図をみてくださってありがとうございます。
cpu2は、minimax法による指し手生成です。
それとは別にminimaxとalpha_betaがありますけれど、探索中の各局面での評価値を印字するものです。
このへんの統合が今後の課題だったりします。

dynamic callは正しい言葉か知らずに使ってます(ごめん)
おっしゃるとおり、図での意味は関数ポインタによる関数呼び出しです。
思考ルーチン内の静的評価関数やゲーム内の思考ルーチン(プレイヤー)を入れ替えるために、
利用しています。

課題:
・関数名の付け方がちぐはぐ
→対応する名前に変更
→コマンドインタプリタの再構築(へんな名前になるのはここのせいもある)
→小さいプログラム/モジュールだと侮らず、接頭辞をつけて、モジュール分けしたほうがいいか?の検討
(設計をきちんとせよ・・・とのご意見くださった方、その通りです)
・評価用印字ルーチンと思考ルーチンの統合
→速度を気にせず、評価用印字ルーチンに印字フラグを持たせ、思考ルーチンに。

では、横になって風邪さん退治します。
しばらく、こちらの書き込みもお休みします、あしからず。

370 名前: ◆R/rLuLKeEI :04/02/16 04:06
>>366
私はモグリなんで「プログラミング言語C ANSI規格準拠」しか持ってない。
うさぴょんの育ての親さんやデフォルトの名無しさん達は全て目を通しておられるんでしょうなぁ。
「思考ゲームプログラミング」ならあるんですが、古過ぎですね。

371 名前:デフォルトの名無しさん :04/02/16 04:10
>>370
思考ゲームプログラミング持ってるんですか!うらやますぃ……

372 名前: ◆R/rLuLKeEI :04/02/16 08:48
森田オセロのソースが載ってるその本は私の所有物ではなくて会社の蔵書の一部になってる。
誰が持ち込んだのかは不明。
いつでも閲覧できるがあまり役に立ってない。

373 名前:デフォルトの名無しさん :04/02/16 12:03
将棋は先手必勝という結論が!?

数学@ふたば
ttp://cgi.2chan.net/m/futaba.php?res=17731


374 名前:デフォルトの名無しさん :04/02/16 15:42
結論ではなく予測なのでは?

まあ、先に盤を引っ繰り返したほうが勝ちともいうが。
あ、PCの場合はアプリ終了か。

375 名前:デフォルトの名無しさん :04/02/16 22:24
木更津でのインターネット定額、常時接続事情はどうなんでしょうか。

376 名前: ◆R/rLuLKeEI :04/02/17 05:32
>>374
ちゃぶ台返し?
引っ繰り返した方が負けという気もするが。

将棋プログラム少ししてみた。
・局面を表すクラスを分割した。
 1.表示用のパネル
  大盤解説の如きもの。
  2から更新通知が来るのを待っている。
 2.対局者が共有して見ている盤面
  実際にはそのコピーが対局者に渡されるのでちゃぶ台返しは出来ない。
  局面の読み込みや対局の進行はここに実装。
 3.各対局者の頭の中にある盤面
  2は3のサブクラス。
  将棋のルールの内、盤面に関する部分はここに実装。
あと、盤面に紐付けた着手可能手の持ち方をベクタから赤黒木+リスト構造にした。
これは探索する節点の順序が探索効率に影響するような探索手法の為の準備。
とはいえ、手の評価は+∞のままなので赤黒木の一つのノードに全着手可能手のリストがあるだけ。

とりあえず、ここまで。

377 名前:オセロの人 :04/02/19 22:09
>>376 R/rLuLKeEIさん
おお。進んでますね。
OOPって、おもしろそうだなぁと思います。

近況:

風邪なおりました。普段より早めに治りました。うれしいので、飲酒中です。

作業予定:

入力部の再構築
1)同じ動作をするプログラムを汎用性のある関数に置き換える。(終わったら、動作確認)
2)関数名/入力コマンド名を分かりやすいものに変更。(終わったら、動作確認)
↑これをやっとかないと、あとで思考部の評価の度にコンパイルする必要が出てくるため

各ノードの評価値表示ルーチン/指し手生成ルーチンの統合
>>369に書いた通り。
↑これをやっとかないと、思考ルーチンと思考ルーチンの評価が乖離してしまうため

実のところ、玉砕(>>293)あたりから、本編のプログラムがあまり進んでいないです(^^;;
今週末は、上に書いたことを終わらせたいです。

378 名前: ◆R/rLuLKeEI :04/02/21 04:04
>>377
元気になって何よりです。

>OOPって、おもしろそうだなぁと思います。
面白そうと思ってもC++がどうも好きになれなくて7〜8年経ちました。
まだ分からない概念もあるけど今、JavaでOOPが面白いです。
不意に「メッセージパッシングはわかりやすい」というMINIX256倍本の一節を思い出した。

今日やったこと:
・局面の更新
 1.着手可能手から最大の評価の手を抜き取って局面を更新。
 2.成り、打ち、取る手は平手直後には無いので手抜き。

・局面表の実装。
 ハッシュコードを算出する空の関数を作成。

昔、プログラミング言語習得で
 C→挫折→Pascal→成功→C→成功
だった。今、
 C++→挫折→Java→成功?
成功したらC++に再挑戦したい。

379 名前:オセロの人 :04/02/21 20:00
>>378 着々とすすんでらっしゃいますね。
なるほど、C++はいきなりは、難しそうですね。ふむ。

近況:

のんびりとプログラム再構築中。

出来たこと
・入力部の再構築:同じ動作をするプログラムを汎用性のある関数に置き換えた。
・各ノードの評価値表示ルーチン/指し手生成ルーチンを統合した(指し手生成が出来てるかは未確認)

途中なこと
・入力部の関数名/入力コマンド名を分かりやすいものに変更する

これからやること
・対局部に統合した指し手ルーチンを適用
・そろそろ将棋

380 名前: ◆R/rLuLKeEI :04/02/21 23:54
>>379
いよいよ将棋ですね。

今日は開発はお休み。
OOPの影響かコードを書く時間より考える時間(設計)の方が長くなった。

JavaにはHashtableクラスがあって局面表の実装にと昨日採用したが、都合が悪いのに気が付いた。
このクラスは第2hash関数が1で表が埋まると拡張、再hashするらしい。
記憶領域不足を回避したいのでこれはまずい。
と言うわけでHash値を同一性判定に使った〜Setクラスを検討中。

局面表って探索空間の一部分が見えていてHIT率が重要なキャッシュのようだ。

上下or左右反転した局面⇒同じHash値にしたい。

381 名前:オセロの人 ◆OtHeRo2E6Y :04/02/24 23:04
>>380 うう。Hashは随分遠く感じます。

近況:

オセロを途中で放り出し(っていっても、思考ルーチン同士の対局はできてますけれど)
将棋へ。

日曜だけで、400行くらい書いてました。
将棋の局面の内部表現を考え、外部表現にKifu for Windowsの.bodを採用。
ここのところは局面の読み書きを書いているところです。
いろいろ書いて400行です。局面の入出力は200行ぐらい。

できたら、次は指し手の内部表現と外部表現を決めて、入出力部の予定。

#名前欄、次から変更します。

382 名前: ◆R/rLuLKeEI :04/02/25 07:14
結局、Hash値の衝突が起こったときに色々できそうなHarhMapクラスにした。

やっと一手読みで7六歩が最善手になった。
まだ次善手は9六歩。
評価関数自体一手読みしているくらいの評価をしているのでやや重い処理になった。

明日も仕事なのにこんな時間までやってもうた。

383 名前: ◆R/rLuLKeEI :04/02/25 22:12
私のプログラムは総行数少なくとも899行。
内、平手の.csaファイル入力部65行。
人による手の入力、局面のファイル出力部は全くない。
全ての部分が中途半端だからか意外と少ない。

384 名前: ◆R/rLuLKeEI :04/02/29 07:11
誰もいないのかな。

近況:
平手から深さ2までnegamax形式で書いたminimax探索ができるようになった。
しかし平手から深さ3になると駒を取る手と成る手がありえるので今の手抜き着手生成ルーチンでは無理。
また、展開する局面の数を外部で与えているのを止めて1手当たりの制約時間内で出来るだけ読むようにする予定。

385 名前: ◆R/rLuLKeEI :04/02/29 22:36
前向き枝刈りでコンピュータリバーシではカットオフペアというのがよく出るが将棋では全く聞かない。
分岐数が多過ぎだからですかね?

386 名前:デフォルトの名無しさん :04/02/29 23:29
>>385
チェスとかは残りの深さと関係なく大体2手か3手減らすみたいだから
とくにペアというのはないのでは?

387 名前:C言語の人 ◆OtHeRo2E6Y :04/03/01 00:27
こんばんは。元オセロの人です。
#オセロの正しいつづりはOthelloらしいです(^^;;

近況:

ドキュメントを書こう。
モジュール分けをしよう。
ツールを覚えよう。
エディタ操作を覚えよう。

ということを目標に勉強中。実際に触れてみましたから、今度は体験したことのまとめを書かないと、
このままずるずる、へたっぴなままになりそう。

今作っているプログラムは局面における全指し手生成/静的評価、minimax/alphabetaを実装して、止めるつもり。
というのは、いまやっているプログラムは将棋の基本データ構造と基本操作を見つけるのが目的だから。

ひょっとしたら、詰め将棋くらいまで持っていくかもしれませんが。
そうですね。詰め将棋までつくります。
その後、効率的なデータ構造を考えます。

まだ、頭が整理されていないので、コーディングは先延ばし(^^;;

388 名前:263 :04/03/01 01:54
あれから全然進んでいません。というか、一から作り直していたりします...
(いろんなソースを参考にしながら)

>>387
お互い、効率的なデータ構造を考えましょう(^^)


389 名前: ◆R/rLuLKeEI :04/03/01 02:11
>>386
リバーシだと4手読んで評価の低い手を刈り12手まで読む4-12というペアがあった。
チェスとかだと1-8とか0-8のような相当乱暴な前向き枝刈りをやっているように思う。
評価関数の精度が十分高いわけでもないのに…

最近シグモイド関数なるものを知った。
これを2倍して1引いた関数をfとすればf([-∞,+∞])=[-1,+1]になる。
つまり評価値を[-1,+1]に押し込めて∞より大きい値(?)の大小を扱えるようになる。
そこで非終端節点の静的評価値(-∞,+∞)をf((-∞,+∞))+2=(+1,+3)と変換する。
これでどの節点の静的評価値も真の値[-1,+1]よ 略

390 名前:デフォルトの名無しさん :04/03/01 02:23
>>389
チェスの動的前向き枝刈りの null-move pruning は
2手浅くした探索の結果でβカットするらしいことを読んだけど

391 名前: ◆R/rLuLKeEI :04/03/01 02:56
>>388
どのくらい進みましたか。

近況:
C言語の人以外にとっては面白くなさそうなので手短に。
・平手から3手目に出てくる取る手を実装した。
・今週は成る手を実装する。

392 名前: ◆R/rLuLKeEI :04/03/01 03:16
>>388
あ、済みません。
進んでないんでしたね。

>>390
βカット自体はminimax探索と同じ結果を得る後向き枝刈りでしたよね?
ま、Null moveと動的前向き枝刈りを勉強しておきまっさ。
もっと分岐が多い将棋や囲碁ではどうなんでしょう?

393 名前: ◆R/rLuLKeEI :04/03/01 03:49
度々済みません。
2手浅い読みでダメだった手は次からは読まないという前向き枝刈りは既に森田将棋IIでやってました。
1-3-5-7-…とやるらしい。

昨日明け方まで将棋プログラムしてたせいで全然寝付けない。
頭痛がする。

394 名前:デフォルトの名無しさん :04/03/01 05:42
おはよう。
どこにでもいるVBプログラマーです。
Cは昔に諦めたのですが、(理解できなかった)
VBってほんとマイナーだなと感じました。
でも、プログラマーとして
みなさん応援しています。

395 名前:C言語の人 ◆OtHeRo2E6Y :04/03/01 06:57
おはようございます。
さて、今週はルール上指せる手かを調べる部分を作ります。

3目並べやオセロは楽でしたけれど、
将棋の場合は煩雑になりそうです。

>>388 はい。頑張りましょう(^^)
>>393 私も睡眠の時間帯が変になると頭痛になります・・・。
>>394 応援ありがとうございます。

396 名前: ◆R/rLuLKeEI :04/03/01 08:35
>>395
煩雑になります。
てきとーに作った前のプログラムは巨大なswichi文による場合分けに手を焼きました。
よくよく考えて設計しないとすぐに見通しがとても悪くなります。

今回はcase〜breakに散在していた共通部分を一つして異なる部分を共通部分から呼び出す形にした。
例えば金に対して成れるかという問い合わせ関数は常に偽を返すなど。
というのをtemplate methodパターンで。

397 名前: ◆R/rLuLKeEI :04/03/01 08:36
綴り間違えました

398 名前:デフォルトの名無しさん :04/03/01 11:41
合法手の生成はswitch使わないでテーブル使えば短く済んでいいんじゃないの?

399 名前: ◆R/rLuLKeEI :04/03/01 12:49
>>398
その案頂きます。
とりあえず今回の方法がボトルネックになった時か6度目の作り直しの時に検討します。
多分、本質的に等価な表現へ機械的に変換出来そうです。

400 名前:C言語の人 ◆OtHeRo2E6Y :04/03/02 00:14
近況:

ぼちぼち。

課題:
(やりやすいもの順)
・二歩チェック
・王手放置チェック
・打ち歩詰チェック
・千日手チェック
・千日手連続王手チェック

千日手関連は手をつけないかも・・・

401 名前: ◆R/rLuLKeEI :04/03/03 02:30
>>400
ううっ、まだどれも実装してないや。
前回の挑戦では打歩詰めは一度も出なかったので最後にしよう。
千日手は自己対戦させるとよく出くわすから最後から二番目。
他は五手目以降からありえるので早めに入れたい。
詰め将棋だと千日手はないからちょっと楽かな。

402 名前:デフォルトの名無しさん :04/03/05 14:42
誰か、

大局将棋を指しましょう2《第1局第2譜》
ttp://game2.2ch.net/test/read.cgi/bgame/1073993361/

の「大局将棋」を作るって人はいないかい?

↑のスレでも試みたヤシはいたんだが、挫折したモヨリ。

403 名前:デフォルトの名無しさん :04/03/05 19:42
>>402
FM将棋にやってほしいんだが、でかすぎるか。

404 名前: ◆R/rLuLKeEI :04/03/06 03:00
>>403
比較的規則の少ない将棋だけで手いっぱい。

近況:
・1000msで読めるだけ読むようにした。
・表示している盤面を手によって更新、再描画出来るようになった。
・成り、打は依然未実装。

会社の深夜のリソースを使えれば捗るのだがなぁ。

405 名前:デフォルトの名無しさん :04/03/06 08:24
動く大局将棋がみてみたい。
コンピュータが指さなくてもいいから。

406 名前: ◆R/rLuLKeEI :04/03/06 11:02
ここで遊べるらしい。
http://taikyokushogi.hp.infoseek.co.jp/index.html
携帯から書き込みなんで内容未確認。

407 名前: ◆R/rLuLKeEI :04/03/06 12:18
>>405
>>406内のリンク:大局将棋FLASHで動かすことなら出来ました。

408 名前:デフォルトの名無しさん :04/03/06 16:14
>>406
>>407
ありがとう!


凄い…


409 名前:デフォルトの名無しさん :04/03/06 16:16
最下段の出番はいつだ…

410 名前:デフォルトの名無しさん :04/03/06 19:01
>>406
なんだか凄いというか、冗談としか思えない駒の数だな。
人間なんかよりCOM向けな気がするよ…。

411 名前:C言語の人 ◆OtHeRo2E6Y :04/03/07 10:42
近況:

こんなことやろうとしてます。

・静的評価関数作成
→今ある性的評価関数はダミーなので駒の損得くらいは入れる

・CSA将棋に組み込み
→遊べるようになる

・指し手(合法手)リストアップの高速化
→今の方式は単純だが、無駄が多い。無駄を減らす案はある。
→検証のため既存のリストアップ部分は残しておく。

今からやろう!
と思いましたが、今はNHK教育で米長解説を楽しみます。

412 名前: ◆R/rLuLKeEI :04/03/07 14:28
>>410
人がやるにもCOMがやるにも辛そう。
きっと分岐の数が尋常じゃない。

>>411
チューニングに入ってきましたね。
プロファイラを使って定量的な評価してますか?

近況:
・思考とは関係ない人の入力部分を書いている。
 マウスで駒をグリグリ動かして放すところまで。
 着手リストに問い合わせてfrom-toの組数が0⇒無効、1⇒有効、2⇒成り/不成りの選択にする。
・未だ成り、打は未実装。
・評価値はN人ゲームのようにpnとdfの二つ用意する。
 何を企んでいるかはお察しの通り。
 もちろん親局面への値の渡し方は最小と和 略

413 名前:263 :04/03/07 15:25
指し手生成についてだけど、
yssの解説にある各マスに利いている「駒番号のスタック」という考えは
一般的なのかな?
移動先を指定する手の生成は、
そのマスにスタックされている駒だけ調べればいいみたいだし。

近況:
座標の内部表現 : X軸とY軸をひっくり返した(式x*16+y → y*16+x)。
方向の内部表現 : 十字方向と斜め方向をそれぞれ一纏めになるように。

王手(指定マスに利きをつける)生成
大駒に関しては交点を見つけた後の処理をいろいろと模索中。


414 名前: ◆R/rLuLKeEI :04/03/08 02:35
>>413
スタックでなければならない理由かよく分からないのでまだその考えは入れていない。
しかし王手関係の手を分類するのに何らかの工夫をしないと手の生成がかなり遅くなるはず。

近況:
・2手目、人の入力部分が一段落した。
・3手目、COM側の探索で配列の範囲越えの例外でダウンする。
 これが治ったら成り/打なしの限定ルールで対局が可能になる。
・証明数/反証数による詰め探索は後回し。
・プロファイル結果:評価関数が最も時間を食っている。 ・Java(のSwing)が遅い。

VBの人も気が向いたらどぞ。

415 名前:C言語の人 ◆OtHeRo2E6Y :04/03/08 21:22
近況:
対戦してみました。

'CSAファイルです。
'Kifu for Windows V513で棋譜を並べられると思います。
N+>>263(Computer)
N-OtHeRo2E6Y(Computer)
PI,+
+7776FU,-3334FU,+8822UM,-3122GI,+0015KA,-0024KA,+1524KA,-2324FU
+0046KA,-2133KE,+4624KA,-5152OU,+5756FU,-1314FU,+1716FU,-0013KA
+2413UM,-1113KY,+0046KA,-3435FU,+4635KA,-0044KA,+3544KA,-4344FU
+0034KA,-5251OU,+2858HI,-1415FU,+1615FU,-2211GI,+3423UM,-1122GI
+2334UM,-1315KY,+1915KY,-0014FU,+1514KY,-0084KA,+1412NY,-2231GI
+3433UM,-5162OU,+3344UM,-6272OU,+9796FU,-3142GI,+3928GI,-7374FU
+0014FU,-4131KI,+1413TO,-3141KI,+0043KY,-4243GI,+4443UM,-0057KY
+0064KE,-6364FU,+4353UM,-5758KY,+4958KI,-4152KI,+5364UM,-5263KI
+6482UM,-7182GI,+0065KY,-0032HI,+6563NY,-7263OU,+0085KI,-8462KA
+1222NY,-3235HI,+7675FU,-7475FU,+2221NY,-3515HI,+0033HI,-0043FU
+3343RY,-6364OU,+4334RY,-6453OU,+0054GI,-5352OU,+5443NG,-5251OU
%TORYO

投了したのは>>263さんのプログラムです。
>>263さんのプログラムのほうが、思考時間が短いです。

こちらのアルゴリズムは静的評価に駒の得点、探索法にαβ法。4手読みです。

完敗です〜。
10手目の▽3三桂にはたまげました。
駒の損得は教えてあるので、2四歩を守るかと思っていたのです。
が、よくよく調べてみると、
水平線効果で、必ず歩を取られるとコンピュータは思い込んでます。

416 名前:C言語の人 ◆OtHeRo2E6Y :04/03/08 23:11
>>412
プロファイラですか・・・勉強します(^^;;

ベースとなるプログラムのプロファイル
改定Aのプログラムのプロファイル
・・・プログラムのバージョンとプロファイルの結果をまとめて残しておかないと・・・
ごちゃごちゃになってしまいそうですね。

とりあえず、ごちゃごちゃになる前に、
1.現バージョンの保存。
2.プログラムの整理
3a.高速化(?)
3b.水平線対策(?)

ということで。続きは明日(^^)

417 名前:デフォルトの名無しさん :04/03/09 01:22
>>416
cvsなどのリビジョン管理ツールを使うことを激しくお勧めしておく。

418 名前: ◆R/rLuLKeEI :04/03/09 02:46
気かつけば 私が一番 遅れてる

近況:
開発日記は余所でやったほうがいいですか?
・5手目:COM側の打つ手を実装中。
 歩香桂の特殊処理は明日以降。
牛歩の如き歩みの遅さよ。
明後日は成る手か人側の打つ手に辿り着けるのだろうか。

>>416
VC++ならIDEからVSSが使えるはず。
WATCOMでもその手のツールが幾つか使える。
EclipseはCVSやVSSのプラグインがある。
他は…知らん。
まさかbccによるコマンドライン開発ですか?

419 名前:C言語の人 ◆OtHeRo2E6Y :04/03/09 22:20
リビジョン管理は、ファイル単位でRCSを使おうとしていますが、
なかなか徹底できてません。

VC++6.0でコマンドライン開発です。
統合環境は使っていません(^^;;

近況:

プログラムの整理中です。
新しくいものは作っていないので、自分の作業が止まっているように感じます。

420 名前: ◆R/rLuLKeEI :04/03/14 13:14
近況:
・成り、打、王手関係の処理を実装した。
 成りでたまにダウンする。
・デーモン将棋と対戦
 負けました。
・探索はminimaxと評価関数は着手数の差。
・詰み探索はなし。

421 名前: ◆R/rLuLKeEI :04/03/15 01:29
近況:
・成りでダウンすることはなくなった。
 成らなければならない位置で成らないバグがある。
・minimax手続きと評価値を証明数/反証数にしてみた。
 序中盤では手が広くなるばかりであまり役に立たないようだ。
・プロファイルの結果
 自玉への王手の判定が遅い。
 利きの表を作らなくては。
・局面表が大きすぎるのか探索中にOutOfMemoryErrorがでる。
 ハッシュ値は32bit、メモリ上限値の実行時オプションがないか調べてみる。
・評価関数が局面クラス、指し手クラスに組み込みになっている。
 探索クラスに移動させたい。 略

422 名前: ◆R/rLuLKeEI :04/03/15 03:21
考察:
各局面の証明/反証数を(証,反)などと書く。
先手番では子局面の証明/反証数に対して(最小,和)。
後手番では子局面の証明/反証数に対して(和,最小)。
未展開の局面の証明/反証数は(1,1)。

反復深さ:局面=(証,反)
0:平手=(1,1)
1:平手=(1,30),深さ1=(1,1)
2:平手=(30,30),深さ1=(30,1),深さ2=(1,1)
ここまで未展開の900局面は全て対等。
3:平手=(30,9??),深さ1=(30,3?),深さ2=(1,3?),深さ3=(1,1)
ここまで未展開局面27???局面。深さ1の30局面は全て対等。
証明/反証数の最良優先探索でも序盤では幅優先探索になってしまい、非効率

423 名前:デフォルトの名無しさん :04/03/15 05:55
>成らなければならない位置で成らないバグがある。
将棋製作は大体の人は始めに人が指せるようにする所から作ると思うから、
その段階でチェックしてしまう所だと思うけど。
ただ、再起的な処理は、データの位置が違っていたり、書き換えてしまって
いたり思わぬ所で間違えていたりしますからね。

>成りでたまにダウンする。
そういえば成りでバグといったら、名前は忘れたけどPSの将棋ソフトで
成り不成りを選ぶ所で止まるのがあった。苦情の電話をして聞いてみると
初期生産のPSだと止まってしまうとかなんとか言われてごまかされた。

424 名前: ◆R/rLuLKeEI :04/03/15 08:08
成らなければならない位置で成らないバグは人が指せるようにする段階でかなり前から分かっていた。
しかし、そこで成りを選択してしまえば人の手間がちょっと増えるだけだからと先のばしにしていた。
問題は先生役のCOMとの対戦で局面に食い違いが起こるだろうからその時にやろうと思っていた。
ところがこっち側のCOMが弱くて歩桂香が敵陣まで行けない。
とりあえず駒の損得を入れてみようと思う。

425 名前:デフォルトの名無しさん :04/03/15 08:47
どうですね、将棋ソフトはルールの実装

がもっとも面倒れですね

426 名前:デフォルトの名無しさん :04/03/15 12:41
なんでそういう面倒なところを共有しないの?マゾ?

427 名前: ◆R/rLuLKeEI :04/03/15 13:02
>マゾ?
多分そう。
Linux版CSA将棋がどっかに転がっていればそれを使いたい。
エミュレータ上で動かすのはなんだかなあと思っている。

428 名前:デフォルトの名無しさん :04/03/15 13:09
そういう面倒なところの実装で速度の差が付いて、強さの差になって現れるから。

429 名前:デフォルトの名無しさん :04/03/15 14:04
ルール逸脱してないかのチェックは棋譜を別のソフトに食わせてみりゃいいだけ。

430 名前:デフォルトの名無しさん :04/03/15 14:05
きたねー勝負だな。

そういう閉鎖性は進展を阻害する悪因。

431 名前:デフォルトの名無しさん :04/03/15 15:10
評価関数だの探索手法だのが必要とする事項によって
そういう面倒なことをどのように実装したらよいかが決まってくるから。

誰もが使える実装ってのはもちろん考えられるけど、
今のところまだそういう富豪的な手法が使えるほどにはコンピュータが早くない。


432 名前:デフォルトの名無しさん :04/03/15 16:33
アイデアより蓄積勝負で新規参入を阻害ですか?
全体の進展は遅滞しますぞ。

433 名前: ◆R/rLuLKeEI :04/03/15 18:51
>>429
私のプログラムは棋譜出力部をまだ書いてないので別ソフトに食わすことすら出来ない。

434 名前:デフォルトの名無しさん :04/03/15 18:53
状況はコンピュータ囲碁の方がよっぽどひどいと思うが。
未だに勝ち負けの判定を正しく出来る=生死の判定を正しく出来る=ルールを正しく実装している
プログラムすらないし。

誰か作ってオープンソースにでもしてみれ。

チェスだってルールの実装はビットボードとか色々論議されていて、
みんなばらばらに実装していたりするわけだし。

蓄積勝負で新規参入を阻害っていったいなんですか?
蓄積しちゃいけないわけ?


435 名前:デフォルトの名無しさん :04/03/15 18:55
>>432
そうじゃなくて、「評価関数だの探索手法だの」のアイデアを生かすためには
面倒なことを避けては通れない、ってことだよ。

しかし、面倒とは言ってもそれをやってる新規参入者はぼこぼこ現れてるわけだが。

どうしても面倒ならOpenShogiLibとかどうよ。
もっとも、あれの中身をすらすら読みこなして使いこなせるなら、
自分で作っても大して面倒じゃないと思うけどな。


436 名前:デフォルトの名無しさん :04/03/15 19:07
ルールの記述くらい大して面倒ではないと思う。
ルール通り指すだけなら必要ない利きだとかいった情報を持ち出すと
複雑になるが、そのあたりはデータ構造の設計力の範囲になってきて
スピードだけではなく色々と実力差が出てくる。

437 名前:デフォルトの名無しさん :04/03/15 21:15
実力差ねえ。
はかる場所を間違えてない?

競争は的確な土台で行われない限りオナニーに過ぎないよ。

競争は誰かが勝つことではなく全体として成果を得ることに存在意義があるんだから。

438 名前:デフォルトの名無しさん :04/03/15 21:16
グダグダ言ってないで書いてみりゃいいじゃん。

439 名前:デフォルトの名無しさん :04/03/15 21:46
>>438
考えてから組めよ。

だから日本のプログラマは馬鹿にされるんだって。

440 名前:デフォルトの名無しさん :04/03/15 21:48
>>439
俺はまだ書いてないけどプログラム書けない人が負け惜しみ言ってるみたいだったから。

441 名前:デフォルトの名無しさん :04/03/15 22:20
>>435
OpenShogiLib
http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/
巨大すぎ。。。

442 名前:デフォルトの名無しさん :04/03/15 23:16
>>437
あんた前にもどっかで同じこと書いてたんじゃない?
よっぽど外国人にコンプレックス持ってるみたいだけどw

将棋のルールは一つしかないが、
データ構造に何を持つか?ということに絶対的な解はない。
その設計は評価関数で何を評価するかとか、どういう探索をするかとか、
全体の哲学に大きく関わっていて、なんでもかんでも誰かに提供しろと
言ってるのは考えることを拒否してるだけなんだよ。
それに、うさぴょんとかOpenShogiLibとかもあるんだし、それを使う手も
あるんだし、何が文句あるんだか。
自分がプログラム組めないからって負け惜しみはうっとうしいよ。


443 名前:C言語の人 ◆OtHeRo2E6Y :04/03/15 23:55
近況:

プログラムの整理→終了
ドキュメント書き→あるていど出来た。これ以上今のプログラムへドキュメントは書かない。
合法な手の生成を高速化→手付かず
詰め将棋→凍結
静的評価関数→構想中

ほぼ、止まってます。
アイディアを書き出して、
・すぐとりかかれる
・もう少し整理すればとりかかれる
・漠然としていて、どうにもとりかかりようがない
という分類をして、できることからやらなければ・・・ですね。
少し大きめのポストイットを買って来ます。

444 名前:デフォルトの名無しさん :04/03/16 05:02
【警告】将棋のプログラミングにまったく興味のない釣り師が常駐しています。

445 名前:デフォルトの名無しさん :04/03/16 07:57
釣りじゃねーよ。
日本のプログラマに戦略と思想がないのは明らかだろうが。

446 名前: ◆R/rLuLKeEI :04/03/16 08:07
将棋のルールの実装は面倒などではなく逆に楽しい。
それこそ寝食を忘れて熱中し気が付けばもう朝かと言うのがよくある。
ルールごときに何か楽しいかというとよりよいデータ構造、よりよいアルゴリズム、よりよいクラ
ス、これらを選定する作業がとても楽しい。

出来上がったプログラムよりそこへ至る過程に興味があるので静的なドキュメントより動的な開発
日誌や他人の研究結果、特にやってみたけど有意な結果は出なかった方が役に立ちそう。

成り駒は継承を使うととても簡単になりますね。
例えばと金は金のサブクラスにすると簡潔 略

447 名前:デフォルトの名無しさん :04/03/16 09:39
>>445
ちゃんちゃらおかしいけど、今度からは
「『俺の知る限り』日本のプログラマに〜」
という文章にして欲しいな。

448 名前: ◆R/rLuLKeEI :04/03/16 12:20
日本のプログラマの行く末を案じまたこれを憂いては警鐘を発すは有り難きことなり。

杞憂なればよし。

449 名前:デフォルトの名無しさん :04/03/16 13:05
次はニューラルネットが来ます

450 名前:デフォルトの名無しさん :04/03/16 13:05
>>447
『おまえらを見る限り』日本のプログラマに〜

451 名前:デフォルトの名無しさん :04/03/16 13:20
まあ一人あわれな外国人コンプレックスのお馬鹿さんがいるようですけど、
話にならないので無視した方がいいでしょう。
理を説いても口汚くわめきちらしてくるだけのようですから。


452 名前:デフォルトの名無しさん :04/03/16 14:20
この程度で口汚いねえ。
おまえらには協力体制とかないのか?
競争と時間がすべてを解決するとかいう
漠然とした思想でやってんのか?
しかも自分はそういう思想に基づいた
行動をとってるという自覚もないなあ。

自覚して思想を持て。

453 名前:デフォルトの名無しさん :04/03/16 14:24
>>452
だから協力は十分されてるっつーの。

454 名前:白砂青松 ◆HakusaRWQc :04/03/16 18:29
真面目な話、考え方として、CSA将棋みたいな「通信とUIだけ」じゃなくて、
「通信とUIと(ちゃんと動く)盤駒」の元ファイルみたいなのがあって、思考部分を
DLLかなんかでやってくれりゃいろいろ楽なのになぁ……と思うことはある。
特に怒涛のように商品化される東大将棋シリーズを見てるとね(笑)。

ただ、>>442にもある通り、パクろうと思えば元となるソースもあるし、まず第一に、
「それぞれが自分の考えたデータ形式が最善(とまで言うと言いすぎだけど)だと思っている」
からこそ、それぞれがデータ形式を含めて自分で書いているんだと思う。それを、
自覚だの思想だのという言葉で押し込めてしまうのはどうかと思うが。

繰り返すけど。
なんか1個、共通のフォーマットみたいなものができたら嬉しいよね。
思考部だけでもちょっと考えてることあんのよ、みたいな人が参入できるかもしれないし、
できればUIその他の部分は柿木将棋をそのまま提出してくれるともの凄く嬉しいんだけど(笑)。
ただ、それをしない人を責めるのは間違い。ボランティアを強制するのはそれこそ間違ってる。

455 名前:デフォルトの名無しさん :04/03/16 21:57
>>452
例えばチェスや囲碁は外人が多いが将棋よりもはるかに秘密主義。
そういうことも知らんで適当なことを言うな、馬鹿が。

456 名前:デフォルトの名無しさん :04/03/16 22:25
>>455
秘密主義を真似ちてるんでちゅかぁ。
だから思想がないって馬鹿にされるんだよ。
あほが。死ねや。

457 名前:デフォルトの名無しさん :04/03/16 22:27
>>456
誰も真似してないです。
将棋のアルゴリズムってオープンに語られてますが。

誰が何を勘違いしているのか。

458 名前:デフォルトの名無しさん :04/03/16 22:45
おまいら喧嘩はやめろ。
そんなことより、ややスレ違いだと思うが質問させろ。
マウスのポインタの上をエンターキー(左クリックでも可)を連打するプログラムって簡単に
作れますかね?
最近24にログインするのがつらいのでw
まぁ他にいろいろ方法はあるんだろうけど、こういうプログラム作っておけば以外に役立ちそうな気がしたので。



459 名前:デフォルトの名無しさん :04/03/16 22:52
えーと、左クリック連打プログラムは作れそうかな?
…でもどうやって起動してどうやって止めるんだろう(笑)
起動後、カーソル移動中に大変なことが起きそうな予感。

エンターキーの連打ってエンターキー押しっぱなしじゃ24のログインはダメだったっけ?

460 名前:デフォルトの名無しさん :04/03/16 23:18
>>457
だったらもっと共有を進めろ

461 名前:デフォルトの名無しさん :04/03/16 23:32
>>456
もういい加減あきらめろよ。見苦しいよ。

462 名前:デフォルトの名無しさん :04/03/16 23:44
>>454はやってみる価値はあると思うんですが。

463 名前:デフォルトの名無しさん :04/03/17 00:50
>>454 >>462
C++分かる人には、CSA将棋+うさぴょんのソースで十分だと思うんだけど。
うさぴょんのソースの局面の基底クラスは特に癖のない実装だし。

詰め将棋は最新のアルゴリズムと比べてちょっと効率悪そう。
一応証明数使っているけど、脊尾詰を退化させた感じか(笑)?

読みの末端の処理の部分とかαβのところとかは癖が強いね。
しかし、この辺は最も自分で書いてみたいところのはずだから、いいでしょう。


464 名前:デフォルトの名無しさん :04/03/17 00:55
>>460
共有を進めるための詳細な内容を公表してくださいな。
その内容に賛同できるかどうかが基準になってくるんだから...

人に言う前に自分がやってくださいな。


465 名前: ◆R/rLuLKeEI :04/03/17 00:57
将棋プログラムを三層に分けられたらいいな。
1.UI・通信部
2.UIを含まない思考の共通部分
3.思考の核心部
で2の中間層をしっかり定義する。
今のCSA将棋のsikou.dllが二つのDLLに分かれるイメージ。
あるいはCSA将棋用sikou.dllの生のハンドラを覆い隠すクラス群とか。

DLLとかクラスとかよく分かってないのでとんでもない嘘を書いてるかも。

466 名前:デフォルトの名無しさん :04/03/17 00:58
具体的に何がどの程度共有されることを望んでるのか示してから
それは本当に存在しないのか調べたり他の人の情報提供を待つのが
早道ではないでしょうか。

共有を望むならまず自分から発信するのが一番。
別にアルゴリズムやソースコードに限らず。
それでは奪われる一方になるリスクを背負うと思うなら、
他の人もそう思ってるから共有が実現されないんでしょう。

467 名前:デフォルトの名無しさん :04/03/17 01:06
>>465

2の定義がすごく難しそう。
でも、OpenShogiLibが求めているものに一番近いかな。

http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/



468 名前: ◆R/rLuLKeEI :04/03/17 01:16
>>463
それもそうですね。
基底クラスを流用しても大会規定に抵触しないんかな。

CSA将棋に今のままの好きなように実装できるDLLと効率は落ちるかもしれないが比較的簡単に
思考部を作れるDLLを選択できるようになっていれば取り掛かりやすいのにな。
後者は教育用にわざとシンプルに理解しやすいようにするとか。

469 名前:デフォルトの名無しさん :04/03/17 01:35
>>468
大会の規定には抵触するかもしれないですね。

しかし、どこかでうさぴょんの育ての親さんが基底クラスくらいなら勝手に
使ってもらって構わないけど、この辺のクラスから先はダメだろうとかって
発言されてたという記憶があるんですが…

どこだったかなぁ。


470 名前:デフォルトの名無しさん :04/03/17 02:08
結局、465の分類の1以外は難しいでしょうね。
自分としては自分で色々と工夫してやりたいので、全部公開されて標準化されると
かえってやる気なくなりますね。


471 名前: ◆R/rLuLKeEI :04/03/17 02:39
>>470
私が思ってるのは標準化というより叩き台(考えが揺れているのはご勘弁)。
今のルールでもCSA将棋の使用は必須ではないように、規定に反しない範囲で新規参入者の敷居を
低くするのが狙い。
標準化とは逆の多様化への足掛かりなればいいなと。
それはすぐに手を入れて大改造したくなるものでなければならない。


明日普通に出勤なのに何やってんだか…

472 名前:C言語の人 ◆OtHeRo2E6Y :04/03/17 02:58
>>454 >>471

浮かんだ言葉:
コンピュータ将棋エントリーキット。

時間が時間なんで寝ます。

473 名前: ◆R/rLuLKeEI :04/03/17 08:39
>>472 C言語の人さん
おはようございます。
そうそうそんな感じ。

知識の共有化は『コンピュータ将棋の進歩〜4』やここも含む各種掲示板や開発日誌で色んなアイ
デアを惜し気もなく公開してしているようだしね。
後は本人のやる気と根気だけだと思う。

474 名前:白砂青松 ◆HakusaRWQc :04/03/17 08:44
>>469
ここですね
ttp://homepage1.nifty.com/Ike/usapyon/faq.html

 ユーザーの立場としては、
1.UI・通信部 …… 完全標準化
2.UIを含まない思考の共通部分 …… 叩き台の提供
3.思考の核心部 …… DLLによる配布
 として欲しいな。
 そうすれば、東大将棋は1ソフト1000円で買えそう(笑)

 もひとつユーザーの立場からの意見を言うなら、UI以前に定跡を標準化しろよゴルァ、
ってことかな。
 でも、これは2がしっかり固定していないと難しいそう(コンバータなどの回避策はあるけど)
なので、そういう点から2の部分を統一して欲しい、という思いはあります。
 もちろん、敷居は低くなるし、どんなフリーソフトでも見栄えはよくなるので、12両方とも
「叩き台プログラム」が出るのは賛成。

 最初は470さんの言うように、自分でも作りたい部分だからということでバラバラになるかも
しれないけど、柿木将棋タイプが標準になったとしたら、棋譜読み込みの凄さとか定跡が全部使えます、
ってことになるので、それはかなりの恩恵だと思う。なんで、いいものができれば、段々と
標準化されていくことになるのかな……って気がします。

 まぁ、ここで吠えてる人は、なにがどう欲しいのか、それを自分で作ってみて、
実はその部分は将棋プログラムの根幹なんで、それぞれオリジナリティを出したいところだから、
だからこそ標準化ソフトは出にくいんだということにまず気づこう。

475 名前:デフォルトの名無しさん :04/03/17 08:55
>>474
> まぁ、ここで吠えてる人は、なにがどう欲しいのか、それを自分で作ってみて、
実はその部分は将棋プログラムの根幹なんで、それぞれオリジナリティを出したいところだから、
だからこそ標準化ソフトは出にくいんだということにまず気づこう。

そういう時期は過ぎつつあると思う。

476 名前: ◆R/rLuLKeEI :04/03/17 10:18
ゲームとしての終焉を迎えつつあるリバーシは標準化されているかというと…?

全てのプログラム言語と全ての機械語のための唯一つの中間言語がないように無茶なんだろうな。

477 名前:デフォルトの名無しさん :04/03/17 11:35
>>476
そこまで大仰な話ではないような
よってたかってちょこっと整理するだけだし

478 名前:デフォルトの名無しさん :04/03/17 11:53
定跡データベースに関しては標準化は簡単でしょう。
棋譜が標準化されてるように。

しかし教育用に「コンピュータ将棋エントリーキット」というのはいいアイディアかも
しれないですね。
単純な全幅探索と駒得だけの単純な評価関数くらいまで最初から実装されていて。
OpenShogiLibとかうさぴょんとかは既に大きなプログラムなので読む気もいじる気も
起きない人が多いかもしれないし。

479 名前:デフォルトの名無しさん :04/03/17 12:47
俺二人ゼロ和有限確定完全情報ゲーム用アプリケーションフレームワーク持ってるよ。
思考ルーチン付で。
tic-tac-toeとか小物ゲームのルール発見してちょっと遊んでみたいとき便利だったり。

480 名前:デフォルトの名無しさん :04/03/17 14:46
>>478
しかし、あの大きさでも、うさぴょんは二次予選シード中の最小プログラムだった
と聞いたことがあるんですが。

それはとにかく、エントリーキットならうさぴょんのソースを削ればすぐ作れそう。

うさぴょんの育ての親さん、「コンピュータ将棋の作り方」のページの続きとして
展開してくれないかなぁ。
あのページ自体、入り口に『まだまだ製作中』とか書いてあった気がするし。

481 名前: ◆R/rLuLKeEI :04/03/17 16:33
定跡データベースはプラグイン化出来ないかな。
プラグインには最大公約数的なインターフェスだけしかなくて、プラグインのプラグインとして柿
木将棋定跡データベースプラグインを繋げる。

2の部分からは初期化の時だけ、どのデータベースを選択するか決めるだけであとは全くおなじ操
作になる…なったらいいな。

482 名前:263 :04/03/17 23:49
共有したい部分に「何を求めるのか」、
共有された部分で「何をしたいのか」が、
全然見えてこないんだけど...

ほんとの意味の叩き台(^^;とかだったら、
勉強も兼ねて作って(参加して)みたいし、
要望とか出してくれないかな?
(プログラミングのレベルは、極低ですんでその点はご了承くださいな >>263 参照)

483 名前: ◆R/rLuLKeEI :04/03/18 19:25
>>479
それってどこで手に入るのですか?
自作ですか?

484 名前:デフォルトの名無しさん :04/03/18 20:46
CodeDOM使ったらできないかな

485 名前:デフォルトの名無しさん :04/03/18 20:55
棋譜情報はxmlにしてWeb上のDBから持って来れるとかいいなぁ。

当然DLして組み込むことも可能だが、最新の棋譜を読み込んだ方が
より強い思考ルーチンができる・・・みたいな

486 名前:デフォルトの名無しさん :04/03/18 21:28
>>483
自作のクラスライブラリ。
いくつかクラスを継承してゲーム固有の
タイトル、画面表示・入力、ある局面の合法な差し手の列挙、静的局面評価
を記述するだけで対戦可能なゲームアプリが出来る。
と言ってもこれだけじゃ激弱なんでもっとカスタマイズしないといけないどね。

ところでマルチスレッドな探索ルーチン書いてる人いる?
なんか単一CPUのパフォーマンスはもうすぐ(と言うかPen4は既に)頭打ちになるから
CPUメーカーはHT、マルチコアに逃げるっぽいね。

487 名前:白砂青松 ◆HakusaRWQc :04/03/18 23:23
>>482
 これは白砂の考えですんで、他の人がどう考えてるかは判りません。
あくまでも、1ユーザーであり1ソフト開発を挫折したヘタレ(泣)の考えと思ってください。

 ユーザー側として考える、「洗練された共通システムを導入するメリット」は、ひとえに、

  そ の ソ フ ト が 使 い や す く な る

 ってことですかね。
 棋譜のペーストであるとか、そのソフトに独自の定跡を載せるだとか、そういう機能って、
ほとんどのソフトは貧弱ですよね。柿木将棋以外は正直使い物になりません。もちろん、
フリーソフトは言うに及ばず。
 でも、気持ちは判るんですよ。
「ソフトを強くすること」とは、ほとんど関係ない部分ですからそれって。

 なんで、ソフトを使う側は、
「もうUIは全部柿木に統一してさ、DLL配れよ。その方がこっちは嬉しいよ」
 って考えちゃうんです。

488 名前:白砂青松 ◆HakusaRWQc :04/03/18 23:24
 で、これを一歩進めると、その方が作者さんもラクなんだろうなぁ……と思うわけですよ。

 例えば、フリーソフト御三家の一つ「うさぴょん」には、途中の局面を読む機能がありません。
まぁうさ親さんはきちんとそういうツールを持っていてうまいことやったり、メニューに「盤面」
みたいなものもあるので(選択できない)iniをいじるとできるようになるのかもしれませんが、
見る限りないです。
 共通のシステムを導入することによって、これに対応できます。
 とすると、洗練された共通システムを導入するメリットは、作者の側にもあるのかな……と。

489 名前:白砂青松 ◆HakusaRWQc :04/03/18 23:25
 上記の話とは 別 に 、ソフトを作りたいけど、まず駒をちゃんと動かせるところで挫折した
人って、白砂以外にも(泣)いると思うんですよ。
 そういう人向けに、「将棋を強くすることだけを考える環境」を提供して欲しい、というのが、
「共通システム+ちゃんと動く盤駒が欲しい」理由です。

 またまた引き合いに出しちゃいますが、うさぴょんの親さんはHPで、
>最初は、ルール通りにきちんと指させることが一番苦労しました(--; そこまで出来てしまえば、
>後は苦労というよりも楽しみではないかと思います。
 と述べています。
「共通システム+ちゃんと動く盤駒」は、この「一番苦労する部分」を省いて、楽しみを与えてくれる
というものです。

 盤駒も作れないようじゃいずれ挫折するよ、とか、そういう部分が楽しみなんじゃん、という
考えがあることは判りますし、別にそれを否定しません。
 でも、あってもいいじゃないですか。
 そういう「基礎の部分」があれば、「俺にもできるかな?」って参入してくる人も増えるだろうし、
そうすればいろんなアイディアだって出る可能性は上がるし、ひいてはコンピュータ将棋全体の
利益にもなるわけですよ。大袈裟に言うと(笑)。

490 名前:白砂青松 ◆HakusaRWQc :04/03/18 23:28
>>482で263さんが「話が見えなくなった」のは、私が上の全く違うレベルの話をごっちゃにしちゃった
からですね。混乱させてしまったら申し訳ありません。
 まとめますと、

>>487の立場からは、柿木レベルの洗練されたUI(通信等を含む)を共有。シェア・フリー問わず、いずれは
全てのソフトがそのシステムに乗っかって欲しい。そうすれば、東大やら激指に独自の定跡も簡単に
載せられるし、フリーソフトの見栄えもよくなる。作者も、その方がラクなんじゃないのかなぁ(という想像)。
>>489の立場からは、UI(動けばいい)と、ちゃんと動く盤駒を、自分にだけくれ(笑)。自分がプログラムを
組む時の叩き台として使えればいい。ただ、あとあとのことを考えると、↑のようなかっこいいシステムの
方がいいだろうから、できればそっちがほしいなぁ。

 ということです。

 まぁ、ユーザーのないものねだりと、プログラムもまともに組めないヘタレの
戯言レベルですね。改めて書き出すと(笑)

491 名前:デフォルトの名無しさん :04/03/19 01:00
>>487-490
すごく面白いRPGより、使いやすいRPGツクールが欲しいてな感じですかね。
すごく強い将棋ソフトより、将棋思考ルーチンツクールみたいな。
定跡入れ、評価関数の編集、手筋、等を簡単な入力で行える。
そういうような意味かな?

この部分を見やすいインターフェイスで作り上げるのはけっこう難しいと思う。
RPGと同じLVぐらいのRPGが作れるRPGツクールを比べると、
RPGツクールを作る方が断然難しいように。
将棋ソフト作者は、それぞれやりやすいやり方で編集を行っていると思う。

でも、もしかしたら、そういうものができているのに、それをうpしてしまうと、
将棋が強い人がポンポン強い思考ルーチンを作ってしまい、
ソフトが売れなくなると考え、隠している製作者もいるかも。

492 名前: ◆R/rLuLKeEI :04/03/19 01:00
二兎を追うものはなんとやら。
でも追いたい。
色々なUIとちゃんと動く盤駒と思考や定跡や色々な付加機能をもったコンポーネントを自由自在に組み合わすことが出来て、シェア/フリーによる一部分の開発でもそれを取り込んだり置き換えたりできるようなシステムがいい。
共有すべきは、誰もがどの部分でも開発したり、使ったりできる将棋用プラットフォームだと思う。

近況:
・JVMのヒープメモリの上限を1GBにしたらデーモン将棋相手に投了まで行けた(5?手目で負けた。棋譜無し)。

現実を見ると、遅々としてすすまんなぁ(笑)。
理想にはほど遠いや。

493 名前:うさぴょんの育ての親 :04/03/19 01:13
ここに書くのはずいぶん久しぶり。

>>480
>>489
今年の選手権が終わったら考えます。
うさぴょんの骨組みをきれいにまとめて抜き出せばいいはず。
うさぴょんのUIのソースもおまけに付けましょう(w

494 名前: ◆R/rLuLKeEI :04/03/19 01:53
>>485
実際にはウイルスパターンの更新のように定期的な最新定跡のDLになりそう。

495 名前:263 :04/03/19 02:38
実績もあるうさぴょんの骨組みが提供されるようであれば
私の出番は無さそうですね(^^;

林森林 λ... 山篭りしてきます。


496 名前: ◆R/rLuLKeEI :04/03/19 08:23
420台から始まった共有化の話も問題提起した方達の想いとは少し違う形に収束するようですね。

大会後となるとGW後、うさぴょん2の開発や大会バージョンの整理、公開とか考えると叩き台バージョンの公開は9月頃かな。
ボランティアの方にはあまり無理はいえんしね。

497 名前:うさぴょんの育ての親 :04/03/19 10:42
>>496
いつ出来上がるかは、いつまで会社休んでるか次第ですかねぇ。

日記の方には書いているけど、昨年の8月終わり頃から病気で
ずーっと会社休んでます。もう半年以上になるんですね…。

まぁ病気なので思うように進められないけど、会社に行っているよりは自由になる
時間がいっぱいあるので、病気が治らなければ(笑)もっと早くリリースできそうです(笑)。


498 名前:デフォルトの名無しさん :04/03/19 21:02
>>497
密かに静かに期待してますので、静養第一に。

499 名前:うさぴょんの育ての親 :04/03/19 22:39
>>463
どこのどなたか存じませんが、改めて読むと、うさぴょんのソース、
よく読まれてますね。批評も的確だと思います。

ただ、末端の処理については、実はKFEndの方法を参考にしているので、
変わった方法かも知れませんがオリジナリティーはあんまりありません(--;

さて、本題。>>463 さん、うさぴょんの育ての親に加わって貰えませんか?
でも、オリジナルの将棋プログラム書いている方なのかな?

500 名前:うさぴょんの育ての親 :04/03/19 22:45
>>498
なかなか静養第一ってわけにも行かなかったり…(泣)。


501 名前:デフォルトの名無しさん :04/03/19 23:06
>>500
体が資本ですから、くれぐれもご無理なさらないように。
なかなかそうはいかないんでしょうけど(泣同意

502 名前:C言語の人 ◆OtHeRo2E6Y :04/03/19 23:18
↓たたき台
ttp://pc2.2ch.net/test/read.cgi/tech/1051703369/667

思いっきり、誤爆してまったのは秘密。

503 名前:デフォルトの名無しさん :04/03/19 23:57
七行プログラミングか…

504 名前:デフォルトの名無しさん :04/03/20 02:20
思考するの?

505 名前:463 :04/03/20 07:35
>>499
お察しの通り、自分で作っているものがあるので…。
ソース、ところどころ参考にしてます。お世話になってます。感謝。

506 名前:うさぴょんの育ての親 :04/03/20 07:54
>>505
そうでしたか。開発、頑張ってください。
2Chでプログラム名をさらすのがあれでしたら、
選手権で会った折にでもこっそり「あれは私です」って教えてくださいね(^^)


507 名前:デフォルトの名無しさん :04/03/20 12:26
ここ見てて作りたくなって作ってます。
いまんとこ合法手の判定まで完成。
合法手といっても王手放置・打歩詰・千日手は考慮しておらず。

マターリ進めたいと思っとります。

508 名前: ◆R/rLuLKeEI :04/03/20 15:02
作っていることを表明していただくと何だか嬉しいねぇ。

近況:
前日からの徹夜&休日出勤で開発続行できず。
シャクなので息抜きに
・CSAサーバープロトコルの実装実験
 2度目の挑戦
 Java版サンプルCsaCommunicationを使用。
 疑似サーバーTest56.exeとのコードレベルの通信方法は大体分かった。
 やみくもに書き始めたのでこれで終了。
 次回3度目の挑戦ではちゃんと状態遷移図書いてStateパターンの適用実験を予定。

仕事に戻りまっさ。

509 名前:507 :04/03/20 16:13
〜状況っぽいもの〜
ためしに簡単なルーチンを組んでみる。
合法手の生成がまったく出来ていないことがここにきてようやく分かる。
▽8八・などというネ申の一手を指しだしてどうしょうもならん。

うあー

510 名前:C言語の人 ◆OtHeRo2E6Y :04/03/22 00:07
正しく動く盤駒が欲しい人への問い:
プログラミング言語は何で作ってあるといいですか?

近況:
完全に煮詰まってしまったので、
書籍を購入。今までは『コンピュータ将棋』『将棋とコンピュータ』の2冊しか資料がなかったのです(^^;;
往復13時間ほどかけ書店に行ってきまして新たな本を購入。
『コンピュータ将棋の進歩3』『同4』『人月の神話』『コンピュータの名著・古典100冊』
しばらくは春の夜長の読書になりそうです。
注:私は職業プログラマではありません(^^)趣味でプログラム書いてる人です。

511 名前:デフォルトの名無しさん :04/03/22 04:30
ttp://www.computer-shogi.org/wcsc13/team.html
ここみるとCやC++が圧勝のようです

512 名前:C言語の人 ◆OtHeRo2E6Y :04/03/23 00:06
なるほど。資料ありがとうございます>>511

13回大会の使用言語の集計は以下
27 C++
17 C
1 Ruby
1 Pascal
1 Python
1 Visual Basic
1 Delphi
1 ?

(手作業の集計なので誤りがあるかも・・・)
C++覚えないとダメですかねぇ・・・(遠い目)

513 名前:デフォルトの名無しさん :04/03/23 07:32
Pascalで組むってのもすごいな

514 名前: ◆R/rLuLKeEI :04/03/23 08:06
DelphiじゃないPascalってなんだろう?GNUかFree-しか思いつかん。
最初は使い慣れた言語で始めて効率を求めてC++に移植がよさげやね。

515 名前: ◆R/rLuLKeEI :04/03/25 02:14
8八・などという神の一手を指した方はその後如何?

近況:
・相変わらず成らなければならない位置で成らないバグはほったらかし。
 そのうちやる。
・序盤から証明数/反証数を使うのは無駄なので普通の評価関数とminimax手続きに戻した。
 もう少しminimaxで遊んでバグ出しをする。

おやすみなさい。

516 名前:507 :04/03/25 12:31
とりあえず打ち歩詰除いて合法手の生成は実装。
思考のほうも組んでみたのでつが、minimaxからαβにしようとしたらおもいきりバグタ。

とりあえずminimaxにしといて打ち歩詰が先かな・・

517 名前:復活おめ :04/03/29 08:29
幻のレスを補完、と

517 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 16:22
自信ないですが、アップしてみました


518 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 16:33
(゚Д゚≡゚Д゚)エッドコドコ?

518 名前: ◆R/rLuLKeEI :04/03/30 08:16
で、どこ?

近況:
・王手の判定を高速化
 王手を回避しないバグを入れてしまったのでボツ。
・駒の損得を入れてみた。
 やはり負け。
 価値の表を外部ファイルにして実験中

519 名前: ◆R/rLuLKeEI :04/03/31 01:49
年度末でバタバタしてコーディングに時間がとれない

近況:
・駒の価値のファイルをちまちまエディタで変更するのが面倒なねで将棋プログラム上のダイアログで扱えるように改造中。

年度始めもバタバタして進みそうにない。

520 名前:デフォルトの名無しさん :04/03/31 01:52
この手のプログラムは
やっぱりC++が一番楽だな

オセロの時もお世話になった
C++の作者に感謝

521 名前:デフォルトの名無しさん :04/04/02 08:30
>>512
Cでもいいんじゃない?

最終的にGUI環境を含めた実現を目指すのであれば、
(Cで製作している人は)C++の選択がベターかと思うけど...

中には思考部分はC、GUI部分はC++と言う人も居るんじゃないかな?


522 名前:デフォルトの名無しさん :04/04/02 09:00
どっちかと言えば思考部分こそC++だと思うが。

523 名前:C言語の人 ◆OtHeRo2E6Y :04/04/02 23:47
局面から指せる手をリストアップする・・
Cなら
typedef sturct { /* ... */ } Te;
int listup_te(Te te[]); /* 局面はグローバルで持つ、配列teは十分な大きさを持つ、戻り値は手の数 */

C++なら...
class Te;
class Kyokumen {
public:
std::vector<Te> listupTe() const;
//...
};
うーむ・・・正しくなさそう・・・

C++はわからんです。

524 名前:デフォルトの名無しさん :04/04/03 05:54
無理にC++にしなくても(^^;

とにかくC++のソースを山ほど読んで、
どういうところでC++の機能(クラス、テンプレートなど)を用いるかを
理解しないと、Cよりたちが悪いよ。


525 名前:デフォルトの名無しさん :04/04/03 07:15
class Piece { // 通常の駒クラス
protected:
  Board* m_pBoard; // 盤面へのポインタ
  std::vector<Move> m_MoveListNode; // 合法手を格納
public:
  virtual void generateMoves(); // この駒の合法手を生成
  Move getNextMove(); // 格納した手を返す(次がなければEND_OF_LISTを返す)
};

class SlidingPiece : public Piece { // 飛び駒クラス
public:
  void generateMoves(); // 飛び駒用に、駒に当たるまでループして生成
};

こんな風にして、駒の中に合法手を生成する関数をいれる方法もある
とか中途半端なアドバイスをすると余計分からなくなるかもしれない・・・

526 名前:デフォルトの名無しさん :04/04/03 08:31
むしろrobocodeみたいのきぼ
親クラスから合法手を取得して思考部分のみのプログラミングで済むよーな
誰か一人が作れば(ry

527 名前:(263) FENNEC  ◆pot.c2.tqw :04/04/04 08:39
>>528
だからそれが難しいんだって、何度言えば(ry
というのは、おいといて(^^;

問題点を挙げるとすれば、
製作者に「自分が理解できる構造・仕組みであればいい」というのが前提にあるからだと思う。
誰かに利用されることを前提とすると根本から考え直さないといけなくなったりする。

提供される側が、提供する側の「仕様が全て」と割り切るか、
提供される側が、提供する側に「要求」を出すか。

駒や座標の扱いなんか、いい例だと思うが、
提供される側として意味不明の数値よりは、意味が汲み取れる数値のほうがいいに決まっているが、
そうなるとどうしても、製作者側からみれば「無駄な」変換作業が必要とされる。
いざ提供されたとしても、思っていたものと違うといって使われないようであれば意味がなくなるし。
どういうフォーマットで受け渡しするのかが、必要じゃないかな?

あと、合法手を生成するレベルだと、
それなりの基本情報(例えば利き)を副産物?として得ることが出来ると思うけど、
そういう類の情報の扱いも、思考部分で独自にルーチンを組んで取得するのか
それともメソッド等で取得するのか...


528 名前: ◆R/rLuLKeEI :04/04/04 19:52
Javaなら局面クラスPositionから抽象クラスPlayerのsearchの中で
サブクラスにある下のメソッドを呼ぶ。

class AfoPlayer extends Player {
public Move searchMove(Position org) {
// 合法手取得(全部+∞)
MoveTreeSet mts = org.getAllMoves();
// 1手取りだし
Move m = mts.removeFirst();
// 1手指す
org.move(m);
// 局面評価値を手の評価値にする
m.setValue(org.calcValue());
// 手を追加(クラスMoveTreeSetが評価値順に挿入してくれる)
mts.add(m);
// 最善手を返す
return mts.best();
}
}

529 名前: ◆R/rLuLKeEI :04/04/04 20:11
上に書いたのは現在開発中のとほぼ同じ構造です。
親クラスで合法手なしなら上のメソッドは呼ばないし、呼んでもnullを返すと投了扱いにしている。
この枠組みに手を加えてManPlayerとMiniMaxPlayerを書いた。
評価関数が局面クラスと分離していないのが問題。でもいいや、動いてるし。

530 名前:デフォルトの名無しさん :04/04/10 21:06
非常に初歩的な質問で失礼します。
将棋ソフトの開発はBorland C++ Compiler5.5程度でもできるのでしょうか?
あるいは、Borland C++ Builder 6 Personal
または、Visual C++ 5.0 6.0や.NET Std 2003などが必要なのでしょうか?


531 名前:あぼーん :あぼーん
あぼーん

532 名前:デフォルトの名無しさん :04/04/10 21:44
>>530
Borland C++ Compiler5.5なら十分できます。

533 名前:デフォルトの名無しさん :04/04/10 22:00
>>532
お返事ありがとうございます。
1年後の選手権参加を目標にがんばってみようと思います。

534 名前:デフォルトの名無しさん :04/04/11 00:18
昔、将棋のプログラムをVBで作ろうとしたのですが
駒を作るのが面倒なので辞めました。
どなたか駒をもらえないでしょうか?

535 名前: ◆R/rLuLKeEI :04/04/11 00:37
>>534
駒の何がお望み?

536 名前:デフォルトの名無しさん :04/04/11 01:09
どうせなら24金製の駒が欲しいね。

537 名前:デフォルトの名無しさん :04/04/11 01:20
硬い鉄の方がいい

538 名前: ◆R/rLuLKeEI :04/04/11 01:21
ああ、みてくれだけでいいのか。
だったら礒部将棋のページにフリーのPNG形式とBMP形式のがあるでよ。

個人的には白金製のディスプレイ用巨大駒が欲しい。

539 名前:デフォルトの名無しさん :04/04/11 10:30
>538
ありがとうございます。
暇なとき作ってみます。

540 名前: ◆R/rLuLKeEI :04/04/12 07:17
近況:
既知のバグは残したまま
・評価の重み付けを何となく対話的に更新する処理を考えながら実装中。

541 名前:9X9 :04/04/15 11:03
コンソールアプリで作り始めたが、盤の上ではキー入力なのに、
ファイルを開くときにマウス入力になったり、
将棋盤を表示するスペースが大きく、読み筋を表示する位置が
なかったりしたので、ウィンドウズアプリで作り直し。

ただ、ウィンドウズアプリ製作はあまり経験が無いので、
別のゲームを作って知識を深めてから将棋に取り掛かる予定。

後、少し前に作ったオセロですが、よかったら遊んでください。
動作環境はウィンドウズで、キーは位置は、Enterで駒を置く、
スペースで次の一手のヒントを得る、Escで終了。
http://gamdev.org/up/img/487.lzh

542 名前:9X9 :04/04/16 18:10
プログラムの流れ、出力、入力以外の部分は
コンソールアプリ、ウィンアプリ大体同じなので、
その部分はコンソールアプリの方でも製作継続中。

今はカーソルの移動、盤の反転、駒を動かす、
棋譜のセーブ/ロードなど、まだ基本部分の所まで。

543 名前: ◆R/rLuLKeEI :04/04/18 05:24
局面表の衝突が起こる前に仮想メモリを食い尽くしてダウンしてしまった。
Javaだと局面の配列はポインタの配列になるので局面を登録すると空きメモリが減っていくらしい。
とりあえずメモリ不足に強い探索アルゴリズムを考えてみる。

544 名前:デフォルトの名無しさん :04/04/19 13:02
>>543
>局面表の衝突が起こる前に仮想メモリを食い尽くしてダウンしてしまった。
>Javaだと局面の配列はポインタの配列になるので局面を登録すると空きメモリが減っていくらしい。

(局面そのものの記録じゃなくて)
booleanかintの巨大配列に局面のハッシュ値だけを登録するのじゃ駄目?

545 名前:デフォルトの名無しさん :04/04/19 13:22
4Gぐらい積むとか。

546 名前: ◆R/rLuLKeEI :04/04/19 16:53
ハッシュ値はハッシュ表の添え字になるんじゃなかったか?
それにめったに起こらない衝突が起こったとき同一か否かは知りたい。
物理メモリをたくさん積んでも時間稼ぎみたいで根本的な解決にはならない。

やりたいこと:
どんなメモリ量でも最適なハッシュ表のサイズを人の介在無しで決定する。

現状、ハッシュ値に32ビット値そのまま使ってんのが原因やね。
とりあえず前向き枝刈りを入れてみた(時間稼ぎ)。

547 名前:デフォルトの名無しさん :04/04/19 18:12
>>546
ハッシュ表は↓な感じで評価関数をキャッシュするために使うと思ってたけど、何か違った?
int hyouka(Kyokumen kyokumen){
 //ハッシュが登録されている場合はその中身を返す。
 //登録されていない場合は真の評価関数の値を登録して返す。
 //衝突は滅多に起こらないから気にしてない。
 int hash = kyokumen.hashCode() / hashHyou.length;
 if(hashHyou[hash] == 0 ){
  hashHyou[hash] = _hyouka(kyokumen);
 }
 return hashHyou[hash];
}

>どんなメモリ量でも最適なハッシュ表のサイズを人の介在無しで決定する。
java.util.HashMapは動的にサイズを変えてるね。
それとも、確保できる物理メモリを全部起動時に占領してしまうとか。

548 名前: ◆R/rLuLKeEI :04/04/19 18:32
>>547
難しく考えすぎていました。
ありがとう、やってみます。

549 名前: ◆R/rLuLKeEI :04/04/19 20:42
うさぴょんのソースだとEvaluatedTblが局面表らしい。
が、要素の型EvaluatedValは構造体だしなあ。違うんかな。それっぽいけど。

64MBに納まる配列が二組。
64ビットで区別して衝突したら前のを二組目に押し込んで新しいのを一組目に入れるようだ。
64ビットハッシュ値はハッシュ表の添え字と関係あるけどそのものじゃないんだね。


仮想メモリ込みで空きが128MB未満だと動かんのか…違っていたらごめんなさい>うさ親さん

550 名前:うさぴょんの育ての親 :04/04/19 21:13
EvaluatedVal構造体には、評価値の他に、最善手などもしまって
います。そうすることで、反復深化を行う場合に効率よく最善手から探索を
行うことが出来るようになってます。

それから、メモリの使用量ですが、デフォルト値はソースに書いてある64M
ですけど、物理メモリの量にあわせて動的に決めてます。

そんなとこで。

551 名前:デフォルトの名無しさん :04/04/19 21:48
分かってる事かもしれないけど、一応書いておきます・・・

struct Hash { // 局面表に登録する情報
   unsigned __int64 key; // ハッシュ値
   int depth;
   int value;
   Move best;
   ...
};

登録する場所、
Hash hash;
....
hash.key = getHashKey();
hash_table[ hash.key & HASH_SIZE ] = hash; // 登録する場所は、 key & ハッシュ表の大きさ

if(hash_table[ hash.key & HASH_SIZE] != NULL && // 既に何かが登録されてる
 hash_table[ hash.key & HASH_SIZE].key != hash.key) // キーが違うので同一局面ではないだろう。。。
 // 再ハッシュして登録

552 名前:551 :04/04/19 21:54
hash.key = getHashKey();

if(hash_table[ hash.key & HASH_SIZE != NULL &&
  hash_table[ hash.key & HASH_SIZE.key != hash.key)
 // 再ハッシュして登録
else
 // 登録されてる値より良い値なら更新

こうだった

553 名前:デフォルトの名無しさん :04/04/19 22:13
]が足りない

554 名前: ◆R/rLuLKeEI :04/04/19 22:32
>>551

「キーが違うので同一局面ではないだろう」というより「キーが同じなのに違う局面てことは多分ないだろう」ですね。

555 名前:デフォルトの名無しさん :04/04/19 22:56
局面Aのハッシュ値 = 15000
局面Bのハッシュ値 = 25000
ハッシュの大きさ = 10000
だとしたら
15000 % 10000 = 5000 -> hash_table[5000]
25000 % 10000 = 5000 -> hash_table[5000]
登録場所は一緒だけどキーは違う

556 名前: ◆R/rLuLKeEI :04/04/19 23:15
そう、
・キーが違うから局面が違う。
・局面が同じならキーは同じ。
・キーが同じでも局面が同じとは限らない。

どこが間違っているのだろう?

・キーと登録場所は違う。
・キーと局面のハッシュ値は同じ。
この辺りの私の思い込みが怪しいのか…ようわからんので寝る。
起きて再考したらすんなり理解出来るかもしれない。

557 名前: ◆R/rLuLKeEI :04/04/19 23:38
意固地になっている私がおかしいのか‥そうだ、そうに違いない。
ただ今私の論理は破綻中。
やはり帰って寝ます(1.5時間くらい後)。

558 名前:デフォルトの名無しさん :04/04/20 01:35
1つの局面にキーを3つぐらい用意して、それでも衝突するならハッシュ使うのは諦めるしかないんでわ・・・
64ビットあれば、添え字の衝突はあってもキーの衝突はまずないんじゃないでしょうか、、。一日中探索したりしない限り。
 あと、上のは局面表を構造体で登録する方法を示しただけです。
構造体がどうこう言ってたから、ハッシュ値しか登録してないんじゃないかと思ったので。

559 名前: ◆R/rLuLKeEI :04/04/20 02:53
ハッシュ値の元の局面そのものを登録してました。
実は最善手以外の全ての手も入れてました。
探索自体かなり遅いので32ビットでもキーの衝突は一度もありませんでしたが、
めったに起こらないことにも拘りたいのは私の性分なんでね。
仕方がない。

でも私が局面表の目的を誤解していたのは確か。
この度は猛烈に参考になった。
実装やり直しは多分5月中旬。

まだ色々と試行錯誤したいので越えそうにない壁にぶちあたった時はよろしくご教示くださいませ。
では今度こそおやみなさい。

560 名前:デフォルトの名無しさん :04/04/20 09:52
>>559
めったにおこらないことにも・・・というなら、論理上ハッシュはつかえないのでないかと小一時間

561 名前: ◆R/rLuLKeEI :04/04/20 13:42
天変地異が起こったときは役に立たないとか?
何日も探索を続ければ一度くらいはキーの衝突はありえる。
その時キー以外に比較するものがなければ真に異なる局面なのか判別できない。
もし異なる局面でよりよい評価値であったなら正しくない諸情報で置き換え、またそれを使う。
キーと局面が一対一対応か、キーの他に局面そのものがあれば判別できるので前のを捨てて新しい
のを入れるか、よりよい評価値であったなら更新するか、また使うときも異なる局面の情報を間違
って使ってしまう心配がない。

区別出来ないのは気持ち悪いなぁと思 略

562 名前: ◆R/rLuLKeEI :04/04/20 14:08
阪神大震災前に「日本の規準ではその程度の地震では高速道路が落ちることは絶対無い」と米国の震災の時に聞いた。実際に阪神大
震災では倒れたわけで、起こりうることへの対処がないのはとても不安。

この話題、私が非常に不利なので撤収したくなってきた。無視して頂ければ自然消滅しますので皆
様よろしく。

563 名前:デフォルトの名無しさん :04/04/20 15:16
>>561,562
設計者が行なっているのは、ある「想定」に従ってコスト計算すること。
阪神大震災どころか、原爆が落ちたって大丈夫な建物というのを作ることは技術的には可能。
でも、コストがあまりにかかり過ぎる、ってことなだけ。

今回の話で言うなら、キーが誤って衝突したときにどれくらいの被害が起きるか。
少し手が信用できなくなるだけなのか、もっと致命的なことが起きるのか。
そしてそれを回避するためにはどれくらいコストがかかるのか。
というのを基準においてあくまで「コスト計算」として判断しなきゃダメ。

例えば、オセロの完全探索みたいな時は衝突は致命的。だからそういう時は
盤面情報が落ちないようにキーを作る。
将棋でももちろん情報が落ちないキーを作ることは可能で、
あとはそれがどれくらい必要なのかを検討するだけでしょ。

564 名前: ◆R/rLuLKeEI :04/04/20 17:26
キーの衝突があったらどれくらい影響があるか局面そのものも入れて実験してみたら衝突前にダウンした。
原因はすぐに分かったが他の人はどうしているのだろうと調べたり聞いたりしてみて、「でもこれ
は完全じゃない」と強く思った次第。
不完全だか単純と完全だか複雑なら後者により興味がある。αβよりSSS、前向き枝刈りより全幅
探索、完璧な評価関数…私は負け組に属しているらしい。
確率的にほとんどないしほとんど影響ないから問題ないというは私が許さないだけです。
許さないならどうするというのかと言われると困ってしまうがどう 略

565 名前:デフォルトの名無しさん :04/04/20 19:31
心配するな。
どっちみち、まともに動いてないプログラムなんだから。

566 名前:デフォルトの名無しさん :04/04/20 19:34
ハッシュの計算には、なにを使うのが一般的なんですかね?

567 名前: ◆R/rLuLKeEI :04/04/20 21:38
>>565
全くだ(笑)

568 名前:デフォルトの名無しさん :04/04/20 22:11
段ごとに、最小完全ハッシュを作ることってできないかな?

569 名前:デフォルトの名無しさん :04/04/21 04:07
http://www.breuker.demon.nl/thesis/index.html
ここの、"The transposition table"という論文によると、
キーが衝突した時の解決策は

1.盤面の情報を全て記録しておく(メモリ不足になるので良い作法ではない)
2.キーが衝突した局面表に記録されてる手が、現在の局面での合法手かを確認する(エラーを少しは回避できるだろう)

ということらしいです。
2の場合、
ある局面でのある手の評価は、他の局面でも大体一緒だろう、
ということで、違う局面の評価だったとしてもある程度信用できるんじゃないでしょうか。
 64ビットなら、衝突する可能性は1%程度だそうなんで、そうそうある事じゃないし、
たまに間違えちゃったら、まぁしょうがないかって具合でいいんじゃないですか、、、
市販の将棋ソフトも、大勝勢の場面で投了したり、詰んでない局面で詰みです、とか表示されたりすることもたまにありますし。
それでも嫌なら、ハッシュを使うのをやめればいいわけで・・・

570 名前: ◆R/rLuLKeEI :04/04/21 08:37
>>569
まさに、解決策1をしてみて駄目だったということを確認したわけだ。
しかしもっと基本的な部分で本当にまともに動いていないので局面表を使わない探索に戻した。
まともに動くようにしてから局面表を実装してみる。
現実的に取り得る対策として解決策1は絶対採用しない。
実現方法としてハッシュは多分採用する。
その前にO(logN)の別の実装を試してやっぱり遅くて駄目でしたという回り道をするだろう。

私が将棋とプログラミングに向かないようだな。

571 名前:C言語の人 ◆OtHeRo2E6Y :04/04/21 23:47
うーんと・・・1局面を60バイトで表現ってどこかで読んだ気がします・・・これがキーで。
(1つの駒の所属1ビット、名前4ビット、位置8ビットの12ビット=1.5バイトが40駒)
キーからハッシュ作って・・・。重複不可なのならキーは必要だし・・・。
重複可なら60バイトのキー値はいらないし。
とか考える前に、私は静的評価関数を考えなければ。

近況:
プログラム開発完全停止。
開発環境をVineLinuxに移行しようと模索中です。
環境整備できたら、データ構造から書き直しする予定。

572 名前:デフォルトの名無しさん :04/04/22 00:40
>>571
(81マス×成不成+持駒)×先手後手というわけで計算。
(log(((81 * 2) + 1) * 2) / log(2)) * 40 = 333.949126

あと、「金はならない」「王はお互い一枚ずつ」という条件を加えると、
((log(((81 * 2) + 1) * 2) / log(2)) * 34) + ((log((81 + 1) * 2) / log(2)) * 4) + (log(81) / log(2)) = 319.626815
結果、最小ハッシュなら40バイトを切ります。

573 名前: ◆R/rLuLKeEI :04/04/22 00:46
古い文献で申し訳ないが、『コンピュータ将棋』p.64に"281ビッド(約35バ
イト)で盤上は表現される。持ち駒があるときはその配分を付け加えるがその
分だけ盤上の駒が減るので35バイトで表現することができるといえる。"とあ
るけど…今はまともに動くプログラムにする方が先決。

574 名前: ◆R/rLuLKeEI :04/04/22 01:37
うさぴょんのソースのHASHVAL.Hだったかに16進数値がずらっと並んだのを見かけたけど
ゾブリストなんとかとかいうハッシュキーの生成に使うんかいな?
手元にソースかないんでわからへんねん。

わてのはまともに動いてへんからどうでもええねんけど。

575 名前:デフォルトの名無しさん :04/04/29 10:46
全ての局面は何通りあるのかな?
天文学的数字だろうけど、どういう風に計算すればいいんだろう?
281ビットで表現できるということは2の281乗?

576 名前:ミナツキ サヤ ◆SAYAC2HJWE :04/04/29 10:58
575

577 名前:デフォルトの名無しさん :04/04/29 15:27
>>573
の文献は持ってないが、Huffman符号で切りつめてみたけど
盤面は最大で 267bit
最小で 81bit
持ち駒は片方のみ持つことで21bitぐらいか...。


578 名前:デフォルトの名無しさん :04/04/29 18:32
>>575
俺が途中まで考えたのは…

盤に駒を置くより、駒に座標を持たせた方が空白を考慮しなくていい分だけ情報量は減らせるはず。

1つの駒に持たせる情報は、成り(2種類)、先手後手(2種類)、と座標(81+1(持ち駒))で、
2*2*(81+1) = 328通り
だね。

それと、手番(2種類)が必要だね。駒の種類は情報格納位置で表せる。

更に、ルール上、玉と金は成れないので、成り情報の分は減らせる。
更に、玉は先手後手1つづつと決まっているので先手後手情報の分も減らせ、なおかつ持ち駒になる事もないから座標から持ち駒の分も減らせる。

歩と香は成らない状態で敵陣1段目に存在することができないので、1つの駒につき座標情報を9つ減らせる。
桂馬は成らない状態では敵陣1段目と2段目に存在できないので、1つにつき18マス情報を減らせる。

持ち駒以外のマスには1つのコマしか存在できないから、駒の位置が1つ決まるたびにその分他の駒の位置は限定される。

二歩を考慮すると、もう少し情報を減らせる。

あとはこれを計算すればいいんだけど、面倒くさいんで、頭のいい人、お願い。

まあ、328の40乗より局面が多いって事はないね。

579 名前:C言語の人 ◆OtHeRo2E6Y :04/04/29 19:34
表現の最小のビット長は面白そうなパズルですね。
>>573 (コンピュータ将棋 ISBN4-7819-0581-1)の281ビット表現は
おいらにはワカランです(^^;;

最小の証明をやろうとすると大変だから、
発見した方法を提出していくといいかも。

うう、プログラムぜんぜん進んでない。。。
大会に出場される方々はいろいろ、準備されてるんだろうなぁ・・・。

やっぱし、もうちっと脳みそを鍛えねば来年の大会参加すらアヤシイですのぉ。

580 名前:デフォルトの名無しさん :04/04/30 19:33
盤上の駒の有無:81ビット
盤上の駒情報:5ビット×40(種類3ビット、成り1ビット、先手後手1ビット)
で全部盤上にあるときは281ビットで表現できる

581 名前:デフォルトの名無しさん :04/04/30 20:01
>>580の続き
持ち駒があるときは、1枚につき
盤上の駒情報5ビット減り
持ち駒情報4ビット(種類3ビット、先手後手1ビット)増える

582 名前:C言語の人 ◆OtHeRo2E6Y :04/04/30 21:43
>>580-581 なるほどなっとく!
分かりやすい説明ありがとうございます。


583 名前:まともに動いていない ◆R/rLuLKeEI :04/04/30 23:02
>>580-581
初めて281bitの意味が分かったよ。
局面の数は高々10の85乗と言うわけだな。いや違うか…。まあいいや。

584 名前:sato :04/04/30 23:05
ダビスタを、MX,NY以外で落とせるところを教えてください。

585 名前:デフォルトの名無しさん :04/05/01 06:34
めちゃくちゃな誤爆だな・・。
家の2階からでも落としてください。

586 名前:デフォルトの名無しさん :04/05/03 21:42
1日目終了上げ

587 名前:デフォルトの名無しさん :04/05/04 00:24
予選敗者と間に合わなかった人で、ネット棋大会やらないか。
6月20日でどう。


588 名前:デフォルトの名無しさん :04/05/04 03:30
>>578
盤面の記憶だけを考えてみた。

駒の種類と同じで、先手後手も位置で表現できる。
盤上の位置は0〜80までの番号で表せられる
そうすると位置情報で7bit、成りで1bitか
(持ち駒は座標を盤外にする)

これで1盤面当たり40byte(320bit)
扱いやすさを考えると、この当たりが妥当かと思われる
ただし、これはCでの試算なので、C++はともかくJavaとかだと
classにするともっと消費されるかもしれない

589 名前:デフォルトの名無しさん :04/05/04 21:33
>>588
王以外は先手後手情報は位置では表現無理でない?

590 名前:デフォルトの名無しさん :04/05/04 22:14
>>588
盤面に全駒が乗っている場合の圧縮限界を計算してみた。
歩18香4桂4銀4金4角2飛2王1玉1と空枡41だから
      81!
------------------*2^38*2^34=1.67E+053
18!*4!*4!*4!*4!*2!*2!
つまり、177bitで表現できる。(持ち駒を含めば180bit程度か)

案外、将棋の盤面って少ないのかも。

591 名前:デフォルトの名無しさん :04/05/04 22:15
>>590に訂正
>      81!
>------------------*2^38*2^34=1.67E+053
>18!*4!*4!*4!*4!*2!*2!

      81!
---------------------*2^38*2^34=1.67E+053
18!*4!*4!*4!*4!*2!*2!*41!

592 名前:デフォルトの名無しさん :04/05/04 22:30
【将棋】コンピューター将棋世界一決定[05/04]

コンピュータ将棋ソフト世界一を決める第14回世界コンピュータ将棋選手権が
2004年5月2日(日)〜4日(火) に渡って千葉県木更津市 かずさアークで行われた
予選を勝ちあがった5チームにシード3チームを加えた8チームの総当たり戦の結果
YSSが6-1で優勝、7年ぶりの世界一となった
また話題の北朝鮮製のKCCも健闘し、3強に迫る力を見せた
http://www.computer-shogi.org/wcsc14/

最終結果は以下の通り()内は市販製品名、無いものはそのまま、TACOSのみ市販無し
*これらは全て大会バージョンであるため市販品とは違っていることに注意


1 YSS(AI将棋)
2 激指
3 IS将棋(東大将棋)
4 KCC将棋(銀星将棋)
5 柿木将棋
6 永世名人
7 TACOS
8 金沢将棋

593 名前:590 :04/05/05 00:38
>>591をエクセルへ入力するのに間違いがあった。
それを直したら9.63E+070=236bit。

ついでに局面を持駒まで含めて数えるのをjavaで書いたところ、
すべての局面を表すのに必要なのは237bit〜30byteらしい。
最小ハッシュ関数をどう作るのかは判らん。

594 名前:デフォルトの名無しさん :04/05/05 16:35
>>580
>盤上の駒の有無:81ビット
>盤上の駒情報:5ビット×40(種類3ビット、成り1ビット、先手後手1ビット)

ということですが、1一に駒がある、ということは分かるんですが、
1一に歩じゃなくて香がある、という情報(その位置にある駒の種類)は、
どこをみれば分かるのでしょうか?
それが分からないと、正しく盤面を一意に表せないと思うのですが。

595 名前:デフォルトの名無しさん :04/05/05 17:04
駒の種類が7種類なら、有無ビットがいらないのになぁ

596 名前:デフォルトの名無しさん :04/05/05 19:32
>>594
ハッシュのことは、ほとんどわからないんだけど、

まず、>>580のデータで照合して、
それに合致した場合あらためて駒の種類も照合するというのではないの?


597 名前:まともに動いていない ◆R/rLuLKeEI :04/05/05 20:35
>>594
81マスを一直線に並べてビットの立っている順に駒を並べれば区別できるはず。
盤上は1マス6ビットで十分、
 81*6=81*(1+5)=81+81*5
有無ビットが0なら駒情報は無意味なのでこれを落として別にする。
 81+81*5=81+(40+41)*5=81+40*5+41*5
最後の41*5が消せるわけやね。

598 名前:デフォルトの名無しさん :04/05/05 21:00
>>597
なるほどφ(・・

81ビットと81マスを1対1に対応させれば、
ビットの立っている位置=固定位置となり駒の位置が解かる。
さらにビットが立った回数nから、n番目の駒情報が参照できる。

もっと勉強しなければいけないなぁ(^^;

599 名前:まともに動いていない ◆R/rLuLKeEI :04/05/05 22:31
>>593
 2^10≒10^3
なので
 2^237≒10^71.1 今まで言われてきた総局面数の最小推定値を探しに前レス・前スレッドを遡ってみるわ(携帯で)。

600 名前:まともに動いていない ◆R/rLuLKeEI :04/05/05 22:31
>>593
 2^10≒10^3
なので
 2^237≒10^71.1 今まで言われてきた総局面数の最小推定値を探しに前レス・前スレッドを遡ってみるわ(携帯で)。

601 名前:デフォルトの名無しさん :04/05/06 18:17
14 :Socket774 :04/05/06 17:46 ID:OI60h5qD
>>10
同一プログラムだからといって条件が一緒とは限らない。
アルゴリズムひとつとっても、CPU毎に得手不得手がある。

自作板より

602 名前:デフォルトの名無しさん :04/05/06 19:09
自作板の奴ら言うことなんざ、相手にするなw

603 名前:デフォルトの名無しさん :04/05/08 14:46
delphiで作成してみます


604 名前:デフォルトの名無しさん :04/05/08 20:36
>>603
がんばれ〜

605 名前:まともに動いていない ◆R/rLuLKeEI :04/05/08 23:14
>>603
私からも頑張れー

606 名前:デフォルトの名無しさん :04/05/09 13:59
 将棋プログラムって、江戸時代辺りからの積み重ねて来た
譜面のデータベース入力をベースにした人口無能では駄目なの?

607 名前:デフォルトの名無しさん :04/05/09 18:33
「ベース」にどれくらいの応用力があるかどうかが勝負ですね


608 名前:デフォルトの名無しさん :04/05/09 19:02
>>606
問題ないよ。それが現代の将棋だから。

人間も「考えている」わけではなくて、時間の許す限り手を「探している」んだし。
手を探しながら局面を展開して「記憶されている局面」と照合を繰り返す。
その照合によって得られた自分なりの局面評価をもとに判断する。
上級者と初心者の違いは、記憶している局面数と、
それらの局面の評価基準と言えるんじゃないかな?

「奇襲」や「勝負手」というものが存在するのも、
人間心理としてタラレバ(相手が対応できないかもしれないこと)に期待しているわけだし。
一般に、コンピュータに対する定跡外しは、これに該当すると思うよ。
「定跡さえ外せば弱い」という認識で対戦しているだろうし、
逆に「定跡を外しても強い(きっちり対応される)」という認識になれば、
そいうことはなくなるんじゃないの?

少し前にも出ているけど、
将棋における総局面数を管理(再現、評価など)できれば、
それに越したことは無いだろうけど
コンピュータの記憶容量と時間の関係から敬遠されてきた手法であることも事実。
全てをそれに頼るのではなく、
いかにそれを有効活用するかが重要かもしれないね。

609 名前:C言語の人 ◆OtHeRo2E6Y :04/05/10 23:18
遅くなりましたけれど、大会参加のかた、お疲れ様でした。

近況:
私はプログラムとは違う方に生活の比重が移ってしまっています(^^;;
来年はGWに予定が入ってしまいましたし、しばらくは将棋プログラムから遠のきそうです。

>>415 で動かしたプログラム・・・から成長させるのは大変そうなので、
時間ができるときまで、プログラムは封印です(^^;;

・・・いや、まあ。
大好きなプログラミングですから、
マルチスレッド関係の本と、コンピューター将棋の進歩2を最近買いました。
そのうち、また動き出しますね(^^)

610 名前:デフォルトの名無しさん :04/05/10 23:47
すみませんが、将棋プログラムを自作されている方、あるいは自作しようとして
他のプログラムのソースコードを読んだりアルゴリズムの研究をされている方に質問があります。

「コンピューター将棋スレッド14」
http://game6.2ch.net/test/read.cgi/bgame/1083665979/
で議論になったのでお伺いしたいのですが(私はこのスレッドで"284","290"の発言をした者です)
皆さんが現在ご使用になっている、あるいは研究されているアルゴリズムでは
現在の局面からかなりの数の指し手を探索されてから何らかの評価関数を適用して
実際の指し手を決定されているものと思います(間違っていたらご指摘ください)。

1.その探索は深さ方向で大体何手くらい読んでいらっしゃるでしょうか?

2.手の探索及び評価に必要な計算量は探索の深さをn手進めると指し手の
 横の広がりも含めてどのくらい増大するでしょうか?
 特に読む手の幅が広くなると思われる中盤に関してお答えくださると有り難いです。

a. n x N のオーダー  (N:任意の整数、計算量は探索の深さの高々整数倍)
 b. n x logn のオーダー(a.とb.の中間的な計算量) 
c. N ^ n のオーダー  (N:任意の整数、計算量はNのn乗、n=探索の深さ)

3.上の質問に対するお答えがb.やc.(特にc.)の場合、数手深く探索しようとすると
 計算量が爆発的に増加するものと思います(間違っていたらご指摘ください)。
 その場合、計算量のオーダーをより低くするための有望そうなアルゴリズムがあるとお考えでしょうか?

勝手なお願いで申し訳ありませんが、できましたらご教授ください。
なお、「コンピューター将棋スレッド14」でコンピュータ将棋のソフトウェアの事を
よく知らずに生意気な発言をしている点をご容赦ください。よろしくお願い致します。



611 名前:デフォルトの名無しさん :04/05/11 00:08
2にもあるけど例えば http://www.logos.t.u-tokyo.ac.jp/~gekisashi/

612 名前:デフォルトの名無しさん :04/05/11 00:18
当然指数的なので深いところは手を絞って読むのが一般的
http://www32.ocn.ne.jp/~yss/book.html

613 名前:デフォルトの名無しさん :04/05/11 00:22
>606さんへ

「江戸時代辺りからの積み重ねて来た譜面のデータベース入力をベースにした人口無能」
といっても途中の局面の評価(どちらが有利な局面か?)はどうされるんでしょうか?

ここにいろいろな駒の利きとか玉の固さとか何らかの理屈を考えた評価関数を持ち込んだら
人工無能(非常にトリビアルな計算のみで動くプログラム)というより普通の将棋ソフトに
非常に近くなると思いますし。

そこから到達した最終局面のうち、勝利局面と敗北局面の数だけで重み付けするんでしょうか?
その場合、特定の局面から勝ち、負けに到達した対局数が少なすぎて十分信頼できる評価関数にならないのでは?

614 名前:C言語の人 ◆OtHeRo2E6Y :04/05/11 00:30
>>610
ttp://game6.2ch.net/test/read.cgi/bgame/1083665979/284
ttp://game6.2ch.net/test/read.cgi/bgame/1083665979/290
熱くならない程度に返答

素人の実情編
手を捨てないαβ法を採用した>>415のプログラムの場合。
1) 4手固定
2) 思考時間が初期で数秒、中盤で数分なので、単純比で60倍(より多分多い)。
2')一般にN^nのオーダーです。
3)有望かはわからなないが、存在はするはず。人間の思考では、探索の深さは長いし、評価局面はコンピュータよりも遥かに少ないです。

引用編
1) 2) 3)
ttp://www32.ocn.ne.jp/~yss/book.html
>>611も参照。
資料も出てます。
ttp://www.hakusa.net/shogi/computer
の左下のほうに関連書籍がまとめてあります。
「将棋とコンピュータ」は入門書としていいかも。

615 名前:まともに動いていない ◆R/rLuLKeEI :04/05/11 02:03
現在開発中断中。中だるみ状態。

まともに動いていないプログラムですが
1.1〜数手。深さは固定しない。
2.N^n
3.画期的なアルゴリズムはあまり望めない。

616 名前:デフォルトの名無しさん :04/05/11 04:47

無理だって、所詮、将棋プログラムは人間に勝てないって。

そもそも、取った駒を再配置できるシステムが将棋を奥深い

ゲームにしている反面、その事が決定的に最強将棋ソフトを

今日まで誕生させる事が出来ない原因でもあるわけだ。

617 名前:デフォルトの名無しさん :04/05/11 05:40
無理だといわれるほど燃えるんですよ、これが(笑)

618 名前:デフォルトの名無しさん :04/05/11 05:52
>>616
どういう条件下においてか、を書いてもらえると有り難いんだけどね...

コストを無視すれば、「無理」でもないし、「勝てない」こともないでしょう。


619 名前:うさぴょんの育ての親 :04/05/11 07:02
1.深さにより、重要そうな手を判別し、前向き枝刈。(読まないで捨てる手がある)。
幅としては大体30手前後を読む。深さは7〜11手くらい。
2.N^(n/2) 私の場合、大体1手深く読むのに5〜6倍時間がかかる。
3.前向き枝刈をもっと上手にやるか、既に>>611で触れられているように、ありそうな展開を
深く読み、なさそうな展開は浅く読むというように、CPUリソースの有効な利用が必要。
まだ『画期的』な方法とは言えないかも知れないが、>>611で触れられた激指の方法は、
多くのプログラムに影響を与えている。


620 名前:デフォルトの名無しさん :04/05/11 12:47
1. 深さ4手固定です。幅は1手目が30手、2手目が24手、3手目が12手、4手目が10手です。
2. 1手深く読むとおそらく4、5倍時間がかかってるみたいです(正確なところ今ははわかりません)
3. すでに良く知られているアルファ・ベータ法は画期的だったと思います。
これを使わないと時間は何十(何百?何千?)倍時間がもかかります。これに匹敵する効果的な
手法はないですが、あるものだと信じて一応やってます。

621 名前:デフォルトの名無しさん :04/05/11 13:08
>>610
http://game6.2ch.net/test/read.cgi/bgame/1061102154/188 等(Part1を読んだ方が詳しい)

622 名前:590 :04/05/11 13:38
>>600
コンピュータ将棋番外編2・進歩に懐疑的な人たち
http://game6.2ch.net/test/read.cgi/bgame/1061102154/783
では約2.69*10の70乗だと言っている。(ソースは知らん)

593の計算に二歩禁を入れるともう数桁減るような気がするが、
それでも10の60乗をきることはないと思う。

623 名前:まともに動いていない ◆R/rLuLKeEI :04/05/11 19:46
>>622
ありがとうm(__)m

624 名前:606 :04/05/12 13:30
>>613
>ここにいろいろな駒の利きとか玉の固さとか何らかの理屈を考えた評価関数を持ち込んだら
>人工無能(非常にトリビアルな計算のみで動くプログラム)というより普通の将棋ソフトに
>非常に近くなると思いますし。
>そこから到達した最終局面のうち、勝利局面と敗北局面の数だけで重み付けするんでしょうか?

 評価関数を使わないでも、江戸時代からの譜面は膨大な数に上るし、それらを
全てデータベース化すれば、ある程度の指し手は検索機能を使えば出来ます。ま
た、膨大なデータを集めたとは言っても、対戦相手が人間である以上、データベ
ース収録外の場面が必ず出て来ます。それらをRAMにストックして人間側が勝った
場合だけ、駒の指す順番を新たに記憶していけば良いんではないかな?この部分は
自己学習型ですよね。

 将棋に置いて、評価関数を導入すればするほど、それこそAIプログラムに近
くなり、ベラボーな処理能力を要求されるが、AIを使わず検索機能だけを特化
すれば、実用的なスピードを出せると思います。

 つまり、データベース検索と自己学習を合わせれば、いずれは最強の将棋プログ
ラムが出来ると思います。

 幸いにも、HDDが一昔に比べて値段が安く為っているから、容量の問題はクリアー
出来るだろうし、CPUのスピードも民生用ですら一昔前のスパコン並のスピードに
なっています。



625 名前:デフォルトの名無しさん :04/05/12 14:18
将棋ソフトが人間に勝てないのは、クセが読まれるからでないでしょうか?

1手毎に現在ある全将棋ソフトにCOMvsCOMで対戦させ、もっとも手数が少なく投了させれそうな手を採用する将棋ソフトをつくってみるとか。

アルゴリズムは他人任せだが、勝つか負けるかといえば、勝てるかも知れない。

こういうソフトの案は既出かな。

626 名前:デフォルトの名無しさん :04/05/12 17:27
>>624
えーと、>>622の数字見て言ってる?

それと、ある局面でデータベースに複数の指し手があった場合、その選択基準は?

627 名前:デフォルトの名無しさん :04/05/12 19:16
>>624
作ってみれば?


628 名前:うさぴょんの育ての親 :04/05/12 19:46
例年通り、うさぴょんのソースと大会版バイナリ、公開しました。

629 名前:610 :04/05/13 00:39
「C言語の人」さん、「まともに動いていない」さん、「うさぴょんの育ての親」さん
他、皆様ご教示ありがとうございます。

指し将棋プログラムを作りたいというの私に取ってもは学生の頃からの夢なのですが、
プログラムスキルの無さと自分自身の棋力があまりにも弱い事から(クラブ24で10級未満)
挫折し続けて夢に終わっております。
それでも最近C++のプログラムを少し勉強する機会がありましたのでもう一度チャレンジして
みようかななどと思っております。多分、強いプログラムを作成するのは私には不可能だと思いますので
最弱(デタラメ)な手を指すところから自己学習して少しでもましな手を指すようなプログラムとか
必要な最大計算量の見積もりとか、何か私でもやれるような事に取り組んでみたいと思います。
有難うございました。また、何か分からない点を教えて頂けると幸いです。


630 名前:デフォルトの名無しさん :04/05/13 00:56
誰か>>435の解説を書こうとかって人いない?

631 名前:デフォルトの名無しさん :04/05/13 00:57
441 名前:デフォルトの名無しさん[sage] 投稿日:04/03/15 22:20
>>435
OpenShogiLib
http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/
巨大すぎ。。。

これね。

632 名前:620 :04/05/13 12:05
>>629
頑張って下さい。
うさ親さんがよく言うように作り手の棋力はあまり気にしないでいいと思いますよ。
まず動くとこまでが大変ですね。
オレも将棋ソフトのためにとprintf文で"こんちわ世界"を表示させるとこから
はじめたんで、大変でした。でも動いたときはカンドーするし、弱くても愛着あるし。
市販のソフトとは比べ物にならなくらい。
大会にでて勝とうものなら…そりゃもう、バンザイ三唱もの。楽しいよ!!!

633 名前:624 :04/05/13 13:41
>>626
>それと、ある局面でデータベースに複数の指し手があった場合、その選択基準は?

 相手の指し手指し順を、過去のデータより拾い、似ている局面を参考にします。
それでも、複数有った場合、取り敢えずはランダム選択してあとは自己学習に任
せる。


634 名前:デフォルトの名無しさん :04/05/13 14:35
>>633
将棋の局面空間の広さからして、そういうことは現実的には不可能だよ。
実用的なデータベースを作るのにどれくらいの容量が必要かとか、
それを埋めるのに自己学習するとしてどれくらいの時間が必要かとか、
ざっと計算してごらん。

635 名前:デフォルトの名無しさん :04/05/13 16:31
df−pnって最強?

636 名前:デフォルトの名無しさん :04/05/14 02:25
最強だがGHI対策など実装は大変


637 名前:デフォルトの名無しさん :04/05/14 09:11
先後反転・左右反転を考慮すると局面の数は1/4になるよね。
現実にこれが同一に表現されるようにしてる人は居るだろうか?
定跡外し・相振り・後手1手損戦法などで、有効になる場合があるかも知れない。

638 名前:637 :04/05/14 09:17
書いた途端に気付いたが・・。
どうせ定跡の検索なんて一瞬で終わるんだから、その時に考慮しても同じか。

639 名前:学生 :04/05/14 12:14
卒研でdf−pnをつかって詰め将棋プログラムを作ろうと思うのだが
むずかしいかなー?

640 名前:633 :04/05/14 13:27
>>634
>将棋の局面空間の広さからして、そういうことは現実的には不可能だよ。

 物理的な限界なら、投資額によって決まりますけど?
「江戸時代あたり」からと使ったのは比喩的な表現です。実際は
使われる媒体により、予めストック出来る、指し手・指し順は決
まります。

 要するに、GMDH等を使ったプログラミングコンテストに出すような
優れたプログラムを使わないでも、データ−ベースと人工無能である
程度までなら、カバー出来ると思いますけど。


641 名前:デフォルトの名無しさん :04/05/14 14:20
将棋って初手で30手あるわけど、仮に10手先までの全ての変化を
HDDに記憶する、としたらどのくらい必要になるのかな?

単純だと30*30*...30(12回)だけど、同じ形になってしまうのは除くとして。

642 名前:デフォルトの名無しさん :04/05/14 14:21
(12回)じゃなくて(10回)だったよ orz
それに角道をあけると3手目からいきなり増えそうだ。

643 名前:デフォルトの名無しさん :04/05/14 15:06
持ち駒が入るとさらに一気に増えるね。

理論上ひとつの局面の最大着手可能手数は550手ぐらい?

644 名前:デフォルトの名無しさん :04/05/14 15:22
>>640
上のほうで将棋の全局面は 10^71前後って出てるけど。
このうちの何パーセントくらいをデータベースに登録したら
実用になる将棋プログラムができると思いますか?

645 名前:633 :04/05/14 15:41
>>644
 最初のベースとなる物は、一割以下で事が足りると思います。
後は、自己学習で・・・・

646 名前:デフォルトの名無しさん :04/05/14 16:03
>>645
10^71の一割という事は10^70ですね。
一つの局面に1バイト必要だとすると1テラバイトの
ハードディスクが何台必要になるか計算してみてください。

どなたかが現実的には不可能と言った意味がお判りになると
思います。

647 名前:デフォルトの名無しさん :04/05/14 16:38
>>646
 10!71なんて、あくまでも理論値でしょう?
 
 記憶させるのは、実際に勝負に使われた、自分
と対戦者の指し手・指し順のみです。それでも、
不可能何ですか?

648 名前:デフォルトの名無しさん :04/05/14 16:59
>>643
将棋の最大分岐数は593
http://ysu1.m78.com/mathematics/m22.html

>>622にある実現可能局面数約2.69*10の70乗のソース
http://www.geocities.co.jp/Playtown-Bingo/4981/kyokumensuu.html
実際にはもっと少なそうですね

649 名前:デフォルトの名無しさん :04/05/14 17:24
>>647
いえ、けして不可能ではありません。
がんばって史上最強の将棋プログラムを作ってください。

650 名前:デフォルトの名無しさん :04/05/14 18:27
なんでもいいから早く積極的に攻め込んでくる好戦的な思考ルーチン作ってください。

651 名前:デフォルトの名無しさん :04/05/14 22:38
>> 639
だいじょぶ
がんばれ


652 名前:まともに動いていない ◆R/rLuLKeEI :04/05/15 00:01
ちょっとした思いつき:
二つの局面A,Bに距離d(A,B)というものは定義出来ないだろうか。
仮にA→Bへの最小手数とすると
 d(A,B)≠d(B,A)
となりそうで具合が悪い。やはり次の条件は満たしたい:
 d(A,B)≧0
 d(A,A)=0
 d(A,B)=d(B,A)
 d(A,B)+d(B,C)≧d(A,C)
d(A,B)≡0以外に上手い定義はないのか?

空間だから距離があってもいいかなと…類似度みたいなものやね。

653 名前:デフォルトの名無しさん :04/05/15 00:21
類似の目的によるけど例えば似た局面で定跡を使うためなら
A→Bへの最小手数 ただし駒はバック(逆向きにも移動)可
でどう?


654 名前:デフォルトの名無しさん :04/05/15 13:27
駒取りが入るとややこしくなるな

655 名前:デフォルトの名無しさん :04/05/15 20:34
現状の将棋がそこそこなのはなんで?
完全ハッシュみたいなことをする領域が無いからなのか、
CPUの性能が それでもまだまだで手数が少ないからなのか?

地球シミュレータくらいのスーパー紺つかえばどのくらいになるんだろ

656 名前:デフォルトの名無しさん :04/05/15 23:05
地球シミュレータータイプのスーパーコンピューターはいわゆるベクトル型というやつで。
浮動小数点演算、それも特にベクトルや行列演算がバカっぱやくなるように設計されている。

同じ浮動小数点演算でもベクトルに特化していないでとにかく数をこなすのがスーパースカラーという奴。

で、将棋プログラムはもっぱら固定小数点演算あるいは論理演算しか用いないので浮動小数点演算がいくら速くても関係ない。
しかも現在の将棋プログラムのアルゴリズムは演算を並列化しにくいらしいのでCPU128個持つというような
密結合SMP(マルチCPU)でもどれくらい速くなるか怪しい。

つまりソフトの性格(必要とする計算パワー)とハードウェアがミスマッチなので例え地球シミュレーターで動かしたとしても
大して強くならんと思う。その前にまずそのハードウェアの能力を引き出すようなソフトの移植が非常に難しいと言える。
即ち、労力ばっかり大きい割に成果がほとんど望めないのでまず誰もやらないだろう。

657 名前:デフォルトの名無しさん :04/05/15 23:36
そこで将棋専用チップの登場ですよ。

658 名前:デフォルトの名無しさん :04/05/15 23:58
いっそSETIみたいに大量のPCで総当りw

659 名前:デフォルトの名無しさん :04/05/16 00:20
将棋専用チップって誰か構想(アイデア)を持ってるのか?
ディープブルーに使われたチェス専用CPUって手の探索を広く深く行なうためだけの
サブCPUに過ぎないらしいしな。そういうものでも将棋に応用すれば手の探索だけは
結構速くなるかも知らんが。

660 名前:デフォルトの名無しさん :04/05/16 00:24
ファミコンの森田将棋にはカセットに専用チップが載ってたらしい。

油もビッチがポケットマネーで高額高性能な並列コンピュータ組んで
馬力で思考させたらあっさりプロ打倒できたりしてな。

661 名前:まともに動いていない ◆R/rLuLKeEI :04/05/16 00:45
ちょっとした思いつき2

1手目で得られる全局面分のプロセスを生成して並列に探索する。
だたし、適当なタイミングで評価値を調べて高いものがより大きな優先度になるように調節する。
重要でない手の先も念のため一応残して探索するけど、重要な手の先をより重点的に探索することが可能になったり…
複数台のPCに重要そうな手が集中しないように幾つかの手を抱き合わせて振ったり…

思いつきだけで書いてすんません。

662 名前:デフォルトの名無しさん :04/05/16 00:47
ファミコンのCPUって6502(AppleUにも使われた8ビットCPU)らしいからな。
専用CPUつったって少し速い16ビットCPUかなんか積んだだけじゃねーの?
当時はFPGAなんか無かったと思うから、本気でカスタムCPUを起こしたりしたら
鬼のように金がかかったはず(何千万単位)。DSP使ってもしゃーないだろうし。

油もビッチって誰の事言ってるのか分からんが、どんな高額高性能な並列コンピュータを
組んだら将棋がどのくらい強くなるのかまだ誰も分かっていないと言う処だろう。
つまりアルゴリズムの研究が並列化の方向を向いていない。
将棋研究に使ってくれと超並列コンピュータを貸してくれる処も無いし。
ニワトリと卵だな。

663 名前:まともに動いていない ◆R/rLuLKeEI :04/05/16 01:03
コンピュータ将棋の進歩4の第3章に詰将棋用指し手生成FPGAの開発記事があるが、
探索や評価もハード化すべきなのか?

664 名前:デフォルトの名無しさん :04/05/16 01:07
謎の大富豪アブラモビッチの正体。 (Number) - goo スポーツ

7月初め、サッカーの母国イングランドに、信じられない事件が起きた。
ロシアの大富豪が、ロンドンの高級住宅地をホームとするチェルシーを買ったというニュースだ。
 
 ロマン・アブラモビッチ、36歳。ユダヤ系ロシア人。英国のメディアによれば、新しい選手の獲得、
スタジアム、その他もろもろの経費に総額400億円近くを投入するという、
信じられない話である。その後チェルシーが、
約1カ月の間に8人の選手に総額100億円以上をつぎ込んだことで、それは現実の話となった。

ゲイツが将棋ファンならこれくらいの投資してくれるかもね。

665 名前:デフォルトの名無しさん :04/05/16 02:48
今はディープブルーの何十倍くらい早くなったんだ?(;´Д`)
そろそろ総当たりで解決する速度にならんものか・・・

666 名前:デフォルトの名無しさん :04/05/16 03:24
現在でもまだあの頃(1997年)の何十倍もは速くはなっていないだろうな。
ハード(同じタイプのプロセッサー)の性能向上だけならせいぜい数倍から10倍かと。

ディープブルーがすごかったのはむちゃくちゃ贅沢なハードウェアを組んだからで。
http://hotwired.goo.ne.jp/news/news/culture/story/20021022205.html
512基のチェス専用アクセラレータチップなんてものを開発して搭載したからな。

将棋はまだまだこういうすごいハードウェアを組んで力技で押してたら人間の名人に勝てそうだと
言う見込みが無いし、IBMみたいに金のあるメーカーが人間に勝つシステムを組む動機も無いし。
(日本だと富士通あたりがそんなもの作ると却って非難ごうごうになりそうw)
ま、当分実現不可能そうだな。総あたりでやるには分岐(局面)の数多すぎだし。


667 名前:デフォルトの名無しさん :04/05/16 04:29
もしかしたら、コンピューター囲碁やコンピューター将棋にはこういうチップが向いてるのかもね。
http://hotwired.goo.ne.jp/news/news/technology/story/20040514304.html

コンピューター将棋のアルゴリズムにどうやって蓋然性の概念を持ち込むのかは知らんが、
最善手ではなくともそこそこ正しいと思える手を膨大な検索数の中から見つける事ができれば
有用かも知れない。


668 名前:デフォルトの名無しさん :04/05/16 12:04
>>666
作者が書いた資料によると512個ではなく480個(30ノードのRS/6000SPに16個のチップ)
だったらしい。
このハードで1997年の探索速度が2億ノード。
2002年にクラムニクと戦ったのフリッツがXeon900MHzを8個で600万ノード。

2億=20000万なので20000/600=33倍。

まだ速度では全然負けてるね。

669 名前:デフォルトの名無しさん :04/05/16 23:39
>> 661
αβを想像していただければ良いのですが並列探索の場合カットする値を共有するための通信コストがネックになります
また候補手毎に並列化すると合流があった時に無駄になります
興味があれば岸本さんの修論を
http://www.cs.ualberta.ca/~kishi/publication.html


670 名前:まともに動いていない ◆R/rLuLKeEI :04/05/17 00:48
>>669
ありがとう。
興味が湧いたら読んでみます。
何も共有しない、無駄には目を瞑る、評価値さえ返してくれたらいい…
っていうか…まあいいや、退散します。

671 名前:デフォルトの名無しさん :04/05/17 05:26
量子コンピューターになれば、さすがに解決するか。('A`)

672 名前:デフォルトの名無しさん :04/05/17 11:10
環境ホルモンで人間がどんどん馬鹿になってるから
そのうち追いつくよ。

673 名前:デフォルトの名無しさん :04/05/17 12:24
>>671
ちなみに量子コンピュータはその原理上、「解が周期性を持つ」ようにアルゴリズムを組まないと超並列性が生かされない罠。
つまり、大量の候補の中から唯一の解を捜し出すような問題にはそのままではまだ適用できなくて、
候補の中に周期的に解が埋まっているようにうまいこと問題を変形すると使えるようになる。

というわけで、ハードがそこそこ使えるようになったとしても、
アルゴリズムの研究も進めないといけないわけで、こっちの方が多分難しい。
おそらく羽生には間に合わねぇ。

674 名前:デフォルトの名無しさん :04/05/17 20:51
おまえら、つべこべ言ってないで、
誰かがTCP/IPでの簡単な審判役のサーバーを用意して
全てのプログラムを100回ずつぐらい対決させればいいじゃん。

675 名前:デフォルトの名無しさん :04/05/17 21:21
羽生が痴呆になる(ことは殆ど無いが)までは
コンピュータが勝つのは厳しいね。
DNAコンピュータとか量子コンピュータとか
スーパーコンピュータ(ベクトル)とかがあっても

676 名前:デフォルトの名無しさん :04/05/17 21:30
>>674
このスレの中の人同士で一度対決してみたいね。

まぁ審判役サーバなんて無くても、「ヤフーゲーム」みたいなのでもいいが
時間がかかるので 通信ソフトを作って 自動対戦させておけば楽だな

677 名前:まともに動いていない ◆R/rLuLKeEI :04/05/17 23:33
>>676
ほとんど見込みはないが万一まともに動いたら参戦してみたいね。

678 名前:デフォルトの名無しさん :04/05/18 00:28
>674

ここでつべこべ言ってる人間は皆が皆、現状のパソコン上で将棋のプログラムを組んでいると
いう訳ではなくて現状のパソコンというハードウェア上の制約を離れたらどれくらい強くなるか
(あるいはならないのか)を論じてるわけだが。

それにしてもこんなのを使わせてもらえるとプログラマも嬉しいよな、きっと
「産総研、3,000プロセッサ搭載の国内最高速クラスタを運用開始」
http://pcweb.mycom.co.jp/news/2004/05/11/002.html
それともアルゴリズムの並列化が難しくて宝の持ち腐れだろうか?

少なくともこういうマザーボードを使うともう少し強くなるのかな?
http://www.tyan.com/products/html/thunderk8qs.html
コンピュータ将棋選手権で流行りのデュアル・オプテロンじゃなくてクアッド・オプテロン。
あるいはパワーマックG5デュアルの方が速かったりしてw。

そういや将棋プログラムにはSSEとか3D NOWとかAltiVecとかのSIMD演算命令は
有効なんだろうか?











679 名前:デフォルトの名無しさん :04/05/18 00:51
脳型コンピュータなら大量の候補の中から唯一の解を捜し出すような問題がイチコロ

680 名前:デフォルトの名無しさん :04/05/18 01:53
>679

藻前の言う脳型コンピュータってニューラルネットの事か?
ローゼンブラッドのパーセプトロンがミンスキーの攻撃のせいで
ほとんどインチキ(山師)扱いされていた漏れの学生時代とは隔世の感があるな。
とは言っても80年代には結構復活してたらしいが(バックプロパゲーションの技法で)
田舎の大学生だった漏れは知らなかった。(ああ、あの時もっと研究していれば・・・)

http://www.personal-media.co.jp/book/other/perceptron.html

681 名前:デフォルトの名無しさん :04/05/18 02:27
脳型コンピュータよりも、今のやり方の延長で10年以内に名人レベルに達するのでは?
そもそも、今の技術では脳と似た動作を再現できるとはおもえませんが。
通りすがりのものです

682 名前:デフォルトの名無しさん :04/05/18 03:00
なあ、ふと思ったんだがもし、将棋の初手から到達可能な全ての局面をグラフのようなもので
表す事ができて(グラフの矢印は指し手)それをメモリー上というかデータベース上に
格納できたらそれでもう必勝法はできるのかな?
最終局面からバックトラックしていって、局面に点数を付けるような方法で。
それともそれでも必勝法が見つからない可能性が有り得るのかな?
検査すべき局面が桁違いに大き過ぎるという問題は別にして。
(人間あるいはコンピューターが何百万年も懸けて局面を探索するとか仮定すれば)


683 名前:デフォルトの名無しさん :04/05/18 04:32
通りすがりの者のほうがいい指摘をするね。

予想としては2010年(6年ぐらい)までには、
30秒将棋で名人にも十分勝ち越せると思う。

いや、30秒なら6年もかからないかな?


684 名前:うさぴょんの育ての親 :04/05/18 07:29
>>682
一応千日手になる可能性があるけど、原理的にはその方法で必勝法が見つかるよ。
でも何百万年どころか、何百億年かけても今のコンピュータじゃ無理だ(−−;

685 名前:デフォルトの名無しさん :04/05/18 07:45
>>682
どうやって全ての局面をメモリやHDに格納するんだよ

686 名前:デフォルトの名無しさん :04/05/18 08:37
局面をURLに変換してみんなで持つんだよ

687 名前:まともに動いていない ◆R/rLuLKeEI :04/05/18 08:45
>>686
足りないと思う

688 名前:デフォルトの名無しさん :04/05/18 10:24
盤を4×4とかに縮小してやってみるとか。

689 名前:まともに動いていない ◆R/rLuLKeEI :04/05/18 22:33
そういえば昔5×5将棋があったけど、解決したんかね?
オセロや囲碁と違って初期配置が決まっている将棋は盤面縮小は難しいのでは?

690 名前:まともに動いていない ◆R/rLuLKeEI :04/05/18 23:08
オセロも初期配置が決まってましたな。すまぬ。

691 名前:デフォルトの名無しさん :04/05/18 23:11
あまりやられてないの?
今なら世界に名を残せる?

実際プレイして面白いか云々はおいといて
計算量としてどんな程度なのかって事で
やってみると面白そうに思うんけど。

692 名前:デフォルトの名無しさん :04/05/18 23:11
初期配置が決まってないゲームなどない

693 名前:デフォルトの名無しさん :04/05/18 23:12
将棋の思考ルーチンって盤のサイズ変わっただけで
大幅変更必要になったりするの?
簡単に流用できるなんな何でやらないんだって
ひじょーにもどかしいんだが。

694 名前:デフォルトの名無しさん :04/05/18 23:19
後手持ち駒:銀歩
┌──┬──┬──┐
│__│__│▽玉│
├──┼──┼──┤
│__│__│__│
├──┼──┼──┤
│▲玉│__│__│
└──┴──┴──┘
先手持ち駒:銀歩

一段目から成れる

これなら、先手必勝だった。
単純にミニマックスで探索するだけで良かったんでこれは楽だった。
しかし本将棋とは規模が全く違うし駒の配置も違うんで、こういうのを調べて意味があるのかどうか・・・。

695 名前:デフォルトの名無しさん :04/05/18 23:22
>こういうのを調べて意味があるのかどうか・・・。

あるあるあるある。
「今の計算機だとm×nのこういう配置でxx日で必勝手順が出る」とか
そーいうデータ面白い。

696 名前:デフォルトの名無しさん :04/05/18 23:23
なんつーか具体的な目安ができるというか。

697 名前:まともに動いていない ◆R/rLuLKeEI :04/05/18 23:35
>>692
何も置かないというのも配置には違いないわな。重ね重ねすまぬ。

698 名前:デフォルトの名無しさん :04/05/18 23:58
でもオセロは縮小だけなら簡単にできる罠。
#尤も、奇数×奇数では戦略が違いすぎてしまうので、実際には6×6か4×4しか選択肢がない。
##そして、4×4では簡単に解けてしまうと思われ。

699 名前:デフォルトの名無しさん :04/05/19 00:01
オセロは既に最強ルーチンが存在するらしいね
パターン数が現実的な数値内で有限だからかな

700 名前:デフォルトの名無しさん :04/05/19 00:05
>オセロは既に最強ルーチンが存在するらしいね
世界一に圧勝するってだけで読みきれてはいないだろ

701 名前:デフォルトの名無しさん :04/05/19 00:27
>> 691
論文は公開していないみたいだが
後藤智章, 柴原一友, 乾伸雄, 小谷善行: 小さな将棋の解, Game Programming Workshop 2003, 2003/11/7.
で色々解いてたが5x5よりは小さかった


702 名前:まともに動いていない ◆R/rLuLKeEI :04/05/19 00:53
コンピュータリバーシ研究会というサイトによると4×4、6×6ともに後手必勝だそうだ。8×8は書いていなかった。

703 名前:デフォルトの名無しさん :04/05/19 01:23
>701
ぬう。

>702
まだ解けてないもの。

704 名前:デフォルトの名無しさん :04/05/19 01:27
>701

なるほど、5x5でもまだ解析的に(総当りで?)解けていないというわけだな。
恐ろしい!ところで5x5将棋ってどんな駒の配置なんだ?持ち駒は?

705 名前:デフォルトの名無しさん :04/05/19 01:31
自分で解きやすそうなものを考えたら勝ち!
5×5の勝ち名乗りを上げれ!

706 名前:まともに動いていない ◆R/rLuLKeEI :04/05/19 01:34
>>704
確かこんなL字型の配置だったはず。


王金銀??

707 名前:704 :04/05/19 01:48
>706

ありがとう。漏れも5五将棋を紹介しているページを見つけたが
同じ5x5でも京都将棋なんてのもあるらしいな。ああ、ややこしい。

ttp://encyclopedia.thefreedictionary.com/Minishogi

708 名前:デフォルトの名無しさん :04/05/19 02:01
成りとか、持ち駒とかルールが凄いからな
COMはチェスのがもうちょっと強いらしいじゃないか

709 名前:デフォルトの名無しさん :04/05/19 03:27
>>678
SSEや3DNOW!は浮動小数点専用だから意味なし。
AltiVecは確か整数のSIMDもあったはずだから、それ専用に
プログラム組めば使えるはず。

710 名前:デフォルトの名無しさん :04/05/19 14:06
5×5将棋は以前に特許かなにかで考案者とソフトハウスがもめたことがあったから
みんな避けてるんじゃないかな?


711 名前:まともに動いていない ◆R/rLuLKeEI :04/05/19 16:34
>>710
M?R?T?将棋のことけ?

712 名前:デフォルトの名無しさん :04/05/19 20:06
>>711
そうそう、詳しいこと知ってたらおせ〜てくんろ

713 名前:デフォルトの名無しさん :04/05/19 20:15
>>608
もうちょっと将棋に強くなってから書いてください。

714 名前:デフォルトの名無しさん :04/05/19 23:52
囲碁ソフトとベクトルプロセッサは相性がいいと思う。

715 名前:まともに動いていない ◆R/rLuLKeEI :04/05/19 23:55
>>712
PC9801用M?R?T?将棋におまけのように付いていた5五将棋について一悶着あったらしい。
知ってるのはこの程度です。

自宅を探せば5インチフロッピが出てくるはず。
98互換機が押し入れの中だから直ぐには読めないけど。

716 名前:デフォルトの名無しさん :04/05/21 12:00
>> 701
3x4だね

717 名前:デフォルトの名無しさん :04/05/22 01:08
コンピューター将棋スレッド14が盛り上ってるけど
どうすれば開発者が増えるかねえ

718 名前:デフォルトの名無しさん :04/05/22 01:18
>>717
スポンサーが一人増えれば開発者が一人増える(笑



719 名前:デフォルトの名無しさん :04/05/22 01:22
腕試しをする場が必要なんじゃないかな
年に一回の大会のみとかじゃなくて
毎月開催のグラチャンとか



720 名前:デフォルトの名無しさん :04/05/22 01:26
スポンサーがつくかどうかはともかく
TCP/IPサーバを作れば今月のチャンピョンを竸うのは
気軽にできそうだね

721 名前:デフォルトの名無しさん :04/05/22 01:29
作ろうぜ、プロトコル決めよう

722 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 02:03
出来ればCSAサーバープロトコル(案)を含む形で…あったらいいな。

723 名前:デフォルトの名無しさん :04/05/22 02:04
一旦対局が始まればCSA形式で良いとして、
誰が誰と対局するかどうかを決めないといけないのかな

724 名前:デフォルトの名無しさん :04/05/22 02:10
選手権のプロトコルに合わせるなら、
都万氏のサイトにある「CSA将棋(LAN対応仮バージョン)」に
入ってる擬似サーバーで対局させられるかな。
http://www2.ttcn.ne.jp/~tsuma/download.htm

725 名前:デフォルトの名無しさん :04/05/22 02:11
CSA形式へのポインターおせ〜て


726 名前:デフォルトの名無しさん :04/05/22 02:13
白砂青松さんに最弱プログラムの棋譜解説をしていただくと盛り上がりそうw

727 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 02:15
login中のものから乱数でペアを作って先後入れ替えて2局やったら対戦待ちリストに入れるとか。

728 名前:デフォルトの名無しさん :04/05/22 02:20
チャンピョンを決めるにはリーグ戦したくなるかな
後回しでも良いかもしれないが

>> 725
RS232CのプロトコルはここにあるがLANのプロトコルはどこかに公開されてたっけ?
http://www.computer-shogi.org/wcsc14/protocol.html

729 名前:デフォルトの名無しさん :04/05/22 02:26
ttp://www.computer-shogi.org/protocol/
これかな

730 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 02:27
LANプロトコルは私がこのスレッドの大分上の方にURLを貼っておいたはず。
探して下さい。携帯なんで検索出来ないんだ。

731 名前:デフォルトの名無しさん :04/05/22 02:31
98年版ってなってるけどずっと変更無し?
LANは接続されてしまえば232cで繋がってるのと変わりないから問題ないでしょう
サーバーへの接続と認証をどうするかですにゃあ
login認証で桶?

732 名前:デフォルトの名無しさん :04/05/22 02:31
あ、すでに雛形があったのね、

733 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 02:32
>>729
ああ、それそれ>>56

734 名前:デフォルトの名無しさん :04/05/22 02:51
ところでこれってライセンスとかは心配しなくていいのかな?
勝手に対局サーバー作っても大丈夫?


735 名前:デフォルトの名無しさん :04/05/22 02:58
P2Pじゃ駄目? 対戦模様は2chのスレへキャストするとか?

736 名前:デフォルトの名無しさん :04/05/22 03:02
>>735
練習モードはP2Pでやるとサーバーの負荷軽減になると思うね
でも試合モードは審判サーバーを経由しないとだめでしょやっぱ


737 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 03:05
実装方法やコードなら解るが、プロトコルにライセンスが発生することもあるのか…難儀な世の中だな。

738 名前:デフォルトの名無しさん :04/05/22 03:08
ライセンスといわないまでも著作権とかはどうなんだろう?


739 名前:デフォルトの名無しさん :04/05/22 03:11
プロトコルに著作権や特許を認めた判例はないと思うがなあ
甘い?

あとCSAの目的からしてうるさいことは言わないと思うんだが

740 名前:某大学関係者 :04/05/22 03:13
Linuxで動くサーバプログラムが公開されれば回線とマシンは提供できますよ


741 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 03:18
プロトコルの著作権はCSAにあるでしょうが、プロトコルの普及に貢献したとかで寧ろ喜ばれるのでは?

742 名前:デフォルトの名無しさん :04/05/22 03:18
プロトコルつーてもそんなにめんどうでないのでは?
オリジナルで作っちゃえば。

743 名前:デフォルトの名無しさん :04/05/22 03:22
プロトコルつーてもさ
詰み判定はしない(王deadで終了)
初期状態確定済み
駒移動ルール確定済み
となれば、やり取りする情報は
駒の移動と成る成らぬぐらいのもんでしょ?

744 名前:デフォルトの名無しさん :04/05/22 13:46
プロトコルが複数できるとあんまり後々のためにならん気がするが。
すでにあるプロトコルに欠点があるなら別だが。

745 名前:デフォルトの名無しさん :04/05/22 15:01
とりあえずサーバーのプロトコルを考えて作ろう!
出来ればTCP/IP接続でお願いしたい。
完成したら月1ぐらいで全員のプログラムを総当りさせて結果発表。

まずはプロトコルを皆で考えよう。

746 名前:デフォルトの名無しさん :04/05/22 15:30
>>745
もうCSAがTCP/IP用のプロトコルを決めていたはず。だから新たに考える必要はないと思われ。
Webに文書置いてないのが不思議だけど。なんで?


747 名前:デフォルトの名無しさん :04/05/22 15:32
>>746
で、会員予備軍は何人いるのさ

748 名前:デフォルトの名無しさん :04/05/22 15:33
>>746
>>56


749 名前:デフォルトの名無しさん :04/05/22 15:42
>>748
おお、それそれ。
このプロトコルで、anonymous loginに(勝手に)対応すれば
野良サーバーが立てられるんじゃない?

750 名前:デフォルトの名無しさん :04/05/22 15:53
anonymousでいいのか?、荒らしがくるぞ〜

751 名前: ◆R/rLuLKeEI :04/05/22 16:28
荒らしが来るとして何をする?
ソフトの振りする人がPCに張りついて月間MVPをかっさらったりするの?…やりそうな気配…

752 名前:デフォルトの名無しさん :04/05/22 16:57
http://www.computer-shogi.org/protocol/tcp_ip_server.html
このプロトコルでは対戦相手を決めるのはサーバの役目なんだが、
クライアント同士のネゴシエーションを規定しても良いと思う。
禁手、千日手、連続王手の千日手、タイムアウトをそれぞれ処理するとなると
サーバの処理は結構なものになるね。


753 名前:デフォルトの名無しさん :04/05/22 17:07
漏れは最強の将棋プログラムも、サーバーの対戦処理プログラムも
作れませんが応援してるよ。で誰がプログラムかくの?

754 名前:まともに動いていない ◆R/rLuLKeEI :04/05/22 17:25
誰が都万氏の秘密のページからCSALANの擬似サーバーのソースコードを取ってきて改造するかだな。

755 名前:デフォルトの名無しさん :04/05/22 22:18
よく分からんのでレスするだけ無駄かもしれんが、
詳しい人に教えてもらおーっと♥

ny見たいな感じでネットワークを作って、近くの人と対戦。
途中のノードに審判になってもらう。
審判が対戦記録をとって鯖にアップ。
それを閲覧すればよいので観戦はなし。


【将棋プログラム⇔ネット接続プログラム】←Internet→ 【ネット接続プログラム】←Internet→【ネット接続プログラム⇔将棋プログラム】
対戦者A = 中継ノード兼審判 = 対戦者B
みたいな感じで接続するとか

756 名前:デフォルトの名無しさん :04/05/23 00:48
禁手、千日手、連続王手の千日手あたりは紳士協定をクライアントが守るとして、
持ち時間のカウントだけあれば、とりあえずはサーバの役目を果たせる?


757 名前:デフォルトの名無しさん :04/05/23 01:00
盛り上がってきました

758 名前:デフォルトの名無しさん :04/05/23 01:27
あぁ、ちょっと盛り上がってきたね。
盛り上がるだけでなく、ちゃんと実現したいものだ。

もし誰かがサーバー役のプログラムを作ったとしても
そのサーバーに接続するのにIPアドレスとポート番号がいるんだが・・・
サーバープログラムを作る奴はいても、
サーバーに接続させるために自分のPCのIPアドレスとポート番号を
晒す勇気がある奴がはたして現れるのか?

759 名前:デフォルトの名無しさん :04/05/23 01:32
CGIなどが動くレンタル(またはフリー)サーバーではだめなのか?

760 名前:デフォルトの名無しさん :04/05/23 01:36
>>755
将棋の手を送受信するにはサーバー一つあればで十分じゃないか。
一度に10局ぐらいやっても大した負荷ではないとおもうが。

761 名前:デフォルトの名無しさん :04/05/23 01:39
SoftEtherの実験用匿名仮想 HUBとか使えば、普通のPCで一時的にサーバにして公開とか、
出来そうな気がするけどどうかな?


762 名前:まともに動いていない ◆R/rLuLKeEI :04/05/23 01:46
持ち時間のカウントダウンもクライアントにやらせたら?
最低でもloginユーザーから二つを選んでパイプストリームで繋いであげるだけの機能しかなくてもいい。
そうしておいてサーバーはストリームを監視してどちらが"%TORYO"コマンドを送ったかまたは接続を先に切ったかで敗者を知る。
結果はすぐにランキングページに反映するだけ。

763 名前:デフォルトの名無しさん :04/05/23 01:59

とりあえず(人間様が)ネット対戦できる将棋板を作る(ここまではP2PでOK)。
それに観戦モードを付ける(ここで鯖がいるかな)。
それにプログラムを接続できるようにする。

764 名前:デフォルトの名無しさん :04/05/23 02:05
昔オセロのサーバーを作りかけてたのでそれ改造すればできそうなんだが
なかなか時間がとれない・・・・

765 名前:まともに動いていない ◆R/rLuLKeEI :04/05/23 02:13
>>740さんは本気でしょうか?

766 名前:デフォルトの名無しさん :04/05/23 02:17
>>765
本気だとおもうけど。まあ一時的に使っていいよという程度だとおもうが。

767 名前:デフォルトの名無しさん :04/05/23 02:43
>>751
一局二局ならまだしもリーグ戦なんかの長丁場になると疲れ知らずのPCに人間はかなわないだろう(笑)




768 名前:デフォルトの名無しさん :04/05/23 02:43
できなかったら、
http://games.yahoo.co.jp/games/login?game=Shogi
http://jgame.nifty.com/games/shogi/index.html
こういうところで待ち合わせして、
対戦プログラムと 将棋プログラムの橋渡しを

手動で行なうw

769 名前:デフォルトの名無しさん :04/05/23 02:54
>>768
マクロっぽいのでなんとかならんかね?
正直それでもいいような気がする。


770 名前: ◆vAsNuq1gfU :04/05/23 02:58
>>767
逆に毎度ふざけたログイン名で対戦、即投了、ログアウト。最弱の名を欲しいままにする方がありえるかも。

771 名前:デフォルトの名無しさん :04/05/23 02:58
>>769
IEをCOMで動かす。


772 名前:デフォルトの名無しさん :04/05/23 03:05
>>768のリンクで人間相手にレートが稼げたプログラムが
強いってことでいいんじゃないのか?
>>769が言ってる部分のプログラムを作ればそれでいいとおもう。

773 名前:デフォルトの名無しさん :04/05/23 04:46
rubyでサーバちょっと書いてみたYO
http://up.isp.2ch.net/up/f585a1790d81.zip

% ./shogi_server hoge 4081
して、サーバをスタート
人間がクライアントをする場合は、別windowから
% telnet 127.0.0.1 4081
として接続 (先に接続した方が先手)
プロトコル通り
LOGIN TANUKI pass
で、ログイン
同様に、さらに別windowから、後手として
% telnet 127.0.0.1 4081
LOGIN KITSUNE pass
すると、
BEGIN Game_Summary
Protocol_Version:1.0
Protocol_Mode:Server
と表示されたら、"3.3 対局の合意"として
AGREE
を両者入力
あとは、
+7776FU
のように手を入力
%から始まる手を入力すると、対局終了。
今日はここまで。
おやすみ...


774 名前:デフォルトの名無しさん :04/05/23 05:19
ダウソできね〜ぞ?

775 名前:デフォルトの名無しさん :04/05/23 06:01
仕事が速いね〜エロイ!

776 名前:まともに動いていない ◆R/rLuLKeEI :04/05/23 08:26
「らの掲示板」からこんなん見つけました。

>修正しました。 投稿者:都万  投稿日:11月12日(水)22時46分40秒
>
>山下君から指摘のあった仮想サーバの全角文字のバグと、CSA将棋の投了コードを送信しないバグを修正しました。
>仮想サーバのソースは下記URLから、CSA将棋のソースは秘密の部屋(himitsu.htm)から、また実行形式はダウンロードの部屋からダウンロードしてください。
>
>ttp://www2.ttcn.ne.jp/~tsuma/test56.lzh

早速、ダウンロードしました。
C++/MFCというかプログラミングそのものが不得手なんで誰か>>740さんのLinuxでも動くようにしていただけませんかね。

777 名前:まともに動いていない ◆R/rLuLKeEI :04/05/23 08:41
あ、>>773さんが始められてましたか。すんません。

778 名前:デフォルトの名無しさん :04/05/23 08:41
>>776
VMWAREを740さんが入れてくれればすぐにでも動くのだが。

779 名前:773 :04/05/23 08:49
>>774
ダウソ出来ないですか。
出来た人います?
どなたか、どこかいいアプロダ教えて下さい。

>>777
私は単なる通りすがりの名無しなので、形になるまでお付き合い出来ないでしょう。
ちゃんとしたプロジェクトを立ち上げて下さい。


780 名前:デフォルトの名無しさん :04/05/23 09:29
>>779
今朝やったらダウソできたよ、鯖落ちてたのかな?
落としてから気づいたが ruby わかんね〜(おい

781 名前:773 :04/05/23 13:10
だいたい出来たところ
- Timeoutチェック 一定時間pingに返答しなかったら負け
- 持ち時間切れチェック

今日までにやるところ
- CSA標準棋譜ファイル形式の出力

当分やらないところ
- 合法手判定とか

改造案
- LOGINのpasswordを利用して、対戦相手を決める
Aさんがhimichu+で、Bさんがhimichu-だったら、この二人で対戦

意見キボンヌ
## ちょっと出かけてくる


782 名前:デフォルトの名無しさん :04/05/23 13:59
>>781
改造案いいんでないかい?
ただ、最後の文字は先手/後手の表明だとすると+が二人居て-が来たらどちらとカップリングするのかな。
あと、
 パスワード無し⇒誰でもよい。サーバー任せ。パスワード有りの奴とは組まさない。
で如何?

783 名前:デフォルトの名無しさん :04/05/23 18:00
面白そうなので 773 さんのサーバを動かしてみました.

アドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/2004-05-23/

(重くなったら引っ越しますが,他に支障が出なければ当分動かしておきます.)

どうも flush した方が安定するようなので,
@sente.socket.flush
などを追加しています.


784 名前:773 :04/05/23 18:09
ウプしました。
http://up.isp.2ch.net/up/be88525a3fa2.zip (266.74 KB)

>>781
どもです。

> ただ、最後の文字は先手/後手の表明だとすると+が二人居て-が来たらどちらとカップリングするのかな。
himichu+が二人来たら、一人目のconnectionは切るようにしました。

>  パスワード無し⇒誰でもよい。サーバー任せ。パスワード有りの奴とは組まさない。
そうしました。

>>780
exerbというツールで作った.exeも入れました。rubyをインストールしなくても実行できます。


785 名前:773 :04/05/23 18:29
>>783
ありがとうございます。
本当に動くのか、激しく心配。
socket.flushを入れたのを、多分、深夜にアップします。


786 名前:デフォルトの名無しさん :04/05/23 18:38
なんか本格的になってきたな。俺も将棋プログラムを作り始めようかな。
仕様は56でいいんだよな?

787 名前:デフォルトの名無しさん :04/05/23 18:48
もりあがってまいりますた。
俺も自作のやつを CSA プロトコル喋れるように改造するか…

788 名前:まともに動いていない ◆R/rLuLKeEI :04/05/23 19:10
LAN対応版CSA将棋に加えてうさぴょんの育ての親さんが密かにこしらえてるスターターキットが揃えばなお一層新規参入者が増えるね。
善いことだ。

789 名前:783 :04/05/23 20:13
>> 785
どうもです.それでは,新バージョンを待って取り替えようと思います.

サーバのログもリアルタイムで見られると便利だと思うので,
間に合えば STDOUT.flush もお願いします.
(間に合わなければこちらでやります)


790 名前:デフォルトの名無しさん :04/05/23 21:06
>>783
うう、ログインできなくなった・・・・
ハングさせちまったかなスマソ

791 名前:デフォルトの名無しさん :04/05/23 21:14
対戦させる時の持ち時間はどうするの?
できるかぎり長くするといいと思うんだけど。

792 名前:783 :04/05/23 21:24
再起動しておきました.

shogi_server:41:in `write': Broken pipe (Errno::EPIPE)
(41行目は @sente.socket.write(start_message("+")))

なので,ログインしてからクライアントがおちるとソケットに書けなくなって
サーバが落ちるのかな?

ruby 読めても書けないので 773さんお願いします.


793 名前:デフォルトの名無しさん :04/05/23 21:36
>>792
ちゅうことはやぱり私が落としてしまったんですね・・・すんまそ〜ん
エラー処理が実装されるのをまっときます(汗


794 名前:デフォルトの名無しさん :04/05/23 21:45
>>791
将棋プログラム同士を自動で対戦させるんだから、
人間の都合を排除して
かなり深読みできる時間があるといいね。
その間通信は 途絶えるけど

795 名前:デフォルトの名無しさん :04/05/23 21:51
>>794
あんまり長時間沈黙するとルーターのNATテーブルがタイムアウトして通信が切れるから
一定時間ごとに(2〜3分くらい)ダミーパケットを流す必要があるね
クライアントの負担を減らすならサーバーが現在時刻とか消費時間とか
そのあたりの情報を各クライアントに垂れ流ししてもいいかも
クライアント側は必要なければただ読んで捨てるのみ利用したければ利用する




796 名前:デフォルトの名無しさん :04/05/23 21:58
作ったばかりの人にとっては
一手10秒の方がサクサク進んで面白いかも


797 名前:デフォルトの名無しさん :04/05/23 22:26
実際の人間が行うルール(持ち時間)と同じ方がいいんでない?

798 名前:792 :04/05/23 23:13
>> 793
本質的な解決ではないけれど,サーバが落ちたらもう一度起動するラッパを書いたので
お気軽にどうぞ.


799 名前:デフォルトの名無しさん :04/05/23 23:26
なにげにコンピュータ将棋協会のサイトが落ちているようだが
昨日からのここの盛り上がりとなにか関係あるのだろうか?



800 名前:デフォルトの名無しさん :04/05/23 23:38
ほんとに落ちてるね。ここからのアクセスがあったろうけど。
それと関係あるのかな。

801 名前:デフォルトの名無しさん :04/05/23 23:41
コンピュータ将棋選手権の当日のアクセス数と比べれば大したことないんじゃないかな。

802 名前:773 :04/05/24 00:25
更新しました。
http://up.isp.2ch.net/up/98ef06e5730c.zip
サーバの負荷のせいか、なかなかダウンできないようですが...


803 名前:デフォルトの名無しさん :04/05/24 00:32
>> 802
おつかれさまです
たしかにダウンロード全然進まないです..

804 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 00:59
>>801
ほぼ半日落ちてる。
サーバープロトコルのページは手元に保存してあるからあっしには無問題たが。

805 名前:783 :04/05/24 01:07
773さんお疲れさまです.
wdoor のサーバプログラムを >> 802 のバージョンに更新いたしました.
アドレスは変わりませんが,ログや棋譜のURLを変えました.

アドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/

また一次配布先が重いようなのでミラーしました.
http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/original-servers/98ef06e5730c.zip

今日はこの辺で.


806 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 01:31
>>795
クライアントのタイムアウトチェックのようにpingを数分感覚で繰り返していればいいんでない?
これならクライアントの読み捨て処理がいらんはず。

807 名前:デフォルトの名無しさん :04/05/24 12:23
だれがつないでるかわかるように who コマンド実装きぼんぬ
ついでにチャットもできるようにとか




808 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 12:59
拡張コマンドはこんなふうに
 %EX WHO
するのはタイプ数増えるから駄目?
ここで欲しい機能は本家でも追加されるかもしれないから、その時までの暫定ということで…

809 名前:デフォルトの名無しさん :04/05/24 13:03
>>808
コマンドに該当しないものはそのまま各クライアントに流すということでいいのでは?


810 名前:デフォルトの名無しさん :04/05/24 13:09
>>808>>807のチャットへのアンカー間違い

>>809
特に拡張とか定義しなくても実装されてないコマンドを受け取ったら
ただ単に無視するだけでいいと思う






811 名前:デフォルトの名無しさん :04/05/24 13:31
プロトコルは拡張しない方が好みかなあ
サーバもクライアントもシンプルに保つ方が後々良いと思うんだよね

というわけで代案
whoはサーバが対戦中の試合や対戦待ちリストをstatus.htmlに随時書き込んで
クライアントが好きな時にhttpでダウンロードする
チャットするのは人間なので特に規約を決めずに別にサーバをたてる

どうでしょう


812 名前:デフォルトの名無しさん :04/05/24 13:33
ところで、基本的なところを知らんので教えて欲しいんだけど、巷の将棋ソフ
トで CSAプロトコルを喋れるやつはあるの?

813 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 13:45
あまりRuby使いの773さんに負担を掛けない方向で…Rubyわからんです。

814 名前:デフォルトの名無しさん :04/05/24 14:46
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50

815 名前:デフォルトの名無しさん :04/05/24 19:04
んで、誰かもう対戦してみた?

816 名前:デフォルトの名無しさん :04/05/24 19:50
誰かランダムプレーヤー投入しない?

817 名前:773 :04/05/24 20:18
>>795
30秒に一回pingして、30秒以内に返って来なかったら負け、となっているつもりです。

>>807
whoの機能は必要そうですね。もう一つ、別のportを使うようにしようかしら?
チャットは独立したソフトでも用が足りると思うので、消極的。

>>808
拡張コマンドでwhoするためにログインしたけど、将棋はしたくない、
というような場合に問題が出そうな気がします。

>>809
規定されていないものを各クライアントに流すのは、問題です。
サーバにコマンドを拡張し、クライアントから拡張コマンドが送られて来たらサーバが答える、
という形式であれば、互換性が保てるので問題ないでしょう。

>>811
極力、拡張したくないですね。
status.htmlでもいいかもしれません。

>>813
どもです。

>>815
ログの感じでは、誰も繋いでないみたい

>>816
生telnetでサーバに繋ぐのもアレなので、CSAプロトコルで対人対戦が出来るように、
端末ソフトを作るのがいいかも。


818 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 20:40
>>812
巷の将棋ソフトと木偶の坊とLAN対応版CSA将棋でなんとかならん?

819 名前:812 :04/05/24 21:15
>>818
ども。なんとかせんと喋れんけど、なんとかすれば喋れる、ってレベルなのか。
って意味では
> CSAプロトコルで対人対戦が出来るように、端末ソフトを作るのがいいかも。
これって需要あったりするのかな。

820 名前:まともに動いていない ◆R/rLuLKeEI :04/05/24 21:28
接続してからログインまでならコマンド拡張の余地がありそうですね。

>>819
テスターさん向けの需要なら少々あると思う。

821 名前:デフォルトの名無しさん :04/05/24 22:14
>>817

>>30秒に一回pingして、30秒以内に返って来なかったら負け、となっているつもりです
プロパイダーによってはパケットロス率の高いところがあったりするので一回だとたまたまというのがありうるので
数回返ってこなければ落ちているという判断のほうがよいのではと思います

822 名前:デフォルトの名無しさん :04/05/24 22:36
うう〜ん、ログインエラーで入れないなあ
エラーメッセージにはこちらの入力したIDとパスワードが出てるのに
切られてしまうようです








823 名前:773 :04/05/24 22:54
>>822
passwordの仕様が >>782 になっているので、
- passwordなし
or
- passwordの最後の文字が+か-
でやってみてください。


824 名前:デフォルトの名無しさん :04/05/24 23:10
うぬぬ、今度は入力の途中で切られてしまうようになってしまいました。
みんなはうまく行ってる?うちだけ?


825 名前:824 :04/05/24 23:31
のんびり入力してると途中で切れるようです
速攻で入力すると切れないようですね
でもBEGIN・・・・が返ってこないです



826 名前:773 :04/05/24 23:37
telnet wdoor.c.u-tokyo.ac.jp 4081
して、
LOGIN username
と叩く。

相手が来るまでキーボードにさわらずに我慢する。
相手が来ると、メッセージがバッと流れるので
AGREE
と叩く。

あとは、
+1234FU (先手の場合)
-1234FU (後手の場合)
みたいに手を入力
で、いけると思います。

バグってはいないと思いますが、激しく使いにくいですね。

誰かログインしてください。


827 名前:824 :04/05/24 23:50
パスワード無しだとうまくいきますねパワードと+−を入れるとログイン後無反応です
と思ったらBIGINが流れたあと切れてました。



828 名前:824 :04/05/24 23:53
>>827
タイムアウトしてるのかな?
パスワード無しでログイン
少し間をおいてもう一個ログインすると
両者にBEGINメッセージが流れたところで回線断です

829 名前:824 :04/05/24 23:59
あ、もしかしたらWINDOWSのtelnetが改行をcrlfで送っちゃってるのが原因かな?



830 名前:デフォルトの名無しさん :04/05/25 00:05
繋いでみたけど意味不明だ・・・

接続→速攻でLOGIN 適当な名前(Enter)→無反応・・・
ここで対戦相手がくるとメッセージがパッと流れるって事っすか?
せめてLOGIN (Enter)の後にログインに成功しましたぐらい表示してほしいよ;;

831 名前:デフォルトの名無しさん :04/05/25 00:47
KNZWはいつ先発がいい?
・巨人戦直後の火曜
・魔の水曜
・三浦の木曜

832 名前:まともに動いていない ◆R/rLuLKeEI :04/05/25 00:52
両方とも

$ telnet wdoor.c.u-tokyo.ac.jp 4081
Trying ...
Connected to wdoor.c.u-tokyo.ac.jp.
Escape character is '^]'.
LOGIN matomoni
LOGIN:matomoni OK
...
P+
P-
+

まで出た。しばらくすると、一方は

#TIME_UP
#LOSE
Connection closed by foreign host.

他方は

#TIME_UP
#WIN
Connection closed by foreign host.

なりました。当方、Linuxです。悠長にプロトコルを参照してる暇がないですね。

833 名前:デフォルトの名無しさん :04/05/25 00:53
プロトコルの仕様がわからないんだけど、
これって矯正切断用のコマンドとかないの?

834 名前:デフォルトの名無しさん :04/05/25 00:55
KNZWの仕様がわからないんだけど、
これってフォーム矯正切断用のコマンドとかないの?

835 名前:デフォルトの名無しさん :04/05/25 00:56
出来ればtelnetではなく
CSAサーバプロトコルと同じTCP/IP接続にしてほしい
わかりにくいよ;;

836 名前:デフォルトの名無しさん :04/05/25 01:01
telnet二つでやってみた。
ちゃんと通信できたっぽいけど、
空白の関係で上手くそろわないで
内容の理解にすごい時間がかかった。
そのあいだにTimeout…ショボーン

837 名前:デフォルトの名無しさん :04/05/25 01:03
>>835
CSAと同じだからTELNETではわかりにくいのだよ

838 名前:デフォルトの名無しさん :04/05/25 01:07
>>837
補足、便宜上TELNETと言ってるだけで
TELNET用ソフトを使って人間がCSAプロトコルを話しているといえばわかってもらえるかな?


839 名前:まともに動いていない ◆R/rLuLKeEI :04/05/25 02:06
プロトコル実装のテストやデバッグにtelnetを使うというテクニックはよく耳にするが、
要するに皆でよってたかってテストをしているようなもんだな。

いきなり完全準拠は困難だから改善していきませう。

 LOGIN:matomoni OK
の出るタイミングがなんか違わないか?

840 名前:デフォルトの名無しさん :04/05/25 07:43
> のんびり入力してると途中で切れるようです
取り敢えずまだみんな手打段階みたいだから、暫定的に TEMEOUT 関係のパラ
メータをもちっと大きくしてくださると嬉しいかもかも > 設置者さま
# ま、ローカルでテストすりゃいいんだけど…

ボチボチ手動の CSA クライアント作ってみてるんだけど、初期盤面はホント
はパーズして解析せにゃいかんのだよね? メンドいなぁ

841 名前:まともに動いていない ◆R/rLuLKeEI :04/05/25 08:00
YSSのページにWIN向けのサンプルソースがあったような…
ちょっと行ってくる。
>>56が生きてたらそこにもサンプルソースのリンクがあったはずなので、使えるコードは使おう。

842 名前:デフォルトの名無しさん :04/05/25 14:07
サーバのログに日付と時刻があるといいです


843 名前:デフォルトの名無しさん :04/05/25 14:07
繋いでみた。Winからだと改行コードのせいで乱れるね。
ちょっと暇になったら手動用のクライアント作ってみっかな。


844 名前:デフォルトの名無しさん :04/05/25 14:12
>>842 禿どう、つーか、whoコマンド(LOGIN時。実装はどんなでもいい、自分を含めて
誰が繋いでいるかわからないと禿しく不便かも)はやはり必要かも。
今はサーバのログ読んでます。



845 名前:デフォルトの名無しさん :04/05/25 14:16
あっ、接続時にLOGINしている名前を羅列してくれるだけでいいかも。

846 名前:メモ コピペ :04/05/25 14:19

アドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/


847 名前:デフォルトの名無しさん :04/05/25 15:06
こんな感じでdaemon化してPIDを記録したいのですが、いかが。

--- shogi_server.orig 2004-05-25 13:06:41.000000000 +0900
+++ shogi_server 2004-05-25 14:54:04.000000000 +0900
@@ -416,6 +416,22 @@
end
end

+
+def write_pid_file(pid)
+ File.open("/var/run/shogi-server.pid", "w") {|f|
+ f.puts pid
+ }
+end
+
+def daemon
+ return if $DEBUG
+ pid = fork
+ write_pid_file(pid)
+ exit!(0) if pid
+ Process.setsid
+end
+
if ($0 == __FILE__)
+ daemon
main
end


848 名前:デフォルトの名無しさん :04/05/25 20:32
しばらくはtimeoutの時間を延ばしてもらわないと、
皆telnet使ってテスト中だし。
ついでに接続している人一覧表示とかあればイイ(・∀・)
いきなりプログラム同士の対戦もやりにくいし、
これ使って人間同士の対戦からやってみたいね

849 名前:デフォルトの名無しさん :04/05/25 21:51
>> 840, 848
とりあえず10秒から30秒に延ばしてみました
DEFAULT_TIMEOUT = 30 # for single socket operation

もっと延ばした方が良い?


850 名前:まともに動いていない ◆R/rLuLKeEI :04/05/25 22:16
LOGIN:OKが出ない理由を知りたくてRubyソースを読んでみた。
BEGINと一緒に出してるから対戦相手が来ないとLOGIN:OKが出ないんだね。

if (rival.socket.hello?(sprintf("LOGIN:%s OK\n", rival.name)) &&
rival.socket.hello?("BEGIN Game_Summary\n"))
player.socket.hello?(sprintf("LOGIN:%s OK\n", player.name))
player.socket.hello?("BEGIN Game_Summary\n")

851 名前:デフォルトの名無しさん :04/05/26 00:41
いまサイエンスゼロで世界コンピュータ将棋選手権の解説をやってる。
とりあえず、静大のTACOSがレポートの中心らしい。

852 名前:デフォルトの名無しさん :04/05/26 01:35
将棋って世界中で知られてるのか?
アメリカとかにも将棋って知名度高いの?

853 名前:デフォルトの名無しさん :04/05/26 21:15
>>852
Yahoo!!GameにShogiがないところをみると知名度は低いでしょう。

854 名前:デフォルトの名無しさん :04/05/27 00:13
>>852
低いと思います。
囲碁と違って、
一部のテーブルゲーム好き(or AIプログラマ)にしか
知られてないんじゃないでしょうか。
というのも、チェスのような特徴ある駒の形と違って
文字で駒を識別するため
アルファベット圏の人が漢字を見ると
文字の見分けがつき辛いらしいです。

アルファベットに置き換えた駒もあるようですが
深くやるとなると、文献が漢字のものがほとんどなので
手が出し辛いのがネックなんじゃないでしょうか。


855 名前:デフォルトの名無しさん :04/05/27 13:00
そういえば子供のころ「全」みたいな成銀が苦手だった

856 名前:デフォルトの名無しさん :04/05/27 20:22
56見てて思ったんだけど
持ち駒から指した時のプロトコルが見当たらない

ちょっと、 どうなってんの???

857 名前: ◆R/rLuLKeEI :04/05/27 21:15
>>856
-0034KA(△3四角打)

858 名前: ◆R/rLuLKeEI :04/05/27 21:23
>>856
-0034KA(△3四角打)

859 名前: ◆R/rLuLKeEI :04/05/27 21:28
>>856
-0034KA(△3四角打)

860 名前: ◆R/rLuLKeEI :04/05/27 21:30
>>856
-0034KA(△3四角打)

861 名前: ◆R/rLuLKeEI :04/05/27 21:31
>>856
-0034KA(△3四角打)

862 名前: ◆R/rLuLKeEI :04/05/27 22:35
面目ない。投稿できなかったと思って何度もやり直してしまった。他意はない。

863 名前: ◆R/rLuLKeEI :04/05/27 22:41
面目ない。投稿できなかったと思って何度もやり直してしまった。他意はない。

864 名前:デフォルトの名無しさん :04/05/28 00:42
ここ見てる人でオリジナルの将棋AIが完成している人って結構いる?
強さはどうでもいいから。
なんか人が少ないような気がする・・・

865 名前:デフォルトの名無しさん :04/05/28 01:15
>>864
よくわかんないっす。
将棋AIって、将棋のプログラムのこと?
人が少ないって、制作者が少ない、ここに来る人が少ない、ってこと?

866 名前:デフォルトの名無しさん :04/05/28 02:29
>>865
将棋AIはプログラムが将棋を指すアルゴリズムの事を指して言いました
あと人が少ないってのはその制作者の人数の事です
作ってる人が多いなら俺も作ろうかなと思ってます

867 名前:603 :04/05/28 13:23
>>866

作ってますよー。
本業の合間がなかなかとれず遅々として進んでおりませんが。

現在の状況
・駒の動き(合法判定):作成中
・勝敗の判定:王手放置と投了のみ。詰まされたかどうかの判定は後回し

当面の目標
・MAN対MAN
・その局面の評価(先手優勢とか、そういうの)をCPUにさせる

とりあえず、ここまでできれば棋譜の通りに自分で駒を動かしてみたり
しながら楽しくなっていくかなあと。
対戦できるようになるにはまだまだかかりそうですけど、
詰み検索アルゴリズムは公開されている資料も多いし、
思考ルーチンも局面の評価が上手くできればそんなに大変な作業では
ないんじゃーないだろーかとか、楽観的に考えながらゆっくり進めようと
思ってます。

作っている人がどれぐらいいるのか、対戦できるレベルまで完成?させた
ものをいじっている人がどれぐらいいるのかは自分も気になるなあ。


 

868 名前:840 :04/05/28 14:49
>>866
自分も作りかけ。といってもモノは簡易手動 CSA クライアントなので>>866
言ってるのとは違うけど。
元々フロントエンドは作ってたから、バックエンドを CSA 用にすげ替えるだ
けなんだけどなかなか時間が…orz


869 名前:うさぴょんの育ての親 :04/05/28 18:37
>>866
最近はあまり時間が取れないから触ってないけど、できてますよー。
http://homapage1.nifty.com/Ike/usapyon/

870 名前:うさぴょんの育ての親 :04/05/28 18:38
うげ、タイプミスした。
http://homepage1.nifty.com/Ike/usapyon/

871 名前:デフォルトの名無しさん :04/05/28 20:23
でサーバーは進化してるんだろうか?
>>773氏はまだ居る?


872 名前:デフォルトの名無しさん :04/05/28 22:36
とりあえず現状を整理しておこう

小物
サーバのログに日付と時刻 (842)
Winからだと改行コードのせいで乱れる (843)
daemon化してPIDを記録 (847)
LOGIN:OKが出るのが遅い (850)
タイムアウト関係

大物
WHOコマンド
チャット

その他
手動用のクライアント

これくらい?


873 名前:デフォルトの名無しさん :04/05/28 23:12
手動用クラ期待sage。
どんな感じだろう?telnet + α(コマンド一覧表示等) とか?
普通の将棋ソフトにプロトコル通信足したのとか

874 名前:773 :04/05/28 23:49
>>871
いる。土曜日にscratchからやり直す予定。

telnet接続 -> authコマンド -> 拡張モード(WHO, 対戦相手決定とか)
-> LOGINコマンド -> CSAモード(CSAプロトコル準拠) -> 勝敗決着
-> 拡張モード

telnet接続 -> LOGINコマンド -> CSAモード(CSAプロトコル準拠)

みたいのを考えている。

>>872
水曜日あたりに更新版出して、書き込んだつもりだけど、書き込めてなかった。

Winからだと改行コードのせいで乱れる (843)
CSAプロトコルが、改行をLFに規定しているので、どうしょもないのです。
この手の奴は、CRLFなのがよく聞く話だけど
daemon化してPIDを記録
個人的趣味により、当分はPID記録するけど、daemon化せずの予定


875 名前:デフォルトの名無しさん :04/05/28 23:57
>>874
TELNET端末からのアクセスを正式に許すなら改行コードは両対応しないといけないですね
マッキントッシュも勘定に入れるとcrのみというのも有りだし


876 名前:773 :04/05/29 00:10
client -> serverの方は、
serverが寛大なのは通常問題がないので、現状でも、LF/CRLF/CRどれでもいいはずです。

server -> clientにしても、改行コードを選べるターミナルエミュレータを
使ってもらえれば、LFでも大丈夫だと思ってます。
CSAプロトコルから外れるのは、避けたほうがいいと思います。


877 名前:デフォルトの名無しさん :04/05/29 00:14
WHOコマンドなどを取り入れたらすでにSCA上位互換ということになるので
このさい改行コードの対応もぜひ(笑
こんな案はどう?、
接続後いきなりLOGINが送られてきた場合は相手はプログラムなのでLFで行く
TELNETが相手の場合は一発目に改行を送ってもらってその改行コードを使う
LOGINプロンプトなんかもだしちゃったらいいかも



サーバープロジェクトが複数立ち上がるのがまずくなければ
vb.netの勉強にちょうどよさげな題材なので
WINDOWS版のサーバーを書いてみようかと思ってます
でも773氏の気分がそがれるようならやめときます




878 名前:773 :04/05/29 00:20
>>877
なるほど。一発目のコマンドにあわせて送り返すのはいいアイディアかも。

> WINDOWS版のサーバーを書いてみようかと思ってます
> でも773氏の気分がそがれるようならやめときます

ぜひ書いてください。


879 名前:868 :04/05/29 00:55
>>873
あー、自分のブツは CSA frontend on Emacs なので縁がない人には全く縁が
ないかと…。
>>818とか既存のコードを使えばもっと簡単に手動用クラはできそうだけど。

この路線で盛り上がってオープンな yet another 将棋倶楽部24 ができればと
妄想中。

880 名前:デフォルトの名無しさん :04/05/29 01:30
>>879
というか、なんで今まで無かったんだ?

881 名前:デフォルトの名無しさん :04/05/29 01:37
鯖側は漏れも参加してみたいが、ruby分からないので辞退。
プロトコルの仕様を読むところからだけど、
既存のフリーソフトを自分なりに改造して
ネット対戦版をつくっていきたいなぁと妄想

882 名前:デフォルトの名無しさん :04/05/29 03:35
>>878
うい〜、ではぼちぼちととりかかります

今日の成果、接続して送受して終了まで、なんと数行でかけてしまうというのがわかった
しかし、おぶじぇくとしこうがようわからん(笑
うにうに・・・、途中から素のVBへ逃げるかも


883 名前:まともに動いていない ◆R/rLuLKeEI :04/05/29 12:58
実はtest56.jarを作りかけて773氏のが動き始めたのを知って止めたのが残ってたりする。

884 名前:デフォルトの名無しさん :04/05/29 13:06
実は自分も鯖作りかけてたりする@Java

885 名前:まともに動いていない ◆R/rLuLKeEI :04/05/29 13:25
>>884
因みに私のはLOGIN/LOGOUTだけのコンソールアプリなのにまともに動いてないので884氏に期待。
関係ないがEclipseはええよ。

886 名前:884 :04/05/29 13:33
>>885
いまんとこ同じようなもんです。
自分もコンソールアプリですけど…簡単なGUIでもつけた方が良いですか?

Eclipseは既に使用中。

887 名前:884 :04/05/29 13:59
名前とパスワード、32バイト以下なら2byte文字も使用可能にしないと駄目ですかな?

1対1プロトコルとサーバプロトコル、読み比べると2byte文字使用可能な様に読める…

1on1  “空白を含まない32文字以内の7ビットASCII文字列”
server “空白を含まない32バイト以内の(略)文字列”

888 名前:773 :04/05/29 16:30
火曜日バージョンをアップします。
http://up.isp.2ch.net/up/f4e4e84035fe.zip

↓これは直したつもりです。
サーバのログに日付と時刻 (842)
LOGIN:OKが出るのが遅い (850)

pingに反応しないと切断するのも、止めました。

telnetした直後に、誰が接続しているか、表示されます。
(CSAプロトコル違反なので、次のバージョンでは止めます)

>>887
空白にはタブを含むのか
英数字以外の7ビットASCIIの扱いはどうなるのか
とか不明ですね。
漢字を通すにしても、文字コードが定められてないですし。


889 名前:まともに動いてない ◆R/rLuLKeEI :04/05/29 16:53
>>886-887
将来Xサーバーを起動していないUNIX上でも使いたいので私のtest56.jarは意図的にコンソールアプリにしてます。

サーバーは8ビットスルーにしておくつもり。
でもログイン/パスワードだけ。

890 名前:デフォルトの名無しさん :04/05/29 22:12
>>888
ども。クライアント作りに使わせてもらってます。

で、指し手に対する応答がちょっと変みたい。例えば telnet で
+7776FU を送ると
+7776FU^M,T10
みたいに指し手とカンマの間に CR が入ったのが返ってきます。

応答のときは str から CR を取り除かないといけないのかな。Ruby 詳しくな
いので報告だけですまんこ。


891 名前:890 :04/05/29 23:07
あ、telnet って CRLF で送るんだっけ。だから CR が付いてきちゃうのか。
規約どおり LF で送れば問題ないのかな(まだやってないけど)。ってこと
>>890は気にしないで下さいませ(;´Д`)

892 名前:773 :04/05/29 23:26
>>891
サーバの受け取りは、CRLF/LF/CRなんでもいけるはずです。(つもり)
chomp関数が対応してくれるはずなので。
scriptの方を使っている場合はRubyのversionを教えて下さい。
1.8以降でないと、駄目だと思います。


893 名前:890 :04/05/29 23:50
>>892
なるほど、了解です。script の方を ruby 1.6.7 なマシンで動かしてました。
ruby 1.8.1 上でやったら確かに telnet からでも問題ありませんでした。

ちなみに 1.8 以降でないと駄目なのはこの改行コードだけの話ですか?
それとも他の機能も 1.8 以降でないとマズいですか?


894 名前:783 :04/05/30 01:13
>> 888
wdoor 更新しました


895 名前:デフォルトの名無しさん :04/05/30 07:23
>>877
ふと思ったんだがウインドウズでサーバー作ってもライセンス料払えないなと・・・・
なんで自分で作ったサーバーソフトを運用するのにMSに金はらわにゃならんのか
なっとくいかね〜


896 名前:デフォルトの名無しさん :04/05/31 00:25
>> 888
クライアントのテストに使わせていただいてます。
END Position
END Game_Summary
が、送られてこないみたいですがなぜでしょう?
ソースを見ても送ってないように見えます。


897 名前:877 :04/05/31 00:39
暑くて頭がまわんない・・・・・
ただいま室温35度・・・しむ

898 名前:773 :04/05/31 00:46
>>896
すみません。バグです。

>>893
今のところは、改行コードの問題だけだと思います。
今後は分かりません...


899 名前:879 :04/05/31 01:12
とりあえず簡単だけど手動対戦できるとこまでは完成。
もちょっと綺麗にしたらアップできそう。

900 名前:893 :04/05/31 12:42
>>898
了解です。1.8 の方でテストしていくことにします。

901 名前:デフォルトの名無しさん :04/06/01 01:05
手指しや観戦用のクラに使う将棋板は駒の画像提供してくれる神は居ませんか〜?
あとテキストでうまく表現するアイディアとかも無いでしょうか?
これがあればサーバーが面倒見ればtelnetだけで対局もできるかもと思ったのですが
漢字が上下逆に表示できたら簡単なのになあ




902 名前:デフォルトの名無しさん :04/06/01 01:06
>>901
将棋板は駒の→将棋板や駒の

903 名前:デフォルトの名無しさん :04/06/01 01:21
>>901
> あとテキストでうまく表現するアイディアとかも無いでしょうか?
将棋板を覗いてみるといいと思う。テキストだけでも充分表現できてるよ。

904 名前:デフォルトの名無しさん :04/06/01 01:54
>>903
行ってきました
探し当てたのは ▽歩 ▲歩 ★歩 ってやつでした、ほかのはなかなか見つからなかったので
もしこっちのほうがもっといいというのがあったら教えてください
駒が横長になってしまうのに少々違和感がありますが(笑)しょうがないですよね

これ見て思いつき
 歩>   <香   って横向きにしちゃうのってどう?違和感ありすぎ?だよね(笑






905 名前:デフォルトの名無しさん :04/06/01 01:58
>>901
駒の画像ならここなんかどう?
柿木将棋用駒フォントだけど・・・

http://member.nifty.ne.jp/Takeyan/

906 名前:デフォルトの名無しさん :04/06/01 02:02
C言語の初心者です
なんとかTCP/IP接続が出来るので自分も参加したいと思ってます
グラフィックがDOS画面で駒とか配置してるんだけど、
WINDOWSプログラミングって出来て当然なのでしょうか?
覚える事が多すぎてちょっと手を出す気が起きないのですが・・・


907 名前:デフォルトの名無しさん :04/06/01 02:10
>>905
さんくす、いくつかダウンロードしてみました
ライセンス関係の記述が無いみたいですね
各自で入手してもらうようにすればいいのかな


908 名前:デフォルトの名無しさん :04/06/01 02:28
>>906
windowsプログラムはCにこだわらなければVBなんかだとボタンやテキストボックスなどの部品を
ドラッグ&ドロップでペタペタと貼り付けていくと外見があっというまに出来上がってしまうので
非常に簡単に形になりますよ
ぶっちゃけ本質のとこだけコーディングすればいいので(ちょい誇張)非常にらくちんです
細かいことをいわなければ・・・(笑







909 名前:デフォルトの名無しさん :04/06/01 02:36
>>901
X Windowだと文字がひっくり返ったフォントを作ってくれてるね。
http://www.logos.ic.i.u-tokyo.ac.jp/~gekisashi/download.html

Windowsのフォントってこんな感じのを自前で作れたっけ?

910 名前:デフォルトの名無しさん :04/06/01 02:40
>>909
>>905のとこに有るみたいよ

911 名前:デフォルトの名無しさん :04/06/01 03:11
>>910
あ、ほんとだ。




912 名前:デフォルトの名無しさん :04/06/01 08:38
>>904
縦長がよければ




でどうだろう。

へぼでよければ駒絵くらい提供できるけどね。

913 名前:903 :04/06/01 08:55
>>904
> 探し当てたのは ▽歩 ▲歩 ★歩 ってやつでした、ほかのはなかなか見つからなかったので
説明が書いてあったと思うけど★☆は最終手ってことね。
成駒は
成銀 "全"
成桂 "圭"
成香 "杏"
ってなカンジ。

>  歩>   <香   って横向きにしちゃうのってどう?違和感ありすぎ?だよね(笑
相手側の駒 "v歩"
自分側の駒 " 歩"
ってのも使われてるよ。

914 名前:デフォルトの名無しさん :04/06/01 08:59
>>913
>>相手側の駒 "v歩"
みましたみました、でも私的に非常に見づらかったので脳内却下してました(笑


915 名前:デフォルトの名無しさん :04/06/01 09:02
>>912
皆が自由に使えるものを提供してもらえると非常にうれすいです〜

916 名前:デフォルトの名無しさん :04/06/01 13:41
>>906
用意されてるものを利用するほうが楽ちん。
CならたぶんBCBが楽。

たとえば、盤面にはTStringGrid(オブジェクトも格納できる表)
なんかを使って、盤面のクラス定義してメンバに一個もたして、
表示はなるべくTStringGridのメソッドを利用するようにしたり。


917 名前:デフォルトの名無しさん :04/06/01 17:44
都万の部屋の CSA将棋 DLL作りだけで OK
でも 作り方が解らない

918 名前:デフォルトの名無しさん :04/06/01 18:53
思考ルーチン c++で 定跡なら そのまま指す
定跡はずれは 羽生の頭脳に ハッキングて 作れますか

919 名前:デフォルトの名無しさん :04/06/01 20:44
>>918
「定石」は一般でも使われるけど、将棋の世界では「定跡」と書くのか。
今、辞書引いて知っちゃったよ。

920 名前:899 :04/06/01 21:56
Emacs 上で動く手動 CSA クライアントをアップしてみます。
持ち時間表示とかまだやってませんが、対戦できる程度にはなってると思いま
す。興味がある人はどうぞ。Emacs21 でしか確認してないので変なとこがあっ
たら教えて下さい。
ttp://tokyo.cool.ne.jp/progn/shogi.tgz

921 名前:912 :04/06/01 23:41
>>915
大きさは?
取り敢えず仕事の合間にちっちゃこいの(15x15画素)作ってみたけど
小さすぎて需要がない悪寒。
#つーか、どうやって公開するんだ?>漏れ

922 名前:デフォルトの名無しさん :04/06/01 23:44
>> 920
楽しい!


923 名前:デフォルトの名無しさん :04/06/02 01:41
>>921
どっかにアプローダー置こうか?
おすすめスクリプトはないかな?


924 名前:デフォルトの名無しさん :04/06/02 10:37
駒絵ほしーなあ。
とりあえずはHP素材として公開されてるのを拾って使ってるが。

921さんゼヒお願い。

925 名前:うさぴょんの育ての親 :04/06/02 11:36
フリーの駒絵なら礒部将棋の礒部さんが公開しているやつがあるよ。

http://www.geocities.jp/sobechan/

926 名前:デフォルトの名無しさん :04/06/02 14:19
早く AI最強対24高段者の対局を 観戦したいです
漏れは 参加のハードルが高すぎます みなさん がんばって下さい

927 名前:884 :04/06/02 17:49
Server作ってる途中で頭がウニ〜
気分転換に駒画像作ってみました。
アルファチャネル付きPNGでサイズは50x50<使える?

>>923さん
アップローダー設置してくれます?

928 名前:デフォルトの名無しさん :04/06/02 21:48
>>914
"v歩"ってやつは柿木はじめ、市販ソフトで盤面入出力するときに使うやつだね。
入出力できるようにしておけば便利だぞ。


929 名前:デフォルトの名無しさん :04/06/02 22:29
>>927
とりあえず設置してみたもっといいのあったら教えてねん
http://gm.a-ark.net/~shogi/clip/clip.cgi


930 名前:884 :04/06/02 22:56
>>929さん
とりあえず駒画像UPしました…zipが使えないんで、サンプルとして王将だけ。
あとで画像結合したものUPします。

931 名前:デフォルトの名無しさん :04/06/02 23:10
>>930
あう〜スマソ細かい設定してなかったかも
zip許可した場合の危険性ってなんだっけ?


932 名前:884 :04/06/02 23:28
さっそくzipでまとめた物UPしました。

ここをこう変えたほうが良いとかあったら、ガンガン言って下さい。

933 名前:デフォルトの名無しさん :04/06/02 23:46
>>929
おつかりさま。

>>932
シンプルですき(はぁと)

934 名前:773 :04/06/03 00:08
>>920
サーバに、CSAプロトコル準拠モードと、chat, whoが出来る拡張モードを
付けようと思っています。(つないだクライアントごとに、モードを変える)

拡張モードのときには、他人がchatで書き込んだ内容が、サーバからクライア
ントに送られることになります。クライアントが期待しないレスポンスがサー
バから来る格好になるのですが、大丈夫でしょうか?


935 名前:デフォルトの名無しさん :04/06/03 02:00
個人的にはCSAプロトコル準拠モード使うつもり
チャット対応は大変そう


936 名前:921 :04/06/03 02:16
私もさっき上げておきました。
リクエストあればばらして上下両方作りますんで。
#最早大きめのを作る理由はなくなったな。

937 名前:デフォルトの名無しさん :04/06/03 04:06
フリーの駒&盤の3Dモデルデータキボン

938 名前:デフォルトの名無しさん :04/06/03 13:29
>>934
クライアントが期待しないレスポンスが来た場合は単にそれを無視するように実装しとけばいいのでは?




939 名前:デフォルトの名無しさん :04/06/03 14:35
サーバー途中まで作ったとこで
WINDOWSでのオリジナルサーバー運用についてMSに問い合わせてみた
接続数数制限があるからサーバーエディションを使わないといけない
認証ユーザーが居る場合認証方法にかかわり無く人数分のライセンスが必要
ゲストアカウントのように認証が必要ないユーザーについてはライセンスは必要ない
ということです
ウインドウズでやると有料にするしかないなあ
激しくモチベーションが下がったよ・・・
こりゃテストもできんぞ(w


940 名前:デフォルトの名無しさん :04/06/03 17:25
gooの将棋は だめですか 部屋に鍵を掛けれますが
自動対局の仕方が 難しいですかね

941 名前:デフォルトの名無しさん :04/06/03 21:08
ttp://www.javashogi.com/index-j.html java将棋

942 名前:920 :04/06/04 00:15
>>934
今は伝文に対する正規表現が手抜きなので大丈夫じゃないですが、そこを直せ
ば大丈夫にはなります。
# つーか、あんまり手抜きすぎたのでとりあえず手元のは直した
拡張コマンドに対する識別子が決まれば対応もするつもりです。

943 名前:デフォルトの名無しさん :04/06/04 18:10
ザ・グレート将棋.java将棋 今も生きていた 数人パラパラ 
ttp://www.greatshogi.com/shougi.html
java将棋は ソースを公開しています

944 名前:C言語の人 ◆OtHeRo2E6Y :04/06/04 21:25
サーバの機能拡張は・・・・どうでしょうかね。
ポート4081の通信機能はそのままで、
別のポートからログインすることによって、
状態取得等の拡張機能が使えるようにすれば、
CSA準拠でいけるんじゃないでしょうか。

ネットワークプログラムはやったことないので、
的外れなことをいってるかもしれませんけれど。

945 名前:デフォルトの名無しさん :04/06/04 23:10
>>944
データー自体はテキストを標準入力と標準出力で扱うのと考え方は同じですよ
受け取ったメッセージが自分の知らないコマンドだったらチャットメッセージとして扱ってやれば
どんなに拡張されても知らん顔で動くんではないでしょうか
そして参加者は総じてプログラムは得意な人ばかりでしょうから
そのあたりの実装にてこずるような人は居ないのではないかと







946 名前:まともに動いてない ◆R/rLuLKeEI :04/06/04 23:44
>>945
ああ、それは私のことだ。

近況:
まともに動いてないまま利きの表をいじってみたり評価関数の係数調整したりして発散しつつある。
もうすぐ投げ出す予定。

947 名前:デフォルトの名無しさん :04/06/05 00:23
本当の大会だと
相手が気が狂って変なこと言ってきたら
%KACHI を宣言しないといけないんだよね...


948 名前:デフォルトの名無しさん :04/06/05 00:38
>>947
ん? どゆこと?

949 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 01:04
異常データや非合法手に対しては%KACHIと言えるわけか…
チャットデータを異常とみなして%KACHIを宣言する奴が出てきそう…

950 名前:デフォルトの名無しさん :04/06/05 01:08
>>949
クライアントがとち狂ったときに対応するのはサーバーの役目ですよ

951 名前:デフォルトの名無しさん :04/06/05 01:13
サーバが王手非回避とか非合法手を検出できるようになれば解決?

952 名前:デフォルトの名無しさん :04/06/05 01:16
>>951
CSAプロトコルにはそう規定されてるみたい

953 名前:デフォルトの名無しさん :04/06/05 01:28
通信プロトコルは「広めに受けて、strictに返す」のが原則。
だから、「クライアントが無視するだろう」とか勝手に想定するのはイマイチ。
クライアントが「この拡張は受け取れる」と申告してきたら拡張機能が使えるとかの方が、
美しいと漏れは思うよ。
別ポートで拡張機能を使うとかならまぁいいんじゃないかな。

954 名前:デフォルトの名無しさん :04/06/05 01:37
>>953
無視するだろうじゃなくて
無視するようにしとこうよって提案でし


955 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 01:49
>>950
ということは本当の大会でも>>947のように宣言しなくてもいいのな。

956 名前:デフォルトの名無しさん :04/06/05 01:51
>>953
> クライアントが「この拡張は受け取れる」と申告してきたら拡張機能が使えるとかの方が、
> 美しいと漏れは思うよ。
まぁ、773氏は
> (つないだクライアントごとに、モードを変える)
と言ってるのでそのあたり(拡張に準拠するかのどうかのネゴ)も想定してるんでしょう。

> 別ポートで拡張機能を使うとかならまぁいいんじゃないかな。
逆に別ポートは個人的に美しくない気がするけどそれは趣味の問題かな。

957 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 02:11
拡張モードの存在を知る由もないCSALANでも使えるように接続直後は準拠モードで始まるはず。
拡張コマンドの使用で拡張モードに勝手に移行すると考えていいのかな。
準拠モードに戻る方法は必要だろうか?

958 名前:デフォルトの名無しさん :04/06/05 02:45
>>955
RS232C時代の話かと

959 名前:773 :04/06/05 02:56
拡張モード希望のクライアントは、サーバに接続した直後のLOGINコマンドで、
LOGIN name password extension1
みたいに、パラメータを増やしてもらう、というのでどうでしょう?

>>957
CSA標準なクライアントは、
LOGIN == 対局準備完了 == 相手がいれば対局開始
を意味します。

逆に、拡張モードなクライアントは、LOGINしても、CHATとかしたいだけかもしれない。

> 拡張コマンドの使用で拡張モードに勝手に移行すると考えていいのかな。

この方法だと、LOGINしてから拡張コマンドを入れるまでの間に、
CSA標準扱いをされて対局が始まってしまうかもしれないので、問題かなと思ってます。
なので、LOGINのパラメータ追加方式を提案します。

>>920
clinet->serverへの拡張コマンドは、"%%hogehoge"のように、%2個で開始
server->clientへのレスポンスは、"##hogehoge"のように、#2個で開始
でどうでしょう?


960 名前:デフォルトの名無しさん :04/06/05 03:34
>>954
無視するようにしとこうよ、ってのはあくまでプログラマの心構えの話で、
それを守るべきだ、って言うのなら元々の「プロトコル規定」に書くべきなんだよね。
要するに、サーバは「純粋に規定を守るクライアント」を受け付けるべきで、
クライアントも「純粋に規定を守るサーバ」を困らせないようにしたいと思うんだけど。
なので>>959のようにLOGINコマンドに追加しちゃうのはどうかと思ってたり。

CSAが規定してるのは「将棋の対戦」に必要な部分のみであって、
それ以外、whoとかchatとかは「サーバにログインしている人達のコミュニケーション補助」のためのプロトコルだよね。
つまり、求める通信の層(概念)が違うと。
なので、そもそも同じストリームで流す必要はないような気もする、というのが「別ポートで」というココロだったんだけど。
もちろん、プログラミングはより面倒になるからやりたくないってのも正しいと思うけど。

しかし、CSAももう少し拡張に気を配った規定を作っておいて欲しいなぁ。
プロトコルバージョンがサーバ側からしか与えられないってのはうれしくないよね。

961 名前:デフォルトの名無しさん :04/06/05 03:41
>>960
CSAのは会場にみんなあつまってコミュニケーションは空気伝達でやることしか想定してないんだよねたぶん


962 名前:デフォルトの名無しさん :04/06/05 03:49
てかすでに実装終えちゃってるクライアントの状況はどうなってんだろ?やっぱ余計なもの受け取るとハングったりするような状況なのかな?


963 名前:デフォルトの名無しさん :04/06/05 11:21
もしTCP/IP接続のサーバーを完成して
それに接続させるために俺のIPアドレスとポート番号を
ここに公開するってのは
セキュリティ面で結構危険な行為ですか?

964 名前:デフォルトの名無しさん :04/06/05 11:26
>>936
サーバーに問題がなければ
なんともない。


965 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 11:34
>>960
LOGIN name password[ extention1]
で省略したら準拠モード、あれば拡張モードなのでは?

966 名前:デフォルトの名無しさん :04/06/05 11:47
>>959
> clinet->serverへの拡張コマンドは、"%%hogehoge"のように、%2個で開始
> server->clientへのレスポンスは、"##hogehoge"のように、#2個で開始
> でどうでしょう?
server->client は who/chat どちらに対する応答か区別できないとうまくな
い気がします。
あと、対局前の多人数 chat まで想定するなら発言者名も含めて返す必要があ
りますね。
who
C->S %%WHO
S->C ##WHO:magic\nkiwi\ntany\ncurry\n
chat
C->S %%CHAT 負けたぽ…
S->C ##CHAT:curry:負けたぽ…

とか? 思い付きですが。

>>965
サーバがそれを解して、クライアント毎に流すデータを分けてくれれば問題は
ないね。でも標準にしか対応してないサーバにいきなり extention1 を送るの
はマズくない? って話もあるっしょ。
プロトコルモードもバージョンも対局開始しないと送られてこないから使いづ
らいやね。



967 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 12:00
>>966
標準にしか対応していないサーバーにextention1を付けて送ったらログインに失敗するのでは?

968 名前:デフォルトの名無しさん :04/06/05 12:30
>>967
あたりまえですが失敗ならば無問題ですね。
でも必ず失敗するとも言えない。実装によっては成功するだろうし、その可能
性は高い気がする。
で、クライアントは拡張モードだと思い込んで chat をバンバン送ってサーバ
あぼーんとでもなったら(゚д゚)マズー

サーバは extension1 を付けてログインしてきた場合は、拡張モードでログイ
ンできたってのをクライアントに通知する、
クライアントはその通知を受け取った場合のみ拡張コマンドを送るようにする、
ってなお約束が必要かな。

969 名前:まともに動いてない ◆R/rLuLKeEI :04/06/05 13:12
作りかけのtest56.jarだと成功してしまいました。

>>968
それはよさげ。

970 名前:デフォルトの名無しさん :04/06/05 15:59
今の将棋AIで最強クラスのって
人間で言えば何段相当ぐらいなの?

971 名前:デフォルトの名無しさん :04/06/05 17:57
>>970
4〜5段。

972 名前:デフォルトの名無しさん :04/06/05 21:11
第14回世界コンピュータ将棋選手権は、山下宏さんの「YSS」が7年ぶりに優勝した。
YSSは勝又清和五段との飛車落ち戦でも勝ち、会場を沸かせた。
2位は「激指(げきさし)」、3位は「IS将棋」。
毎年、北朝鮮から参加している「KCC将棋」は4位
うさぴょん がんばって下さい    うさぴょんを応援する会

973 名前:デフォルトの名無しさん :04/06/05 22:31
やっと人間の操作が完成した。
これからCPUを作成するのですが、
皆さんはどういう思考アルゴリズムを作成しているのでしょうか?
基本は定跡と何手か先の点数判定で最も高い手を選ぶですよね?

974 名前:773 :04/06/05 23:27
>>929さんのアップローダに、サーバをアップしました。
http://gm.a-ark.net/~shogi/clip/img/14.zip

CSAモード
client: LOGIN name passwordで接続。game_waitingステータスに移行
server: 相手が見つかると対局条件表示。agree_waitingステータスに移行
client: AGREEで条件受け入れ。gameステータスに移行
client: 対局
server: 対局終了で切断
(gamenameは"default"に固定。先手、後手の選択は出来ない)

拡張モード
client: LOGIN name password x1で接続
server: ##[LOGIN] +OK x1 を送る。clientは"connected"ステータス
client: %%GAME gamename + or %%GAME gamename -で、"game_waiting"ステータスに移行
server: "gamename +"と"gamename -"が揃うと、対局条件表示
client: AGREEで条件受け入れ。gameステータスに移行
client: 対局
server: 対局終了でconnectedステータスに移行
client: %%LOGOUTで終了

仕様可能な拡張コマンド
%%WHO
%%CHAT string
%%GAME gamename +
%%GAME gamename -
%%LOGOUT


975 名前:773 :04/06/05 23:34
>>966
以下のようにしました。
%%CHAT hello
##[CHAT][tarou] hello

ちなみに今は、対局中でも多人数chatのままです。

>>920
接続テストしてません。すみません。


976 名前:942 :04/06/05 23:38
手動クライアント@Emacsの修正版をアップしておきます。前回からの主な変更
点は
* サーバからの伝文を厳密にチェックするように修正
* 消費時間,最終手の表示を追加
ttp://tokyo.cool.ne.jp/progn/shogi-0.2.tgz


977 名前:942 :04/06/05 23:50
>>975
> 接続テストしてません。すみません。
いえいえ。おつかれさまです。追加仕様については後でじっくり眺めてみます。

978 名前:デフォルトの名無しさん :04/06/06 00:20
>>974
wdoor 更新しました.

979 名前:デフォルトの名無しさん :04/06/06 17:35
>>974
shogi-server:229:in `write_safe': wrong number of arguments(2 for 1) (Argument
Error)
エラーが出てました


980 名前:773 :04/06/06 21:22
http://gm.a-ark.net/~shogi/clip/img/15.zip
直しました。


981 名前:デフォルトの名無しさん :04/06/06 21:31
>>974
ちょっと気付いた点など。CSAモードで以下の問題があるようです。
1. パスワードなしでの LOGIN ができない
2. LOGIN:incorrect が返らない
3. LOGIN:<username> OK が返らない
4. LOGOUT できない

1 は、拡張モードでは仕様上パスワード必須なのは想像できますが、CSAモー
ドでもパスワード必須になっているのはユーザが混乱するように思います。勿
論パスワード必須にする方向もアリだとは思いますがいかがでしょう。

2, 3, 4 は以下のような変更が必要でしょうか。コード全部読んだ訳ではないの
で適当に修正して下さいまし。TABなど崩れると思いますが数行パッチなので
そのまま貼ります。と思ったら行数オーバで怒られたので次レスに。


982 名前:デフォルトの名無しさん :04/06/06 21:32
--- shogi-server.orig Sat Jun 5 23:09:24 2004
+++ shogi-server Sun Jun 6 21:26:42 2004
@@ -187,6 +187,7 @@
write_safe(sprintf("##[LOGIN] +OK %s\n", @protocol))
else
log_message(sprintf("user %s run in CSA mode", @name))
+ write_safe(sprintf("LOGIN:%s OK\n", @name))
csa_1st_str = "%%GAME default +-"
end

@@ -280,7 +281,7 @@
end
buf.push("##[WHO] +OK\n")
write_safe(buf.join)
- when /^%%LOGOUT/
+ when /^(%%)?LOGOUT/
finish
return
else
@@ -576,6 +577,7 @@
break
else
client.write_safe("type 'LOGIN name password' or 'LOGIN name password x1'" + eol)
+ client.write_safe("LOGIN:incorrect" + eol)
client.close
Thread::kill(Thread::current)
end


983 名前:デフォルトの名無しさん :04/06/06 21:48
手動クライアント@Emacs の拡張モード対応版をアップしておきます。
http://tokyo.cool.ne.jp/progn/shogi-0.3.tgz
# しかし需要はあるんだろうか…orz

984 名前:まともに動いてない ◆R/rLuLKeEI :04/06/06 23:44
>>983
拡張モード対応版の方が需要ありそう。
チャット主体で…。

近況:
よせばいいのに私のまともに動いてないプログラムにクライアント機能を追加中。
まだダイアログをこさえているところで接続にすら至っていない。
773さんのサーバーに接続できるようになるのはいつになるのやら。

985 名前:773 :04/06/06 23:47
ありがとうございます >> 981

http://gm.a-ark.net/~shogi/clip/img/16.zip

1. パスワード必須でいいのでないでしょうか
2. 返すようにしました。その後、もう1行返しているのですが、止めた方がいいでしょうか?
3. 返すようにしました。
4. LOGOUTコマンドを忘れてました。%%LOGOUTを廃止しました。


986 名前:デフォルトの名無しさん :04/06/07 00:07
wdoor 更新しました >>985


987 名前:デフォルトの名無しさん :04/06/07 08:28
>>985
どうもです。

> 1. パスワード必須でいいのでないでしょうか
ふむ。認証機構がない現在、空文字パスワードによるログイン失敗は syntax
error にあたる訳で、そう考えると違和感が残るのですが、あまり強く主張す
るものではありません。必須だと周知すればいいですし。

> 2. 返すようにしました。その後、もう1行返しているのですが、止めた方がいいでしょうか?
拡張モードは構わないと思います。欲を言えば "##[ERROR]" などの固有のヘッ
ダを付けてもらえるとプロトコル的に美しいかと。クライアント側も一律で処
理できますし。
CSA モードでは(規約にないので)止めた方が好ましいと思います。
# でもエラーメッセージくらい欲しいですよねえ…。まぁ、あの規約じゃしゃー
# ないですか。

> 4. LOGOUTコマンドを忘れてました。%%LOGOUTを廃止しました。
了解です。

988 名前:デフォルトの名無しさん :04/06/07 08:45
CSAプロトコルは(CSA互換モードで)極力維持した上で、
拡張モードをここで自由に決めてしまえばいいでしょうね。
お歴々もここを見ているようだし、ゆくゆくは拡張モードが
DeFactoStd.になるかもしれませんがね ;-)

989 名前:デフォルトの名無しさん :04/06/07 12:02
通信プロトコルSOAPにしてくれ
そしたら使ってあげる

990 名前:まともに動いてない ◆R/rLuLKeEI :04/06/07 12:36
>>989
XML化案を出してくれそしたら検討してあげる。

そんな物言いだと誰も動いてくれないよ。

991 名前:デフォルトの名無しさん :04/06/07 12:50
誰か次スレ頼む。俺はむりぽ。テンプレは >>1-3 に加えて

アップローダ (929氏提供)
http://gm.a-ark.net/~shogi/clip/clip.cgi

CSAサーバ (773氏作、783氏提供)
アドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/

くらい?

992 名前:まともに動いてない ◆R/rLuLKeEI :04/06/07 13:05
>>991
プロトコル仕様>>56のリンクも希望。

993 名前:デフォルトの名無しさん :04/06/08 13:12
993。


994 名前:デフォルトの名無しさん :04/06/08 16:23
次すれ
ttp://pc5.2ch.net/test/read.cgi/tech/1086678961/

初スレ立て。補完よろしゅう

995 名前:まともに動いてない ◆R/rLuLKeEI :04/06/08 20:35
新スレッドも出来たこったし旧スレッドを消費しとこうかね。


私は馬鹿なんだそうだ。
なるほどね、上手いことを言う。
思い当たる事柄が多々ある。
そうか、そうか、納得。

996 名前:デフォルトの名無しさん :04/06/08 20:38
最初は詰将棋を解くプログラムですかね。

997 名前:デフォルトの名無しさん :04/06/08 21:08
997

998 名前:デフォルトの名無しさん :04/06/08 21:11
998

999 名前:デフォルトの名無しさん :04/06/08 21:12
999

1000 名前:デフォルトの名無しさん :04/06/08 21:12
1000GETキタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─

1001 名前:1001 :Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。