おまいら最強の将棋プログラムしてみろよ Part3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG前スレ
おまいら最強の将棋プログラムしてみろよ part2
http://pc2.2ch.net/test/read.cgi/tech/1043246252/l50
おまえら最強の将棋プログラムしてみろよ!!
http://pc2.2ch.net/tech/kako/1004/10043/1004395614.html
関連スレは>>1-6ぐらい
0002デフォルトの名無しさん
NGNGhttp://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
0003デフォルトの名無しさん
NGNGコンピューター将棋スレッド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
0004デフォルトの名無しさん
NGNG副長:機長!!エンジントラブル発生!!もうだめぽ!
機長:湖ハケーン!あそこに降臨しる!
乗客:何が起こってるんですか!?教えてくらはい。
機長:教えてチャソハケーン!晒すぞゴルァ!
副長:教えてチャソ逝って良しっ!!
スチュワーデス:厨房はひっこんでろ!
客A:(((( ;゚Д゚)))ガクガクブルブル
機長:トラブルをトラブルであると見抜けないと(機長を務めるのは)難しい。
副長:いまさら何ほざいてるんですかゴルァ。ちょっと機長!高度sage過ぎ!
機長:sageてるんじゃなくてsagaってんだよ!むしろ強制sage!?
客B:age!! age---!!!
客C:くそう、こんなことならもっと糞スレたてておくべきだった・・・。
客D:ジサク(・∀・)The End
客E:地面キタ━━━━(´Д`;)━━━━!!!!!
ゴゴゴゴゴゴゴゴ・・・・
・・・死ゲットズサー
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007 ◆R/rLuLKeEI
NGNG最強ですか?
0008デフォルトの名無しさん
NGNG0009 ◆R/rLuLKeEI
NGNG私のプログラムをプロファイルしたら評価関数関連が非常に時間を食っていた。
本業が落ち着いたら等価な高速版に変える予定。当分先の話。
0010デフォルトの名無しさん
NGNGのプログラムを見てください。Cです。オセロの駒の枚数を意識しています。
少しすれ違いかもしれませんが、全く違うとも言えないのでここで質問します。
乱数なので説明が難しいですが、先手、後手お互いが共に最善手を指しつつ、
ポイントが一番高くなる物がある1手目が、次の一手の最善手になると思いますが、
それの選び方が分かりません。ただ、得点の高いのを選ぶと、先手が最善手、
後手は最悪手を指した物になってしまいます。また、先手が1手目に最高点を
選ばなかったとしても、それによって後で高い得点を選べるようになり、
結果最終的に最高点を出せたりします。どう考えれば良いのでしょう。
0011 ◆R/rLuLKeEI
NGNGprintf("(%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)
とします。
0012 ◆R/rLuLKeEI
NGNG12 -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手目(?)は最大値を選ぶことで結果最終的に最高点を出せたりします。でいいですよね?皆さん。
001310
NGNGお答えありがとうございました。分かりました。
かぶっているのを得点で削って行き、残ったのの中で最高点のが最善手と。
プログラムはこんな感じです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=103
乱数の種を引数で与えていつでも再現できるようにした。
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)
(続く)
[ 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]
#
0016デフォルトの名無しさん
NGNG001710
NGNG自分と表示内容が違うなー。
ただ、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
もっとくわしくおながいします。
[5][6]を比較しているなら納得。
違和感は残るがそれを上手く表現できない。
乱数の種が同じでも擬似乱数の生成規則が異なるのでしょう。
ANSI Cでも処理系定義ですし。
なお、当方の環境はLinux 2.4.2-2 i686です。
001910
NGNG>違和感は残るがそれを上手く表現できない。
何でしょうね。自分も少しあります。
プログラムの内容が点数分岐の為だけのと言うのもあるかもしれません。
早くオセロの方に組み込んで試してみたいですが、
難しくて時間が掛かってしまいそうです。
>乱数の種が同じでも擬似乱数の生成規則が異なるのでしょう。
>ANSI Cでも処理系定義ですし。
なるほど、そうでしたか。なお当方のは98、VC6です。
#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]だと思う。
002110
NGNG結果通り[0]だと思います。先手は高値にしたく、後手は逆。
例だと先手の指しては1種類しかなく、後手は4種類ある。
先手が置いて10枚得た後、後手が何枚得るかを決める。
当然21枚得られる[0]が一番得だから、[0]が最善手だと思います。
002210
NGNGなんとなく言っている意味が分かりました。
オセロだとスピードとか容量とか気にしないといけないから、
いろいろ考えていたのですが、その時にピンときました。
うまく説明できませんが。
正しくないことを示す効果的な方法は反例を見つけることですが、私は反例を見つけることが出来ませんでした。
解説ありがとう御座いました。多分正しいのでしょう。事実上の敗北宣言です。
002516
NGNG途中経過はどうであれ、4手目終わった状態での駒数が問題になると考えました。
それを3手目、2手目の評価としてあげていくわけですから。
全滅した場合は別ですが。
>>19
>>違和感は残るがそれを上手く表現できない。
>何でしょうね。自分も少しあります。
未だにこれが引っかかるんで反例を挙げたくてしょうがない。
でも…自分の力の無さが痛い。
16さんは最大最小戦略を愚直にやるのであれば
ttp://tt.sakura.ne.jp/~suzu/search_problem/minimax.html
の「Minimax 法の手順」の項にある図のように末端の値だけで十分だと言いたいに違いない。
10さんはpointの値は枝刈りと他のノードとの区別に使っているのですよね。
002710
NGNG>末端の値だけで十分だと言いたいに違いない。
>>22でなんとなく理解したという意味は、オセロだと手の種類が10の8条とかに
なるから、うpしたプログラムのやり方だと容量不足になる。だから小さく絞って
調べる必要があり、その時関係ない部分がいっぱいあるから、その部分は使わずに
0で良いという意味と受け取りました。
>10さんはpointの値は枝刈りと他のノードとの区別に使っているのですよね。
枝刈りとか良く分かりませんが、将棋で言う関係ない所に駒を打つ手は考えない
見たいな物ですよね。そういうのはたぶん無く、駒がたくさん取れる手、
殆ど取れない手を区別せずに全て調べます。
ttp://www.cv.its.hiroshima-cu.ac.jp/~kazutaka/othello/index.html
私は持ってないが『リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装』ていう本がある。
Amazonで「和書」「リバーシ」を探すと出てくる。
003110
NGNG知りませんでした。オセロを作り始めたのは質問する1日前でしたし。
PLAYER同士で遊べるようになったのでCONと対戦させるにはどうすれば良いかと
思い質問しました。見てみると凄く面白いです。ただ、少しオセロをなめて
いました。とにかく枚数を稼ぎつつ、端ならより良いと言う評価関数を考えて
いたのですが、終盤で枚数的な大逆転を起こせるので、その評価関数はまったく
意味を持たない事が分かりました。完成した暁には、作ろうと思っていた初心者
プログラム勉強サイトのネタの1つに加えようと思っていたのですが、数日で手に
終えない代物と分かったので、オセロはあきらめようと思います。ただ、せっかく
点数の計算方法が少し身についたので、それを生かした何かを作りたいと思います。
003210
NGNG以下のような順序で計算するプログラムです。コメントは自分もよく理解して
いない為付いていませんが、実行するとなんとなく分かると思います。
何かの役に立つような気がするのですが、頭がこんがらがってて分かりません。
_____________40
____13________26________39
_4__8__12__17__21__25__30__34__38
12356791011141516181920222324272829313233353637
0033デフォルトの名無しさん
NGNG思いつきで恐縮だけど。
逆オセロを作ってみたら?
オセロと同じルールで駒を置いていき、獲得枚数が少ない方が勝ちってことで。
つまり、相手の手番で相手に自分の駒を全部取らせることに成功したら無条件勝利。
これなら逆転が少なくなるので割りと単純な点数評価でいけると思う。
#思うだけ。
でも、プログラム技術の向上に手頃な題材なので気が向いたら再挑戦してみるのが吉です。
プログラム自体は基本的なデータ構造とアルゴリズムの組合せと言えなくも無いし。
どちらかというと、ちょっとした思いつきと根気と諦めないこととが肝要だと思う。
かく言う私は三度諦めて四度目の挑戦なんですけどね。
10さんの書き込みに触発されてしばらく触っていなかった将棋のプログラムの評価関数の高速化をしようと見ていたらバグを見つけた。
局面の評価をするつもりが兄弟局面のどれかの評価をしてその局面の評価値にしていた。
何ヶ月もこねくり回していて気が付かなかった。
道理で弱いわけだ。
王の価値がほとんど0らしいという結果も意味が無くなってしまった。
というようにバグ取りの楽しみもあるので色んな何かをたくさん作って再挑戦を期待。
003510
NGNG面白い案ですね。割りと簡単な点数評価と言うのにまだ実感が無いですが、単純に
枚数で評価するやり方の予定だったので、もしそうなら良いのが出来そうです。
>>34
将棋は昔少し作った事があったのですが、定跡に頼るのが嫌で、自分の棋風見たく
力将棋を出来るのを目指していたのですが、挫折しました。
1手毎を4種にしぼって、16手ぐらい読むのを考えていました。
0036 ◆R/rLuLKeEI
NGNG私も定跡に頼るのはなんかなぁ、と思ってる。
ただ、力将棋というのもなんかなぁとも思ってる。
システムが自分の価値観=評価関数に従って、手筋や定跡のデータベースを更新し、
学習から新しい特徴を評価関数に組み入れて調整し…そんなのが出来たらいいな。
どうやったらいいのかさっぱりわからんが。
高速化検討中:評価関数を(着手可能数の差+駒の損得)→(駒の損得)とすると初手で1秒間に展開した局面の数が29倍になった。
0037デフォルトの名無しさん
NGNG着手可能数って評価に入れる意味あります?特に序盤で。
持ち駒を打てなくなったり、角道を止める手を指せなくなったりしません?
003810
NGNG端、角は加点する。半分ぐらい埋まると手を見つけてくれなくなったり、
4手読みだと置けない所に置いたりとバグ満載です。
>>36
>システムが自分の価値観
自分のだけでなくて、プロ騎士の棋風も選べると面白いかも。
羽生なら終盤でマジックって、丸山は受け中心で指してきたり。
>どうやったらいいのかさっぱりわからんが。
ここまで来ると人工知能とかに入って来そう。
>高速化検討中:評価関数を(着手可能数の差+駒の損得)→(駒の損得)とすると
>初手で1秒間に展開した局面の数が29倍になった。
難しくてわかんないス。でも、29倍ってとんでもない数字なんじゃ・・。
>着手可能数って評価に入れる意味あります?特に序盤で。
さあ?よーわからん。
>持ち駒を打てなくなったり、角道を止める手を指せなくなったりしません?
確かに着手可能数だけでやると持ち駒は打ちにくくなりました。
但し、同じ種類の駒が2つ以上あるとむしろ指した方が着手可能数が多くなるので全く指さなったり、駒コレクターになったりはしませんでした。
同様に自分とこの角道を止める手は打ちませんね。
代りに、次に取れそうな駒は全て取ったことにするようにしています。
これだと両取りはより高く評価されるのでいい感じです。
それと着手可能数の係数が他の係数と比べても極端に小さくはなってないので多少成りとも意味があるのかもしれないです。
0040デフォルトの名無しさん
NGNGそれで、皆さんに質問なのですが、長井歩さんの書かれてた「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. 」
です。
ご存知の方がいらっしゃったら、よろしくお願いします。
0041うさぴょんの育ての親
NGNGWebサイトは残念ながら知りませんが、df-pnアルゴリズムに関する論文で最も
詳しいものはコンピュータ将棋の進歩4に掲載されたものと同じものだったと
記憶しています。
…でも、元の論文をどこで見たのか記憶が曖昧(^^;
0042うさぴょんの育ての親
NGNGdf-pnアルゴリズムの詰将棋を解くプログラムへの応用
http://www.ipsj.or.jp/members//Journal/Jpn/4306/article020.html
情報処理学会の会員なら、中身も読めます(^^;
大学の図書館などなら、情報処理学会の論文誌のVol.43 No.06を探せば読めるかと
思いますが、この内容はそのままコンピュータ将棋の進歩4に載っています。
>自分のだけでなくて、プロ騎士の棋風も選べると面白いかも。
評価関数:=2*羽生+1*丸山
などと混合したり…。中途半端な棋風になりそう。
>ここまで来ると人工知能とかに入って来そう。
問題解決のための探索は既に人工知能の領域なんですけど。
>29倍ってとんでもない数字なんじゃ・・。
とんでもないです数字です。
如何に手を抜いてきたかが良く分かります。
0044デフォルトの名無しさん
NGNG004540
NGNG情報処理学会の会員だったら苦労しないんですよぅ。(;´д⊂
0046デフォルトの名無しさん
NGNG長井歩さんのマスター論文読まないといけないみたい。
コンピュータ将棋の進歩4に掲載されているプログラムリストだけだと難しいでつ・・・
004740
NGNG↑、失礼しました。
つい勢いで・・・
レス、ありがとうございます。
とりあえず、
http://www.ipsj.or.jp/members//Journal/Jpn/4306/article020.html
が「コンピュータ将棋の進歩4」に載っている事はわかるました。
しかし、この論文では、df-pnに関する説明が、「詳しくは文献を参照されたい」の一言で終わってしまっているんです(「4」の102ページ)
その参照するべき文献として、上に書いた英語の論文があげられていたので、その所在を聞きました。
0048うさぴょんの育ての親
NGNGその論文の所在は分からないんだけど、PowerPointのファイルが読めるなら、
http://www.cs.ualberta.ca/~games/go/notes/020717/GoMeeting2.ppt
は参考になるはず。
しかし、上記のPowerPointでも触れているのだが、背尾さんのアルゴリズムが
分かっていれば、df-pnのプログラムリストがあれば十分df-pnを理解可能だと
思うのだが…。
背尾さんのアルゴリズムがまだ分からないのなら、そちらから理解した方が早いと思う。
004940
NGNG( ⌒ ヽ PowerPointもありません。
∪ ノ
∪∪
それでは、脊尾さんのアルゴリズムの論文は見つかったので(私は脊尾のアルゴリズムを理解していません)うさぴょんさんの言う通り、こちらから調べてみる事にします。
http://www.csl.sony.co.jp/jsai/cdrom/articles/titles/a10-6-4.html
レス、ありがとうございました。
0050うさぴょんの育ての親
NGNG背尾さんのアルゴリズムに至るまでに理解しておくと良いことは全部書いてあるけど。
諦めて、コンピュータ将棋の進歩2を買うのがお勧め。
背尾さんの論文が収録されてます。
0051デフォルトの名無しさん
NGNG持ってなくても
http://www.microsoft.com/downloads/details.aspx?FamilyID=7c404e8e-5513-46c4-aa4f-058a84a37df1&DisplayLang=ja
こんなのとか
http://ja.openoffice.org/
とか、あるけどな。
005240
NGNG近いうちに、このアルゴリズムでプログラムを組んでみようと思います。
ありがとうございました。
0053 ◆R/rLuLKeEI
NGNGといっても高々5000局面/秒になっただけです。
しかし、評価方法が同じはずなのに結果がかなり違う。
どうやら、バグを作りこんでしまったらしい。難儀な…。
『コンピュータ将棋の進歩4』と合わせて検討中です。
詰め将棋では先手番は証明数最小、後手番は反証明数最小を選ぶのが最良のようですが、
指し将棋だとどちらの手番も証明数、反証明数ともに最小を選ぶのが良いような感じですが、
どうなんでしょうか?
0055デフォルトの名無しさん
NGNG先手から見れば
証明数=後手の可能な手の数
反証数=先手の可能な手の数
だよね。
終盤になって王手がかかるようになると可能な手の数が激減するから
結構有効に働きそうな気はするけど、序盤ではどうなのかな?
ttp://www.computer-shogi.org/protocol/
証明数=後手の可能な手の数
反証数=先手の可能な手の数
だよね。
後手にとっては先手を詰ませたいわけだから反証数最小の手を選びたいはず。逆に
先手にとっては後手に詰まされたくないから反証数最大の手を選びたいはず。つま
り、
:証明:反証
先手:最小:最大
後手:最大:最小
だよね(さっき書いてたことと違ってしまった)。終盤で無くともあわよくば詰ま
せたいはずだ。この探索を中盤でやるということは探索中に現れる全ての局面で
詰み探索をやるようなものというのは言いすぎかな…それが有効ならもう既に誰
かがやって成功してるはずだ。そうでないということはまだ誰もやってないとい
うのは考えにくいから既に誰かがやって結果が芳しくなかったに違いない。やは
り通常の探索と詰み探索は統合できないのかな。
0058デフォルトの名無しさん
NGNGもともと証明数は共謀数のAND/OR版。
指し将棋の場合は、共謀数で考えた方が良いかも。
あと、指し将棋の内部ノードに詰め探索を入れるのもあるよ。
あまり深いところではやらないようだけど。
指し将棋でも勝ち(true)、負け(false)としてAND/OR木とみなすのは無理ですか?
006058
NGNG詰め将棋は手を制限することで深く読めるから、
AND/OR木探索で(30手を超えるような)勝ちを発見できることがある。
でも、指し将棋はAND/OR木探索しても手が多くて深く読めず
勝ち負けは普通わからないので、αβ法を基本とした局面評価による探索をするんだと思う。
ありがとう、諦めます。
0062デフォルトの名無しさん
NGNGで何を勉強したらいいのかさぱーり分からないので、これはやっとけゴルァ!見たいなのがありましたら教えてください。
とりあえず今C++勉強してますにゃ♪
昨日「Hello world」が出せるようになりますた(感涙(意味はよく分かってないのですが・・・
まだ相当時間がかかりそうですが、気長にやっていこうと思います。
またちょくちょく質問に来ますのでよろしくです。
打倒羽生名人目指してがんばるぞぉ!えいやぁ!!
0063ハブ夫
NGNGただ動けばいいってだけならvbとかで楽してやるのが良いんだろうけど、
一応最強と言う夢をを目指すならc++が1番高い候補になるはず。
0064デフォルトの名無しさん
NGNGソース非公開、インターフェース公開、最初最弱可、言語不問。
1.序盤40手まで担当者:やります
2.中盤41手目から80手まで担当者
3.終盤一般担当者
4.指し手、盤面経過をファイルとして共有ディレクトリに書き出して渡す。
0065デフォルトの名無しさん
NGNGif ( 振飛車 )▲76歩
if ( 横歩取り ) ▲26歩
0066デフォルトの名無しさん
NGNG後手:級位者
後手の持駒:なし
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 まで
0067デフォルトの名無しさん
NGNGif ( (rand() & 7) == 7 )
{
printf("詰みました\n");
適当に王手(); // ノータイム
}
else
{
printf("せんてしょうせい\n");
乱数で指す(); // 30秒考える
}
0068デフォルトの名無しさん
NGNGそういうのはGUIとは言わねw
0069デフォルトの名無しさん
NGNG○ System.out.print("詰みますた\n");
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG↑スヌーピー
それで、そろそろ将棋盤を作っていこうと思っているのですが、どのように書いたらいいのですかね?
#include "windows.h" というのを使ったら、鬼のようにエラーが出てしまいますた。
って言うより使い方がよく分からないです(大涙
いろいろ調べているのですが、サパーリ分からないです。
分かりやすい書籍、あるいは他の方法があればご教授ください★彡。
0072デフォルトの名無しさん
NGNGまずは下を見てわ?
うさぴょん
将棋プログラムの作り方
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
0073ハブ夫
NGNGhttp://game.2ch.net/test/read.cgi/bgame/1064575087/l50
0074デフォルトの名無しさん
NGNG0075ハブ夫
NGNG0076ハブ夫
NGNGもともと将棋ゲームにグラフィックなんか求められてないし、
そこに拘ってもあまり意味が無い。そんなところ誰も評価しないだろう。
やはり、思考ルーチンの強さ、が1番求められてる部分だと思う。
ここが1番難しいし、1番効率良くしなければいけない部分だ。
だから、グラフィック部分は適当に、もっと言えば自分から見て
見やすい程度に作っておいて
後は思考ルーチン作成に走るのが良いと思う。
0077 ◆R/rLuLKeEI
NGNG将棋を指すプログラムを目指しているという前提で、
作り始めにグラフィック部分をあまりに頑張ってしまうといつまでたっても完成しないどころか挫折してしまう(最初の試作版はそれで失敗した)。
しかし最低限なグラフィックは求められているとは思っている。
思ってはいるが、奇麗なGUIとかではなくCUIで十分用が足りる。
GUIに拘るのは後回しで良い。
評価してくれる人はいるだろうが肝心の思考ルーチンが弱くては何にもならない。
そういう私のプログラムは次の1手サーバーとして働くコンソールアプリです。
正確にはデバッグ用にモニタ表示をさせていて、GUI部分は出来合いのものを利用しています。
つまり、こんな構成:
sikou.exe⇔CSA将棋+sikou.dll⇔sikou.exe
最近CSA TCP/IP通信プロトコルが公開されたので、ローカルホストで動く審判サーバーが欲しくなった。
sikou.exe⇔自前の中継クライアント⇔自前の審判サーバー⇔自前の中継クライアント⇔sikou.exe
ほとんど自己満足の世界です。
0078デフォルトの名無しさん
NGNGリンク先一通り回ってきますた。
英語のサイトは??でしたがw、とても参考になりました(感謝
>>76
グラフィック部分はとりあえず適当なのを作りたいのですが、どうもうまくいかないです。
いろいろ調べたのですが、画像を表示したり、窓を作ったりする関数が私のレベルでは、難解なようで。。
で、>>72のリンク先のTM将棋のサイトから将棋盤をダウンロードしてきたのですが、
将棋盤をそのまま流用して、思考ルーチンだけ作成するってのは可能ですかね?
当面の間はそうしていこうかなと思ってるのですが。。。
>>77
CUIというのはコマンドプロンプトのことでしょうか?
サーバーとかよく分からないので、ローカルで動くようにしたいです。
えっと、そういうわけで昨日アルゴリズムの入門書買ってきますた。
評価関数とか作るのはまだ大分先になりそうですがこつこつやっていこうと思います。
これからも漏れを応援してくださいね。誰もしてないでつか(大涙
↑スヌーピー
可能です。
TM将棋と違ってソースコードは付属していないが
http://www2.ttcn.ne.jp/~tsuma/download.htm
の自前で思考ルーチンを作成する他に使い道のないCSA将棋もどうぞ。
>>78
CUIとは概ねコマンドプロンプトのことです。
サーバー/クライアント方式ですが、当然ながらローカルで動いています。
応援してまっせ!
0080デフォルトの名無しさん
NGNG市販ソフト(柿木将棋とか)のGUIで遊べるよ。
市販ソフトのほうを人vs通信にするわけ。
0081デフォルトの名無しさん
NGNGそれってマシンが2台必要ってこと?
008264
NGNGRS232でなくLAN仕様なら1台でOKのよう。試しに柿木将棋を2枚立ち上げて
TCP/IPで先手7、後手7で対戦できました。相手が思考している間、片方は
TCP接続待ちになっています。スゴクおもしろい。 (127.0.0.1使用)
RSでも1台で出来る方法がどこかの掲示板でみたような。
008382
NGNG0084 ◆R/rLuLKeEI
NGNGCOMポートが2つあるなら、代理将棋通信プログラム「木偶の坊」(でくのぼう)Version 0.67ヘルプファイルの「初めて使用される方へ」の「1台のパソコンで対戦させるには?
」を読んでみては?
COMポートが1つしかないなら、仮想COMポートを導入するか、COMポート増設はどう?
ところで柿木将棋のTCP通信プロトコル仕様って公開されてるの?
CSA将棋(LAN対応仮バージョン)が出来たらしい。
早速ダウンロードしました。
おおっ、擬似サーバーもある!感激!
008582
NGNG[実施要領]が出てないんでわからん。
でも「きのあ掲示板」にこんなん投稿されてあった。
>コンピュータ将棋選手権の採用が来年、来来年が試用、3年後本格運用
0088デフォルトの名無しさん
NGNGレスサンクス!
早速CSA将棋落としてきました。
これはSIKOU.DLLの所で思考ルーチン作成するのですよね?
dllでいろいろ検索したのですが、訳分かりませんでしたw
今更ですが、将棋のプログラムをするのは少し早すぎるのに気づきました。
そういう訳で、今日からオセロのアルゴリズムで練習していこうと思います。
>>30で紹介されていた本が手に入りましたので(最後の一冊だった)これを使って
勉強していこうと思います。
かなり詳しく書かれてあるので漏れでも何とかなりそうな気が・・・
今までレス下さった方、本当にありがとうございました。
またこっちに帰って来たときには、よろしくお願いします。
0089デフォルトの名無しさん
NGNG簡単な詰め将棋部分に取り組んでいるんですが、
王手の生成は、ある局面で生成できる手を片っ端から
「手を進める→王手を確認→手を戻す」作業を繰り返して王手が掛かる手だけを
残していく方法が簡単だとは思いますが、実際のところどうなんでしょうか?
今は、手を進めないで王手を調べようと頑張って、
空き王手調べるところまでこぎつけましたが頭がパンクしそうです。
>うさぴょんの育ての親さん、
将棋プログラムの作り方、参考にさせて頂いています。
>これはSIKOU.DLLの所で思考ルーチン作成するのですよね?
はい、SIKOU.DLLの所で思考ルーチン作成するのです。
付属のSIKOU.DLLを変更無しでコンパイル出来る環境が整ったら後は試行錯誤です。
dllの仕組みがわからなくても摩訶不思議な機構でdllにある関数が適切に呼び出されることさえわかればただのC/C++プログラミングですよ。
main関数がどうやってOSから呼び出されるか知らなくったって"Hello World!"が書けるのと大差ないと思う。
0091質問です(低レベルな)
NGNGhttp://plaza15.mbn.or.jp/~yss/book.html#SEC4
本文中の「ハッシュテーブル」によると、山下さんはハッシュコードとして64ビットの値をつかっているようです。
どうやってハッシュテーブルに64BITの数字を使っているのでしょうか?
(私は、64BITのハッシュコードを使用する方法として、2^64のメモリーを用意する方法しか知りません)
山下さんがどのような方法をもちいているのか知っている方がいたら教えていただけないでしょうか?
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG英語だけど。
http://www.seanet.com/~brucemo/topics/zobrist.htm
0094デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1024024666/269-
>王手の生成は、ある局面で生成できる手を片っ端から
>「手を進める→王手を確認→手を戻す」作業を繰り返して王手が掛かる手だけを
>残していく方法が簡単だとは思いますが、実際のところどうなんでしょうか?
私もそれが簡単で確実だと思います。
手を進めないで王手を調べるとしたら…
・駒毎に個別に処理を書き分けるのはやめて
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。
という前処理をしておいてからというのはどうでしょう?
攻め側、守り側どちらも使えそうですが、詰将棋はまだ考えていないんで役に立つデータかわかりません。
一応、私のプログラムが持っている情報です。
0096デフォルトの名無しさん
NGNGありがとうございます。
>・駒毎に個別に処理を書き分けるのはやめて
見事に駒毎に処理して -いると思い- ます(^^;
一応、手を進めないで調べる手順は
王手がかかる位置(玉の周りなど)に利いている味方の駒をチェックして
その駒が、その位置に移動した時に王手がかけれるかどうかというものです。
データに関しては大雑把?に考えていて
駒毎に利き配列は用意してますが、利きがあるところにはその駒の座標を書き込んでいます。
(そこに利きがあるという事がわかればいいという程度です。工夫のしどころかもしれませんね。)
ビット処理は、盤上の空き、駒の先手/後手の判別ぐらいにしか使ってないです...
もう少し勉強します(^^;
実は、駒毎に分けないように書きなおし始めたところで、まだ大部分が前のまま
です。
手を進めないで調べる手順(案(例:銀))
銀利き、銀-王手、成銀-王手パターンを用意する
111 101 010
0銀0 0玉0 1玉1
101 111 111
今、玉と銀が
銀
玉
であったとする。銀&&銀-王手、銀&&成銀-王手を取る。すると
000 000
0銀0 0成0
0玉0 1玉1
000 000
となって、銀で王手にするには成って玉の横に付けなければならないことが判
る。
駒-王手パターンは駒の利きパターンの上下反転。
あと「そこには味方の駒がありますよパターン」も作ってあれば
銀&&銀-王手&&(!味方駒)
銀&&成銀-王手&&(!味方駒)
が真となるところが王手になりうるところです。
009991
NGNGゾブリストキーなんて知りませんでした。
けれど、私が>>91で教えていただきたかったのはそういう事ではなくて……
ハッシュ法って、一般的にはある要素Aを特定の値aで割り、その余りをハッシュテーブルに登録して、探索etcの所要時間をO(1)にするアルゴリズムですよね。
ですが、ハッシュコードに64bit数を使うと、それが出来なくなります(よね?)
だから、長いハッシュコードを使用する方法にはどんな物があるのか、知りたかったんです。
どんな方法があるのでしょうか?
0100デフォルトの名無しさん
NGNGやはり>>92の本を読むのがいいと思われ。
http://www.amazon.co.jp/exec/obidos/ASIN/4781907237/
0101うさぴょんの育ての親
NGNG出てきたものを全部しまうのは諦めて、例えば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;
}
こんな感じ。
0102うさぴょんの育ての親
NGNGvoid Regist(HashEntry x)
{
HashTable[x.HashCode & 0xffff]=x;
}
0103うさぴょんの育ての親
NGNGしれないし、よく知られているように、ある適当な値を加算したりして別の
エントリにしまうかもしれないし、リスト構造のようにして全部保持するかも
知れない。
将棋の場合、精度より速度が大切なので、あんまり複雑なことはしてないと思う。
うさぴょんのハッシュのソースにもテクニックがいくつも入っているので、
C++読めるんだったら読めばいいと思う。
TsumeHashとHash,Hash2それぞれ実装が目的毎に微妙に違っている。
010491
NGNG丁寧な解説ありがとうございます。
私はどうやら考えすぎだったみたいですね(苦笑
とりあえず、16(変わるかも)ビットでハッシュした後、重複があれば二分木で分けていく、という方法を取る事にしました。
(しっかし調べれば調べるほど疑問点が出てくるなぁ……
0105デフォルトの名無しさん
NGNGttp://www.ipsj.or.jp/members/SIGNotes/Jpn/16/2001/079/article004.html
どうしてほしいというわけでもないので無視して頂けたら幸いです。
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)
ま、サンプルだからしゃぁないかな。
解決しました。
サンプルコードの読み違いでした。
CsaCommnunicationクラスのlogin、logoutメソッドは審判サーバーからの応答を待ってくれないんですね。
サーバーからの応答はCsaRecieveインターフェスの唯一のメソッドで通知されるらしい。
まだ、サンプルコードを読んでいる最中なんで間違ったこと書いてるかも…。
すんません。
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG0112うさぴょんの育ての親
NGNGデマです。
>>111
例年、11月の末ごろになると発表されていたような…。
もうしばらく待ちましょう。
「うさぴょんの育ての親さん達は東京大学卒業後に結成されたらしい」という噂もデマですか?
自分の将棋プログラムはここ3週間程、全然進んでない。
構造がごちゃごちゃし始めていて、収拾がつかなくなりそうで作り直そうかと思案中。
0114うさぴょんの育ての親
NGNG大学卒業して社会人になってからなのは確かですが、東大卒はいませんです。
来る者はあんまり拒まない(<かなりウソ)ので、この先東大卒のメンバーが
増える可能性はありますが。
> 構造がごちゃごちゃし始めていて、収拾がつかなくなりそうで作り直そうかと思案中。
作り直さないで、無理して最後まで作ってしまうのもまた一つの道。
最後まで一回作っちゃうと、二回目はどうすればいいのか、見通しの良い状態で
作りはじめられるし。
どこらへんまで作り込んだら最後って言えるのだろう…それは私が決めることですね。
4回目の中途半端なプログラムを完成させるにしても、5回目に取り組むにしても、一番これを改善したいというものは決まっている。
結構、大きな修正になるのと他にもたくさんの欲があって、いっそのこと…となってしまう。
でも、一番の問題は十分に考察する時間的ゆとりが作れないことだ。
今週末は休めますように、倒れませんように。
0116デフォルトの名無しさん
NGNG東大6にガチで勝ったら最後と認めてあげますが
0117 ◆R/rLuLKeEI
NGNGそれを読んで挫折しました。
今のプログラムは5度目の挑戦までもう少し寝かせておきます。
皆さん、ありがとう。
そして、さようなら。
0118デフォルトの名無しさん
NGNGマジで。
0119デフォルトの名無しさん
NGNG0120 ◆R/rLuLKeEI
NGNGEclipse導入記念で5回目に挑戦します。
風呂に入って寝るんで、続きは明日以降気が向いたら。
0121デフォルトの名無しさん
NGNG2〜3級レベルでいいから柔軟な人間らしい
指し方をするものをつくるとか、
接待将棋っぽく指せるようにするほうが
需要あるかもね。(ものすごく難しそうだけど)
東大や激指みたいにアマ4段レベル以上のソフトつくっても、
ごく一部の将棋オタしか対等に勝負できないでしょ。
0122デフォルトの名無しさん
NGNG良く解らんが、やる気が出てもらって嬉しいです。
自分は、118−119ですが、
自分も頑張ります。
お互い頑張りましょう。
0123デフォルトの名無しさん
NGNGつーか頼むから構想ぐらい持ってくれ
0124121
NGNG構想としては、
たとえば序盤ならば、ガチガチに定跡通りに指すのではなくて、24の24万局集の
データを統計的に処理して候補手を数個に絞って、それらの手を優先的に深く読む。
(もし絞った候補手を読んだ結果、評価関数がすべてマイナスとかだったら
改めて他の手を読み直す。)
また、Shotestという将棋ソフトが使っているスーパーソマという
手法は特に中盤の駒がぶつかり合う局面で有効かもしれない。
(日本の将棋ソフトはこの手法を取り入れてないらしい)
あとは、将棋の格言や手筋をプログラムに取り入れるという姿勢も強化する。
(たとえば持ち駒に歩が3つあったら、端攻めできないかまず読むとか。
プログラムにどう組み込むかめちゃ難しいが。)
終盤は、コンピュータが即詰の場面でも、ノータイムで指さない。長手数の場合、
詰まし方を間違えることもあるようにする。即詰みを狙うより必至をかけて勝つ筋の
評価を高くする。
もちろんランダム的要素や学習機能を取り入れて、同じ手順で負けないようにするなど。
構想は他にもありますが、肝心の将棋ソフトは最近作ろうと始めたばかりです。
社会人にもなると趣味でプログラムする余裕がなかなかないです…。
しかも仕事やる業務用プログラムより、将棋プログラムを組むほうが数段難しいっす。
0125デフォルトの名無しさん
NGNG24の棋譜を大量に取り込んでパターンマッチングで似た局面があるほど
高得点、みたない評価関数で3手先まで読むのとかでどうよ?
0126デフォルトの名無しさん
NGNGしてくれってことじゃない?
0127デフォルトの名無しさん
NGNGhttp://book.2ch.net/test/read.cgi/bizplus/1070372326/l50
0128デフォルトの名無しさん
NGNG最初なんでまずは短手数5手詰めくらい解ければいいやくらいのレベルで
作成してるんですけど, とりあえずAND/OR木の深さ優先探索で
やってみとうとおもってるんですが木のノードにはどんな情報をもたせたらいいんですか?
その場の局面の情報も持たせないといけないですよね?ノードごとの局面を
構造体のメンバの中に配列でも作って毎回記憶させてるんですか?
初心者なのでなにとぞお願いしますm(__)m
0129デフォルトの名無しさん
NGNGその前に日本語をどうにかした方が・・・・・・
0130デフォルトの名無しさん
NGNG局面は記憶しなくてもいいです。
文献当たればそのあたりの必要な情報はなんでも手に入るはずですよ。
0131うさぴょんの育ての親
NGNGhttp://www.computer-shogi.org/wcsc14/
0132デフォルトの名無しさん
NGNG実際には、不都合があったのでやっぱり止めます、、、
とか言うことは可能なのですか?
申し込み金額の1万円を自分が損するだけですかね?
0133デフォルトの名無しさん
NGNGでしょうね。
なんせPC環境を担いでいくんだから、都合が悪くなるなんて事よくあるでしょうし。
0134うさぴょんの育ての親
NGNG前日までに不参加の連絡をCSAにすれば、1万円損するだけです。
連絡しないで不参加だと、以後、参加を断られることがあります。
0135デフォルトの名無しさん
NGNGプログラムの方が強くなったりしてるんですかね?
この間アマチュアの大会で柿木、AI、東大(?)の連合チームが優勝したじゃないですか。
どうなんでしょう?
0136デフォルトの名無しさん
NGNGアフォですか?
0137デフォルトの名無しさん
NGNGそうらしいですよ。
すでに大抵のプログラマーよりは強くなってしまっているらしいですね。
0138デフォルトの名無しさん
NGNG将棋倒しのゲームでもかまいませんか?
0139デフォルトの名無しさん
NGNGマジレスするとダメです
0140 ◆R/rLuLKeEI
NGNG木のノードに局面(と利きの表など)を記憶するとすぐに記憶領域が溢れかえりま
す。
しばらく寝かしている4度目のプログラムはまさにそれで、同一マシン上で戦わせ
てみたところ中盤で物理メモリ384MBと仮想メモリ???MBを食い尽くしてダウンし
てしまいました。
当面の課題は木のノードから局面の情報を取り除くことです(面倒臭いなぁ)。
Googleで探すとXMLで棋譜や定跡の表現をしているのがあるようですね。
入れ子構造が自然にゲーム木の表現になってるのでしょうかね。
これは来年末にでも考えます。多分。
0141デフォルトの名無しさん
NGNG将棋や囲碁のような盤面の大きなゲームでは普通は局面のハッシュ値(96bit)と深さと結果だけを保存します
詰将棋なら王手と逃げる手も保存できます
局面は一つだけ管理して,手を指す時に更新してその手の探索が終わったら元に戻します
0142 ◆R/rLuLKeEI
NGNG将棋や囲碁のような盤面の大きなゲームで普通でないことをしたらどうなるか?
調べたり人に聞くよりやってみよう!とうわけで実験してみました。
ハッシュは、一度に色々な修正をやると訳が分からなくなりそうなので後回し。
局面のハッシュ値が96bitでいいという理由も後で考えます。
ノードに入れるのは、棋譜情報(深さと手、手番)と結果(評価値と確定値/推定値
のフラグ)くらいですかね。
管理する局面は二つ、根と探索中の局面だけにするつもり。
根の局面は探索中の局面から手を逆に辿れば復元できるので不要ですが、ちょっ
と実験したいことがあるので。
0143デフォルトの名無しさん
NGNG基本のプログラムを準備して、そのプログラム同士を戦わせる。一瞬で終わるだろう
そしてその勝負で負けたほうの理由を、同じくプログラムで調べて克服する・・・�@
そして新しく書き換えたプログラム同士で再び戦わせる・・・・
これの繰り返し
コンピューターは処理が早いから、全部を自動で行えば1日で何百局と打てる
少しずつ強くなっていくとしても、短時間で恐ろしく成長する
問題は・・誰でも気づく�@の製作
敗着を調べるまでは至っても、その後のプログラムを作るプログラムをどうするか・・・
その一手を打った経緯を調べても、どう書き換えるか
0144デフォルトの名無しさん
NGNG全ての1手に対して、その一手をどういう理由でプログラムが選んだかを保存させておく
後から敗着の部分を選んで、どういう経緯でそれを選んだかを見て克服する
みんながやってる事だよな・・・・
0145デフォルトの名無しさん
NGNG強くもなるけど弱くもなってしまう全自動プログラム書き換えプログラムのほうがいいか・・・�@
それで書き換えたのと元のを何度か戦わせて、優れている方を採用すると
元より弱くなったら破棄
また元を書き換える
もし強くなったらそれを元のプログラムとして同じ作業をする
何億、何兆回をこなせば絶対かなり強くなるはず
問題は・・・誰でも気づく�@の製作法か・・・・
0146デフォルトの名無しさん
NGNGそれほど多くは必要ないんじゃないかな。
(学習した手が本当に正しいのかはかなり吟味が必要だと思う。)
あとは中盤と定跡選択と終盤の正確性。
0147デフォルトの名無しさん
NGNGはいないだろう。と、思う漏れ;
SLGでもなんでも基本は将棋、
将棋プログラム=AI(人工知能)プログラム
遥かなる未知な思考。
生涯だれもそのプログラムを完成させること
は無いと思うが、人間である以上「人間」の
思考に近い最強AIプログラムを完成できると思う
それができた奴こそ最強プログラマーではないか?
0148デフォルトの名無しさん
NGNGプログラムをちょっとずつ改良するプログラムはどう?
それを無限にやって、強くなった時だけ採用して、それをベースに進めるようにすれば、いつかはかなり強くなると思うけど
0149デフォルトの名無しさん
NGNG問題は何百局ではたりないことかな
でも夢のある話です
0150デフォルトの名無しさん
NGNGそこでネットワーク学習ですよ。
0151デフォルトの名無しさん
NGNGコンピューターなら1年で何億、何兆局も出来ないかな?
ネットワークが最強か
人間が作る以上、そのプログラムの強さには限界がある
でも人間の意志を超えた偶然の産物なら可能性は無限だろう
例え1億回に一度しか、今を上回るプログラムが作り出せなくなったプログラムでも、先には進める
しかもこれはコンピューターが最も得意な要素だろうし
人間は理や発想
コンピューターはとにかく数
問題はランダムにプログラムを改造するプログラムだけどね
しかもパターンは無限におよぶという
ほんとは相性の問題もあるんだろうけどね
0152デフォルトの名無しさん
NGNGサイコロを10億個振るようなプログラム
いつかは奇跡的に5、995、534、244とかも出るだろう(今のPCじゃ何億年かかるかもしれないけど)
とにかく全ての性能の99%以上の結果を出したような偶然と奇跡の結果というか
それまで全自動で動かし続ける
その間に、サイコロを1億個で済むようなプログラムをひたすら考える
こうやって、いかに最高得点に近いパーセンテージのスコアを出せるかを追求していくしかない
100%は諦めるにしても、99,9999%までいけば十分に神のレベルだろうと思うし
まあ、その改造プログラムの性能によってAさんの90%よりBさんの80%が強いような結果になるかもしれないけど
0153いなむらきよし
NGNG0154デフォルトの名無しさん
NGNG例えば、駒をちょっと改造して、歩を2マス進めるようにするとか、
盤面のマスを一回り大きくして、10×10マスにするとか、すると、
とたんに弱くなってしまうのでしょうか?
0155デフォルトの名無しさん
NGNG人間のような大局観ないし、定跡のデータが使えないから。
終盤の強さは今と変わらない。
0156デフォルトの名無しさん
NGNG序盤感覚の裏付けのない定跡は張り子の虎。
今のソフトはデータベースとしてもまだまだで、
序盤の感覚も全くない。はっきり言って序中盤は糞。
おまいらなんとかしろ。
0157デフォルトの名無しさん
NGNGなるほど。
それで、その終盤と言うのは要するに詰めルーチンのことなのですか?
詰めのちょっと前の、終盤とかはどうなんですかね?
良く解らないですが、例えば、1手スキとかそう言う言葉があったりするじゃないですか。
これは、中盤に含まれる概念なのでしょうか?
0158デフォルトの名無しさん
NGNG手すきは終盤の話。
終盤は必死まで実装済み。
手すきの計算も時間の問題。
ただ、戦略や大局観や構想はだめだめ。
萌芽も見られない。
0159デフォルトの名無しさん
NGNG必死ってのは、要するに詰め将棋状態なんですよね。
こっちがミスらなければ絶対に相手が詰む状態まで持っていけると言う状態で
つまり、人間が詰め将棋をやっているような状態に相当するわけですよね。
手すきってのはつまり、その1つ前の段階ですよね。
相手がミスって、こっちがミスらなければ(又は良い手を指せば)、
必死状態に持っていけるような段階ですよね。
なるほど。
0160デフォルトの名無しさん
NGNGなんか微妙にズレているかも…。
必至とゆーのは、自玉が即詰みでなければ次の手番で
相手玉を即詰みもっていける状態のことで
○手スキというのは、たとえば2手スキならば、
攻めを2手放置すると詰んでしまう状態のことだと思います。
0161デフォルトの名無しさん
NGNGありがとうございます。
0162デフォルトの名無しさん
NGNG片方だけでなくて、お互いの状況が関係してるわけですね。
解りました。
0163デフォルトの名無しさん
NGNGハッシュ値の求め方は、
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ビットの乱数を入れておいて
0164デフォルトの名無しさん
NGNGlong get_hash()
{
long hash = 0;
for(全ての枡)
if(駒があれば)
hash ^= table[駒][枡];
return hash;
}
で、駒に当たる度にあらかじめ作っておいた乱数でXOR演算をしていく、ってので良いですか?
0165デフォルトの名無しさん
NGNGそれでいいと思われ。
後は64bitにしてやれば完璧かと。
0166 ◆R/rLuLKeEI
NGNG0167デフォルトの名無しさん
NGNGありがとうございます
でも、>>166さんご指摘の通り、持ち駒は?と気になったんですが・・・
これはどうするんでしょう、、
取りあえず、持ち駒用のハッシュ表を作るか、
同じように持ち駒もXOR演算する、のどちらかになるんでしょうが。
この辺は他のプログラムを参考にしてみます。
0168デフォルトの名無しさん
NGNG盤面が同じで持ち駒だけ違う局面があればすぐにわかるので便利たぬ
0169デフォルトの名無しさん
NGNG>盤面が同じで持ち駒だけ違う局面
実戦でそんな局面あるのか?
持ち駒が同じで盤面が違う局面はあると思うが。
0170デフォルトの名無しさん
NGNG思いっきりあるだろ。水平線効果を知らんのか?
0171デフォルトの名無しさん
NGNG歩を無駄に成り捨てては打ちなおすプログラムみたことない?
0172デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1072883528/
海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。
必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
0173デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG申し込み期限 2004年1月15日
0176デフォルトの名無しさん
NGNGあの【脱衣将棋】が帰ってきた!
0177デフォルトの名無しさん
NGNG指し手を絞り込んだときなどで他にいい手がなかったから。
駒をとる手、成る手、逃げる手などを中心に生成してるとパス手を入れないと読みがおかしくなる。
0178デフォルトの名無しさん
NGNG他にもパス手を読んでおくといろいろおいしことがある。
詳しくは「コンピュータ将棋の進歩」とかを読むべし。
0179デフォルトの名無しさん
NGNGttp://gps.tanaka.ecc.u-tokyo.ac.jp/osl/pukiwiki.php?OpenShogiLib
OpenShogiLibとは
主に研究目的に将棋プログラミングをする人のために提供する高速将棋ライブラリです。
BSD風のライセンスを採用しているので、商用ソフトに使うこともできます。
0180 ◆R/rLuLKeEI
NGNGずーっと在庫切れなんですけど…
http://www.amazon.co.jp/exec/obidos/ASIN/432002799X/249-5731267-8887519
買っときゃ良かった。
0181うさぴょんの育ての親
NGNG2,3,4を持ってれば十分。
0182ハブ夫
NGNGよっしゃ、それは、過去の積み重ねに頼らずに
自己流でやりなさいと言う、神のお告げでありますよ。
0183 ◆R/rLuLKeEI
NGNGコードはすべて自己流ですが、基本的な戦略は典型的なものの組み合わせになってしまう予定です。
今、思考部分は後にしてUIをいじくってます。
まあ、OOPの自由研究を兼ねてがんばってみます。
0184うさぴょんの育ての親
NGNG>>183
『過去の積み重ね』をある程度丁寧に実装すれば、「うさぴょん」程度の強さの
ものは作れます(笑)。
しかし、それだけでは「うさぴょん」を超えるのは…(^^;
うさぴょんよりも強いかも知れないプログラムの一つとして、きのあ将棋の
「きのあ」さんなんかがきのあさんの自己申告に拠るとかなーり自己流で
プログラムを作っています。
が、話を実際に聞いてみると、基本的なツボは押さえてます。
それから、明らかにうさぴょんよりも格上の成績を例年残している、
磯部将棋もなかなか独特な手法を使っているようです。
でも、やっぱり基本的な骨格は『過去の積み重ね』の上にあります。
何だかまとまりのない話になってしまいましたが、
せっかく使える『過去の積み重ね』があるんだから、使えばいいんじゃないかなーと。
それから、一度は大会に出てきて、強豪の工夫の自慢話?を聞いてみるのも、
強いプログラムを作る上での近道かなーと思います。
0185 ◆R/rLuLKeEI
NGNG自分の過去の積み重ねはもちろん他人のもせいぜい使います。
インターネットでただで辿り着ける所は一通り回ってアイデアを集めて練っているところです。
GWはお客さんの工場が止まる絶好のシステム切り替えの時期なんで難しいな。
0186ハブ夫
NGNGはい。ありがとうございます。
0187ハブ夫
NGNG移動できる場所がなくなるから、絶対にならなければいけないと言うルールが
存在するのでしょうか?
もちろんこの場合はなった方が有利に決まってますが、
ルールとして強制的に成らないと駄目っていうのがあるのでしょうか?
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190ハブ夫
NGNGしかしながら、宿にまともな分厚い碁盤・将棋盤もあったにもかかわらず、全く進展無し。
地方の本屋に残ってないかと思ってたのに本屋が見つからなかった。
まあいいや。
0192ハブ夫
NGNG0194ハブ夫
NGNG良かったですね。
0195 ◆R/rLuLKeEI
NGNGようやくGUI版簡易表示機能が一段落したんで明日から局面の着手可能な手を列挙する部分に取り掛かる予定。
今日はもう寝る。
0196 ◆R/rLuLKeEI
NGNGハッシュとリストで全局面を覚えていたらSSS法のようにメモリ不足になりません?
0197うさぴょんの育ての親
NGNGなります(w
なので、ハッシュだけ使って、ハッシュ上でぶつかったら新しい局面で上書き
してしまうのが普通のやり方です。凝ったことを考えるなら、より重要な局面が
ハッシュに残るようにするとなお良いでしょう。
ちなみに、『局面表』はHash tableの日本語訳です。
0198 ◆R/rLuLKeEI
NGNGエントリの衝突時にどちらを選ぶかは将来その局面を再訪する可能性の高い方とか?
コンピュータ将棋の進歩2〜4に何かヒントが書いてあったような気がする
0199うさぴょんの育ての親
NGNGあぅ、自分ですごい間違い書いているのに気が付いて訂正しにきたけど既に突っ込まれてる(--;
そうです、Transposition Tableの日本語訳が局面表で、Transposition Tableの
実装は、通常、単なるHash Tableです。
上書きの話だけど、
再訪する可能性の高い方という考え方もあるけど、結果を得るのに時間がかかる方
(つまり、より探索ツリーの根に近い方、末端から遠い方)という考え方もある。
それから、十分にテーブルが大きければ、衝突回数なんてたかが知れているので
無視するというのもありでしょう。
0200 ◆R/rLuLKeEI
NGNGほとんど衝突がないなら局面表の初期値を定跡で埋めておくのはありかな。
ある局面Aが定跡内なら最善手は局面表内にあるはず。
なければ定跡ファイルを検索。
定跡ファイルになければ通常の探索へ移行。
ある局面Aが定跡外なら通常の探索。
途中で局面表に残った定跡に戻れるかもしれない。
0201うさぴょんの育ての親
NGNG面白いアイデアです。
でも、実際に考えてみると、相手が定跡を外した(指し手の前後を間違えた)
時に、読みで咎めることが出来るはずなのに定跡に戻す手順を選びそうで
ちょっとイヤかも。
0202ハブ夫
NGNG自分の棋力ではこの前、
序盤を定石どおりに戦って、後半ひたすら守りに徹したら千日手になって終わったのが
一番いい成績ですね。
つまり、それ以外では全部自分が負けてますね。
まあ、自分は激弱なんですが、
他のソフトと比べてどれくらいなんですかね?
やっぱり、最強クラスの東大とかとは全然次元が違ったりするのですか?
もう、話にならないくらいの差があるものですかね?
例えば、東大が100としたらうさぴょんは80とかそれくらいは行きますかね?
確か、以前の成績とかではたまには
うさぴょんの方が勝てるような話もあった気がしたんですが、、。
0203ハブ夫
NGNG最近ダウンロードして、
楽しませてもらってます。
ありがとうございます。
0204うさぴょんの育ての親
NGNG東大を100としたら、っていう質問には答えるのが難しいですね(^^;
じゃぁ0は何?とかいう感じで(^^;
24のRで言うと、東大は最高2200くらいらしいので、うさぴょんの最高が
1550なので、東大を100とするとうさぴょんが70くらいでしょうか。
ちなみに、Rで400の差があったら絶対に勝てないくらいの差です(w
次元が違うと言ってもいいかも知れません。
世間向けの無難な答えとしては、大会版の東大を4.5段としたら、
大会版のうさぴょんが2段くらいですが、これは普通にやったらまず勝てない
というくらいの差です。
でも、この間の大会ではうさぴょんがまぐれとはいえYSSに勝ったわけで、
絶対に勝てない差ではなく、多分50000回に1回くらいは勝てるのでしょう(w
>>204
レーティングと勝率の関係がよくわからん。
http://www2.saganet.ne.jp/a-sim/mhp0726.html
より
レーティング200点差=1段差=勝率半減 (*)
とすると、うさぴょんの東大に対する勝率は
0.5^((2200-1550)/200+1)≒0.05256。
うさぴょんは20回に1回は東大に勝つ?!何故に?
まあ、24のレーティングの解説には勝率については何も触れられていないが…。
前提(*)が間違えてんのかな。
>>201
十分な時間を掛けて平手から通常の探索をした結果を定跡集と称して対局開始前に
ロードしておくのはずるいかな?どうなんでしょ。
0206デフォルトの名無しさん
NGNG20回やれば1回ぐらいは勝つのでは?
0207白砂青松 ◆HakusaRWQc
NGNG完全探索に近い探索をして定跡外しの補完をする、という意図ですよね。
その場で読むくらいだったら前もって読んどいてやる、みたいな。
別にズルくないと思いますよ。
どれくらい「役に立つ」かは判りませんけど……。
>>206
うさ親さんからの開発者としてのコメントの方が信用できるとは思いますが、
将棋を指しているものからすると、うさぴょんが20回に1回勝つ、というのは
難しい気がします。
人間でもそうですけど、格下が格上に勝つには、格下の出来がよくて格上の出来が
悪くないと無理ですよね。この「出来」にはポカやミスも当然含まれます。戦形の
得手不得手もあるでしょう。
人間は、戦形の得手不得手でミスる(相手の得意な形に敢えて合わせる)ことは
しないでしょうから、ポカやミスなどしか期待できません。
しかしするんですね人間は(笑)。
一方、コンピュータ同士は、ポカやミスはほとんどしません。とすると戦形による
力の出具合によっては一発、という期待しかありませんが、それもやっぱりよっぽど
「運」がよくないと期待できないと思います。
100回に1回くらい、が妥当かなあ……と個人的には思ってます。
0208ハブ夫
NGNGああ、なるほど。
詳しい説明ありがとうございます。
良く分かりました。
強さをどう、数値化するかという問題ですね。
例えば、腕相撲をした場合、
100キロの力を出すマシンと、90キロの力を出すマシンでは
必ず100キロの方が毎回勝つに決まってます。
この場合、勝率は100:0ですが、
実際に出す力を数値化して強さを計った場合は、
100:90に成るわけでね。
0209デフォルトの名無しさん
NGNGR400の差が絶対勝てない手合いでないことは24の対戦を見ていれば分かると思います。
実際に対戦させてみないと分かりませんが、400点差なら32回対戦させれば1回は勝つでしょう。
> しかしするんですね人間は(笑)。
> 一方、コンピュータ同士は、ポカやミスはほとんどしません。とすると戦形による
しかしするんですね、コンピュータも(笑)。
というのが正しいと思います。
苦し紛れに無意味に歩を損してくるのは少ないとはいえ相変わらずありますし。
0210 ◆R/rLuLKeEI
NGNGしかもポカやミスだと思ってないんですね、コンピュータは(笑)。
地平線効果で歩を損した方がお得と思っているらしい。
0211妖精リーチ
NGNG0212うさぴょんの育ての親
NGNGR400の差の人間同士を実際に対戦させれば、少ない方が勝つことがあるでしょうね。
…コンピュータ同士だと、まずなさそうですが(^^;
人間同士でも、Rのシステムを考えた時、R400差があるのに32回に1回以上勝てる
ようだと、Rが400以上上の人間に挑戦し続ければ、Rが実力よりもかなり上まで
上がることになるわけで、R400差って、本来32回に1回も勝てないような、
絶対的な差でないといけないんですよね。
もっとも、>>205 での議論のように、実際にはR200の差で勝率半減、400差
ならさらに半減程度の差しかないのかも知れません。その場合、24のRのシステム
自体、上位者に挑戦しまくる人がRが高くなるという、やっぱりちょっと問題ありっ
てことにもなりますが。(いや、実際に問題起きているような気もしますけど…。)
0213うさぴょんの育ての親
NGNGうさぴょんが東大に20回に1回勝つのは難しいでしょうね…。
配布しているうさぴょんは、定跡を乱数で選択しているので、自分の不得意な
形も指しますし、東大の不得意な形を指すこともあるんでしょうけど、
そういった『穴』はどう考えてもうさぴょんの方が多いので、500回に1回
勝てればいいとこじゃないでしょうか。
それでも、市販版の東大になら、時間をかけて序盤作戦で工夫を重ねていけば、
20回に一回勝てる定跡くらいなら作れるかも知れません。
#多分、坂田流向かい飛車とかそう言った変な戦形でしょう(^^;
東大将棋の1とか2の頃には、駒組みを上手く進めると一方的に好きな作戦を
選べて、先手なら勝率100%、後手でも勝率75%とかいう定跡もあったの
ですが(笑)。
でも、この間のYSS戦みたいに、コンピュータじゃなくて人間が油断して
くれれば、勝てる可能性は増えます。
実際、あの将棋はYSSにうさぴょんが勝ったのではなくて、山下さんが戦略=
定跡の選択を間違えて、うさぴょんの得意な形にぴたりとはまり、その結果
ああなった、という将棋でした。山下さんが勝手に転んだんだと認識してます(笑)。
0214うさぴょんの育ての親
NGNG囲碁、作ってるけど基本的なところが難しすぎ(笑)
勝敗を判定することすらまだ出来ないよ。
0215 ◆R/rLuLKeEI
NGNGこの一週間で進んだのは先手後手を別スレッドで開始させるところまで。
着手可能手の列挙はいつになることやら。
時間が足りない。
0216 ◆R/rLuLKeEI
NGNG探索開始局面に全ての着手可能手を問い合わすメソッド(中身は
空。nullを返す)を書いた。
先に終局/投了時の処理を書く予定。
前向き枝刈りを入れるなら局面に着手可能手を問い合わすメソッ
ド内に入れるべきか、得られたリストから不要な手を消してやる
べきか考え中。
最初は単純に前向き枝刈りはしないほうが見通しが良さそうな気
もする。
0217デフォルトの名無しさん
NGNG動いて楽しいから
多分そこが山場
その内 詰将棋では王手だけ列挙とか工夫をしたくなるけど工夫の段階に
入ればやる気が続くから
0218 ◆R/rLuLKeEI
NGNGまずは遅くてもいいから正しく漏れなく生成するやつを目標にやってみます。
前回の挑戦末期はここの高速化をいじり始めて発散してもうたから今度は慎重に。
Pascal/Cなら考えながらでもコードが出てきたのにJava/C++だとうまくいかんね。
AIとはあまり関係ない部分の話ばかりで申し訳ない。
0219デフォルトの名無しさん
NGNGプログラミング=C言語をDOS窓のだけ少し
将棋の棋力=24で7級
という漏れでも、将棋ソフトつくれますか?
0220 ◆R/rLuLKeEI
NGNG高品質・短納期を求めなければ作れます。
0221 ◆R/rLuLKeEI
NGNG24に入ろうとしてガイドに従ったら最低ランクだったのでまだ一度もやっていない小心者です。
なのに作ろうとしている。
人工知能と言語学習の格好の題材だと言い訳しつつ滑稽だなと自分でも思う。
0222うさぴょんの育ての親
NGNGうさぴょんを作り始めてから将棋のルール覚えたから全然問題ない。
>>219
C言語の腕はもう少し磨いた方が…。
[うさぴょんの育ての親]さんチームの人やベースになった鈴木将棋のへっぽこ鈴木さんも作り始めてから将棋のルール覚えたのですか?
本来の将棋プログラムを離れて、JavaとOOPとデザインパターンを勉強中。
将棋プログラムに適用できそうなパターンが幾つかあるのに気が付いたところです。
あ、ハブ夫さんに続いてうさぴょんダウンロードしました。
フリー最強ではなくなって1日のダウンロード数が減っているそうですね。
0224うさぴょんの育ての親
NGNGへっぽこ鈴木さんは一応4段です。将棋を覚えたのは小学生の頃らしい。
ところで、実は『うさぴょん』は、フリー『最強』になったことがないんですよねぇ。
『最強クラス』なのは確かだと思いますけど。
最近、ダウンロード数が伸びないのは、また別の原因で、要するに宣伝不足かと。
K−ShogiがVectorに登録されているし、棋力もまともになった(
あまりうさぴょんと変わらないと思う)ので、相対的にうさぴょんが目立たなく
なったんでしょう。うさぴょんもVectorにでも登録すれば、相当ダウン
ロードされるのかなーと思います。
0225219
NGNGとりあえずは、コンソールでデータ構造がシンプルで、プログラムの見通しのよい物を作ってみます。
(最強を目指せっていう突っ込みはなしね^^;;)
3目並べは以前作ったことがあので、将棋の前にオセロあたりをまず作ってみます。
11月くらいに将棋が動けばいいかな・・・と。のんびりやります。
0226デフォルトの名無しさん
NGNGしかし使い方がさっぱり分からんw
0227デフォルトの名無しさん
NGNG0228219
NGNG「局面」の初期化と表示はできるようになりました。
さて・・・
「指し手」のデータ構造/生成を考えてみます。
後戻りできるようにしないと・・むむむ。
ってことは・・
・指し手生成
・指し手実行
・指し手取り消し(undo)
・入力
かな・・・
(オセロならいっぱいソース転がってるでしょうけれど、とりあえず自力で)
将棋まで遠いけれど、カンベンです。
0229 ◆R/rLuLKeEI
NGNGまだこの局面では打つ、行き場のない、成る、敵の駒を取る、自玉を晒す、千日手などは起こらないので手抜きしている。
前回C言語で思考部分の同じ処理を書いた時はもっと苦労した。
今回はUIも含めてやっているが、これがOOPの威力なのか!と、ちょっと感動。
オセロの人も頑張れー
0230オセロの人(219)
NGNGお疲れ様ー&ありがとー
こちらの進捗状況は、
・指し手生成 →未テストだけど動作するようです。
・指し手実行 →同上
・指し手取り消し(undo) →まだ
・入力 →手抜きで作成済み
んで、undoを実装するまえに、
「局面をファイルからの読み込む」機能があると便利かなぁと思って、それを作成中です。
テストとかも自動化できそうかも、とか考えてます。
・・・将棋だとCSA形式っていうフォーマットがあるけれど、アレの局面データの読み込み大変そう・・・
0231 ◆R/rLuLKeEI
NGNG>>オセロの人さん
局面の読み込みはCSA形式のサブセットもどきを実装済。
持ち駒と成りのない局面なら読み込める。
今後の予定は先手:人工無能、後手:手入力(他の将棋ソフト)で対戦。
人工無能、局面表示の更新、後手番で局面のSAVE、UNDO/REDO、入力を実装する。
三手目までいけたら後は細々としたルールを実装しながらSAVE、終局まで対戦。
終局したら定跡学習の実験と人工無能の改善。
必要な機能は必要になったときに実装する方針。
つい長くなってしまった。
申し訳ない。
0232デフォルトの名無しさん
NGNGクラスメソッドは一つのファイルに記述しないといけないみたいなのでDelphiで作るのは諦めました。
勉強を兼ねてC++で作り直すことにします... _| ̄|○
0233オセロの人
NGNG昔いきなり将棋を組もうとしてCSAファイルで挫折したので、すごいなぁと思います。
作り方や方針を聞くと、刺激になります。
こちらはボトムアップで作ってます。
そちらはトップダウンで作ってるのかなと思っています。
こちらは、のんびり作成中です。
指し手生成/実行/取り消し(undo)、局面表示/読み込みは実装済み。
今後は、上の実装はチェック不足なので、チェックできるようにインタプリタみたいなの組もうと思います。
文字列"p"が入力されたら盤面表示、"g5"とか入力されたらオセロの指し手とみなして手を進めるとか。
インタプリタが出来たら、終局チェックとか、パスなのかって判定を作って。
ああ・・・思考部への道は遠いです。ごちゃごちゃ、書いてますが・・・書くと方針が決まるので(^^;;
>>232 ふぁいと!
0234オセロの人
NGNGエラーは全部コマンド解釈部にありました。
オセロの基本動作部にはエラー見つからず・・・なんだかなぁ。
ということで、今日はお終い。
今度は終局判定とパス判定を作ります。
そしたら人対人のゲームができる・・・かな。
0235 ◆R/rLuLKeEI
NGNGimplementation以下に全部入れないといけないみたいですね。
こっちは将棋プログラムには向いていないJavaですが、Javaも似たようなも
んです。
C++やObject-Pascalと違ってヘッダみたいなのがソースにはないんで、メソ
ッドがコードに埋もれていく。javadocあるからいいけど。
>>オセロの人さん
他の将棋ソフトが出したCSAファイルはまだ読めません。
良く似た別物です。
具体的にはCSAサーバープロトコルのBEGIN POSITION〜END POSITIONの一部分
だけしか読めません。
設計はトップダウンで実装はボトムアップというか混合でというか適当。
C言語でそんなにあっさり作れるんですね。
昔、窓じゃないDOSでTourbo Pascalを使ってJIS-PASCAL水準0の範囲内でオ
セロを作ったことがありますが、とっても恰好悪いインターフェイスで待っ
たはないし、読み込みもない、弱い遅いメモリ食いと良いとこ無しで、修論
をいじくっている内にソースごと何処かへ行ってしまった(笑)。
UUCPでメールをたらい回しにしていたような頃です。
実装の続きは多分次の土日。
それまではデザインパターンの記事(Cマガ1999/4〜11)を精読。
0236デフォルトの名無しさん
NGNG個人それぞれの作った将棋の思考ルーチン同士をネットワーク上で
戦わせるためのプロトコルと、そのライブラリって簡単にできたりしないかね?
比較的簡単だと思うんだが。
既に話がでていたらごめん。
0237デフォルトの名無しさん
NGNG>個人それぞれの作った将棋の思考ルーチン同士をネットワーク上で
>戦わせるためのプロトコルと、そのライブラリって簡単にできたりしないかね?
ええと、既にある。
一番使われているのはCSA将棋じゃないかな。
0238 ◆R/rLuLKeEI
NGNGコンピュータ将棋協会が公開しているシリアル及びTCP/IPプロトコルとサンプルルーチンがありますよ。
都万さんによる思考部のない実装(上で挙がった"CSA将棋")があります。
CSA将棋を使わないのは素では自宅の開発環境で動かないから。
通信プロトコルは自前のPlayer抽象クラスが安定したら
CsaPlayerサブクラスを作るつもり。
予定は未定であり決定では…
0239オセロの人
NGNGあ・・・ソース300行超えてる・・・。
>>235 ◆R/rLuLKeEIさん
> C言語でそんなにあっさり作れるんですね。
まだ、難しいことしてませんし・・・。
ここからが難しいのじゃないかと思っています。
ちょっとおせっかいですけれど、
Javaでデザインパターンの勉強をなさるなら、
ttp://www.hyuki.com/dp/
ttp://www.hyuki.com/dp/dp2.html
が分かりやすいって聞きます。
0240 ◆R/rLuLKeEI
NGNGありがとう、既に訪問済みです。
でも電子媒体より紙の方が扱いやすいのでこの記事でいいです。
関係ないが風邪ひいてもた。
前スレッドで分岐した「おまいら最強の麻雀プログラムしてみろよ」も地道にAI開発が進んでいますね。
興味津々。
関係が薄いのでsageます。
0243デフォルトの名無しさん
NGNGソース無し、思考激弱又はユーザー対戦のみでよいから見てみたい。
0244ハブ夫
NGNG関係ないけど、なんか、同士ががんばってる気がして、
嬉しいですね。
同じ目標を持ってる仲間見たいのが居ると、なんだか励みになりますね。
お互いがんばりましょう。
いずれ、最弱決定戦くらいは開きたいですね。
それには、24を利用しても良いですしね、、、。
0245オセロの人
NGNG>>242
失礼、書籍名書かなかったので勘違いさせちゃいました。
お風邪は大丈夫ですか?
>>243
私はUPしてないです・・・今やってるオセロは公開しないつもりです。
>>244
ですよね。
私もこちらの書き込みを読んだり、
こちらに書き込んだりすることが励みみなってます。
オセロの近況:
現在、思考ルーチン同士の対局が出来るようになってます。
・最初に発見した手を指す
・1手指してみて、自分の数が最大になる手を指す
・全幅探索
ってのがあります。
で・・・全幅探索が納得いってないので、
・思考中の評価値をプリントする(正しいかチェックできない)
・プログラムがすっきりしてないので、綺麗にする(自分で書いたものが分からない)
・性的評価関数と探索の深さを外部から指定できるようにする(いちいちコンパイルしなおすのはちょっと)
やっぱし、勢いで書いちゃだめですね。
0246 ◆R/rLuLKeEI
NGNG私を含めてこのスレッドでは誰もupしていない。
いつか自分のページを作って公開する予定。
>>244 ハブ夫さん
頓挫しないのは皆さんのお陰。
最弱決定戦いいですね。
何れやりましょう。
>>245 オセロの人さん
風邪はひどくなりました。
薬用酒飲んで寝ます。
貴方も熱中して体壊さんように。
Javaの言語仕様を読み始めた。
なんか将棋から離れていってる…。
なお悪いことに次の土日は少なくとも一日は仕事が決定したし、
翌週の土日に至っては二日とも出張。
ほとんど注釈入れてないから解読が不安だなあ。
0247ハブ夫
NGNG将棋とは攻めないほうが強い、、、ひたすら守って、相手が無謀に攻めてきたときだけ、
その無謀な敵の駒をゲットする動きだけを繰り返せば良いということを、、、。
大体、俺がうさぴょんとやって負けるときは大抵攻めてるからだ、、、。
そこで、銀金王金銀の駒だけをそれぞれ1枡だけ上げて、その状態をひたすら維持した、、、。
すると、、、
千日手になって終わった、、、。
0248ハブ夫
NGNG何しろ、いつも負けてるからな、、、。
やはり、将棋とは守った方が強い、
将棋=待ちゲー理論、ガイル理論成るものを提唱したいと思う。
大体、攻めるってことは自分の駒を前に進めると言うことだ。
すると、どうなるだろうか?
そう、自分の駒の中から1駒だけ全体の中から突出してしまうわけだ。
すると、その駒は、当然餌食になりやすい。
逆ならどうだろうか?
敵が無謀に攻めてきた場合、自分の強力な駒組みの中に一つ、又は少数の駒が進入してくるわけだから
その駒をとって駒得を果たせばよいのだ。
これを繰り返せば、駒得を繰り返した結果、少しずつ、有利になってくるわけだ。
0249ハブ夫
NGNGこれが最大の問題である、、、、。
0250ハブ夫
NGNG0251デフォルトの名無しさん
NGNG>銀金王金銀の駒だけをそれぞれ1枡だけ上げて、
端攻めや棒銀で一点突破を狙われると即死しそうな。
大概のソフトは守りが堅いわりに攻めが下手だと思うけど、
その辺り、人間の読みと何が違うのかな。
0252243
NGNG今、目標が無いから、2,3人うpしてくれれば、前作ったのを修正して
参加しようと思った。1番目は何か嫌だし。うpお待ちしてます。
>>247
将棋の駒は前に動きやすいように作られているから攻めの方が強く
上級になるとそれでは通用しにくくなる。駒を盛り上げてって攻めの体勢
自体を作らせないように指すやり方はあるけど。
その囲は玉頭がかなり薄い。中住まいに似ていると思うけど、
金銀が逆なだけで大きく違う。5筋の歩、桂だけで簡単にやられそう。
>>251
指手が多い序盤は定跡で、少ない終盤はコンピュータの読む速さを
利用してだけど、中盤はまだ難しいとされているね。
相掛りの時に、歩の突き捨が必要なことが多いけど、一時的な駒損に
なるから苦手だったり。
0253ハブ夫
NGNGなるほど。私がただ、へたくそだと言うだけですね。
0254232
NGNG・思考激弱(というよりただ単にαβがプログラムに書いてあるというだけで、実際は何とか駒が動いているレベル)。
・手数や指し手の記録および表示なし。
・粗末なGUI。
・見辛いソース。
という、お笑いレベルのものでよければうpしますが(^^;
0255オセロの人
NGNG昨日書いた目標で
・思考中の評価値をプリントする
→どうしよ
・プログラムがすっきりしてないので、綺麗にする
→どうしよ
・性的評価関数と探索の深さを外部から指定できるようにする
→これは簡単。引数に評価関数と読む深さを追加すればいい
どうしよ・・・のところは書いてみないことにはわからん・・・
って停まってます。
とりあえず、ちょっと後退して、
読む深さは無視して1段目の評価値だけプリントするようなプログラムを書きますか・・・
考えをまとめるための捨てルーチンですね。速度&汎用性は考慮しない、分かりやすいもの。
ここに書くと、考えがまとまります。ではでは。
0257デフォルトの名無しさん
NGNG師匠と呼ばせてください。
いろいろ研究したが、GUIの作り方がさっぱり分からん。
っていうかCUIの方も途中で挫折したわけだがw
そういう訳で、是非うpしましょう。
できれば、コメントたっぷりでお願いします。
あとそれとは別に、詳細を綴ったテキストファイルを同封するとみんなが喜びます。
0258243
NGNG逆に急戦の方を覚えたほうが効果があると思う。
>>254
ぜひ!おながいします。
>>255
自分のオセロは6手読みで角端をねらうだけ。
指せる手の種類が多いとき時間が掛かるので、中盤は1手30秒掛かる事もある。
0259257
NGNGうさぴょんの、定石強化しようと企んでいるのですが、うまくいかないです(TT;;
一本道の定石ならうまくいくのですが、分岐が入るとどうも、うまくいきません。
将来的にはKIF形式に対応したいのですが、どうすればいいのやら、さっぱりですな。
0260232(254)
NGNGうさぴょん育ての親さん(作者)に連絡をとってみます。
0261 ◆R/rLuLKeEI
NGNGなどと病床から応援します(咳が止まらない)。
0262うさぴょんの育ての親
NGNGソース確認しましたよん。
既にメールでお返事しましたが、どうぞ公開してください。
0263232(254)
NGNG(メールでもお礼させていただきました)
下記にて うp しております。
http://www.geocities.co.jp/Playtown/3325/
0264243
NGNG自分はCUIで最初はA∀とかで表示してたのだけど、
GUIにしていろいろめんどくさくなって製作を中止していた。
うp楽しみにしています。
>>262
ありがとうございます。
>>263
うpありがとうございます。遊ばせてもらいました。
シンプルですが、作っていく上で土台となる部分はしっかり出来ている。
まず、基本的なルール部分が出来ていて、ドラッグ操作というのでもすごい。
思考は、いきなり角交換、95角という手でびっくり。
でも自分でもこう指すという手を結構指してきてやるなと思った。
これからも製作を頑張ってください。
0266オセロの人
NGNG>>うさぴょんの育ての親さん
公開ありがとうございます。
こちらのオセロの近況:
全幅探索(mini-max法)は納得いったので、次はalpha-beta法に挑戦予定。
その後、評価関数を作成して比較・・・って構想です。
パスした後の探索してませんが、オセロを強くするのが目的ではないので、捨て置くつもり。
今月中には将棋に移行したいと考えてます。
プログラムの構成方法や、調整のしかたをオセロで演習するつもりでしたが、
構成方法はオセロで理解できても、
調整のしかたは私にオセロの知識がないので、
調整のしようがないなぁと・・・。
あ、知識を使わないで調整する方法を探します。
いつもどおり、ここに書いて、頭を整理するオセロの人でした。
0267 ◆R/rLuLKeEI
NGNG毎日終電or徹夜and休出で全く進まん。
以前のように時間外の会社のリソース使って最強(予定)の将棋プログラムしてみたくなってきた。
夜食の代わりに日曜プログラミング。
まだupされたソースをじっくりみていないが駒のドラッグ&ドロ
ップはラベルのようなコントロールではなくピットマップを都度
描き直してるようだ。
Javaでもそうするのが自然なのかな。本質的でない所で躓いてる。
オセロの人さんの将棋の方が先に完成する予感。
0268デフォルトの名無しさん
NGNG0269263
NGNG正直、思考してません(^^;
添付のreadme.txtにも書いてあるように適当な評価関数で動いているだけです。
投了の件も含め、色々バグがあるかもしれません。大目に見てやってください(^^;
うさぴょんの育ての親さんのHPに「将棋プログラムの作り方」が載ってますが、(>>72)
その中に、
「ここまでは基礎技術で、将棋プログラムを書き始めれば
誰でも調べものをしながら到達できる地点です。
ここからが各将棋プログラムの工夫になります。」
とコメントされている場所があります。
>>263のプログラムは、「ここまでは」に当てはまるレベルです。
0270デフォルトの名無しさん
NGNG0271 ◆R/rLuLKeEI
NGNGくらいが現状では最も楽な選択肢かと。
CSA将棋が内部で持っているであろう局面の複製や合法手判定、局面の遷移などのサービスルーチ
ンが利用できたらもっと楽なのに。
今、JavaでUIから作り直しているやつはUI側からPlayer側へ現在の局面を複製したインスタンスが
渡ってくるようにして解決しようと思っている。
思考部分を除いたものをソースなしで公開して他の人がこれを利用したらやはり大会規約に抵触するのか?
0272263
NGNGどこまでを「思考部分」と判断するのか...ですね。
「探索速度に影響を与える部分」まで含めて思考と考えるならば、
手の生成どころかデータ構造までも含まれてしまいますし。
極端な話、MiniMax探索やαβ探索を取り入れることですら抵触してしまうことになります。
自分としては、
ソースの流用(一字一句間違ってないようなという意味で)が問題にされるのであって、
アルゴリズムの流用については問題ないのでは思ってますけど...
(つまり、全く同じ結果を得るものだとしても、その結果を得るアプローチが異っていればいい)
UIの話は、大会に出ることを前提としているならばCSAに問い合わせるのが無難かと。
0273デフォルトの名無しさん
NGNGあらゆる棋譜をぶち込む。
対局者の強さや結果の勝敗の程度で重み付けした頻度で管理する。
定跡としてどの値以上を選択させるかを後から指定できる。
そういうデータベースを新たに考えてみてはいかがでしょう。
一億局あたりでほぼ定跡はずれなしになると思いますが。
0274 ◆R/rLuLKeEI
NGNGとなるとサービスルーチンを用意しても結局は利用されなくなるということですね。
0275デフォルトの名無しさん
NGNG世の中に棋譜が1億局もないんですよ。残念ながら。
ましてや信頼出来るものとなるともっとずっと少ないです。
027647
NGNG>>273で言っている1億というのは局面の数だと思われ。
つまり76歩で1局、34歩で1局と逝った要領。
この調子で仮に1手につき3局面分岐させたとしたら、17手目で1億を超えます。
無論というか言うまでもなく、上記の中には手順前後などによる同一局面が半分以上(8割ぐらいか?
含まれると思います。
これらを、うまく木構造にまとめることができれば、確かに無敵に成れると思うのですが、如何ともしがたい
ものがあるのですよね。そういうわけで、2ちゃんネイチブなデータベースつーのを作ってみるわ。
少しまちなー。
0277ハブ夫
NGNG>>276
同一、重複局面ってそんなにあるのですか?
かなりあるんですね。
まあ、当たり前か、1四歩と2四歩はどっちが先だろうが後だろうが、同じだけど、
どっちから探索しても絶対に出てくる局面ですしね、、、。
0278 ◆R/rLuLKeEI
NGNG1局終了毎に勝者が遭遇した局面と勝者が選択した手の組をDBに保存。
同一局面なら遭遇数をカウント。
同一局面で異なる手があれば上書き。
DBがいっぱいになったら遭遇数最小の局面を全て削除。
ダメだな。1億局面覚えても大半の局面が遭遇数1だろうな。
より強い相手の思考結果を記憶するのは良い案だと思ったんだが。
0279デフォルトの名無しさん
NGNG0280 ◆R/rLuLKeEI
NGNGDBから削除するのを平手から遠い局面からにしたら将棋でも序盤は最強に!ならんかなあ。
最強のオセロはそんなDBで序盤は最強になったとどっかのサイトで読んだ。
0281デフォルトの名無しさん
NGNG遭遇数をそのまま記録したらどうだろ。
まさに頻度管理でいくと。
0282 ◆R/rLuLKeEI
NGNG>同一局面で異なる手があれば…
のところですね。手を上書きしないで追加して…遭遇数は局面に、頻度は手に持
たせることになるのか?
オセロにはLogistelloが対戦から自動収集したLogistello bookなる良質の定石
集があるようだが、とりあえず>>276さんの2ちゃんネイチブなデータベースつー
のを期待しよう。
0283デフォルトの名無しさん
NGNG頻度もそのまま出てきてるみたいだし。
0284 ◆R/rLuLKeEI
NGNGまずは激指3でも買うか…Linux版はないよな。仮想機械から導入っと…後回しにして寝よ。
ところでゲーム製作技術板とここは敵対してはるんですか?
0285デフォルトの名無しさん
NGNG局面数でも人間が指した局面が1億局面も集めることは出来ないでしょう。
プロなど信頼できる人間が指した手に限ると100万手くらいのものである
ことは、市販ソフトがいずれもそれくらいの数の定跡を搭載していることから
予想されます。
仮に1億局集めてデータベースを作ったとしても、序盤で20手も指せばすぐに
未知の局面が出てきて大して役立たないでしょうね。
0286デフォルトの名無しさん
NGNGちゃんとイメージできてますか?
一億局の人間の試行錯誤の集大成ですよ?
一億局の効率的なデータベースで有効そうな定跡はずしが残るとは思えませんが。
0287デフォルトの名無しさん
NGNGよく言われてることだけど、仮に各局面で平均3通りの定跡手があるとすると、
一億 < 3^17 (3の17乗) = 129140163
なので17手目の局面から既に定跡外しが存在することになる。
0288デフォルトの名無しさん
NGNG既存の棋譜には「全ての失敗」が載っているわけじゃないから、
咎める手を自力で捻り出すしかなくて、結局咎め切れないってことはあるね。
というわけでたとえ一億局でも効果は限定的なものになるだろう、に漏れも一票。
もちろん一億局のデータがあればあったで何か使い道があるだろう、にも一票。
0289デフォルトの名無しさん
NGNGその通りで、一億なんて全然大した数じゃないですよ。
しかも、それだけの数のデータを得ることさえ無理だと言ってるわけです。
0290オセロの人
NGNGオセロで煮詰まってたので、気分転換。
将棋の基本データ構造をどないしょ。とか考えています。
考えてるだけで、作業のほうでいえば、成果ゼロの日。
メモはたくさん書きました(^^;;
0291 ◆R/rLuLKeEI
NGNGオセロの人さんの真似をして覚え書き;
・定跡DBの構造を探索に使う局面表と同様にする。
・つまり局面と最善手の組をたくさん用意する(多分実戦経験からの蓄積で)。
・どのエントリから始めても1本道の定跡手順が得られるようにしたい。
・定跡外しの手で得られる局面がDBにあればその局面の手は咎めの手に他ならず、外しの手を記録する必要はない。
・次善の手についても同じ。
・もちろん未知の局面については通常の探索を行う。
・探索の途中でも参照する。
これはもはや定跡じゃなくて部分解木カタログだ。
0292オセロの人
NGNG珈琲飲みつつ。
頭の回転が速い時間(朝飯前)に
・オセロのコードのいらないところをバッサリカット
・コマンド駆動部再構築。
・時間があれば、手の生成部分を改定。
さて、どこまでできるかな。
0293オセロの人
NGNG・ソースばっさりりカット
・コマンド駆動部(インタフェース入力部)書き換え
結果:
玉砕。
失敗したところ1:
コードの要らないところをカットしたが、
その作業結果を確認できない形でカットした。
そのため、確認をせずに次の工程にすすんでしまい、
次の工程でぐちゃぐちゃになった。
→作業結果を確認できる形で目標を立て、
次の工程に入る前に確認をきちんとましょう(;_;)
失敗したところ2:
何も考えないで、入力部をプログラム組みだし、ぐちゃぐちゃになり、まったく進まず。
→きちんと設計しましょう。
設計があいまいにしか出来ないのなら、捨てプログラムなどを書いて、具体的にしていきましょう。
いきなり本番で試すのはダメです(;_;)
リカバーをどうするか:
・ソースをバッサリカットする前に戻す
・確認できる形でソースのカットをするよう考え直す
・入力部の設計をする
ぐすん。朝の作業は、これまで。
0294デフォルトの名無しさん
NGNG>玉砕
ワロタ
でも細かく分かり易く書かれているな。参考にさせていただく。
0295 ◆R/rLuLKeEI
NGNG転ばぬ先の杖。
昨日の自分は赤の他人。
バージョン管理ツールを使ってないことを激しく後悔する瞬間ですね。
0296 ◆R/rLuLKeEI
NGNGすんません。
VC++ならVSSがIDEに統合されてて便利ですね。
0297デフォルトの名無しさん
NGNGあんたら将棋知らんだろ?
一億局の初心者からプロの棋譜を管理してるんだぞ?
定跡はずしできるもんならしてみろ。
定跡は手順前後を処理さえできれば
予定軌道に戻ってこれる可能性が高いんだ。
0298デフォルトの名無しさん
NGNGうまく評価できるとは限らないと思うのですがいかがでしょうか。
定跡はずしできるもんならしてみろといいますが
実際には定跡はずしできないようにきちんと評価をするのが難しいのではないでしょうか?
0299デフォルトの名無しさん
NGNG十分良く将棋もコンピュータ将棋も知ってる者ですが。
比較的似たような手順が多く指されるプロの将棋でも、例えば昨日の
NHK杯の森内−谷川戦は6手目で既に過去のプロの棋譜で現れてないようですね。
この局面はまだかつて人類が指したことがあるでしょうが、さらに10手
くらい進んだ局面は、おそらく誰にも指されたことがないでしょう。
将棋の探索空間というのはあなたが考えるよりもずっと大きいですよ。
何しろ指数関数的に局面数が増えますから。
まあいくら理で説いても分かってもらえないようなので、ご自分で
動くシステムを作って、一億局とやらをどこかから集めれるものなら
集めて、試してみるといいでしょう。
0300デフォルトの名無しさん
NGNGまぁ、実用的な速度は全く期待できないけど…
0301デフォルトの名無しさん
NGNGならないんじゃないかな
将棋で最強にするにはどのくらいのメモリとクロックがいるかねえ
0302デフォルトの名無しさん
NGNGLOGISTELLOに勝たないと最強とは呼べないぞ。
0303デフォルトの名無しさん
NGNG終盤は10倍以上速いフリーで手に入るZebraがいい対戦相手になりそう。
オセロも強い人間に勝てるプログラムを書こうと思ったら
作者もその人間と同じくらいの強さを持っているか
最初からオセロの評価関数についての文献を読まないと難しいかもね。
0305デフォルトの名無しさん
NGNGそれを言ったらどのゲームも同じなんじゃ…
0306デフォルトの名無しさん
NGNGループするもの(このスレの将棋等)では、全検索はムリ
0307デフォルトの名無しさん
NGNGメモリは何GB積んでいるの?
というのはさておき、Part1の最初期に出てきそうな発言をかまさないでください。
0308デフォルトの名無しさん
NGNGループ自体は問題にはならないでしょ?
0309デフォルトの名無しさん
NGNGメモリは殆ど必要ないよ
>>308
将棋の場合、どんな局面でも、ほぼループ出来るし、
終局の形が多すぎるので、単純に、全検索をするのは、難しいと思うけど…?
0310デフォルトの名無しさん
NGNGループがあっても原理的には解けないわけじゃないのではと言いたいだけで
現実的には全く無理だと思ってますよ。
0311デフォルトの名無しさん
NGNG>ループがあっても原理的には解けないわけじゃないのではと
…すまそ。確かに、そやね。
0312デフォルトの名無しさん
NGNG相振りにはようやくトッププロが本気になって取り組みだした。
相振りの定跡はこれから充実してくる。
おまえら、とりあえずやれることやってから御託述べろや。
なにが指数関数的だ。
有効そうな局面はあらかた開発済みで、
その近辺も過去にアマの実戦で指されてるんだよ。
24の棋譜みたことあんのか?
0313デフォルトの名無しさん
NGNG24の棋譜ってなんぞや?
0314 ◆R/rLuLKeEI
NGNGはい、やってみます。
ただ週一位しかプログラムに触れないので実装・テスト完了に半年以上かかると思います。
五度目の挫折が訪れないことを祈りつつ前進したい。
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG>相振りの定跡はこれから充実してくる。
そんな都合いいこと言われても…
0318デフォルトの名無しさん
NGNG9八香、3四歩、5八玉、8四歩の棋譜あるか。
0319 ◆R/rLuLKeEI
NGNGへぼ将棋も含めれば1年で達成するかもしれんが意味あるのでしょうか?
実装を見送りたくなってきた。
0320デフォルトの名無しさん
NGNG棋界のおおまかな流れぐらい知っておいてくれよ。
昔は相振りはアマチュア主流のマイナー戦法で
ちょっと前まではB級プロ棋士しか研究に取り組んでこなかった。
プロ棋戦での実践例も少なく、少なくとも群としての定跡と呼べるものはなかった。
ところが最近、振り飛車対策で居飛車感覚を使う相振りがよく見られるようになった。
そして、ここ数年の羽生の興味はタイトルや勝率ではなく、
トッププロを相手に実戦で新しい将棋を切り開くこと。
そしていま、相振りの新しい世界が開けようとしている。
>>318
それで反例をあげて「定理」を否定した気になってるの?
だれも定理なんか書いてないよ。
かなりの程度有効な定跡データベースをつくろう。
そのためにはまず形式を詰める必要がある。
そういってるだけだが、なぜムキに反論する?
確率的に起きうるすべてをカバーする必要はない。
棋理的にありそうな有効そうな比較的狭い世界を
できるだけカバーできる定跡データベースをつくることを
考えようと言ってるだけ。
>>319
まず、あたらしい棋譜データベース形式を考える。
次に、久米氏を説得して24の全棋譜を取り込む。
これだけでかなりのデータベースができると思うんだが。
24との提携だな。どちらにもメリットはあるはずだ。
0321オセロの人
NGNG朝の課題は次のようにして片付けるつもりです。
・ソースをバッサリカットする前に戻す
→バックアップから回復。
・確認できる形でソースのカットをするよう考え直す
→ソースのカットはプログラムの変更があるわけだから・・・
要らないことろを使わないようにプログラムを変更→残した部分が今まで通り動くかチェック。
その後、ソースの使わない部分をカットし、同じチェックが通ることを確認する。
・入力部の設計をする
→変数や制御構造や式はない行指向のインタプリタ。
・引数の渡し方はmain()と同じようにするか、char *arg(int n)というようにアクセス関数を用意するか?
・別プログラムとして作る。
・各命令を実行するC関数にジャンプするところまで組んでみる
・各命令を実行するC関数は命令名と、引数を表示するだけのもの
設計ではなくって、作業の進め方の話になってますね(^^;;
0322デフォルトの名無しさん
NGNGんじゃ言っとくけど、24の棋譜集の中身は多分多くの人が抜いたことあると思うよ。
漏れでも1時間もかからずプログラム書けた記憶がある。
誰も「やらずに」反論してるわけじゃないよん。
まぁそもそも反論してるわけじゃないし。やってみればいいんじゃないの?
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGコンピュータが指すために使う定跡データベースという考え方は、止めたほうがいいんじゃないかな?
最終手までの定跡は存在しないわけだから、
当然途中でコンピュータは自分の思考に入る。
が、定跡が終了した時点での正しい評価がコンピュータに出来かどうかが問題。
そのギャップが、今の問題点だと認識しているんだけど...
定跡というのは手順にそって指せば有利な局面に導いてくれるものと自分も理解しているが、
それは研究過程での分岐手順や局面の評価が存在しているからこそ、思っている。
だから、コンピュータが、そういった手順や局面を正しく評価し、
有効活用できるデータとして保存できなければ、
意味の無いものになってしまうと考えている。
簡単にいえば「有利にならない手」をコンピュータが正しく判断できないと意味が無い、
ということ。
0325324
NGNG「確率的に起きうる全てをカバーする必要はない。」とあるけど、この考え方が問題かもね。
人が手を考える時は、確率的に起きうる全てを「個々の知識(記憶)に頼って」カバーしてる、よね。
個々の知識(記憶)から判断して手の取捨選択するから。
0326名無しさん@お腹いっぱい。
NGNG0327 ◆R/rLuLKeEI
NGNG新しい棋譜データベースの設計にあたって既存の各棋譜データベースの構造とその欠点を挙げたい
のだが、残念ながら将棋に関しても既存の棋譜データベースに関しても無知なので何から手をつけ
たらよいのやら。
既に問題点の洗い出しがすんでおられるのならお聞きしたいのですが如何でしょう。
24から全棋譜を取り込むこちら側のメリットはまあわかるのですが24側に一体どんなメリットがあ
るのでしょうか?
データベース型将棋ソフトというと都万さんのところにある"お城将棋"が思い浮かびます。
その内、評価してみるかもしれません
0328デフォルトの名無しさん
NGNG0329ハブ夫
NGNG>ところでゲーム製作技術板とここは敵対してはるんですか?
何でですか?
何かあったのですか?
0330 ◆R/rLuLKeEI
NGNGありがとう、咳はほぼ止まりました。
DBといってもオラクルやADBASとかは考えていません。
仰る通りファイルベースです。
>>329
正確にはスレッド:【オセロ,将棋】ボードゲーム【囲…がこちらを意識しているようなので舌足らずなこ
とを書いてしまった。
0331デフォルトの名無しさん
NGNG>「有利にならない手」をコンピュータが正しく判断
そんなことができればソフトに定跡は必要ない。
有利かどうかは、実戦譜の頻度に表れる。
だから重み付けをした頻度管理定跡データベースを提案してるの。
圧倒的な量の一本化されたデータベースであって、
後の加工が楽(分離できる、値を変えられる、誰が指したものかわかる)なもの
であれば、ソフトにかかわらず人間にも有益。
>>325
将棋という空間は純粋に確率的な事象ではないんだよ。
有意義的に絞られる全組合せに比べれば比較的狭い空間なんだ。
>>327
プロ棋士や24の利用者に対してのメリットは、
十分に整理された定跡体系をつくるための土台を提供できること。
チェスにはあったが将棋にはなかったものをつくる機会を与えられる。
0332デフォルトの名無しさん
NGNG一手打ったびに棋譜をたらい回しにしたらええんや。
枝の末端だけ仕事しとりゃええんや、累乗やいうても知れとろうわな。
せやけどそれはやっぱりプログラムとちがうんか、ちがいまっか、
そうか、わかったもう帰る。
0333デフォルトの名無しさん
NGNGとりあえず誰か棋譜たくさん持ってる人で激指で棋譜集解析かけた人
定跡ファイルあぷキボンヌ。
頻度分布がどうなってるか見てみたい。
0334デフォルトの名無しさん
NGNG「有利かどうかは、実践譜の頻度に表れる。」
だから、表れない手の場合、どのように対応するのかを聞いているんだけど。
理想的な定跡木を求めすぎ。
将棋初心者に、いきなりプロの定跡を教えるのといっしょ。
手順どおり指したところで、なぜその手順なのかを理解できないし、
もちろん手順以外の手を指されても、その手を理解できない。
初手に▲7六歩や▲2六歩を指すのは、みんなが指しているから、自分も指すの?そうじゃないでしょう。
大駒を働かせようという考えのもとに指される手であって、
結果、初手に▲7六歩や▲2六歩を指すのが他の手を指すより有利という個々の知識として蓄えられ、
さらに、大多数の人が同様の判断や知識によって指すから、
ほとんどの棋譜が初手▲7六歩もしくは▲2六歩になってるの。
極端な話、先手が初手から1六歩、1七香、1八飛と端を狙った場合、
定跡データベースとして、どう対応させたいと考えているの?
0335324,325,334
NGNG一般的に「〜戦法」と書かれた定跡本には色々な局面での分岐手順、それらの評価が
こと細かくかかれているけど、その分岐全てが実戦譜で表れるかといえば、疑問だよね。
ただ単に実戦譜の指し手統計を取るという定跡データベースを目指すのであれば
自分の見当違いということで、今まで言ったこと謝ります。すいません。
0336デフォルトの名無しさん
NGNG局面から分岐する手の先を他のPCに投げて、そのPCでも同じことを繰り返せばいずれ最初の発信者
のモニタに先手必勝!などと出たりして。
数時間で世界中のPCがダウンするワームになる予感。
累乗<階乗だからまだましか
0337デフォルトの名無しさん
NGNGなんか違う盛り上がりになってるな(笑)
>>263 今まで見たフリーの中では盤駒が最も見やすく、感動しました。
0338デフォルトの名無しさん
NGNGソフトが初手の意味なんかわかってなくても、頻度はそれを代替してくれる。
>1六歩、1七香、1八飛
こんなありきたりのはずし方は、膨大な蓄積の中に包含されている。
もっと根本的なことをイメージしてもらえるかな?
漏れは完璧を求めていない。
確率的に有効な手段を提起している。
0339デフォルトの名無しさん
NGNG>初手に▲7六歩や▲2六歩を指すのは、みんなが指しているから、自分も指すの?そうじゃないでしょう。
大駒を働かせようという考えのもとに指される手であって、
結果、初手に▲7六歩や▲2六歩を指すのが他の手を指すより有利という個々の知識として蓄えられ、
さらに、大多数の人が同様の判断や知識によって指すから、
ほとんどの棋譜が初手▲7六歩もしくは▲2六歩になってるの。
底まで考えてるなら、構想を持たせるアイデアを練ろうとしてるんだろうな?
現実的に有効そうな手法を提案しているのに対して、
やりもしないことで反論されても困る。
ソフトに構想を持たせろ、と前から言ってるのに誰もまともに考えて無いじゃないか。
ゲーム研究の根幹に関わることを、即効性がないからと
後回しにしてるくせに。
0341デフォルトの名無しさん
NGNG後半部分だけ。
「ソフトに構想を」ってのはもうずいぶん言い古されてるね。
世界じゅうの研究者が考えてるよ。
ちょっとした研究会に出て、誰でもいいからつかまえてその意見ぶつけてみたら?
「うん、そうだね」って言われると思うよ。
研究者はいつだって一発当てたいと思ってるから、その辺は世界中で形に残らない感じで色々試されてるから。死屍累々だけど。
人工知能屋のコミュニティに入って呑んでみたら?
まぁ非難されてもこちらとしては苦笑するしかないね。
0342デフォルトの名無しさん
NGNGソフトはソフトなりにプログラムによって作られた構想を持ってるはずだよ。
「ソフトに「人間的な構想」」って言うんなら話はわかるけど...
まぁ、そういう研究テーマを掲げておけば、すごいことやってますよみたいには見えるけどね。
丸電さんの文章を思い出すなぁ〜
0343 ◆R/rLuLKeEI
NGNGありがとう。
まだ故障箇所を抱えてますがなんとかなりそう。
昔、静的コールグラフを作るツールをαサーバーで見たけどフリーになかったかな。
仕様書工房は大袈裟で有料だしなぁ。
とうとう会社にソースを持ってきた。
そしたら、文字コードが異なるせいでコンパイル出来なかった。
簡易表示用の駒などの漢字をソースに直書きしているのが原因だった。
とりあえず会社で開発するのは視線が気になるので止める(かも)。
開発環境に左右されないように駒をビットマップファイルにしなくては。
今日もやはり停滞中。
0344デフォルトの名無しさん
NGNG0345オセロの人
NGNG近況:
静的コールグラフの作成を地味にやっています。
欲張って、関数のグループ分けもコールグラフに書き込み中です。
・・・ツール自作しようかしら・・・。
現在、ソースが700行超えていて、全体を把握できなくなっています。
このままでも無理やり進めば1000行はいけるでしょうけれど、2000行は難しそう。
オセロでこの状態です。将棋は1万行は行くでしょうから、
大きいプログラムの作り方を習得するいいチャンスだと感じています。
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNGなんつーか、プログラミングに微妙に慣れてないのかな。
・ソースのリビジョン管理はすること
・コールツリーを作るよりもクラスの設計をきちんと行なうこと
ちなみに私がこの前作ったプログラムは約60ファイルで10000行弱だ。
全体を把握するにはメインとなるソースを眺めるだけだし、
大きなクラスもすべて独立しているから何の問題もない。
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNGオブジェクト指向じゃないなら。
名前空間を細かく分割して(ファイルを分割するかC++ならnamespace)
局所的な関数が必要な所以外にもれないようにすると、コールグラフは要らない。
0350オセロの人
NGNG関数のグループ分けが上手くいっていなかった部分を確認できて役にたちました。
>>347-348 ご意見ありがとうございます。
慣れてないです(^^;;
慣れるためのプログラミングをしているところです。
実力は>>219に書いたとおりです。
普段は100行以内、大きくてせいぜい200行以内のプログラムを作っていました。
ユニットテスト・・・作ったものが期待どおり動くか確認しています。
リビジョン管理・・・一段階達成したと感じたら、ソースのバックアップを取るようにしています。
クラスの設計をきちんと行うこと・・・これ、一番できてないです。
クラスの設計をきちんと行うことは、私が使う言語がCですので、
多分、変数やデータ構造、関数の分け方、名前の付け方をきちんとすること
にあたると思います。これ、なかなか出来ていません。
それぞれ言葉はわかるのですが、自己流で場数もなく、
具体的にどうしたらいいというノウハウは持っていません。
どうやったら、筋のよい方法が身につくのかなぁ。
オセロをプログラムしながら、身につくといいのですが・・・。
ツッコミどころ満載なオセロの人でした(^^;;
0351オセロの人
NGNGコールグラフは要らない、といのは理解できます。
初めから、上手に分割できるできていれば・・・ですが。
私は出来てなかったので、コールグラフが必要でした(^^;;
>>347さんにも指摘いただいてますけれど、
「設計をきちんと行うこと」が大事なんですね。
上手い設計ができるようになりたいです。
0352 ◆R/rLuLKeEI
NGNG>柿木将棋でLAN対RS232C通信を戦わせるこができますか?
開発終了してRS232C通信しか出来ない古い将棋ソフトとLAN通信しか出来ない将
棋ソフトを柿木将棋経由で対戦させたいのかな。
柿木将棋持ってないしPC1台しかないので誰か実験していただけませんか。
>>346さんがやってレポートしていただけると一番嬉しいのですが。
出来ないから書きこんでいるのですよね。
失礼しました。
0353デフォルトの名無しさん
NGNG>>352
出来ると思って試したら、そもそもその条件では対局開始出来ませんでした。
「先手、後手共に通信にすることはできません」と言われます。
余談ですが、柿木を2つ起動してCOM vs LAN対戦をすると(PC一台でOK)、
定跡・思考時間等を違えて対局させられて面白い。
また、柿木とLAN対戦可能なソフトを作れば、柿木(LAN vs 人)を媒介にして
操作性最強のフリーソフトになりますね。
0354デフォルトの名無しさん
NGNGソフトをそれぞれが作ってオンラインやオフラインで対戦できるようになるといいね
0355デフォルトの名無しさん
NGNGありがとうございます。 8に期待しています。
0356デフォルトの名無しさん
NGNG「盤と駒とルール」は、
製作者のオリジナリティが関与する可能性がある部分のため、
供用は難しいかもしれませんね(フォーマットに従うための手間は極力省きたいでしょうし)。
UI提供はCSA将棋で実現してるので、あとはサーバーでしょうかね。
(思考部分とCSA将棋でどういうやりとりをしているかは理解してませんが...)
0357 ◆R/rLuLKeEI
NGNG>ユニットテスト・・・作ったものが期待どおり動くか確認しています。
『プログラムを調べるのに、それが意図されたように動くかどうかをみただけでは、なかば成功したにすぎない。
残りの半分は、意図されなかった動きをするかどうかを調べることである。』
誰の格言だったかなぁ?
>>354
>>356
CSA通信プロトコル
http://www.computer-shogi.org/protocol/
テスト用公開審判サーバは接続したこと無いけど生きてるのかな。
あと、上のURLにあるサンプルプログラムのCSA将棋はtest56.exeというローカルで動く擬似サーバーが入っている。
0358デフォルトの名無しさん
NGNG状況による、テスト結果は予め想定しなければならないから、膨大な棋譜と次の一手の集合か?w
0359デフォルトの名無しさん
NGNGゲームのルールの部分ならできるよね > テスト
XP的には「期待どおり動くか」だけでよいと思う
どうせ完璧なテストは難しいので
意図しない動きを見つけたらテストを追加する方針で気楽に始めましょう
テストは自動化して手間を省くのがポイント
0360デフォルトの名無しさん
NGNGでもさ、思考ルーチンがゲームの売りじゃない。
それをどのように検証するんだろうね。市販のソフトって。
(ルール部分でミスは流石に今のソフトじゃ論外でしょ。w)
そもそも、企画・設計段階でどうやって思考ルーチンをきめるんだろう?
場面における評価式を仕様にしたり、定石DBのテーブルを決めたりするのかな。
0361デフォルトの名無しさん
NGNGなんか将棋ソフト開発ってもろ零細って感じじゃない?
DeepBlueはちゃんとやってそうな気がするのはただの偏見かw
0362デフォルトの名無しさん
NGNGまあ、そうだろうね。
多分、いろんなソフトを集めて、テスターの人が条件を変えて適当に打っていると。
で、とりあえず勝てるように微調整を繰り返していくのかな。
0363デフォルトの名無しさん
NGNG自動的に出来ます。
0364オセロの人
NGNG近況:
一休み中。
0365愚痴りたいが板違いなのでしない ◆R/rLuLKeEI
NGNG当然、最強(予定)の将棋プログラムは触れることは出来ません。
>>355
期待するだけじゃなくて要望を出しましょう。
0366デフォルトの名無しさん
NGNGhttp://page.freett.com/intteliart/index.htm
0367オセロの人
NGNGまた、ヘンな時間に目が覚めました。
近況:
風邪ひきました。37度前半の微熱が続き、脳みそがうにになっています。
・・・いつものパターンだと、これが1ヶ月くらい続きます(;_;)
ってわけで、1週間ほど作業中断するつもりです。
コールグラフはいらん!
といわれたのに、作ってしまったんで、
今までの作業の足跡としてUPします。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1076074304_4/a.png
0368 ◆R/rLuLKeEI
NGNGお大事に〜。
cpu2の枠内がよくわからない。
minimaxみたいだけどminimaxは別のところにあるし、先手用、後手用に分けて考
えたminimaxアルゴリズムの検証用なんかな?
dynamic callになってんのは色々な思考アルゴリズムをとっかえひっかえ出来る
ようにするための細工?
実はdynamic callって良く知らないんだけど関数ポインタによる呼び出しという
ことでいいんかな?
金曜からのエンドレス残業で頭が回らない。
では、お休みなさい。
0369オセロの人
NGNG図をみてくださってありがとうございます。
cpu2は、minimax法による指し手生成です。
それとは別にminimaxとalpha_betaがありますけれど、探索中の各局面での評価値を印字するものです。
このへんの統合が今後の課題だったりします。
dynamic callは正しい言葉か知らずに使ってます(ごめん)
おっしゃるとおり、図での意味は関数ポインタによる関数呼び出しです。
思考ルーチン内の静的評価関数やゲーム内の思考ルーチン(プレイヤー)を入れ替えるために、
利用しています。
課題:
・関数名の付け方がちぐはぐ
→対応する名前に変更
→コマンドインタプリタの再構築(へんな名前になるのはここのせいもある)
→小さいプログラム/モジュールだと侮らず、接頭辞をつけて、モジュール分けしたほうがいいか?の検討
(設計をきちんとせよ・・・とのご意見くださった方、その通りです)
・評価用印字ルーチンと思考ルーチンの統合
→速度を気にせず、評価用印字ルーチンに印字フラグを持たせ、思考ルーチンに。
では、横になって風邪さん退治します。
しばらく、こちらの書き込みもお休みします、あしからず。
私はモグリなんで「プログラミング言語C ANSI規格準拠」しか持ってない。
うさぴょんの育ての親さんやデフォルトの名無しさん達は全て目を通しておられるんでしょうなぁ。
「思考ゲームプログラミング」ならあるんですが、古過ぎですね。
0371デフォルトの名無しさん
NGNG思考ゲームプログラミング持ってるんですか!うらやますぃ……
0372 ◆R/rLuLKeEI
NGNG誰が持ち込んだのかは不明。
いつでも閲覧できるがあまり役に立ってない。
0373デフォルトの名無しさん
NGNG数学@ふたば
ttp://cgi.2chan.net/m/futaba.php?res=17731
0374デフォルトの名無しさん
NGNGまあ、先に盤を引っ繰り返したほうが勝ちともいうが。
あ、PCの場合はアプリ終了か。
0375デフォルトの名無しさん
NGNGちゃぶ台返し?
引っ繰り返した方が負けという気もするが。
将棋プログラム少ししてみた。
・局面を表すクラスを分割した。
1.表示用のパネル
大盤解説の如きもの。
2から更新通知が来るのを待っている。
2.対局者が共有して見ている盤面
実際にはそのコピーが対局者に渡されるのでちゃぶ台返しは出来ない。
局面の読み込みや対局の進行はここに実装。
3.各対局者の頭の中にある盤面
2は3のサブクラス。
将棋のルールの内、盤面に関する部分はここに実装。
あと、盤面に紐付けた着手可能手の持ち方をベクタから赤黒木+リスト構造にした。
これは探索する節点の順序が探索効率に影響するような探索手法の為の準備。
とはいえ、手の評価は+∞のままなので赤黒木の一つのノードに全着手可能手のリストがあるだけ。
とりあえず、ここまで。
0377オセロの人
NGNGおお。進んでますね。
OOPって、おもしろそうだなぁと思います。
近況:
風邪なおりました。普段より早めに治りました。うれしいので、飲酒中です。
作業予定:
入力部の再構築
1)同じ動作をするプログラムを汎用性のある関数に置き換える。(終わったら、動作確認)
2)関数名/入力コマンド名を分かりやすいものに変更。(終わったら、動作確認)
↑これをやっとかないと、あとで思考部の評価の度にコンパイルする必要が出てくるため
各ノードの評価値表示ルーチン/指し手生成ルーチンの統合
>>369に書いた通り。
↑これをやっとかないと、思考ルーチンと思考ルーチンの評価が乖離してしまうため
実のところ、玉砕(>>293)あたりから、本編のプログラムがあまり進んでいないです(^^;;
今週末は、上に書いたことを終わらせたいです。
0378 ◆R/rLuLKeEI
NGNG元気になって何よりです。
>OOPって、おもしろそうだなぁと思います。
面白そうと思ってもC++がどうも好きになれなくて7〜8年経ちました。
まだ分からない概念もあるけど今、JavaでOOPが面白いです。
不意に「メッセージパッシングはわかりやすい」というMINIX256倍本の一節を思い出した。
今日やったこと:
・局面の更新
1.着手可能手から最大の評価の手を抜き取って局面を更新。
2.成り、打ち、取る手は平手直後には無いので手抜き。
・局面表の実装。
ハッシュコードを算出する空の関数を作成。
昔、プログラミング言語習得で
C→挫折→Pascal→成功→C→成功
だった。今、
C++→挫折→Java→成功?
成功したらC++に再挑戦したい。
0379オセロの人
NGNGなるほど、C++はいきなりは、難しそうですね。ふむ。
近況:
のんびりとプログラム再構築中。
出来たこと
・入力部の再構築:同じ動作をするプログラムを汎用性のある関数に置き換えた。
・各ノードの評価値表示ルーチン/指し手生成ルーチンを統合した(指し手生成が出来てるかは未確認)
途中なこと
・入力部の関数名/入力コマンド名を分かりやすいものに変更する
これからやること
・対局部に統合した指し手ルーチンを適用
・そろそろ将棋
0380 ◆R/rLuLKeEI
NGNGいよいよ将棋ですね。
今日は開発はお休み。
OOPの影響かコードを書く時間より考える時間(設計)の方が長くなった。
JavaにはHashtableクラスがあって局面表の実装にと昨日採用したが、都合が悪いのに気が付いた。
このクラスは第2hash関数が1で表が埋まると拡張、再hashするらしい。
記憶領域不足を回避したいのでこれはまずい。
と言うわけでHash値を同一性判定に使った〜Setクラスを検討中。
局面表って探索空間の一部分が見えていてHIT率が重要なキャッシュのようだ。
上下or左右反転した局面⇒同じHash値にしたい。
0381オセロの人 ◆OtHeRo2E6Y
NGNG近況:
オセロを途中で放り出し(っていっても、思考ルーチン同士の対局はできてますけれど)
将棋へ。
日曜だけで、400行くらい書いてました。
将棋の局面の内部表現を考え、外部表現にKifu for Windowsの.bodを採用。
ここのところは局面の読み書きを書いているところです。
いろいろ書いて400行です。局面の入出力は200行ぐらい。
できたら、次は指し手の内部表現と外部表現を決めて、入出力部の予定。
#名前欄、次から変更します。
0382 ◆R/rLuLKeEI
NGNGやっと一手読みで7六歩が最善手になった。
まだ次善手は9六歩。
評価関数自体一手読みしているくらいの評価をしているのでやや重い処理になった。
明日も仕事なのにこんな時間までやってもうた。
0383 ◆R/rLuLKeEI
NGNG内、平手の.csaファイル入力部65行。
人による手の入力、局面のファイル出力部は全くない。
全ての部分が中途半端だからか意外と少ない。
0384 ◆R/rLuLKeEI
NGNG近況:
平手から深さ2までnegamax形式で書いたminimax探索ができるようになった。
しかし平手から深さ3になると駒を取る手と成る手がありえるので今の手抜き着手生成ルーチンでは無理。
また、展開する局面の数を外部で与えているのを止めて1手当たりの制約時間内で出来るだけ読むようにする予定。
0385 ◆R/rLuLKeEI
NGNG分岐数が多過ぎだからですかね?
0386デフォルトの名無しさん
NGNGチェスとかは残りの深さと関係なく大体2手か3手減らすみたいだから
とくにペアというのはないのでは?
0387C言語の人 ◆OtHeRo2E6Y
NGNG#オセロの正しいつづりはOthelloらしいです(^^;;
近況:
ドキュメントを書こう。
モジュール分けをしよう。
ツールを覚えよう。
エディタ操作を覚えよう。
ということを目標に勉強中。実際に触れてみましたから、今度は体験したことのまとめを書かないと、
このままずるずる、へたっぴなままになりそう。
今作っているプログラムは局面における全指し手生成/静的評価、minimax/alphabetaを実装して、止めるつもり。
というのは、いまやっているプログラムは将棋の基本データ構造と基本操作を見つけるのが目的だから。
ひょっとしたら、詰め将棋くらいまで持っていくかもしれませんが。
そうですね。詰め将棋までつくります。
その後、効率的なデータ構造を考えます。
まだ、頭が整理されていないので、コーディングは先延ばし(^^;;
0389 ◆R/rLuLKeEI
NGNGリバーシだと4手読んで評価の低い手を刈り12手まで読む4-12というペアがあった。
チェスとかだと1-8とか0-8のような相当乱暴な前向き枝刈りをやっているように思う。
評価関数の精度が十分高いわけでもないのに…
最近シグモイド関数なるものを知った。
これを2倍して1引いた関数をfとすればf([-∞,+∞])=[-1,+1]になる。
つまり評価値を[-1,+1]に押し込めて∞より大きい値(?)の大小を扱えるようになる。
そこで非終端節点の静的評価値(-∞,+∞)をf((-∞,+∞))+2=(+1,+3)と変換する。
これでどの節点の静的評価値も真の値[-1,+1]よ 略
0390デフォルトの名無しさん
NGNGチェスの動的前向き枝刈りの null-move pruning は
2手浅くした探索の結果でβカットするらしいことを読んだけど
0391 ◆R/rLuLKeEI
NGNGどのくらい進みましたか。
近況:
C言語の人以外にとっては面白くなさそうなので手短に。
・平手から3手目に出てくる取る手を実装した。
・今週は成る手を実装する。
0392 ◆R/rLuLKeEI
NGNGあ、済みません。
進んでないんでしたね。
>>390
βカット自体はminimax探索と同じ結果を得る後向き枝刈りでしたよね?
ま、Null moveと動的前向き枝刈りを勉強しておきまっさ。
もっと分岐が多い将棋や囲碁ではどうなんでしょう?
0393 ◆R/rLuLKeEI
NGNG2手浅い読みでダメだった手は次からは読まないという前向き枝刈りは既に森田将棋IIでやってました。
1-3-5-7-…とやるらしい。
昨日明け方まで将棋プログラムしてたせいで全然寝付けない。
頭痛がする。
0394デフォルトの名無しさん
NGNGどこにでもいるVBプログラマーです。
Cは昔に諦めたのですが、(理解できなかった)
VBってほんとマイナーだなと感じました。
でも、プログラマーとして
みなさん応援しています。
0395C言語の人 ◆OtHeRo2E6Y
NGNGさて、今週はルール上指せる手かを調べる部分を作ります。
3目並べやオセロは楽でしたけれど、
将棋の場合は煩雑になりそうです。
>>388 はい。頑張りましょう(^^)
>>393 私も睡眠の時間帯が変になると頭痛になります・・・。
>>394 応援ありがとうございます。
0396 ◆R/rLuLKeEI
NGNG煩雑になります。
てきとーに作った前のプログラムは巨大なswichi文による場合分けに手を焼きました。
よくよく考えて設計しないとすぐに見通しがとても悪くなります。
今回はcase〜breakに散在していた共通部分を一つして異なる部分を共通部分から呼び出す形にした。
例えば金に対して成れるかという問い合わせ関数は常に偽を返すなど。
というのをtemplate methodパターンで。
0397 ◆R/rLuLKeEI
NGNG0398デフォルトの名無しさん
NGNG0399 ◆R/rLuLKeEI
NGNGその案頂きます。
とりあえず今回の方法がボトルネックになった時か6度目の作り直しの時に検討します。
多分、本質的に等価な表現へ機械的に変換出来そうです。
0400C言語の人 ◆OtHeRo2E6Y
NGNGぼちぼち。
課題:
(やりやすいもの順)
・二歩チェック
・王手放置チェック
・打ち歩詰チェック
・千日手チェック
・千日手連続王手チェック
千日手関連は手をつけないかも・・・
0401 ◆R/rLuLKeEI
NGNGううっ、まだどれも実装してないや。
前回の挑戦では打歩詰めは一度も出なかったので最後にしよう。
千日手は自己対戦させるとよく出くわすから最後から二番目。
他は五手目以降からありえるので早めに入れたい。
詰め将棋だと千日手はないからちょっと楽かな。
0402デフォルトの名無しさん
NGNG大局将棋を指しましょう2《第1局第2譜》
ttp://game2.2ch.net/test/read.cgi/bgame/1073993361/
の「大局将棋」を作るって人はいないかい?
↑のスレでも試みたヤシはいたんだが、挫折したモヨリ。
0403デフォルトの名無しさん
NGNGFM将棋にやってほしいんだが、でかすぎるか。
0404 ◆R/rLuLKeEI
NGNG比較的規則の少ない将棋だけで手いっぱい。
近況:
・1000msで読めるだけ読むようにした。
・表示している盤面を手によって更新、再描画出来るようになった。
・成り、打は依然未実装。
会社の深夜のリソースを使えれば捗るのだがなぁ。
0405デフォルトの名無しさん
NGNGコンピュータが指さなくてもいいから。
0406 ◆R/rLuLKeEI
NGNGhttp://taikyokushogi.hp.infoseek.co.jp/index.html
携帯から書き込みなんで内容未確認。
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNGなんだか凄いというか、冗談としか思えない駒の数だな。
人間なんかよりCOM向けな気がするよ…。
0411C言語の人 ◆OtHeRo2E6Y
NGNGこんなことやろうとしてます。
・静的評価関数作成
→今ある性的評価関数はダミーなので駒の損得くらいは入れる
・CSA将棋に組み込み
→遊べるようになる
・指し手(合法手)リストアップの高速化
→今の方式は単純だが、無駄が多い。無駄を減らす案はある。
→検証のため既存のリストアップ部分は残しておく。
今からやろう!
と思いましたが、今はNHK教育で米長解説を楽しみます。
0412 ◆R/rLuLKeEI
NGNG人がやるにもCOMがやるにも辛そう。
きっと分岐の数が尋常じゃない。
>>411
チューニングに入ってきましたね。
プロファイラを使って定量的な評価してますか?
近況:
・思考とは関係ない人の入力部分を書いている。
マウスで駒をグリグリ動かして放すところまで。
着手リストに問い合わせてfrom-toの組数が0⇒無効、1⇒有効、2⇒成り/不成りの選択にする。
・未だ成り、打は未実装。
・評価値はN人ゲームのようにpnとdfの二つ用意する。
何を企んでいるかはお察しの通り。
もちろん親局面への値の渡し方は最小と和 略
0413263
NGNGyssの解説にある各マスに利いている「駒番号のスタック」という考えは
一般的なのかな?
移動先を指定する手の生成は、
そのマスにスタックされている駒だけ調べればいいみたいだし。
近況:
座標の内部表現 : X軸とY軸をひっくり返した(式x*16+y → y*16+x)。
方向の内部表現 : 十字方向と斜め方向をそれぞれ一纏めになるように。
王手(指定マスに利きをつける)生成
大駒に関しては交点を見つけた後の処理をいろいろと模索中。
0414 ◆R/rLuLKeEI
NGNGスタックでなければならない理由かよく分からないのでまだその考えは入れていない。
しかし王手関係の手を分類するのに何らかの工夫をしないと手の生成がかなり遅くなるはず。
近況:
・2手目、人の入力部分が一段落した。
・3手目、COM側の探索で配列の範囲越えの例外でダウンする。
これが治ったら成り/打なしの限定ルールで対局が可能になる。
・証明数/反証数による詰め探索は後回し。
・プロファイル結果:評価関数が最も時間を食っている。 ・Java(のSwing)が遅い。
VBの人も気が向いたらどぞ。
0415C言語の人 ◆OtHeRo2E6Y
NGNG対戦してみました。
'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四歩を守るかと思っていたのです。
が、よくよく調べてみると、
水平線効果で、必ず歩を取られるとコンピュータは思い込んでます。
0416C言語の人 ◆OtHeRo2E6Y
NGNGプロファイラですか・・・勉強します(^^;;
ベースとなるプログラムのプロファイル
改定Aのプログラムのプロファイル
・・・プログラムのバージョンとプロファイルの結果をまとめて残しておかないと・・・
ごちゃごちゃになってしまいそうですね。
とりあえず、ごちゃごちゃになる前に、
1.現バージョンの保存。
2.プログラムの整理
3a.高速化(?)
3b.水平線対策(?)
ということで。続きは明日(^^)
0417デフォルトの名無しさん
NGNGcvsなどのリビジョン管理ツールを使うことを激しくお勧めしておく。
0418 ◆R/rLuLKeEI
NGNG近況:
開発日記は余所でやったほうがいいですか?
・5手目:COM側の打つ手を実装中。
歩香桂の特殊処理は明日以降。
牛歩の如き歩みの遅さよ。
明後日は成る手か人側の打つ手に辿り着けるのだろうか。
>>416
VC++ならIDEからVSSが使えるはず。
WATCOMでもその手のツールが幾つか使える。
EclipseはCVSやVSSのプラグインがある。
他は…知らん。
まさかbccによるコマンドライン開発ですか?
0419C言語の人 ◆OtHeRo2E6Y
NGNGなかなか徹底できてません。
VC++6.0でコマンドライン開発です。
統合環境は使っていません(^^;;
近況:
プログラムの整理中です。
新しくいものは作っていないので、自分の作業が止まっているように感じます。
0420 ◆R/rLuLKeEI
NGNG・成り、打、王手関係の処理を実装した。
成りでたまにダウンする。
・デーモン将棋と対戦
負けました。
・探索はminimaxと評価関数は着手数の差。
・詰み探索はなし。
0421 ◆R/rLuLKeEI
NGNG・成りでダウンすることはなくなった。
成らなければならない位置で成らないバグがある。
・minimax手続きと評価値を証明数/反証数にしてみた。
序中盤では手が広くなるばかりであまり役に立たないようだ。
・プロファイルの結果
自玉への王手の判定が遅い。
利きの表を作らなくては。
・局面表が大きすぎるのか探索中にOutOfMemoryErrorがでる。
ハッシュ値は32bit、メモリ上限値の実行時オプションがないか調べてみる。
・評価関数が局面クラス、指し手クラスに組み込みになっている。
探索クラスに移動させたい。 略
0422 ◆R/rLuLKeEI
NGNG各局面の証明/反証数を(証,反)などと書く。
先手番では子局面の証明/反証数に対して(最小,和)。
後手番では子局面の証明/反証数に対して(和,最小)。
未展開の局面の証明/反証数は(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局面は全て対等。
証明/反証数の最良優先探索でも序盤では幅優先探索になってしまい、非効率
0423デフォルトの名無しさん
NGNG将棋製作は大体の人は始めに人が指せるようにする所から作ると思うから、
その段階でチェックしてしまう所だと思うけど。
ただ、再起的な処理は、データの位置が違っていたり、書き換えてしまって
いたり思わぬ所で間違えていたりしますからね。
>成りでたまにダウンする。
そういえば成りでバグといったら、名前は忘れたけどPSの将棋ソフトで
成り不成りを選ぶ所で止まるのがあった。苦情の電話をして聞いてみると
初期生産のPSだと止まってしまうとかなんとか言われてごまかされた。
0424 ◆R/rLuLKeEI
NGNGしかし、そこで成りを選択してしまえば人の手間がちょっと増えるだけだからと先のばしにしていた。
問題は先生役のCOMとの対戦で局面に食い違いが起こるだろうからその時にやろうと思っていた。
ところがこっち側のCOMが弱くて歩桂香が敵陣まで行けない。
とりあえず駒の損得を入れてみようと思う。
0425デフォルトの名無しさん
NGNGを
がもっとも面倒れですね
0426デフォルトの名無しさん
NGNG0427 ◆R/rLuLKeEI
NGNG多分そう。
Linux版CSA将棋がどっかに転がっていればそれを使いたい。
エミュレータ上で動かすのはなんだかなあと思っている。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGそういう閉鎖性は進展を阻害する悪因。
0431デフォルトの名無しさん
NGNGそういう面倒なことをどのように実装したらよいかが決まってくるから。
誰もが使える実装ってのはもちろん考えられるけど、
今のところまだそういう富豪的な手法が使えるほどにはコンピュータが早くない。
0432デフォルトの名無しさん
NGNG全体の進展は遅滞しますぞ。
0433 ◆R/rLuLKeEI
NGNG私のプログラムは棋譜出力部をまだ書いてないので別ソフトに食わすことすら出来ない。
0434デフォルトの名無しさん
NGNG未だに勝ち負けの判定を正しく出来る=生死の判定を正しく出来る=ルールを正しく実装している
プログラムすらないし。
誰か作ってオープンソースにでもしてみれ。
チェスだってルールの実装はビットボードとか色々論議されていて、
みんなばらばらに実装していたりするわけだし。
蓄積勝負で新規参入を阻害っていったいなんですか?
蓄積しちゃいけないわけ?
0435デフォルトの名無しさん
NGNGそうじゃなくて、「評価関数だの探索手法だの」のアイデアを生かすためには
面倒なことを避けては通れない、ってことだよ。
しかし、面倒とは言ってもそれをやってる新規参入者はぼこぼこ現れてるわけだが。
どうしても面倒ならOpenShogiLibとかどうよ。
もっとも、あれの中身をすらすら読みこなして使いこなせるなら、
自分で作っても大して面倒じゃないと思うけどな。
0436デフォルトの名無しさん
NGNGルール通り指すだけなら必要ない利きだとかいった情報を持ち出すと
複雑になるが、そのあたりはデータ構造の設計力の範囲になってきて
スピードだけではなく色々と実力差が出てくる。
0437デフォルトの名無しさん
NGNGはかる場所を間違えてない?
競争は的確な土台で行われない限りオナニーに過ぎないよ。
競争は誰かが勝つことではなく全体として成果を得ることに存在意義があるんだから。
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG考えてから組めよ。
だから日本のプログラマは馬鹿にされるんだって。
0440デフォルトの名無しさん
NGNG俺はまだ書いてないけどプログラム書けない人が負け惜しみ言ってるみたいだったから。
0441デフォルトの名無しさん
NGNGOpenShogiLib
http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/
巨大すぎ。。。
0442デフォルトの名無しさん
NGNGあんた前にもどっかで同じこと書いてたんじゃない?
よっぽど外国人にコンプレックス持ってるみたいだけどw
将棋のルールは一つしかないが、
データ構造に何を持つか?ということに絶対的な解はない。
その設計は評価関数で何を評価するかとか、どういう探索をするかとか、
全体の哲学に大きく関わっていて、なんでもかんでも誰かに提供しろと
言ってるのは考えることを拒否してるだけなんだよ。
それに、うさぴょんとかOpenShogiLibとかもあるんだし、それを使う手も
あるんだし、何が文句あるんだか。
自分がプログラム組めないからって負け惜しみはうっとうしいよ。
0443C言語の人 ◆OtHeRo2E6Y
NGNGプログラムの整理→終了
ドキュメント書き→あるていど出来た。これ以上今のプログラムへドキュメントは書かない。
合法な手の生成を高速化→手付かず
詰め将棋→凍結
静的評価関数→構想中
ほぼ、止まってます。
アイディアを書き出して、
・すぐとりかかれる
・もう少し整理すればとりかかれる
・漠然としていて、どうにもとりかかりようがない
という分類をして、できることからやらなければ・・・ですね。
少し大きめのポストイットを買って来ます。
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNG日本のプログラマに戦略と思想がないのは明らかだろうが。
0446 ◆R/rLuLKeEI
NGNGそれこそ寝食を忘れて熱中し気が付けばもう朝かと言うのがよくある。
ルールごときに何か楽しいかというとよりよいデータ構造、よりよいアルゴリズム、よりよいクラ
ス、これらを選定する作業がとても楽しい。
出来上がったプログラムよりそこへ至る過程に興味があるので静的なドキュメントより動的な開発
日誌や他人の研究結果、特にやってみたけど有意な結果は出なかった方が役に立ちそう。
成り駒は継承を使うととても簡単になりますね。
例えばと金は金のサブクラスにすると簡潔 略
0447デフォルトの名無しさん
NGNGちゃんちゃらおかしいけど、今度からは
「『俺の知る限り』日本のプログラマに〜」
という文章にして欲しいな。
0448 ◆R/rLuLKeEI
NGNG杞憂なればよし。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG『おまえらを見る限り』日本のプログラマに〜
0451デフォルトの名無しさん
NGNG話にならないので無視した方がいいでしょう。
理を説いても口汚くわめきちらしてくるだけのようですから。
0452デフォルトの名無しさん
NGNGおまえらには協力体制とかないのか?
競争と時間がすべてを解決するとかいう
漠然とした思想でやってんのか?
しかも自分はそういう思想に基づいた
行動をとってるという自覚もないなあ。
自覚して思想を持て。
0453デフォルトの名無しさん
NGNGだから協力は十分されてるっつーの。
0454白砂青松 ◆HakusaRWQc
NGNG「通信とUIと(ちゃんと動く)盤駒」の元ファイルみたいなのがあって、思考部分を
DLLかなんかでやってくれりゃいろいろ楽なのになぁ……と思うことはある。
特に怒涛のように商品化される東大将棋シリーズを見てるとね(笑)。
ただ、>>442にもある通り、パクろうと思えば元となるソースもあるし、まず第一に、
「それぞれが自分の考えたデータ形式が最善(とまで言うと言いすぎだけど)だと思っている」
からこそ、それぞれがデータ形式を含めて自分で書いているんだと思う。それを、
自覚だの思想だのという言葉で押し込めてしまうのはどうかと思うが。
繰り返すけど。
なんか1個、共通のフォーマットみたいなものができたら嬉しいよね。
思考部だけでもちょっと考えてることあんのよ、みたいな人が参入できるかもしれないし、
できればUIその他の部分は柿木将棋をそのまま提出してくれるともの凄く嬉しいんだけど(笑)。
ただ、それをしない人を責めるのは間違い。ボランティアを強制するのはそれこそ間違ってる。
0455デフォルトの名無しさん
NGNG例えばチェスや囲碁は外人が多いが将棋よりもはるかに秘密主義。
そういうことも知らんで適当なことを言うな、馬鹿が。
0456デフォルトの名無しさん
NGNG秘密主義を真似ちてるんでちゅかぁ。
だから思想がないって馬鹿にされるんだよ。
あほが。死ねや。
0457デフォルトの名無しさん
NGNG誰も真似してないです。
将棋のアルゴリズムってオープンに語られてますが。
誰が何を勘違いしているのか。
0458デフォルトの名無しさん
NGNGそんなことより、ややスレ違いだと思うが質問させろ。
マウスのポインタの上をエンターキー(左クリックでも可)を連打するプログラムって簡単に
作れますかね?
最近24にログインするのがつらいのでw
まぁ他にいろいろ方法はあるんだろうけど、こういうプログラム作っておけば以外に役立ちそうな気がしたので。
0459デフォルトの名無しさん
NGNG…でもどうやって起動してどうやって止めるんだろう(笑)
起動後、カーソル移動中に大変なことが起きそうな予感。
エンターキーの連打ってエンターキー押しっぱなしじゃ24のログインはダメだったっけ?
0460デフォルトの名無しさん
NGNGだったらもっと共有を進めろ
0461デフォルトの名無しさん
NGNGもういい加減あきらめろよ。見苦しいよ。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGC++分かる人には、CSA将棋+うさぴょんのソースで十分だと思うんだけど。
うさぴょんのソースの局面の基底クラスは特に癖のない実装だし。
詰め将棋は最新のアルゴリズムと比べてちょっと効率悪そう。
一応証明数使っているけど、脊尾詰を退化させた感じか(笑)?
読みの末端の処理の部分とかαβのところとかは癖が強いね。
しかし、この辺は最も自分で書いてみたいところのはずだから、いいでしょう。
0464デフォルトの名無しさん
NGNG共有を進めるための詳細な内容を公表してくださいな。
その内容に賛同できるかどうかが基準になってくるんだから...
人に言う前に自分がやってくださいな。
0465 ◆R/rLuLKeEI
NGNG1.UI・通信部
2.UIを含まない思考の共通部分
3.思考の核心部
で2の中間層をしっかり定義する。
今のCSA将棋のsikou.dllが二つのDLLに分かれるイメージ。
あるいはCSA将棋用sikou.dllの生のハンドラを覆い隠すクラス群とか。
DLLとかクラスとかよく分かってないのでとんでもない嘘を書いてるかも。
0466デフォルトの名無しさん
NGNGそれは本当に存在しないのか調べたり他の人の情報提供を待つのが
早道ではないでしょうか。
共有を望むならまず自分から発信するのが一番。
別にアルゴリズムやソースコードに限らず。
それでは奪われる一方になるリスクを背負うと思うなら、
他の人もそう思ってるから共有が実現されないんでしょう。
0467デフォルトの名無しさん
NGNG2の定義がすごく難しそう。
でも、OpenShogiLibが求めているものに一番近いかな。
http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/
0468 ◆R/rLuLKeEI
NGNGそれもそうですね。
基底クラスを流用しても大会規定に抵触しないんかな。
CSA将棋に今のままの好きなように実装できるDLLと効率は落ちるかもしれないが比較的簡単に
思考部を作れるDLLを選択できるようになっていれば取り掛かりやすいのにな。
後者は教育用にわざとシンプルに理解しやすいようにするとか。
0469デフォルトの名無しさん
NGNG大会の規定には抵触するかもしれないですね。
しかし、どこかでうさぴょんの育ての親さんが基底クラスくらいなら勝手に
使ってもらって構わないけど、この辺のクラスから先はダメだろうとかって
発言されてたという記憶があるんですが…
どこだったかなぁ。
0470デフォルトの名無しさん
NGNG自分としては自分で色々と工夫してやりたいので、全部公開されて標準化されると
かえってやる気なくなりますね。
0471 ◆R/rLuLKeEI
NGNG私が思ってるのは標準化というより叩き台(考えが揺れているのはご勘弁)。
今のルールでもCSA将棋の使用は必須ではないように、規定に反しない範囲で新規参入者の敷居を
低くするのが狙い。
標準化とは逆の多様化への足掛かりなればいいなと。
それはすぐに手を入れて大改造したくなるものでなければならない。
明日普通に出勤なのに何やってんだか…
0473 ◆R/rLuLKeEI
NGNGおはようございます。
そうそうそんな感じ。
知識の共有化は『コンピュータ将棋の進歩〜4』やここも含む各種掲示板や開発日誌で色んなアイ
デアを惜し気もなく公開してしているようだしね。
後は本人のやる気と根気だけだと思う。
0474白砂青松 ◆HakusaRWQc
NGNGここですね
ttp://homepage1.nifty.com/Ike/usapyon/faq.html
ユーザーの立場としては、
1.UI・通信部 …… 完全標準化
2.UIを含まない思考の共通部分 …… 叩き台の提供
3.思考の核心部 …… DLLによる配布
として欲しいな。
そうすれば、東大将棋は1ソフト1000円で買えそう(笑)
もひとつユーザーの立場からの意見を言うなら、UI以前に定跡を標準化しろよゴルァ、
ってことかな。
でも、これは2がしっかり固定していないと難しいそう(コンバータなどの回避策はあるけど)
なので、そういう点から2の部分を統一して欲しい、という思いはあります。
もちろん、敷居は低くなるし、どんなフリーソフトでも見栄えはよくなるので、12両方とも
「叩き台プログラム」が出るのは賛成。
最初は470さんの言うように、自分でも作りたい部分だからということでバラバラになるかも
しれないけど、柿木将棋タイプが標準になったとしたら、棋譜読み込みの凄さとか定跡が全部使えます、
ってことになるので、それはかなりの恩恵だと思う。なんで、いいものができれば、段々と
標準化されていくことになるのかな……って気がします。
まぁ、ここで吠えてる人は、なにがどう欲しいのか、それを自分で作ってみて、
実はその部分は将棋プログラムの根幹なんで、それぞれオリジナリティを出したいところだから、
だからこそ標準化ソフトは出にくいんだということにまず気づこう。
0475デフォルトの名無しさん
NGNG> まぁ、ここで吠えてる人は、なにがどう欲しいのか、それを自分で作ってみて、
実はその部分は将棋プログラムの根幹なんで、それぞれオリジナリティを出したいところだから、
だからこそ標準化ソフトは出にくいんだということにまず気づこう。
そういう時期は過ぎつつあると思う。
0476 ◆R/rLuLKeEI
NGNG全てのプログラム言語と全ての機械語のための唯一つの中間言語がないように無茶なんだろうな。
0477デフォルトの名無しさん
NGNGそこまで大仰な話ではないような
よってたかってちょこっと整理するだけだし
0478デフォルトの名無しさん
NGNG棋譜が標準化されてるように。
しかし教育用に「コンピュータ将棋エントリーキット」というのはいいアイディアかも
しれないですね。
単純な全幅探索と駒得だけの単純な評価関数くらいまで最初から実装されていて。
OpenShogiLibとかうさぴょんとかは既に大きなプログラムなので読む気もいじる気も
起きない人が多いかもしれないし。
0479デフォルトの名無しさん
NGNG思考ルーチン付で。
tic-tac-toeとか小物ゲームのルール発見してちょっと遊んでみたいとき便利だったり。
0480デフォルトの名無しさん
NGNGしかし、あの大きさでも、うさぴょんは二次予選シード中の最小プログラムだった
と聞いたことがあるんですが。
それはとにかく、エントリーキットならうさぴょんのソースを削ればすぐ作れそう。
うさぴょんの育ての親さん、「コンピュータ将棋の作り方」のページの続きとして
展開してくれないかなぁ。
あのページ自体、入り口に『まだまだ製作中』とか書いてあった気がするし。
0481 ◆R/rLuLKeEI
NGNGプラグインには最大公約数的なインターフェスだけしかなくて、プラグインのプラグインとして柿
木将棋定跡データベースプラグインを繋げる。
2の部分からは初期化の時だけ、どのデータベースを選択するか決めるだけであとは全くおなじ操
作になる…なったらいいな。
0482263
NGNG共有された部分で「何をしたいのか」が、
全然見えてこないんだけど...
ほんとの意味の叩き台(^^;とかだったら、
勉強も兼ねて作って(参加して)みたいし、
要望とか出してくれないかな?
(プログラミングのレベルは、極低ですんでその点はご了承くださいな >>263 参照)
0483 ◆R/rLuLKeEI
NGNGそれってどこで手に入るのですか?
自作ですか?
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG当然DLして組み込むことも可能だが、最新の棋譜を読み込んだ方が
より強い思考ルーチンができる・・・みたいな
0486デフォルトの名無しさん
NGNG自作のクラスライブラリ。
いくつかクラスを継承してゲーム固有の
タイトル、画面表示・入力、ある局面の合法な差し手の列挙、静的局面評価
を記述するだけで対戦可能なゲームアプリが出来る。
と言ってもこれだけじゃ激弱なんでもっとカスタマイズしないといけないどね。
ところでマルチスレッドな探索ルーチン書いてる人いる?
なんか単一CPUのパフォーマンスはもうすぐ(と言うかPen4は既に)頭打ちになるから
CPUメーカーはHT、マルチコアに逃げるっぽいね。
0487白砂青松 ◆HakusaRWQc
NGNGこれは白砂の考えですんで、他の人がどう考えてるかは判りません。
あくまでも、1ユーザーであり1ソフト開発を挫折したヘタレ(泣)の考えと思ってください。
ユーザー側として考える、「洗練された共通システムを導入するメリット」は、ひとえに、
そ の ソ フ ト が 使 い や す く な る
ってことですかね。
棋譜のペーストであるとか、そのソフトに独自の定跡を載せるだとか、そういう機能って、
ほとんどのソフトは貧弱ですよね。柿木将棋以外は正直使い物になりません。もちろん、
フリーソフトは言うに及ばず。
でも、気持ちは判るんですよ。
「ソフトを強くすること」とは、ほとんど関係ない部分ですからそれって。
なんで、ソフトを使う側は、
「もうUIは全部柿木に統一してさ、DLL配れよ。その方がこっちは嬉しいよ」
って考えちゃうんです。
0488白砂青松 ◆HakusaRWQc
NGNG例えば、フリーソフト御三家の一つ「うさぴょん」には、途中の局面を読む機能がありません。
まぁうさ親さんはきちんとそういうツールを持っていてうまいことやったり、メニューに「盤面」
みたいなものもあるので(選択できない)iniをいじるとできるようになるのかもしれませんが、
見る限りないです。
共通のシステムを導入することによって、これに対応できます。
とすると、洗練された共通システムを導入するメリットは、作者の側にもあるのかな……と。
0489白砂青松 ◆HakusaRWQc
NGNG人って、白砂以外にも(泣)いると思うんですよ。
そういう人向けに、「将棋を強くすることだけを考える環境」を提供して欲しい、というのが、
「共通システム+ちゃんと動く盤駒が欲しい」理由です。
またまた引き合いに出しちゃいますが、うさぴょんの親さんはHPで、
>最初は、ルール通りにきちんと指させることが一番苦労しました(--; そこまで出来てしまえば、
>後は苦労というよりも楽しみではないかと思います。
と述べています。
「共通システム+ちゃんと動く盤駒」は、この「一番苦労する部分」を省いて、楽しみを与えてくれる
というものです。
盤駒も作れないようじゃいずれ挫折するよ、とか、そういう部分が楽しみなんじゃん、という
考えがあることは判りますし、別にそれを否定しません。
でも、あってもいいじゃないですか。
そういう「基礎の部分」があれば、「俺にもできるかな?」って参入してくる人も増えるだろうし、
そうすればいろんなアイディアだって出る可能性は上がるし、ひいてはコンピュータ将棋全体の
利益にもなるわけですよ。大袈裟に言うと(笑)。
0490白砂青松 ◆HakusaRWQc
NGNGからですね。混乱させてしまったら申し訳ありません。
まとめますと、
>>487の立場からは、柿木レベルの洗練されたUI(通信等を含む)を共有。シェア・フリー問わず、いずれは
全てのソフトがそのシステムに乗っかって欲しい。そうすれば、東大やら激指に独自の定跡も簡単に
載せられるし、フリーソフトの見栄えもよくなる。作者も、その方がラクなんじゃないのかなぁ(という想像)。
>>489の立場からは、UI(動けばいい)と、ちゃんと動く盤駒を、自分にだけくれ(笑)。自分がプログラムを
組む時の叩き台として使えればいい。ただ、あとあとのことを考えると、↑のようなかっこいいシステムの
方がいいだろうから、できればそっちがほしいなぁ。
ということです。
まぁ、ユーザーのないものねだりと、プログラムもまともに組めないヘタレの
戯言レベルですね。改めて書き出すと(笑)
0491デフォルトの名無しさん
NGNGすごく面白いRPGより、使いやすいRPGツクールが欲しいてな感じですかね。
すごく強い将棋ソフトより、将棋思考ルーチンツクールみたいな。
定跡入れ、評価関数の編集、手筋、等を簡単な入力で行える。
そういうような意味かな?
この部分を見やすいインターフェイスで作り上げるのはけっこう難しいと思う。
RPGと同じLVぐらいのRPGが作れるRPGツクールを比べると、
RPGツクールを作る方が断然難しいように。
将棋ソフト作者は、それぞれやりやすいやり方で編集を行っていると思う。
でも、もしかしたら、そういうものができているのに、それをうpしてしまうと、
将棋が強い人がポンポン強い思考ルーチンを作ってしまい、
ソフトが売れなくなると考え、隠している製作者もいるかも。
0492 ◆R/rLuLKeEI
NGNGでも追いたい。
色々なUIとちゃんと動く盤駒と思考や定跡や色々な付加機能をもったコンポーネントを自由自在に組み合わすことが出来て、シェア/フリーによる一部分の開発でもそれを取り込んだり置き換えたりできるようなシステムがいい。
共有すべきは、誰もがどの部分でも開発したり、使ったりできる将棋用プラットフォームだと思う。
近況:
・JVMのヒープメモリの上限を1GBにしたらデーモン将棋相手に投了まで行けた(5?手目で負けた。棋譜無し)。
現実を見ると、遅々としてすすまんなぁ(笑)。
理想にはほど遠いや。
0493うさぴょんの育ての親
NGNG>>480
>>489
今年の選手権が終わったら考えます。
うさぴょんの骨組みをきれいにまとめて抜き出せばいいはず。
うさぴょんのUIのソースもおまけに付けましょう(w
0494 ◆R/rLuLKeEI
NGNG実際にはウイルスパターンの更新のように定期的な最新定跡のDLになりそう。
0495263
NGNG私の出番は無さそうですね(^^;
林森林 λ... 山篭りしてきます。
0496 ◆R/rLuLKeEI
NGNG大会後となるとGW後、うさぴょん2の開発や大会バージョンの整理、公開とか考えると叩き台バージョンの公開は9月頃かな。
ボランティアの方にはあまり無理はいえんしね。
0497うさぴょんの育ての親
NGNGいつ出来上がるかは、いつまで会社休んでるか次第ですかねぇ。
日記の方には書いているけど、昨年の8月終わり頃から病気で
ずーっと会社休んでます。もう半年以上になるんですね…。
まぁ病気なので思うように進められないけど、会社に行っているよりは自由になる
時間がいっぱいあるので、病気が治らなければ(笑)もっと早くリリースできそうです(笑)。
0498デフォルトの名無しさん
NGNG密かに静かに期待してますので、静養第一に。
0499うさぴょんの育ての親
NGNGどこのどなたか存じませんが、改めて読むと、うさぴょんのソース、
よく読まれてますね。批評も的確だと思います。
ただ、末端の処理については、実はKFEndの方法を参考にしているので、
変わった方法かも知れませんがオリジナリティーはあんまりありません(--;
さて、本題。>>463 さん、うさぴょんの育ての親に加わって貰えませんか?
でも、オリジナルの将棋プログラム書いている方なのかな?
0500うさぴょんの育ての親
NGNGなかなか静養第一ってわけにも行かなかったり…(泣)。
0501デフォルトの名無しさん
NGNG体が資本ですから、くれぐれもご無理なさらないように。
なかなかそうはいかないんでしょうけど(泣同意
0502C言語の人 ◆OtHeRo2E6Y
NGNGttp://pc2.2ch.net/test/read.cgi/tech/1051703369/667
思いっきり、誤爆してまったのは秘密。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG0506うさぴょんの育ての親
NGNGそうでしたか。開発、頑張ってください。
2Chでプログラム名をさらすのがあれでしたら、
選手権で会った折にでもこっそり「あれは私です」って教えてくださいね(^^)
0507デフォルトの名無しさん
NGNGいまんとこ合法手の判定まで完成。
合法手といっても王手放置・打歩詰・千日手は考慮しておらず。
マターリ進めたいと思っとります。
0508 ◆R/rLuLKeEI
NGNG近況:
前日からの徹夜&休日出勤で開発続行できず。
シャクなので息抜きに
・CSAサーバープロトコルの実装実験
2度目の挑戦
Java版サンプルCsaCommunicationを使用。
疑似サーバーTest56.exeとのコードレベルの通信方法は大体分かった。
やみくもに書き始めたのでこれで終了。
次回3度目の挑戦ではちゃんと状態遷移図書いてStateパターンの適用実験を予定。
仕事に戻りまっさ。
0509507
NGNGためしに簡単なルーチンを組んでみる。
合法手の生成がまったく出来ていないことがここにきてようやく分かる。
▽8八・などというネ申の一手を指しだしてどうしょうもならん。
うあー
0510C言語の人 ◆OtHeRo2E6Y
NGNGプログラミング言語は何で作ってあるといいですか?
近況:
完全に煮詰まってしまったので、
書籍を購入。今までは『コンピュータ将棋』『将棋とコンピュータ』の2冊しか資料がなかったのです(^^;;
往復13時間ほどかけ書店に行ってきまして新たな本を購入。
『コンピュータ将棋の進歩3』『同4』『人月の神話』『コンピュータの名著・古典100冊』
しばらくは春の夜長の読書になりそうです。
注:私は職業プログラマではありません(^^)趣味でプログラム書いてる人です。
0511デフォルトの名無しさん
NGNGここみるとCやC++が圧勝のようです
0512C言語の人 ◆OtHeRo2E6Y
NGNG13回大会の使用言語の集計は以下
27 C++
17 C
1 Ruby
1 Pascal
1 Python
1 Visual Basic
1 Delphi
1 ?
(手作業の集計なので誤りがあるかも・・・)
C++覚えないとダメですかねぇ・・・(遠い目)
0513デフォルトの名無しさん
NGNG0515 ◆R/rLuLKeEI
NGNG近況:
・相変わらず成らなければならない位置で成らないバグはほったらかし。
そのうちやる。
・序盤から証明数/反証数を使うのは無駄なので普通の評価関数とminimax手続きに戻した。
もう少しminimaxで遊んでバグ出しをする。
おやすみなさい。
0516507
NGNG思考のほうも組んでみたのでつが、minimaxからαβにしようとしたらおもいきりバグタ。
とりあえずminimaxにしといて打ち歩詰が先かな・・
0517復活おめ
NGNG517 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 16:22
自信ないですが、アップしてみました
518 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 16:33
(゚Д゚≡゚Д゚)エッドコドコ?
0518 ◆R/rLuLKeEI
NGNG近況:
・王手の判定を高速化
王手を回避しないバグを入れてしまったのでボツ。
・駒の損得を入れてみた。
やはり負け。
価値の表を外部ファイルにして実験中
0519 ◆R/rLuLKeEI
NGNG近況:
・駒の価値のファイルをちまちまエディタで変更するのが面倒なねで将棋プログラム上のダイアログで扱えるように改造中。
年度始めもバタバタして進みそうにない。
0520デフォルトの名無しさん
NGNGやっぱりC++が一番楽だな
オセロの時もお世話になった
C++の作者に感謝
0521デフォルトの名無しさん
NGNGCでもいいんじゃない?
最終的にGUI環境を含めた実現を目指すのであれば、
(Cで製作している人は)C++の選択がベターかと思うけど...
中には思考部分はC、GUI部分はC++と言う人も居るんじゃないかな?
0522デフォルトの名無しさん
NGNG0523C言語の人 ◆OtHeRo2E6Y
NGNGCなら
typedef sturct { /* ... */ } Te;
int listup_te(Te te[]); /* 局面はグローバルで持つ、配列teは十分な大きさを持つ、戻り値は手の数 */
C++なら...
class Te;
class Kyokumen {
public:
std::vector<Te> listupTe() const;
//...
};
うーむ・・・正しくなさそう・・・
C++はわからんです。
0524デフォルトの名無しさん
NGNGとにかくC++のソースを山ほど読んで、
どういうところでC++の機能(クラス、テンプレートなど)を用いるかを
理解しないと、Cよりたちが悪いよ。
0525デフォルトの名無しさん
NGNGprotected:
Board* m_pBoard; // 盤面へのポインタ
std::vector<Move> m_MoveListNode; // 合法手を格納
public:
virtual void generateMoves(); // この駒の合法手を生成
Move getNextMove(); // 格納した手を返す(次がなければEND_OF_LISTを返す)
};
class SlidingPiece : public Piece { // 飛び駒クラス
public:
void generateMoves(); // 飛び駒用に、駒に当たるまでループして生成
};
こんな風にして、駒の中に合法手を生成する関数をいれる方法もある
とか中途半端なアドバイスをすると余計分からなくなるかもしれない・・・
0526デフォルトの名無しさん
NGNG親クラスから合法手を取得して思考部分のみのプログラミングで済むよーな
誰か一人が作れば(ry
0527(263) FENNEC ◆pot.c2.tqw
NGNGだからそれが難しいんだって、何度言えば(ry
というのは、おいといて(^^;
問題点を挙げるとすれば、
製作者に「自分が理解できる構造・仕組みであればいい」というのが前提にあるからだと思う。
誰かに利用されることを前提とすると根本から考え直さないといけなくなったりする。
提供される側が、提供する側の「仕様が全て」と割り切るか、
提供される側が、提供する側に「要求」を出すか。
駒や座標の扱いなんか、いい例だと思うが、
提供される側として意味不明の数値よりは、意味が汲み取れる数値のほうがいいに決まっているが、
そうなるとどうしても、製作者側からみれば「無駄な」変換作業が必要とされる。
いざ提供されたとしても、思っていたものと違うといって使われないようであれば意味がなくなるし。
どういうフォーマットで受け渡しするのかが、必要じゃないかな?
あと、合法手を生成するレベルだと、
それなりの基本情報(例えば利き)を副産物?として得ることが出来ると思うけど、
そういう類の情報の扱いも、思考部分で独自にルーチンを組んで取得するのか
それともメソッド等で取得するのか...
0528 ◆R/rLuLKeEI
NGNGサブクラスにある下のメソッドを呼ぶ。
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();
}
}
0529 ◆R/rLuLKeEI
NGNG親クラスで合法手なしなら上のメソッドは呼ばないし、呼んでもnullを返すと投了扱いにしている。
この枠組みに手を加えてManPlayerとMiniMaxPlayerを書いた。
評価関数が局面クラスと分離していないのが問題。でもいいや、動いてるし。
0530デフォルトの名無しさん
NGNG将棋ソフトの開発はBorland C++ Compiler5.5程度でもできるのでしょうか?
あるいは、Borland C++ Builder 6 Personal
または、Visual C++ 5.0 6.0や.NET Std 2003などが必要なのでしょうか?
0531あぼーん
NGNG0532デフォルトの名無しさん
NGNGBorland C++ Compiler5.5なら十分できます。
0533デフォルトの名無しさん
NGNGお返事ありがとうございます。
1年後の選手権参加を目標にがんばってみようと思います。
0534デフォルトの名無しさん
NGNG駒を作るのが面倒なので辞めました。
どなたか駒をもらえないでしょうか?
0535 ◆R/rLuLKeEI
NGNG駒の何がお望み?
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNG0538 ◆R/rLuLKeEI
NGNGだったら礒部将棋のページにフリーのPNG形式とBMP形式のがあるでよ。
個人的には白金製のディスプレイ用巨大駒が欲しい。
0539デフォルトの名無しさん
NGNGありがとうございます。
暇なとき作ってみます。
0540 ◆R/rLuLKeEI
NGNG既知のバグは残したまま
・評価の重み付けを何となく対話的に更新する処理を考えながら実装中。
05419X9
NGNGファイルを開くときにマウス入力になったり、
将棋盤を表示するスペースが大きく、読み筋を表示する位置が
なかったりしたので、ウィンドウズアプリで作り直し。
ただ、ウィンドウズアプリ製作はあまり経験が無いので、
別のゲームを作って知識を深めてから将棋に取り掛かる予定。
後、少し前に作ったオセロですが、よかったら遊んでください。
動作環境はウィンドウズで、キーは位置は、Enterで駒を置く、
スペースで次の一手のヒントを得る、Escで終了。
http://gamdev.org/up/img/487.lzh
05429X9
NGNGコンソールアプリ、ウィンアプリ大体同じなので、
その部分はコンソールアプリの方でも製作継続中。
今はカーソルの移動、盤の反転、駒を動かす、
棋譜のセーブ/ロードなど、まだ基本部分の所まで。
0543 ◆R/rLuLKeEI
NGNGJavaだと局面の配列はポインタの配列になるので局面を登録すると空きメモリが減っていくらしい。
とりあえずメモリ不足に強い探索アルゴリズムを考えてみる。
0544デフォルトの名無しさん
NGNG>局面表の衝突が起こる前に仮想メモリを食い尽くしてダウンしてしまった。
>Javaだと局面の配列はポインタの配列になるので局面を登録すると空きメモリが減っていくらしい。
(局面そのものの記録じゃなくて)
booleanかintの巨大配列に局面のハッシュ値だけを登録するのじゃ駄目?
0545デフォルトの名無しさん
NGNG0546 ◆R/rLuLKeEI
NGNGそれにめったに起こらない衝突が起こったとき同一か否かは知りたい。
物理メモリをたくさん積んでも時間稼ぎみたいで根本的な解決にはならない。
やりたいこと:
どんなメモリ量でも最適なハッシュ表のサイズを人の介在無しで決定する。
現状、ハッシュ値に32ビット値そのまま使ってんのが原因やね。
とりあえず前向き枝刈りを入れてみた(時間稼ぎ)。
0547デフォルトの名無しさん
NGNGハッシュ表は↓な感じで評価関数をキャッシュするために使うと思ってたけど、何か違った?
int hyouka(Kyokumen kyokumen){
//ハッシュが登録されている場合はその中身を返す。
//登録されていない場合は真の評価関数の値を登録して返す。
//衝突は滅多に起こらないから気にしてない。
int hash = kyokumen.hashCode() / hashHyou.length;
if(hashHyou[hash] == 0 ){
hashHyou[hash] = _hyouka(kyokumen);
}
return hashHyou[hash];
}
>どんなメモリ量でも最適なハッシュ表のサイズを人の介在無しで決定する。
java.util.HashMapは動的にサイズを変えてるね。
それとも、確保できる物理メモリを全部起動時に占領してしまうとか。
0548 ◆R/rLuLKeEI
NGNG難しく考えすぎていました。
ありがとう、やってみます。
0549 ◆R/rLuLKeEI
NGNGが、要素の型EvaluatedValは構造体だしなあ。違うんかな。それっぽいけど。
64MBに納まる配列が二組。
64ビットで区別して衝突したら前のを二組目に押し込んで新しいのを一組目に入れるようだ。
64ビットハッシュ値はハッシュ表の添え字と関係あるけどそのものじゃないんだね。
仮想メモリ込みで空きが128MB未満だと動かんのか…違っていたらごめんなさい>うさ親さん
0550うさぴょんの育ての親
NGNGいます。そうすることで、反復深化を行う場合に効率よく最善手から探索を
行うことが出来るようになってます。
それから、メモリの使用量ですが、デフォルト値はソースに書いてある64M
ですけど、物理メモリの量にあわせて動的に決めてます。
そんなとこで。
0551デフォルトの名無しさん
NGNGstruct 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) // キーが違うので同一局面ではないだろう。。。
// 再ハッシュして登録
0552551
NGNGif(hash_table[ hash.key & HASH_SIZE != NULL &&
hash_table[ hash.key & HASH_SIZE.key != hash.key)
// 再ハッシュして登録
else
// 登録されてる値より良い値なら更新
こうだった
0553デフォルトの名無しさん
NGNG0554 ◆R/rLuLKeEI
NGNG?
「キーが違うので同一局面ではないだろう」というより「キーが同じなのに違う局面てことは多分ないだろう」ですね。
0555デフォルトの名無しさん
NGNG局面Bのハッシュ値 = 25000
ハッシュの大きさ = 10000
だとしたら
15000 % 10000 = 5000 -> hash_table[5000]
25000 % 10000 = 5000 -> hash_table[5000]
登録場所は一緒だけどキーは違う
0556 ◆R/rLuLKeEI
NGNG・キーが違うから局面が違う。
・局面が同じならキーは同じ。
・キーが同じでも局面が同じとは限らない。
どこが間違っているのだろう?
・キーと登録場所は違う。
・キーと局面のハッシュ値は同じ。
この辺りの私の思い込みが怪しいのか…ようわからんので寝る。
起きて再考したらすんなり理解出来るかもしれない。
0557 ◆R/rLuLKeEI
NGNGただ今私の論理は破綻中。
やはり帰って寝ます(1.5時間くらい後)。
0558デフォルトの名無しさん
NGNG64ビットあれば、添え字の衝突はあってもキーの衝突はまずないんじゃないでしょうか、、。一日中探索したりしない限り。
あと、上のは局面表を構造体で登録する方法を示しただけです。
構造体がどうこう言ってたから、ハッシュ値しか登録してないんじゃないかと思ったので。
0559 ◆R/rLuLKeEI
NGNG実は最善手以外の全ての手も入れてました。
探索自体かなり遅いので32ビットでもキーの衝突は一度もありませんでしたが、
めったに起こらないことにも拘りたいのは私の性分なんでね。
仕方がない。
でも私が局面表の目的を誤解していたのは確か。
この度は猛烈に参考になった。
実装やり直しは多分5月中旬。
まだ色々と試行錯誤したいので越えそうにない壁にぶちあたった時はよろしくご教示くださいませ。
では今度こそおやみなさい。
0560デフォルトの名無しさん
NGNGめったにおこらないことにも・・・というなら、論理上ハッシュはつかえないのでないかと小一時間
0561 ◆R/rLuLKeEI
NGNG何日も探索を続ければ一度くらいはキーの衝突はありえる。
その時キー以外に比較するものがなければ真に異なる局面なのか判別できない。
もし異なる局面でよりよい評価値であったなら正しくない諸情報で置き換え、またそれを使う。
キーと局面が一対一対応か、キーの他に局面そのものがあれば判別できるので前のを捨てて新しい
のを入れるか、よりよい評価値であったなら更新するか、また使うときも異なる局面の情報を間違
って使ってしまう心配がない。
区別出来ないのは気持ち悪いなぁと思 略
0562 ◆R/rLuLKeEI
NGNG震災では倒れたわけで、起こりうることへの対処がないのはとても不安。
この話題、私が非常に不利なので撤収したくなってきた。無視して頂ければ自然消滅しますので皆
様よろしく。
0563デフォルトの名無しさん
NGNG設計者が行なっているのは、ある「想定」に従ってコスト計算すること。
阪神大震災どころか、原爆が落ちたって大丈夫な建物というのを作ることは技術的には可能。
でも、コストがあまりにかかり過ぎる、ってことなだけ。
今回の話で言うなら、キーが誤って衝突したときにどれくらいの被害が起きるか。
少し手が信用できなくなるだけなのか、もっと致命的なことが起きるのか。
そしてそれを回避するためにはどれくらいコストがかかるのか。
というのを基準においてあくまで「コスト計算」として判断しなきゃダメ。
例えば、オセロの完全探索みたいな時は衝突は致命的。だからそういう時は
盤面情報が落ちないようにキーを作る。
将棋でももちろん情報が落ちないキーを作ることは可能で、
あとはそれがどれくらい必要なのかを検討するだけでしょ。
0564 ◆R/rLuLKeEI
NGNG原因はすぐに分かったが他の人はどうしているのだろうと調べたり聞いたりしてみて、「でもこれ
は完全じゃない」と強く思った次第。
不完全だか単純と完全だか複雑なら後者により興味がある。αβよりSSS、前向き枝刈りより全幅
探索、完璧な評価関数…私は負け組に属しているらしい。
確率的にほとんどないしほとんど影響ないから問題ないというは私が許さないだけです。
許さないならどうするというのかと言われると困ってしまうがどう 略
0565デフォルトの名無しさん
NGNGどっちみち、まともに動いてないプログラムなんだから。
0566デフォルトの名無しさん
NGNG0567 ◆R/rLuLKeEI
NGNG全くだ(笑)
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGここの、"The transposition table"という論文によると、
キーが衝突した時の解決策は
1.盤面の情報を全て記録しておく(メモリ不足になるので良い作法ではない)
2.キーが衝突した局面表に記録されてる手が、現在の局面での合法手かを確認する(エラーを少しは回避できるだろう)
ということらしいです。
2の場合、
ある局面でのある手の評価は、他の局面でも大体一緒だろう、
ということで、違う局面の評価だったとしてもある程度信用できるんじゃないでしょうか。
64ビットなら、衝突する可能性は1%程度だそうなんで、そうそうある事じゃないし、
たまに間違えちゃったら、まぁしょうがないかって具合でいいんじゃないですか、、、
市販の将棋ソフトも、大勝勢の場面で投了したり、詰んでない局面で詰みです、とか表示されたりすることもたまにありますし。
それでも嫌なら、ハッシュを使うのをやめればいいわけで・・・
0570 ◆R/rLuLKeEI
NGNGまさに、解決策1をしてみて駄目だったということを確認したわけだ。
しかしもっと基本的な部分で本当にまともに動いていないので局面表を使わない探索に戻した。
まともに動くようにしてから局面表を実装してみる。
現実的に取り得る対策として解決策1は絶対採用しない。
実現方法としてハッシュは多分採用する。
その前にO(logN)の別の実装を試してやっぱり遅くて駄目でしたという回り道をするだろう。
私が将棋とプログラミングに向かないようだな。
0571C言語の人 ◆OtHeRo2E6Y
NGNG(1つの駒の所属1ビット、名前4ビット、位置8ビットの12ビット=1.5バイトが40駒)
キーからハッシュ作って・・・。重複不可なのならキーは必要だし・・・。
重複可なら60バイトのキー値はいらないし。
とか考える前に、私は静的評価関数を考えなければ。
近況:
プログラム開発完全停止。
開発環境をVineLinuxに移行しようと模索中です。
環境整備できたら、データ構造から書き直しする予定。
0572デフォルトの名無しさん
NGNG(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バイトを切ります。
0573 ◆R/rLuLKeEI
NGNGイト)で盤上は表現される。持ち駒があるときはその配分を付け加えるがその
分だけ盤上の駒が減るので35バイトで表現することができるといえる。"とあ
るけど…今はまともに動くプログラムにする方が先決。
0574 ◆R/rLuLKeEI
NGNGゾブリストなんとかとかいうハッシュキーの生成に使うんかいな?
手元にソースかないんでわからへんねん。
わてのはまともに動いてへんからどうでもええねんけど。
0575デフォルトの名無しさん
NGNG天文学的数字だろうけど、どういう風に計算すればいいんだろう?
281ビットで表現できるということは2の281乗?
0576ミナツキ サヤ ◆SAYAC2HJWE
NGNG0577デフォルトの名無しさん
NGNGの文献は持ってないが、Huffman符号で切りつめてみたけど
盤面は最大で 267bit
最小で 81bit
持ち駒は片方のみ持つことで21bitぐらいか...。
0578デフォルトの名無しさん
NGNG俺が途中まで考えたのは…
盤に駒を置くより、駒に座標を持たせた方が空白を考慮しなくていい分だけ情報量は減らせるはず。
1つの駒に持たせる情報は、成り(2種類)、先手後手(2種類)、と座標(81+1(持ち駒))で、
2*2*(81+1) = 328通り
だね。
それと、手番(2種類)が必要だね。駒の種類は情報格納位置で表せる。
更に、ルール上、玉と金は成れないので、成り情報の分は減らせる。
更に、玉は先手後手1つづつと決まっているので先手後手情報の分も減らせ、なおかつ持ち駒になる事もないから座標から持ち駒の分も減らせる。
歩と香は成らない状態で敵陣1段目に存在することができないので、1つの駒につき座標情報を9つ減らせる。
桂馬は成らない状態では敵陣1段目と2段目に存在できないので、1つにつき18マス情報を減らせる。
持ち駒以外のマスには1つのコマしか存在できないから、駒の位置が1つ決まるたびにその分他の駒の位置は限定される。
二歩を考慮すると、もう少し情報を減らせる。
あとはこれを計算すればいいんだけど、面倒くさいんで、頭のいい人、お願い。
まあ、328の40乗より局面が多いって事はないね。
0579C言語の人 ◆OtHeRo2E6Y
NGNG>>573 (コンピュータ将棋 ISBN4-7819-0581-1)の281ビット表現は
おいらにはワカランです(^^;;
最小の証明をやろうとすると大変だから、
発見した方法を提出していくといいかも。
うう、プログラムぜんぜん進んでない。。。
大会に出場される方々はいろいろ、準備されてるんだろうなぁ・・・。
やっぱし、もうちっと脳みそを鍛えねば来年の大会参加すらアヤシイですのぉ。
0580デフォルトの名無しさん
NGNG盤上の駒情報:5ビット×40(種類3ビット、成り1ビット、先手後手1ビット)
で全部盤上にあるときは281ビットで表現できる
0581デフォルトの名無しさん
NGNG持ち駒があるときは、1枚につき
盤上の駒情報5ビット減り
持ち駒情報4ビット(種類3ビット、先手後手1ビット)増える
0583まともに動いていない ◆R/rLuLKeEI
NGNG初めて281bitの意味が分かったよ。
局面の数は高々10の85乗と言うわけだな。いや違うか…。まあいいや。
0584sato
NGNG0585デフォルトの名無しさん
NGNG家の2階からでも落としてください。
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG6月20日でどう。
0588デフォルトの名無しさん
NGNG盤面の記憶だけを考えてみた。
駒の種類と同じで、先手後手も位置で表現できる。
盤上の位置は0〜80までの番号で表せられる
そうすると位置情報で7bit、成りで1bitか
(持ち駒は座標を盤外にする)
これで1盤面当たり40byte(320bit)
扱いやすさを考えると、この当たりが妥当かと思われる
ただし、これはCでの試算なので、C++はともかくJavaとかだと
classにするともっと消費されるかもしれない
0589デフォルトの名無しさん
NGNG王以外は先手後手情報は位置では表現無理でない?
0590デフォルトの名無しさん
NGNG盤面に全駒が乗っている場合の圧縮限界を計算してみた。
歩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程度か)
案外、将棋の盤面って少ないのかも。
0591デフォルトの名無しさん
NGNG> 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!
0592デフォルトの名無しさん
NGNGコンピュータ将棋ソフト世界一を決める第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 金沢将棋
0593590
NGNGそれを直したら9.63E+070=236bit。
ついでに局面を持駒まで含めて数えるのをjavaで書いたところ、
すべての局面を表すのに必要なのは237bit〜30byteらしい。
最小ハッシュ関数をどう作るのかは判らん。
0594デフォルトの名無しさん
NGNG>盤上の駒の有無:81ビット
>盤上の駒情報:5ビット×40(種類3ビット、成り1ビット、先手後手1ビット)
ということですが、1一に駒がある、ということは分かるんですが、
1一に歩じゃなくて香がある、という情報(その位置にある駒の種類)は、
どこをみれば分かるのでしょうか?
それが分からないと、正しく盤面を一意に表せないと思うのですが。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNGハッシュのことは、ほとんどわからないんだけど、
まず、>>580のデータで照合して、
それに合致した場合あらためて駒の種類も照合するというのではないの?
0597まともに動いていない ◆R/rLuLKeEI
NGNG81マスを一直線に並べてビットの立っている順に駒を並べれば区別できるはず。
盤上は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が消せるわけやね。
0598デフォルトの名無しさん
NGNGなるほどφ(・・
81ビットと81マスを1対1に対応させれば、
ビットの立っている位置=固定位置となり駒の位置が解かる。
さらにビットが立った回数nから、n番目の駒情報が参照できる。
もっと勉強しなければいけないなぁ(^^;
0599まともに動いていない ◆R/rLuLKeEI
NGNG2^10≒10^3
なので
2^237≒10^71.1 今まで言われてきた総局面数の最小推定値を探しに前レス・前スレッドを遡ってみるわ(携帯で)。
0600まともに動いていない ◆R/rLuLKeEI
NGNG2^10≒10^3
なので
2^237≒10^71.1 今まで言われてきた総局面数の最小推定値を探しに前レス・前スレッドを遡ってみるわ(携帯で)。
0601デフォルトの名無しさん
NGNG>>10
同一プログラムだからといって条件が一緒とは限らない。
アルゴリズムひとつとっても、CPU毎に得手不得手がある。
自作板より
0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNGがんばれ〜
0605まともに動いていない ◆R/rLuLKeEI
NGNG私からも頑張れー
0606デフォルトの名無しさん
NGNG譜面のデータベース入力をベースにした人口無能では駄目なの?
0607デフォルトの名無しさん
NGNG0608デフォルトの名無しさん
NGNG問題ないよ。それが現代の将棋だから。
人間も「考えている」わけではなくて、時間の許す限り手を「探している」んだし。
手を探しながら局面を展開して「記憶されている局面」と照合を繰り返す。
その照合によって得られた自分なりの局面評価をもとに判断する。
上級者と初心者の違いは、記憶している局面数と、
それらの局面の評価基準と言えるんじゃないかな?
「奇襲」や「勝負手」というものが存在するのも、
人間心理としてタラレバ(相手が対応できないかもしれないこと)に期待しているわけだし。
一般に、コンピュータに対する定跡外しは、これに該当すると思うよ。
「定跡さえ外せば弱い」という認識で対戦しているだろうし、
逆に「定跡を外しても強い(きっちり対応される)」という認識になれば、
そいうことはなくなるんじゃないの?
少し前にも出ているけど、
将棋における総局面数を管理(再現、評価など)できれば、
それに越したことは無いだろうけど
コンピュータの記憶容量と時間の関係から敬遠されてきた手法であることも事実。
全てをそれに頼るのではなく、
いかにそれを有効活用するかが重要かもしれないね。
0609C言語の人 ◆OtHeRo2E6Y
NGNG近況:
私はプログラムとは違う方に生活の比重が移ってしまっています(^^;;
来年はGWに予定が入ってしまいましたし、しばらくは将棋プログラムから遠のきそうです。
>>415 で動かしたプログラム・・・から成長させるのは大変そうなので、
時間ができるときまで、プログラムは封印です(^^;;
・・・いや、まあ。
大好きなプログラミングですから、
マルチスレッド関係の本と、コンピューター将棋の進歩2を最近買いました。
そのうち、また動き出しますね(^^)
0610デフォルトの名無しさん
NGNG他のプログラムのソースコードを読んだりアルゴリズムの研究をされている方に質問があります。
「コンピューター将棋スレッド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」でコンピュータ将棋のソフトウェアの事を
よく知らずに生意気な発言をしている点をご容赦ください。よろしくお願い致します。
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGhttp://www32.ocn.ne.jp/~yss/book.html
0613デフォルトの名無しさん
NGNG「江戸時代辺りからの積み重ねて来た譜面のデータベース入力をベースにした人口無能」
といっても途中の局面の評価(どちらが有利な局面か?)はどうされるんでしょうか?
ここにいろいろな駒の利きとか玉の固さとか何らかの理屈を考えた評価関数を持ち込んだら
人工無能(非常にトリビアルな計算のみで動くプログラム)というより普通の将棋ソフトに
非常に近くなると思いますし。
そこから到達した最終局面のうち、勝利局面と敗北局面の数だけで重み付けするんでしょうか?
その場合、特定の局面から勝ち、負けに到達した対局数が少なすぎて十分信頼できる評価関数にならないのでは?
0614C言語の人 ◆OtHeRo2E6Y
NGNGttp://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
の左下のほうに関連書籍がまとめてあります。
「将棋とコンピュータ」は入門書としていいかも。
0615まともに動いていない ◆R/rLuLKeEI
NGNGまともに動いていないプログラムですが
1.1〜数手。深さは固定しない。
2.N^n
3.画期的なアルゴリズムはあまり望めない。
0616デフォルトの名無しさん
NGNG無理だって、所詮、将棋プログラムは人間に勝てないって。
そもそも、取った駒を再配置できるシステムが将棋を奥深い
ゲームにしている反面、その事が決定的に最強将棋ソフトを
今日まで誕生させる事が出来ない原因でもあるわけだ。
0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNGどういう条件下においてか、を書いてもらえると有り難いんだけどね...
コストを無視すれば、「無理」でもないし、「勝てない」こともないでしょう。
0619うさぴょんの育ての親
NGNG幅としては大体30手前後を読む。深さは7〜11手くらい。
2.N^(n/2) 私の場合、大体1手深く読むのに5〜6倍時間がかかる。
3.前向き枝刈をもっと上手にやるか、既に>>611で触れられているように、ありそうな展開を
深く読み、なさそうな展開は浅く読むというように、CPUリソースの有効な利用が必要。
まだ『画期的』な方法とは言えないかも知れないが、>>611で触れられた激指の方法は、
多くのプログラムに影響を与えている。
0620デフォルトの名無しさん
NGNG2. 1手深く読むとおそらく4、5倍時間がかかってるみたいです(正確なところ今ははわかりません)
3. すでに良く知られているアルファ・ベータ法は画期的だったと思います。
これを使わないと時間は何十(何百?何千?)倍時間がもかかります。これに匹敵する効果的な
手法はないですが、あるものだと信じて一応やってます。
0621デフォルトの名無しさん
NGNGhttp://game6.2ch.net/test/read.cgi/bgame/1061102154/188 等(Part1を読んだ方が詳しい)
0622590
NGNGコンピュータ将棋番外編2・進歩に懐疑的な人たち
http://game6.2ch.net/test/read.cgi/bgame/1061102154/783
では約2.69*10の70乗だと言っている。(ソースは知らん)
593の計算に二歩禁を入れるともう数桁減るような気がするが、
それでも10の60乗をきることはないと思う。
0623まともに動いていない ◆R/rLuLKeEI
NGNGありがとうm(__)m
0624606
NGNG>ここにいろいろな駒の利きとか玉の固さとか何らかの理屈を考えた評価関数を持ち込んだら
>人工無能(非常にトリビアルな計算のみで動くプログラム)というより普通の将棋ソフトに
>非常に近くなると思いますし。
>そこから到達した最終局面のうち、勝利局面と敗北局面の数だけで重み付けするんでしょうか?
評価関数を使わないでも、江戸時代からの譜面は膨大な数に上るし、それらを
全てデータベース化すれば、ある程度の指し手は検索機能を使えば出来ます。ま
た、膨大なデータを集めたとは言っても、対戦相手が人間である以上、データベ
ース収録外の場面が必ず出て来ます。それらをRAMにストックして人間側が勝った
場合だけ、駒の指す順番を新たに記憶していけば良いんではないかな?この部分は
自己学習型ですよね。
将棋に置いて、評価関数を導入すればするほど、それこそAIプログラムに近
くなり、ベラボーな処理能力を要求されるが、AIを使わず検索機能だけを特化
すれば、実用的なスピードを出せると思います。
つまり、データベース検索と自己学習を合わせれば、いずれは最強の将棋プログ
ラムが出来ると思います。
幸いにも、HDDが一昔に比べて値段が安く為っているから、容量の問題はクリアー
出来るだろうし、CPUのスピードも民生用ですら一昔前のスパコン並のスピードに
なっています。
0625デフォルトの名無しさん
NGNG1手毎に現在ある全将棋ソフトにCOMvsCOMで対戦させ、もっとも手数が少なく投了させれそうな手を採用する将棋ソフトをつくってみるとか。
アルゴリズムは他人任せだが、勝つか負けるかといえば、勝てるかも知れない。
こういうソフトの案は既出かな。
0626デフォルトの名無しさん
NGNGえーと、>>622の数字見て言ってる?
それと、ある局面でデータベースに複数の指し手があった場合、その選択基準は?
0627デフォルトの名無しさん
NGNG作ってみれば?
0628うさぴょんの育ての親
NGNG0629610
NGNG他、皆様ご教示ありがとうございます。
指し将棋プログラムを作りたいというの私に取ってもは学生の頃からの夢なのですが、
プログラムスキルの無さと自分自身の棋力があまりにも弱い事から(クラブ24で10級未満)
挫折し続けて夢に終わっております。
それでも最近C++のプログラムを少し勉強する機会がありましたのでもう一度チャレンジして
みようかななどと思っております。多分、強いプログラムを作成するのは私には不可能だと思いますので
最弱(デタラメ)な手を指すところから自己学習して少しでもましな手を指すようなプログラムとか
必要な最大計算量の見積もりとか、何か私でもやれるような事に取り組んでみたいと思います。
有難うございました。また、何か分からない点を教えて頂けると幸いです。
0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG>>435
OpenShogiLib
http://gps.tanaka.ecc.u-tokyo.ac.jp/osl/
巨大すぎ。。。
これね。
0632620
NGNG頑張って下さい。
うさ親さんがよく言うように作り手の棋力はあまり気にしないでいいと思いますよ。
まず動くとこまでが大変ですね。
オレも将棋ソフトのためにとprintf文で"こんちわ世界"を表示させるとこから
はじめたんで、大変でした。でも動いたときはカンドーするし、弱くても愛着あるし。
市販のソフトとは比べ物にならなくらい。
大会にでて勝とうものなら…そりゃもう、バンザイ三唱もの。楽しいよ!!!
0633624
NGNG>それと、ある局面でデータベースに複数の指し手があった場合、その選択基準は?
相手の指し手指し順を、過去のデータより拾い、似ている局面を参考にします。
それでも、複数有った場合、取り敢えずはランダム選択してあとは自己学習に任
せる。
0634デフォルトの名無しさん
NGNG将棋の局面空間の広さからして、そういうことは現実的には不可能だよ。
実用的なデータベースを作るのにどれくらいの容量が必要かとか、
それを埋めるのに自己学習するとしてどれくらいの時間が必要かとか、
ざっと計算してごらん。
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG現実にこれが同一に表現されるようにしてる人は居るだろうか?
定跡外し・相振り・後手1手損戦法などで、有効になる場合があるかも知れない。
0638637
NGNGどうせ定跡の検索なんて一瞬で終わるんだから、その時に考慮しても同じか。
0639学生
NGNGむずかしいかなー?
0640633
NGNG>将棋の局面空間の広さからして、そういうことは現実的には不可能だよ。
物理的な限界なら、投資額によって決まりますけど?
「江戸時代あたり」からと使ったのは比喩的な表現です。実際は
使われる媒体により、予めストック出来る、指し手・指し順は決
まります。
要するに、GMDH等を使ったプログラミングコンテストに出すような
優れたプログラムを使わないでも、データ−ベースと人工無能である
程度までなら、カバー出来ると思いますけど。
0641デフォルトの名無しさん
NGNGHDDに記憶する、としたらどのくらい必要になるのかな?
単純だと30*30*...30(12回)だけど、同じ形になってしまうのは除くとして。
0642デフォルトの名無しさん
NGNGそれに角道をあけると3手目からいきなり増えそうだ。
0643デフォルトの名無しさん
NGNG理論上ひとつの局面の最大着手可能手数は550手ぐらい?
0644デフォルトの名無しさん
NGNG上のほうで将棋の全局面は 10^71前後って出てるけど。
このうちの何パーセントくらいをデータベースに登録したら
実用になる将棋プログラムができると思いますか?
0645633
NGNG最初のベースとなる物は、一割以下で事が足りると思います。
後は、自己学習で・・・・
0646デフォルトの名無しさん
NGNG10^71の一割という事は10^70ですね。
一つの局面に1バイト必要だとすると1テラバイトの
ハードディスクが何台必要になるか計算してみてください。
どなたかが現実的には不可能と言った意味がお判りになると
思います。
0647デフォルトの名無しさん
NGNG10!71なんて、あくまでも理論値でしょう?
記憶させるのは、実際に勝負に使われた、自分
と対戦者の指し手・指し順のみです。それでも、
不可能何ですか?
0648デフォルトの名無しさん
NGNG将棋の最大分岐数は593
http://ysu1.m78.com/mathematics/m22.html
>>622にある実現可能局面数約2.69*10の70乗のソース
http://www.geocities.co.jp/Playtown-Bingo/4981/kyokumensuu.html
実際にはもっと少なそうですね
0649デフォルトの名無しさん
NGNGいえ、けして不可能ではありません。
がんばって史上最強の将棋プログラムを作ってください。
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNGだいじょぶ
がんばれ
0652まともに動いていない ◆R/rLuLKeEI
NGNG二つの局面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以外に上手い定義はないのか?
空間だから距離があってもいいかなと…類似度みたいなものやね。
0653デフォルトの名無しさん
NGNGA→Bへの最小手数 ただし駒はバック(逆向きにも移動)可
でどう?
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG完全ハッシュみたいなことをする領域が無いからなのか、
CPUの性能が それでもまだまだで手数が少ないからなのか?
地球シミュレータくらいのスーパー紺つかえばどのくらいになるんだろ
0656デフォルトの名無しさん
NGNG浮動小数点演算、それも特にベクトルや行列演算がバカっぱやくなるように設計されている。
同じ浮動小数点演算でもベクトルに特化していないでとにかく数をこなすのがスーパースカラーという奴。
で、将棋プログラムはもっぱら固定小数点演算あるいは論理演算しか用いないので浮動小数点演算がいくら速くても関係ない。
しかも現在の将棋プログラムのアルゴリズムは演算を並列化しにくいらしいのでCPU128個持つというような
密結合SMP(マルチCPU)でもどれくらい速くなるか怪しい。
つまりソフトの性格(必要とする計算パワー)とハードウェアがミスマッチなので例え地球シミュレーターで動かしたとしても
大して強くならんと思う。その前にまずそのハードウェアの能力を引き出すようなソフトの移植が非常に難しいと言える。
即ち、労力ばっかり大きい割に成果がほとんど望めないのでまず誰もやらないだろう。
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG0659デフォルトの名無しさん
NGNGディープブルーに使われたチェス専用CPUって手の探索を広く深く行なうためだけの
サブCPUに過ぎないらしいしな。そういうものでも将棋に応用すれば手の探索だけは
結構速くなるかも知らんが。
0660デフォルトの名無しさん
NGNG油もビッチがポケットマネーで高額高性能な並列コンピュータ組んで
馬力で思考させたらあっさりプロ打倒できたりしてな。
0661まともに動いていない ◆R/rLuLKeEI
NGNG1手目で得られる全局面分のプロセスを生成して並列に探索する。
だたし、適当なタイミングで評価値を調べて高いものがより大きな優先度になるように調節する。
重要でない手の先も念のため一応残して探索するけど、重要な手の先をより重点的に探索することが可能になったり…
複数台のPCに重要そうな手が集中しないように幾つかの手を抱き合わせて振ったり…
思いつきだけで書いてすんません。
0662デフォルトの名無しさん
NGNG専用CPUつったって少し速い16ビットCPUかなんか積んだだけじゃねーの?
当時はFPGAなんか無かったと思うから、本気でカスタムCPUを起こしたりしたら
鬼のように金がかかったはず(何千万単位)。DSP使ってもしゃーないだろうし。
油もビッチって誰の事言ってるのか分からんが、どんな高額高性能な並列コンピュータを
組んだら将棋がどのくらい強くなるのかまだ誰も分かっていないと言う処だろう。
つまりアルゴリズムの研究が並列化の方向を向いていない。
将棋研究に使ってくれと超並列コンピュータを貸してくれる処も無いし。
ニワトリと卵だな。
0663まともに動いていない ◆R/rLuLKeEI
NGNG探索や評価もハード化すべきなのか?
0664デフォルトの名無しさん
NGNG7月初め、サッカーの母国イングランドに、信じられない事件が起きた。
ロシアの大富豪が、ロンドンの高級住宅地をホームとするチェルシーを買ったというニュースだ。
ロマン・アブラモビッチ、36歳。ユダヤ系ロシア人。英国のメディアによれば、新しい選手の獲得、
スタジアム、その他もろもろの経費に総額400億円近くを投入するという、
信じられない話である。その後チェルシーが、
約1カ月の間に8人の選手に総額100億円以上をつぎ込んだことで、それは現実の話となった。
ゲイツが将棋ファンならこれくらいの投資してくれるかもね。
0665デフォルトの名無しさん
NGNGそろそろ総当たりで解決する速度にならんものか・・・
0666デフォルトの名無しさん
NGNGハード(同じタイプのプロセッサー)の性能向上だけならせいぜい数倍から10倍かと。
ディープブルーがすごかったのはむちゃくちゃ贅沢なハードウェアを組んだからで。
http://hotwired.goo.ne.jp/news/news/culture/story/20021022205.html
512基のチェス専用アクセラレータチップなんてものを開発して搭載したからな。
将棋はまだまだこういうすごいハードウェアを組んで力技で押してたら人間の名人に勝てそうだと
言う見込みが無いし、IBMみたいに金のあるメーカーが人間に勝つシステムを組む動機も無いし。
(日本だと富士通あたりがそんなもの作ると却って非難ごうごうになりそうw)
ま、当分実現不可能そうだな。総あたりでやるには分岐(局面)の数多すぎだし。
0667デフォルトの名無しさん
NGNGhttp://hotwired.goo.ne.jp/news/news/technology/story/20040514304.html
コンピューター将棋のアルゴリズムにどうやって蓋然性の概念を持ち込むのかは知らんが、
最善手ではなくともそこそこ正しいと思える手を膨大な検索数の中から見つける事ができれば
有用かも知れない。
0668デフォルトの名無しさん
NGNG作者が書いた資料によると512個ではなく480個(30ノードのRS/6000SPに16個のチップ)
だったらしい。
このハードで1997年の探索速度が2億ノード。
2002年にクラムニクと戦ったのフリッツがXeon900MHzを8個で600万ノード。
2億=20000万なので20000/600=33倍。
まだ速度では全然負けてるね。
0669デフォルトの名無しさん
NGNGαβを想像していただければ良いのですが並列探索の場合カットする値を共有するための通信コストがネックになります
また候補手毎に並列化すると合流があった時に無駄になります
興味があれば岸本さんの修論を
http://www.cs.ualberta.ca/~kishi/publication.html
0670まともに動いていない ◆R/rLuLKeEI
NGNGありがとう。
興味が湧いたら読んでみます。
何も共有しない、無駄には目を瞑る、評価値さえ返してくれたらいい…
っていうか…まあいいや、退散します。
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNGそのうち追いつくよ。
0673デフォルトの名無しさん
NGNGちなみに量子コンピュータはその原理上、「解が周期性を持つ」ようにアルゴリズムを組まないと超並列性が生かされない罠。
つまり、大量の候補の中から唯一の解を捜し出すような問題にはそのままではまだ適用できなくて、
候補の中に周期的に解が埋まっているようにうまいこと問題を変形すると使えるようになる。
というわけで、ハードがそこそこ使えるようになったとしても、
アルゴリズムの研究も進めないといけないわけで、こっちの方が多分難しい。
おそらく羽生には間に合わねぇ。
0674デフォルトの名無しさん
NGNG誰かがTCP/IPでの簡単な審判役のサーバーを用意して
全てのプログラムを100回ずつぐらい対決させればいいじゃん。
0675デフォルトの名無しさん
NGNGコンピュータが勝つのは厳しいね。
DNAコンピュータとか量子コンピュータとか
スーパーコンピュータ(ベクトル)とかがあっても
0676デフォルトの名無しさん
NGNGこのスレの中の人同士で一度対決してみたいね。
まぁ審判役サーバなんて無くても、「ヤフーゲーム」みたいなのでもいいが
時間がかかるので 通信ソフトを作って 自動対戦させておけば楽だな
0677まともに動いていない ◆R/rLuLKeEI
NGNGほとんど見込みはないが万一まともに動いたら参戦してみたいね。
0678デフォルトの名無しさん
NGNGここでつべこべ言ってる人間は皆が皆、現状のパソコン上で将棋のプログラムを組んでいると
いう訳ではなくて現状のパソコンというハードウェア上の制約を離れたらどれくらい強くなるか
(あるいはならないのか)を論じてるわけだが。
それにしてもこんなのを使わせてもらえるとプログラマも嬉しいよな、きっと
「産総研、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演算命令は
有効なんだろうか?
0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNG藻前の言う脳型コンピュータってニューラルネットの事か?
ローゼンブラッドのパーセプトロンがミンスキーの攻撃のせいで
ほとんどインチキ(山師)扱いされていた漏れの学生時代とは隔世の感があるな。
とは言っても80年代には結構復活してたらしいが(バックプロパゲーションの技法で)
田舎の大学生だった漏れは知らなかった。(ああ、あの時もっと研究していれば・・・)
http://www.personal-media.co.jp/book/other/perceptron.html
0681デフォルトの名無しさん
NGNGそもそも、今の技術では脳と似た動作を再現できるとはおもえませんが。
通りすがりのものです
0682デフォルトの名無しさん
NGNG表す事ができて(グラフの矢印は指し手)それをメモリー上というかデータベース上に
格納できたらそれでもう必勝法はできるのかな?
最終局面からバックトラックしていって、局面に点数を付けるような方法で。
それともそれでも必勝法が見つからない可能性が有り得るのかな?
検査すべき局面が桁違いに大き過ぎるという問題は別にして。
(人間あるいはコンピューターが何百万年も懸けて局面を探索するとか仮定すれば)
0683デフォルトの名無しさん
NGNG予想としては2010年(6年ぐらい)までには、
30秒将棋で名人にも十分勝ち越せると思う。
いや、30秒なら6年もかからないかな?
0684うさぴょんの育ての親
NGNG一応千日手になる可能性があるけど、原理的にはその方法で必勝法が見つかるよ。
でも何百万年どころか、何百億年かけても今のコンピュータじゃ無理だ(−−;
0685デフォルトの名無しさん
NGNGどうやって全ての局面をメモリやHDに格納するんだよ
0686デフォルトの名無しさん
NGNG0687まともに動いていない ◆R/rLuLKeEI
NGNG足りないと思う
0688デフォルトの名無しさん
NGNG0689まともに動いていない ◆R/rLuLKeEI
NGNGオセロや囲碁と違って初期配置が決まっている将棋は盤面縮小は難しいのでは?
0690まともに動いていない ◆R/rLuLKeEI
NGNG0691デフォルトの名無しさん
NGNG今なら世界に名を残せる?
実際プレイして面白いか云々はおいといて
計算量としてどんな程度なのかって事で
やってみると面白そうに思うんけど。
0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG大幅変更必要になったりするの?
簡単に流用できるなんな何でやらないんだって
ひじょーにもどかしいんだが。
0694デフォルトの名無しさん
NGNG┌──┬──┬──┐
│__│__│▽玉│
├──┼──┼──┤
│__│__│__│
├──┼──┼──┤
│▲玉│__│__│
└──┴──┴──┘
先手持ち駒:銀歩
一段目から成れる
これなら、先手必勝だった。
単純にミニマックスで探索するだけで良かったんでこれは楽だった。
しかし本将棋とは規模が全く違うし駒の配置も違うんで、こういうのを調べて意味があるのかどうか・・・。
0695デフォルトの名無しさん
NGNGあるあるあるある。
「今の計算機だとm×nのこういう配置でxx日で必勝手順が出る」とか
そーいうデータ面白い。
0696デフォルトの名無しさん
NGNG0697まともに動いていない ◆R/rLuLKeEI
NGNG何も置かないというのも配置には違いないわな。重ね重ねすまぬ。
0698デフォルトの名無しさん
NGNG#尤も、奇数×奇数では戦略が違いすぎてしまうので、実際には6×6か4×4しか選択肢がない。
##そして、4×4では簡単に解けてしまうと思われ。
0699デフォルトの名無しさん
NGNGパターン数が現実的な数値内で有限だからかな
0700デフォルトの名無しさん
NGNG世界一に圧勝するってだけで読みきれてはいないだろ
0701デフォルトの名無しさん
NGNG論文は公開していないみたいだが
後藤智章, 柴原一友, 乾伸雄, 小谷善行: 小さな将棋の解, Game Programming Workshop 2003, 2003/11/7.
で色々解いてたが5x5よりは小さかった
0702まともに動いていない ◆R/rLuLKeEI
NGNG0703デフォルトの名無しさん
NGNGぬう。
>702
まだ解けてないもの。
0704デフォルトの名無しさん
NGNGなるほど、5x5でもまだ解析的に(総当りで?)解けていないというわけだな。
恐ろしい!ところで5x5将棋ってどんな駒の配置なんだ?持ち駒は?
0705デフォルトの名無しさん
NGNG5×5の勝ち名乗りを上げれ!
0706まともに動いていない ◆R/rLuLKeEI
NGNG確かこんなL字型の配置だったはず。
歩
王金銀??
0707704
NGNGありがとう。漏れも5五将棋を紹介しているページを見つけたが
同じ5x5でも京都将棋なんてのもあるらしいな。ああ、ややこしい。
ttp://encyclopedia.thefreedictionary.com/Minishogi
0708デフォルトの名無しさん
NGNGCOMはチェスのがもうちょっと強いらしいじゃないか
0709デフォルトの名無しさん
NGNGSSEや3DNOW!は浮動小数点専用だから意味なし。
AltiVecは確か整数のSIMDもあったはずだから、それ専用に
プログラム組めば使えるはず。
0710デフォルトの名無しさん
NGNGみんな避けてるんじゃないかな?
0711まともに動いていない ◆R/rLuLKeEI
NGNGM?R?T?将棋のことけ?
0712デフォルトの名無しさん
NGNGそうそう、詳しいこと知ってたらおせ〜てくんろ
0713デフォルトの名無しさん
NGNGもうちょっと将棋に強くなってから書いてください。
0714デフォルトの名無しさん
NGNG0715まともに動いていない ◆R/rLuLKeEI
NGNGPC9801用M?R?T?将棋におまけのように付いていた5五将棋について一悶着あったらしい。
知ってるのはこの程度です。
自宅を探せば5インチフロッピが出てくるはず。
98互換機が押し入れの中だから直ぐには読めないけど。
0716デフォルトの名無しさん
NGNG3x4だね
0717デフォルトの名無しさん
NGNGどうすれば開発者が増えるかねえ
0718デフォルトの名無しさん
NGNGスポンサーが一人増えれば開発者が一人増える(笑
0719デフォルトの名無しさん
NGNG年に一回の大会のみとかじゃなくて
毎月開催のグラチャンとか
0720デフォルトの名無しさん
NGNGTCP/IPサーバを作れば今月のチャンピョンを竸うのは
気軽にできそうだね
0721デフォルトの名無しさん
NGNG0722まともに動いていない ◆R/rLuLKeEI
NGNG0723デフォルトの名無しさん
NGNG誰が誰と対局するかどうかを決めないといけないのかな
0724デフォルトの名無しさん
NGNG都万氏のサイトにある「CSA将棋(LAN対応仮バージョン)」に
入ってる擬似サーバーで対局させられるかな。
http://www2.ttcn.ne.jp/~tsuma/download.htm
0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNG0727まともに動いていない ◆R/rLuLKeEI
NGNG0728デフォルトの名無しさん
NGNG後回しでも良いかもしれないが
>> 725
RS232CのプロトコルはここにあるがLANのプロトコルはどこかに公開されてたっけ?
http://www.computer-shogi.org/wcsc14/protocol.html
0729デフォルトの名無しさん
NGNGこれかな
0730まともに動いていない ◆R/rLuLKeEI
NGNG探して下さい。携帯なんで検索出来ないんだ。
0731デフォルトの名無しさん
NGNGLANは接続されてしまえば232cで繋がってるのと変わりないから問題ないでしょう
サーバーへの接続と認証をどうするかですにゃあ
login認証で桶?
0732デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG勝手に対局サーバー作っても大丈夫?
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG練習モードはP2Pでやるとサーバーの負荷軽減になると思うね
でも試合モードは審判サーバーを経由しないとだめでしょやっぱ
0737まともに動いていない ◆R/rLuLKeEI
NGNG0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG甘い?
あとCSAの目的からしてうるさいことは言わないと思うんだが
0740某大学関係者
NGNG0741まともに動いていない ◆R/rLuLKeEI
NGNG0742デフォルトの名無しさん
NGNGオリジナルで作っちゃえば。
0743デフォルトの名無しさん
NGNG詰み判定はしない(王deadで終了)
初期状態確定済み
駒移動ルール確定済み
となれば、やり取りする情報は
駒の移動と成る成らぬぐらいのもんでしょ?
0744デフォルトの名無しさん
NGNGすでにあるプロトコルに欠点があるなら別だが。
0745デフォルトの名無しさん
NGNG出来ればTCP/IP接続でお願いしたい。
完成したら月1ぐらいで全員のプログラムを総当りさせて結果発表。
まずはプロトコルを皆で考えよう。
0746デフォルトの名無しさん
NGNGもうCSAがTCP/IP用のプロトコルを決めていたはず。だから新たに考える必要はないと思われ。
Webに文書置いてないのが不思議だけど。なんで?
0747デフォルトの名無しさん
NGNGで、会員予備軍は何人いるのさ
0748デフォルトの名無しさん
NGNG>>56
0749デフォルトの名無しさん
NGNGおお、それそれ。
このプロトコルで、anonymous loginに(勝手に)対応すれば
野良サーバーが立てられるんじゃない?
0750デフォルトの名無しさん
NGNG0751 ◆R/rLuLKeEI
NGNGソフトの振りする人がPCに張りついて月間MVPをかっさらったりするの?…やりそうな気配…
0752デフォルトの名無しさん
NGNGこのプロトコルでは対戦相手を決めるのはサーバの役目なんだが、
クライアント同士のネゴシエーションを規定しても良いと思う。
禁手、千日手、連続王手の千日手、タイムアウトをそれぞれ処理するとなると
サーバの処理は結構なものになるね。
0753デフォルトの名無しさん
NGNG作れませんが応援してるよ。で誰がプログラムかくの?
0754まともに動いていない ◆R/rLuLKeEI
NGNG0755デフォルトの名無しさん
NGNG詳しい人に教えてもらおーっと♥
ny見たいな感じでネットワークを作って、近くの人と対戦。
途中のノードに審判になってもらう。
審判が対戦記録をとって鯖にアップ。
それを閲覧すればよいので観戦はなし。
【将棋プログラム⇔ネット接続プログラム】←Internet→ 【ネット接続プログラム】←Internet→【ネット接続プログラム⇔将棋プログラム】
対戦者A = 中継ノード兼審判 = 対戦者B
みたいな感じで接続するとか
0756デフォルトの名無しさん
NGNG持ち時間のカウントだけあれば、とりあえずはサーバの役目を果たせる?
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG盛り上がるだけでなく、ちゃんと実現したいものだ。
もし誰かがサーバー役のプログラムを作ったとしても
そのサーバーに接続するのにIPアドレスとポート番号がいるんだが・・・
サーバープログラムを作る奴はいても、
サーバーに接続させるために自分のPCのIPアドレスとポート番号を
晒す勇気がある奴がはたして現れるのか?
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG将棋の手を送受信するにはサーバー一つあればで十分じゃないか。
一度に10局ぐらいやっても大した負荷ではないとおもうが。
0761デフォルトの名無しさん
NGNG出来そうな気がするけどどうかな?
0762まともに動いていない ◆R/rLuLKeEI
NGNG最低でもloginユーザーから二つを選んでパイプストリームで繋いであげるだけの機能しかなくてもいい。
そうしておいてサーバーはストリームを監視してどちらが"%TORYO"コマンドを送ったかまたは接続を先に切ったかで敗者を知る。
結果はすぐにランキングページに反映するだけ。
0763デフォルトの名無しさん
NGNGとりあえず(人間様が)ネット対戦できる将棋板を作る(ここまではP2PでOK)。
それに観戦モードを付ける(ここで鯖がいるかな)。
それにプログラムを接続できるようにする。
0764デフォルトの名無しさん
NGNGなかなか時間がとれない・・・・
0765まともに動いていない ◆R/rLuLKeEI
NGNG0766デフォルトの名無しさん
NGNG本気だとおもうけど。まあ一時的に使っていいよという程度だとおもうが。
0767デフォルトの名無しさん
NGNG一局二局ならまだしもリーグ戦なんかの長丁場になると疲れ知らずのPCに人間はかなわないだろう(笑)
0768デフォルトの名無しさん
NGNGhttp://games.yahoo.co.jp/games/login?game=Shogi
http://jgame.nifty.com/games/shogi/index.html
こういうところで待ち合わせして、
対戦プログラムと 将棋プログラムの橋渡しを
手動で行なうw
0769デフォルトの名無しさん
NGNGマクロっぽいのでなんとかならんかね?
正直それでもいいような気がする。
0770 ◆vAsNuq1gfU
NGNG逆に毎度ふざけたログイン名で対戦、即投了、ログアウト。最弱の名を欲しいままにする方がありえるかも。
0771デフォルトの名無しさん
NGNGIEをCOMで動かす。
0773デフォルトの名無しさん
NGNGhttp://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
のように手を入力
%から始まる手を入力すると、対局終了。
今日はここまで。
おやすみ...
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNG0776まともに動いていない ◆R/rLuLKeEI
NGNG>修正しました。 投稿者:都万 投稿日:11月12日(水)22時46分40秒
>
>山下君から指摘のあった仮想サーバの全角文字のバグと、CSA将棋の投了コードを送信しないバグを修正しました。
>仮想サーバのソースは下記URLから、CSA将棋のソースは秘密の部屋(himitsu.htm)から、また実行形式はダウンロードの部屋からダウンロードしてください。
>
>ttp://www2.ttcn.ne.jp/~tsuma/test56.lzh
早速、ダウンロードしました。
C++/MFCというかプログラミングそのものが不得手なんで誰か>>740さんのLinuxでも動くようにしていただけませんかね。
0777まともに動いていない ◆R/rLuLKeEI
NGNG0778デフォルトの名無しさん
NGNGVMWAREを740さんが入れてくれればすぐにでも動くのだが。
0779773
NGNGダウソ出来ないですか。
出来た人います?
どなたか、どこかいいアプロダ教えて下さい。
>>777
私は単なる通りすがりの名無しなので、形になるまでお付き合い出来ないでしょう。
ちゃんとしたプロジェクトを立ち上げて下さい。
0780デフォルトの名無しさん
NGNG今朝やったらダウソできたよ、鯖落ちてたのかな?
落としてから気づいたが ruby わかんね〜(おい
0781773
NGNG- Timeoutチェック 一定時間pingに返答しなかったら負け
- 持ち時間切れチェック
今日までにやるところ
- CSA標準棋譜ファイル形式の出力
当分やらないところ
- 合法手判定とか
改造案
- LOGINのpasswordを利用して、対戦相手を決める
Aさんがhimichu+で、Bさんがhimichu-だったら、この二人で対戦
↑
意見キボンヌ
## ちょっと出かけてくる
0782デフォルトの名無しさん
NGNG改造案いいんでないかい?
ただ、最後の文字は先手/後手の表明だとすると+が二人居て-が来たらどちらとカップリングするのかな。
あと、
パスワード無し⇒誰でもよい。サーバー任せ。パスワード有りの奴とは組まさない。
で如何?
0783デフォルトの名無しさん
NGNGアドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/2004-05-23/
(重くなったら引っ越しますが,他に支障が出なければ当分動かしておきます.)
どうも flush した方が安定するようなので,
@sente.socket.flush
などを追加しています.
0784773
NGNGhttp://up.isp.2ch.net/up/be88525a3fa2.zip (266.74 KB)
>>781
どもです。
> ただ、最後の文字は先手/後手の表明だとすると+が二人居て-が来たらどちらとカップリングするのかな。
himichu+が二人来たら、一人目のconnectionは切るようにしました。
> パスワード無し⇒誰でもよい。サーバー任せ。パスワード有りの奴とは組まさない。
そうしました。
>>780
exerbというツールで作った.exeも入れました。rubyをインストールしなくても実行できます。
0786デフォルトの名無しさん
NGNG仕様は56でいいんだよな?
0787デフォルトの名無しさん
NGNG俺も自作のやつを CSA プロトコル喋れるように改造するか…
0788まともに動いていない ◆R/rLuLKeEI
NGNG善いことだ。
0789783
NGNGどうもです.それでは,新バージョンを待って取り替えようと思います.
サーバのログもリアルタイムで見られると便利だと思うので,
間に合えば STDOUT.flush もお願いします.
(間に合わなければこちらでやります)
0790デフォルトの名無しさん
NGNGうう、ログインできなくなった・・・・
ハングさせちまったかなスマソ
0791デフォルトの名無しさん
NGNGできるかぎり長くするといいと思うんだけど。
0792783
NGNGshogi_server:41:in `write': Broken pipe (Errno::EPIPE)
(41行目は @sente.socket.write(start_message("+")))
なので,ログインしてからクライアントがおちるとソケットに書けなくなって
サーバが落ちるのかな?
ruby 読めても書けないので 773さんお願いします.
0793デフォルトの名無しさん
NGNGちゅうことはやぱり私が落としてしまったんですね・・・すんまそ〜ん
エラー処理が実装されるのをまっときます(汗
0794デフォルトの名無しさん
NGNG将棋プログラム同士を自動で対戦させるんだから、
人間の都合を排除して
かなり深読みできる時間があるといいね。
その間通信は 途絶えるけど
0795デフォルトの名無しさん
NGNGあんまり長時間沈黙するとルーターのNATテーブルがタイムアウトして通信が切れるから
一定時間ごとに(2〜3分くらい)ダミーパケットを流す必要があるね
クライアントの負担を減らすならサーバーが現在時刻とか消費時間とか
そのあたりの情報を各クライアントに垂れ流ししてもいいかも
クライアント側は必要なければただ読んで捨てるのみ利用したければ利用する
0796デフォルトの名無しさん
NGNG一手10秒の方がサクサク進んで面白いかも
0797デフォルトの名無しさん
NGNG0798792
NGNG本質的な解決ではないけれど,サーバが落ちたらもう一度起動するラッパを書いたので
お気軽にどうぞ.
0799デフォルトの名無しさん
NGNG昨日からのここの盛り上がりとなにか関係あるのだろうか?
0800デフォルトの名無しさん
NGNGそれと関係あるのかな。
0801デフォルトの名無しさん
NGNG0802773
NGNGhttp://up.isp.2ch.net/up/98ef06e5730c.zip
サーバの負荷のせいか、なかなかダウンできないようですが...
0803デフォルトの名無しさん
NGNGおつかれさまです
たしかにダウンロード全然進まないです..
0804まともに動いていない ◆R/rLuLKeEI
NGNGほぼ半日落ちてる。
サーバープロトコルのページは手元に保存してあるからあっしには無問題たが。
0805783
NGNGwdoor のサーバプログラムを >> 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
今日はこの辺で.
0806まともに動いていない ◆R/rLuLKeEI
NGNGクライアントのタイムアウトチェックのようにpingを数分感覚で繰り返していればいいんでない?
これならクライアントの読み捨て処理がいらんはず。
0807デフォルトの名無しさん
NGNGついでにチャットもできるようにとか
0808まともに動いていない ◆R/rLuLKeEI
NGNG%EX WHO
するのはタイプ数増えるから駄目?
ここで欲しい機能は本家でも追加されるかもしれないから、その時までの暫定ということで…
0809デフォルトの名無しさん
NGNGコマンドに該当しないものはそのまま各クライアントに流すということでいいのでは?
0810デフォルトの名無しさん
NGNG>>809
特に拡張とか定義しなくても実装されてないコマンドを受け取ったら
ただ単に無視するだけでいいと思う
0811デフォルトの名無しさん
NGNGサーバもクライアントもシンプルに保つ方が後々良いと思うんだよね
というわけで代案
whoはサーバが対戦中の試合や対戦待ちリストをstatus.htmlに随時書き込んで
クライアントが好きな時にhttpでダウンロードする
チャットするのは人間なので特に規約を決めずに別にサーバをたてる
どうでしょう
0812デフォルトの名無しさん
NGNGトで CSAプロトコルを喋れるやつはあるの?
0813まともに動いていない ◆R/rLuLKeEI
NGNG0814デフォルトの名無しさん
NGNG日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!
↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG0817773
NGNG30秒に一回pingして、30秒以内に返って来なかったら負け、となっているつもりです。
>>807
whoの機能は必要そうですね。もう一つ、別のportを使うようにしようかしら?
チャットは独立したソフトでも用が足りると思うので、消極的。
>>808
拡張コマンドでwhoするためにログインしたけど、将棋はしたくない、
というような場合に問題が出そうな気がします。
>>809
規定されていないものを各クライアントに流すのは、問題です。
サーバにコマンドを拡張し、クライアントから拡張コマンドが送られて来たらサーバが答える、
という形式であれば、互換性が保てるので問題ないでしょう。
>>811
極力、拡張したくないですね。
status.htmlでもいいかもしれません。
>>813
どもです。
>>815
ログの感じでは、誰も繋いでないみたい
>>816
生telnetでサーバに繋ぐのもアレなので、CSAプロトコルで対人対戦が出来るように、
端末ソフトを作るのがいいかも。
0818まともに動いていない ◆R/rLuLKeEI
NGNG巷の将棋ソフトと木偶の坊とLAN対応版CSA将棋でなんとかならん?
0819812
NGNGども。なんとかせんと喋れんけど、なんとかすれば喋れる、ってレベルなのか。
って意味では
> CSAプロトコルで対人対戦が出来るように、端末ソフトを作るのがいいかも。
これって需要あったりするのかな。
0820まともに動いていない ◆R/rLuLKeEI
NGNG>>819
テスターさん向けの需要なら少々あると思う。
0821デフォルトの名無しさん
NGNG>>30秒に一回pingして、30秒以内に返って来なかったら負け、となっているつもりです
プロパイダーによってはパケットロス率の高いところがあったりするので一回だとたまたまというのがありうるので
数回返ってこなければ落ちているという判断のほうがよいのではと思います
0822デフォルトの名無しさん
NGNGエラーメッセージにはこちらの入力したIDとパスワードが出てるのに
切られてしまうようです
0824デフォルトの名無しさん
NGNGみんなはうまく行ってる?うちだけ?
0825824
NGNG速攻で入力すると切れないようですね
でもBEGIN・・・・が返ってこないです
0826773
NGNGして、
LOGIN username
と叩く。
相手が来るまでキーボードにさわらずに我慢する。
相手が来ると、メッセージがバッと流れるので
AGREE
と叩く。
あとは、
+1234FU (先手の場合)
-1234FU (後手の場合)
みたいに手を入力
で、いけると思います。
バグってはいないと思いますが、激しく使いにくいですね。
誰かログインしてください。
0827824
NGNGと思ったらBIGINが流れたあと切れてました。
0829824
NGNG0830デフォルトの名無しさん
NGNG接続→速攻でLOGIN 適当な名前(Enter)→無反応・・・
ここで対戦相手がくるとメッセージがパッと流れるって事っすか?
せめてLOGIN (Enter)の後にログインに成功しましたぐらい表示してほしいよ;;
0831デフォルトの名無しさん
NGNG・巨人戦直後の火曜
・魔の水曜
・三浦の木曜
0832まともに動いていない ◆R/rLuLKeEI
NGNG$ 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です。悠長にプロトコルを参照してる暇がないですね。
0833デフォルトの名無しさん
NGNGこれって矯正切断用のコマンドとかないの?
0834デフォルトの名無しさん
NGNGこれってフォーム矯正切断用のコマンドとかないの?
0835デフォルトの名無しさん
NGNGCSAサーバプロトコルと同じTCP/IP接続にしてほしい
わかりにくいよ;;
0836デフォルトの名無しさん
NGNGちゃんと通信できたっぽいけど、
空白の関係で上手くそろわないで
内容の理解にすごい時間がかかった。
そのあいだにTimeout…ショボーン
0837デフォルトの名無しさん
NGNGCSAと同じだからTELNETではわかりにくいのだよ
0838デフォルトの名無しさん
NGNG補足、便宜上TELNETと言ってるだけで
TELNET用ソフトを使って人間がCSAプロトコルを話しているといえばわかってもらえるかな?
0839まともに動いていない ◆R/rLuLKeEI
NGNG要するに皆でよってたかってテストをしているようなもんだな。
いきなり完全準拠は困難だから改善していきませう。
で
LOGIN:matomoni OK
の出るタイミングがなんか違わないか?
0840デフォルトの名無しさん
NGNG取り敢えずまだみんな手打段階みたいだから、暫定的に TEMEOUT 関係のパラ
メータをもちっと大きくしてくださると嬉しいかもかも > 設置者さま
# ま、ローカルでテストすりゃいいんだけど…
ボチボチ手動の CSA クライアント作ってみてるんだけど、初期盤面はホント
はパーズして解析せにゃいかんのだよね? メンドいなぁ
0841まともに動いていない ◆R/rLuLKeEI
NGNGちょっと行ってくる。
>>56が生きてたらそこにもサンプルソースのリンクがあったはずなので、使えるコードは使おう。
0842デフォルトの名無しさん
NGNG0843デフォルトの名無しさん
NGNGちょっと暇になったら手動用のクライアント作ってみっかな。
0844デフォルトの名無しさん
NGNG誰が繋いでいるかわからないと禿しく不便かも)はやはり必要かも。
今はサーバのログ読んでます。
0845デフォルトの名無しさん
NGNG0846メモ コピペ
NGNGアドレス wdoor.c.u-tokyo.ac.jp 4081
棋譜など http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/
0847デフォルトの名無しさん
NGNG--- 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
0848デフォルトの名無しさん
NGNG皆telnet使ってテスト中だし。
ついでに接続している人一覧表示とかあればイイ(・∀・)
いきなりプログラム同士の対戦もやりにくいし、
これ使って人間同士の対戦からやってみたいね
0849デフォルトの名無しさん
NGNGとりあえず10秒から30秒に延ばしてみました
DEFAULT_TIMEOUT = 30 # for single socket operation
もっと延ばした方が良い?
0850まともに動いていない ◆R/rLuLKeEI
NGNGBEGINと一緒に出してるから対戦相手が来ないと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")
0851デフォルトの名無しさん
NGNGとりあえず、静大のTACOSがレポートの中心らしい。
0852デフォルトの名無しさん
NGNGアメリカとかにも将棋って知名度高いの?
0853デフォルトの名無しさん
NGNGYahoo!!GameにShogiがないところをみると知名度は低いでしょう。
0854デフォルトの名無しさん
NGNG低いと思います。
囲碁と違って、
一部のテーブルゲーム好き(or AIプログラマ)にしか
知られてないんじゃないでしょうか。
というのも、チェスのような特徴ある駒の形と違って
文字で駒を識別するため
アルファベット圏の人が漢字を見ると
文字の見分けがつき辛いらしいです。
アルファベットに置き換えた駒もあるようですが
深くやるとなると、文献が漢字のものがほとんどなので
手が出し辛いのがネックなんじゃないでしょうか。
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNG持ち駒から指した時のプロトコルが見当たらない
ちょっと、 どうなってんの???
0857 ◆R/rLuLKeEI
NGNG-0034KA(△3四角打)
0858 ◆R/rLuLKeEI
NGNG-0034KA(△3四角打)
0859 ◆R/rLuLKeEI
NGNG-0034KA(△3四角打)
0860 ◆R/rLuLKeEI
NGNG-0034KA(△3四角打)
0861 ◆R/rLuLKeEI
NGNG-0034KA(△3四角打)
0862 ◆R/rLuLKeEI
NGNG0863 ◆R/rLuLKeEI
NGNG0864デフォルトの名無しさん
NGNG強さはどうでもいいから。
なんか人が少ないような気がする・・・
0865デフォルトの名無しさん
NGNGよくわかんないっす。
将棋AIって、将棋のプログラムのこと?
人が少ないって、制作者が少ない、ここに来る人が少ない、ってこと?
0866デフォルトの名無しさん
NGNG将棋AIはプログラムが将棋を指すアルゴリズムの事を指して言いました
あと人が少ないってのはその制作者の人数の事です
作ってる人が多いなら俺も作ろうかなと思ってます
0867603
NGNG作ってますよー。
本業の合間がなかなかとれず遅々として進んでおりませんが。
現在の状況
・駒の動き(合法判定):作成中
・勝敗の判定:王手放置と投了のみ。詰まされたかどうかの判定は後回し
当面の目標
・MAN対MAN
・その局面の評価(先手優勢とか、そういうの)をCPUにさせる
とりあえず、ここまでできれば棋譜の通りに自分で駒を動かしてみたり
しながら楽しくなっていくかなあと。
対戦できるようになるにはまだまだかかりそうですけど、
詰み検索アルゴリズムは公開されている資料も多いし、
思考ルーチンも局面の評価が上手くできればそんなに大変な作業では
ないんじゃーないだろーかとか、楽観的に考えながらゆっくり進めようと
思ってます。
作っている人がどれぐらいいるのか、対戦できるレベルまで完成?させた
ものをいじっている人がどれぐらいいるのかは自分も気になるなあ。
0868840
NGNG自分も作りかけ。といってもモノは簡易手動 CSA クライアントなので>>866の
言ってるのとは違うけど。
元々フロントエンドは作ってたから、バックエンドを CSA 用にすげ替えるだ
けなんだけどなかなか時間が…orz
0869うさぴょんの育ての親
NGNG最近はあまり時間が取れないから触ってないけど、できてますよー。
http://homapage1.nifty.com/Ike/usapyon/
0870うさぴょんの育ての親
NGNGhttp://homepage1.nifty.com/Ike/usapyon/
0871デフォルトの名無しさん
NGNG>>773氏はまだ居る?
0872デフォルトの名無しさん
NGNG小物
サーバのログに日付と時刻 (842)
Winからだと改行コードのせいで乱れる (843)
daemon化してPIDを記録 (847)
LOGIN:OKが出るのが遅い (850)
タイムアウト関係
大物
WHOコマンド
チャット
その他
手動用のクライアント
これくらい?
0873デフォルトの名無しさん
NGNGどんな感じだろう?telnet + α(コマンド一覧表示等) とか?
普通の将棋ソフトにプロトコル通信足したのとか
0874773
NGNGいる。土曜日にscratchからやり直す予定。
telnet接続 -> authコマンド -> 拡張モード(WHO, 対戦相手決定とか)
-> LOGINコマンド -> CSAモード(CSAプロトコル準拠) -> 勝敗決着
-> 拡張モード
telnet接続 -> LOGINコマンド -> CSAモード(CSAプロトコル準拠)
みたいのを考えている。
>>872
水曜日あたりに更新版出して、書き込んだつもりだけど、書き込めてなかった。
Winからだと改行コードのせいで乱れる (843)
CSAプロトコルが、改行をLFに規定しているので、どうしょもないのです。
この手の奴は、CRLFなのがよく聞く話だけど
daemon化してPIDを記録
個人的趣味により、当分はPID記録するけど、daemon化せずの予定
0875デフォルトの名無しさん
NGNGTELNET端末からのアクセスを正式に許すなら改行コードは両対応しないといけないですね
マッキントッシュも勘定に入れるとcrのみというのも有りだし
0876773
NGNGserverが寛大なのは通常問題がないので、現状でも、LF/CRLF/CRどれでもいいはずです。
server -> clientにしても、改行コードを選べるターミナルエミュレータを
使ってもらえれば、LFでも大丈夫だと思ってます。
CSAプロトコルから外れるのは、避けたほうがいいと思います。
0877デフォルトの名無しさん
NGNGこのさい改行コードの対応もぜひ(笑
こんな案はどう?、
接続後いきなりLOGINが送られてきた場合は相手はプログラムなのでLFで行く
TELNETが相手の場合は一発目に改行を送ってもらってその改行コードを使う
LOGINプロンプトなんかもだしちゃったらいいかも
サーバープロジェクトが複数立ち上がるのがまずくなければ
vb.netの勉強にちょうどよさげな題材なので
WINDOWS版のサーバーを書いてみようかと思ってます
でも773氏の気分がそがれるようならやめときます
0878773
NGNGなるほど。一発目のコマンドにあわせて送り返すのはいいアイディアかも。
> WINDOWS版のサーバーを書いてみようかと思ってます
> でも773氏の気分がそがれるようならやめときます
ぜひ書いてください。
0879868
NGNGあー、自分のブツは CSA frontend on Emacs なので縁がない人には全く縁が
ないかと…。
>>818とか既存のコードを使えばもっと簡単に手動用クラはできそうだけど。
この路線で盛り上がってオープンな yet another 将棋倶楽部24 ができればと
妄想中。
0880デフォルトの名無しさん
NGNGというか、なんで今まで無かったんだ?
0881デフォルトの名無しさん
NGNGプロトコルの仕様を読むところからだけど、
既存のフリーソフトを自分なりに改造して
ネット対戦版をつくっていきたいなぁと妄想
0882デフォルトの名無しさん
NGNGうい〜、ではぼちぼちととりかかります
今日の成果、接続して送受して終了まで、なんと数行でかけてしまうというのがわかった
しかし、おぶじぇくとしこうがようわからん(笑
うにうに・・・、途中から素のVBへ逃げるかも
0883まともに動いていない ◆R/rLuLKeEI
NGNG0884デフォルトの名無しさん
NGNG0885まともに動いていない ◆R/rLuLKeEI
NGNG因みに私のはLOGIN/LOGOUTだけのコンソールアプリなのにまともに動いてないので884氏に期待。
関係ないがEclipseはええよ。
0887884
NGNG1対1プロトコルとサーバプロトコル、読み比べると2byte文字使用可能な様に読める…
1on1 “空白を含まない32文字以内の7ビットASCII文字列”
server “空白を含まない32バイト以内の(略)文字列”
0888773
NGNGhttp://up.isp.2ch.net/up/f4e4e84035fe.zip
↓これは直したつもりです。
サーバのログに日付と時刻 (842)
LOGIN:OKが出るのが遅い (850)
pingに反応しないと切断するのも、止めました。
telnetした直後に、誰が接続しているか、表示されます。
(CSAプロトコル違反なので、次のバージョンでは止めます)
>>887
空白にはタブを含むのか
英数字以外の7ビットASCIIの扱いはどうなるのか
とか不明ですね。
漢字を通すにしても、文字コードが定められてないですし。
0889まともに動いてない ◆R/rLuLKeEI
NGNG将来Xサーバーを起動していないUNIX上でも使いたいので私のtest56.jarは意図的にコンソールアプリにしてます。
サーバーは8ビットスルーにしておくつもり。
でもログイン/パスワードだけ。
0890デフォルトの名無しさん
NGNGども。クライアント作りに使わせてもらってます。
で、指し手に対する応答がちょっと変みたい。例えば telnet で
+7776FU を送ると
+7776FU^M,T10
みたいに指し手とカンマの間に CR が入ったのが返ってきます。
応答のときは str から CR を取り除かないといけないのかな。Ruby 詳しくな
いので報告だけですまんこ。
0891890
NGNG規約どおり LF で送れば問題ないのかな(まだやってないけど)。ってこと
で>>890は気にしないで下さいませ(;´Д`)
0892773
NGNGサーバの受け取りは、CRLF/LF/CRなんでもいけるはずです。(つもり)
chomp関数が対応してくれるはずなので。
scriptの方を使っている場合はRubyのversionを教えて下さい。
1.8以降でないと、駄目だと思います。
0893890
NGNGなるほど、了解です。script の方を ruby 1.6.7 なマシンで動かしてました。
ruby 1.8.1 上でやったら確かに telnet からでも問題ありませんでした。
ちなみに 1.8 以降でないと駄目なのはこの改行コードだけの話ですか?
それとも他の機能も 1.8 以降でないとマズいですか?
0894783
NGNGwdoor 更新しました
0895デフォルトの名無しさん
NGNGふと思ったんだがウインドウズでサーバー作ってもライセンス料払えないなと・・・・
なんで自分で作ったサーバーソフトを運用するのにMSに金はらわにゃならんのか
なっとくいかね〜
0896デフォルトの名無しさん
NGNGクライアントのテストに使わせていただいてます。
END Position
END Game_Summary
が、送られてこないみたいですがなぜでしょう?
ソースを見ても送ってないように見えます。
0897877
NGNGただいま室温35度・・・しむ
0899879
NGNGもちょっと綺麗にしたらアップできそう。
0901デフォルトの名無しさん
NGNGあとテキストでうまく表現するアイディアとかも無いでしょうか?
これがあればサーバーが面倒見ればtelnetだけで対局もできるかもと思ったのですが
漢字が上下逆に表示できたら簡単なのになあ
0902デフォルトの名無しさん
NGNG将棋板は駒の→将棋板や駒の
0903デフォルトの名無しさん
NGNG> あとテキストでうまく表現するアイディアとかも無いでしょうか?
将棋板を覗いてみるといいと思う。テキストだけでも充分表現できてるよ。
0904デフォルトの名無しさん
NGNG行ってきました
探し当てたのは ▽歩 ▲歩 ★歩 ってやつでした、ほかのはなかなか見つからなかったので
もしこっちのほうがもっといいというのがあったら教えてください
駒が横長になってしまうのに少々違和感がありますが(笑)しょうがないですよね
これ見て思いつき
歩> <香 って横向きにしちゃうのってどう?違和感ありすぎ?だよね(笑
0905デフォルトの名無しさん
NGNG駒の画像ならここなんかどう?
柿木将棋用駒フォントだけど・・・
http://member.nifty.ne.jp/Takeyan/
0906デフォルトの名無しさん
NGNGなんとかTCP/IP接続が出来るので自分も参加したいと思ってます
グラフィックがDOS画面で駒とか配置してるんだけど、
WINDOWSプログラミングって出来て当然なのでしょうか?
覚える事が多すぎてちょっと手を出す気が起きないのですが・・・
0907デフォルトの名無しさん
NGNGさんくす、いくつかダウンロードしてみました
ライセンス関係の記述が無いみたいですね
各自で入手してもらうようにすればいいのかな
0908デフォルトの名無しさん
NGNGwindowsプログラムはCにこだわらなければVBなんかだとボタンやテキストボックスなどの部品を
ドラッグ&ドロップでペタペタと貼り付けていくと外見があっというまに出来上がってしまうので
非常に簡単に形になりますよ
ぶっちゃけ本質のとこだけコーディングすればいいので(ちょい誇張)非常にらくちんです
細かいことをいわなければ・・・(笑
0909デフォルトの名無しさん
NGNGX Windowだと文字がひっくり返ったフォントを作ってくれてるね。
http://www.logos.ic.i.u-tokyo.ac.jp/~gekisashi/download.html
Windowsのフォントってこんな感じのを自前で作れたっけ?
0910デフォルトの名無しさん
NGNG>>905のとこに有るみたいよ
0911デフォルトの名無しさん
NGNGあ、ほんとだ。
0912デフォルトの名無しさん
NGNG縦長がよければ
歩
▽
▲
歩
でどうだろう。
へぼでよければ駒絵くらい提供できるけどね。
0913903
NGNG> 探し当てたのは ▽歩 ▲歩 ★歩 ってやつでした、ほかのはなかなか見つからなかったので
説明が書いてあったと思うけど★☆は最終手ってことね。
成駒は
成銀 "全"
成桂 "圭"
成香 "杏"
ってなカンジ。
> 歩> <香 って横向きにしちゃうのってどう?違和感ありすぎ?だよね(笑
相手側の駒 "v歩"
自分側の駒 " 歩"
ってのも使われてるよ。
0914デフォルトの名無しさん
NGNG>>相手側の駒 "v歩"
みましたみました、でも私的に非常に見づらかったので脳内却下してました(笑
0915デフォルトの名無しさん
NGNG皆が自由に使えるものを提供してもらえると非常にうれすいです〜
0916デフォルトの名無しさん
NGNG用意されてるものを利用するほうが楽ちん。
CならたぶんBCBが楽。
たとえば、盤面にはTStringGrid(オブジェクトも格納できる表)
なんかを使って、盤面のクラス定義してメンバに一個もたして、
表示はなるべくTStringGridのメソッドを利用するようにしたり。
0917デフォルトの名無しさん
NGNGでも 作り方が解らない
0918デフォルトの名無しさん
NGNG定跡はずれは 羽生の頭脳に ハッキングて 作れますか
0919デフォルトの名無しさん
NGNG「定石」は一般でも使われるけど、将棋の世界では「定跡」と書くのか。
今、辞書引いて知っちゃったよ。
0920899
NGNG持ち時間表示とかまだやってませんが、対戦できる程度にはなってると思いま
す。興味がある人はどうぞ。Emacs21 でしか確認してないので変なとこがあっ
たら教えて下さい。
ttp://tokyo.cool.ne.jp/progn/shogi.tgz
0922デフォルトの名無しさん
NGNG楽しい!
0923デフォルトの名無しさん
NGNGどっかにアプローダー置こうか?
おすすめスクリプトはないかな?
0924デフォルトの名無しさん
NGNGとりあえずはHP素材として公開されてるのを拾って使ってるが。
921さんゼヒお願い。
0925うさぴょんの育ての親
NGNGhttp://www.geocities.jp/sobechan/
0926デフォルトの名無しさん
NGNG漏れは 参加のハードルが高すぎます みなさん がんばって下さい
0927884
NGNG気分転換に駒画像作ってみました。
アルファチャネル付きPNGでサイズは50x50<使える?
>>923さん
アップローダー設置してくれます?
0928デフォルトの名無しさん
NGNG"v歩"ってやつは柿木はじめ、市販ソフトで盤面入出力するときに使うやつだね。
入出力できるようにしておけば便利だぞ。
0929デフォルトの名無しさん
NGNGとりあえず設置してみたもっといいのあったら教えてねん
http://gm.a-ark.net/~shogi/clip/clip.cgi
0931デフォルトの名無しさん
NGNGあう〜スマソ細かい設定してなかったかも
zip許可した場合の危険性ってなんだっけ?
0932884
NGNGここをこう変えたほうが良いとかあったら、ガンガン言って下さい。
0933デフォルトの名無しさん
NGNGおつかりさま。
>>932
シンプルですき(はぁと)
0934773
NGNGサーバに、CSAプロトコル準拠モードと、chat, whoが出来る拡張モードを
付けようと思っています。(つないだクライアントごとに、モードを変える)
拡張モードのときには、他人がchatで書き込んだ内容が、サーバからクライア
ントに送られることになります。クライアントが期待しないレスポンスがサー
バから来る格好になるのですが、大丈夫でしょうか?
0935デフォルトの名無しさん
NGNGチャット対応は大変そう
0936921
NGNGリクエストあればばらして上下両方作りますんで。
#最早大きめのを作る理由はなくなったな。
0937デフォルトの名無しさん
NGNG0938デフォルトの名無しさん
NGNGクライアントが期待しないレスポンスが来た場合は単にそれを無視するように実装しとけばいいのでは?
0939デフォルトの名無しさん
NGNGWINDOWSでのオリジナルサーバー運用についてMSに問い合わせてみた
接続数数制限があるからサーバーエディションを使わないといけない
認証ユーザーが居る場合認証方法にかかわり無く人数分のライセンスが必要
ゲストアカウントのように認証が必要ないユーザーについてはライセンスは必要ない
ということです
ウインドウズでやると有料にするしかないなあ
激しくモチベーションが下がったよ・・・
こりゃテストもできんぞ(w
0940デフォルトの名無しさん
NGNG自動対局の仕方が 難しいですかね
0941デフォルトの名無しさん
NGNG0942920
NGNG今は伝文に対する正規表現が手抜きなので大丈夫じゃないですが、そこを直せ
ば大丈夫にはなります。
# つーか、あんまり手抜きすぎたのでとりあえず手元のは直した
拡張コマンドに対する識別子が決まれば対応もするつもりです。
0943デフォルトの名無しさん
NGNGttp://www.greatshogi.com/shougi.html
java将棋は ソースを公開しています
0944C言語の人 ◆OtHeRo2E6Y
NGNGポート4081の通信機能はそのままで、
別のポートからログインすることによって、
状態取得等の拡張機能が使えるようにすれば、
CSA準拠でいけるんじゃないでしょうか。
ネットワークプログラムはやったことないので、
的外れなことをいってるかもしれませんけれど。
0945デフォルトの名無しさん
NGNGデーター自体はテキストを標準入力と標準出力で扱うのと考え方は同じですよ
受け取ったメッセージが自分の知らないコマンドだったらチャットメッセージとして扱ってやれば
どんなに拡張されても知らん顔で動くんではないでしょうか
そして参加者は総じてプログラムは得意な人ばかりでしょうから
そのあたりの実装にてこずるような人は居ないのではないかと
0946まともに動いてない ◆R/rLuLKeEI
NGNGああ、それは私のことだ。
近況:
まともに動いてないまま利きの表をいじってみたり評価関数の係数調整したりして発散しつつある。
もうすぐ投げ出す予定。
0947デフォルトの名無しさん
NGNG相手が気が狂って変なこと言ってきたら
%KACHI を宣言しないといけないんだよね...
0948デフォルトの名無しさん
NGNGん? どゆこと?
0949まともに動いてない ◆R/rLuLKeEI
NGNGチャットデータを異常とみなして%KACHIを宣言する奴が出てきそう…
0950デフォルトの名無しさん
NGNGクライアントがとち狂ったときに対応するのはサーバーの役目ですよ
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGCSAプロトコルにはそう規定されてるみたい
0953デフォルトの名無しさん
NGNGだから、「クライアントが無視するだろう」とか勝手に想定するのはイマイチ。
クライアントが「この拡張は受け取れる」と申告してきたら拡張機能が使えるとかの方が、
美しいと漏れは思うよ。
別ポートで拡張機能を使うとかならまぁいいんじゃないかな。
0954デフォルトの名無しさん
NGNG無視するだろうじゃなくて
無視するようにしとこうよって提案でし
0956デフォルトの名無しさん
NGNG> クライアントが「この拡張は受け取れる」と申告してきたら拡張機能が使えるとかの方が、
> 美しいと漏れは思うよ。
まぁ、773氏は
> (つないだクライアントごとに、モードを変える)
と言ってるのでそのあたり(拡張に準拠するかのどうかのネゴ)も想定してるんでしょう。
> 別ポートで拡張機能を使うとかならまぁいいんじゃないかな。
逆に別ポートは個人的に美しくない気がするけどそれは趣味の問題かな。
0957まともに動いてない ◆R/rLuLKeEI
NGNG拡張コマンドの使用で拡張モードに勝手に移行すると考えていいのかな。
準拠モードに戻る方法は必要だろうか?
0958デフォルトの名無しさん
NGNGRS232C時代の話かと
0959773
NGNGLOGIN name password extension1
みたいに、パラメータを増やしてもらう、というのでどうでしょう?
>>957
CSA標準なクライアントは、
LOGIN == 対局準備完了 == 相手がいれば対局開始
を意味します。
逆に、拡張モードなクライアントは、LOGINしても、CHATとかしたいだけかもしれない。
> 拡張コマンドの使用で拡張モードに勝手に移行すると考えていいのかな。
この方法だと、LOGINしてから拡張コマンドを入れるまでの間に、
CSA標準扱いをされて対局が始まってしまうかもしれないので、問題かなと思ってます。
なので、LOGINのパラメータ追加方式を提案します。
>>920
clinet->serverへの拡張コマンドは、"%%hogehoge"のように、%2個で開始
server->clientへのレスポンスは、"##hogehoge"のように、#2個で開始
でどうでしょう?
0960デフォルトの名無しさん
NGNG無視するようにしとこうよ、ってのはあくまでプログラマの心構えの話で、
それを守るべきだ、って言うのなら元々の「プロトコル規定」に書くべきなんだよね。
要するに、サーバは「純粋に規定を守るクライアント」を受け付けるべきで、
クライアントも「純粋に規定を守るサーバ」を困らせないようにしたいと思うんだけど。
なので>>959のようにLOGINコマンドに追加しちゃうのはどうかと思ってたり。
CSAが規定してるのは「将棋の対戦」に必要な部分のみであって、
それ以外、whoとかchatとかは「サーバにログインしている人達のコミュニケーション補助」のためのプロトコルだよね。
つまり、求める通信の層(概念)が違うと。
なので、そもそも同じストリームで流す必要はないような気もする、というのが「別ポートで」というココロだったんだけど。
もちろん、プログラミングはより面倒になるからやりたくないってのも正しいと思うけど。
しかし、CSAももう少し拡張に気を配った規定を作っておいて欲しいなぁ。
プロトコルバージョンがサーバ側からしか与えられないってのはうれしくないよね。
0961デフォルトの名無しさん
NGNGCSAのは会場にみんなあつまってコミュニケーションは空気伝達でやることしか想定してないんだよねたぶん
0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNGそれに接続させるために俺のIPアドレスとポート番号を
ここに公開するってのは
セキュリティ面で結構危険な行為ですか?
0964デフォルトの名無しさん
NGNGサーバーに問題がなければ
なんともない。
0965まともに動いてない ◆R/rLuLKeEI
NGNGLOGIN name password[ extention1]
で省略したら準拠モード、あれば拡張モードなのでは?
0966デフォルトの名無しさん
NGNG> 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 を送るの
はマズくない? って話もあるっしょ。
プロトコルモードもバージョンも対局開始しないと送られてこないから使いづ
らいやね。
0967まともに動いてない ◆R/rLuLKeEI
NGNG標準にしか対応していないサーバーにextention1を付けて送ったらログインに失敗するのでは?
0968デフォルトの名無しさん
NGNGあたりまえですが失敗ならば無問題ですね。
でも必ず失敗するとも言えない。実装によっては成功するだろうし、その可能
性は高い気がする。
で、クライアントは拡張モードだと思い込んで chat をバンバン送ってサーバ
あぼーんとでもなったら(゚д゚)マズー
サーバは extension1 を付けてログインしてきた場合は、拡張モードでログイ
ンできたってのをクライアントに通知する、
クライアントはその通知を受け取った場合のみ拡張コマンドを送るようにする、
ってなお約束が必要かな。
0969まともに動いてない ◆R/rLuLKeEI
NGNG>>968
それはよさげ。
0970デフォルトの名無しさん
NGNG人間で言えば何段相当ぐらいなの?
0971デフォルトの名無しさん
NGNG4〜5段。
0972デフォルトの名無しさん
NGNGYSSは勝又清和五段との飛車落ち戦でも勝ち、会場を沸かせた。
2位は「激指(げきさし)」、3位は「IS将棋」。
毎年、北朝鮮から参加している「KCC将棋」は4位
うさぴょん がんばって下さい うさぴょんを応援する会
0973デフォルトの名無しさん
NGNGこれからCPUを作成するのですが、
皆さんはどういう思考アルゴリズムを作成しているのでしょうか?
基本は定跡と何手か先の点数判定で最も高い手を選ぶですよね?
0974773
NGNGhttp://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
0975773
NGNG以下のようにしました。
%%CHAT hello
##[CHAT][tarou] hello
ちなみに今は、対局中でも多人数chatのままです。
>>920
接続テストしてません。すみません。
0976942
NGNG点は
* サーバからの伝文を厳密にチェックするように修正
* 消費時間,最終手の表示を追加
ttp://tokyo.cool.ne.jp/progn/shogi-0.2.tgz
0978デフォルトの名無しさん
NGNGwdoor 更新しました.
0979デフォルトの名無しさん
NGNGshogi-server:229:in `write_safe': wrong number of arguments(2 for 1) (Argument
Error)
エラーが出てました
0980773
NGNG直しました。
0981デフォルトの名無しさん
NGNGちょっと気付いた点など。CSAモードで以下の問題があるようです。
1. パスワードなしでの LOGIN ができない
2. LOGIN:incorrect が返らない
3. LOGIN:<username> OK が返らない
4. LOGOUT できない
1 は、拡張モードでは仕様上パスワード必須なのは想像できますが、CSAモー
ドでもパスワード必須になっているのはユーザが混乱するように思います。勿
論パスワード必須にする方向もアリだとは思いますがいかがでしょう。
2, 3, 4 は以下のような変更が必要でしょうか。コード全部読んだ訳ではないの
で適当に修正して下さいまし。TABなど崩れると思いますが数行パッチなので
そのまま貼ります。と思ったら行数オーバで怒られたので次レスに。
0982デフォルトの名無しさん
NGNG+++ 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
0983デフォルトの名無しさん
NGNGhttp://tokyo.cool.ne.jp/progn/shogi-0.3.tgz
# しかし需要はあるんだろうか…orz
0984まともに動いてない ◆R/rLuLKeEI
NGNG拡張モード対応版の方が需要ありそう。
チャット主体で…。
近況:
よせばいいのに私のまともに動いてないプログラムにクライアント機能を追加中。
まだダイアログをこさえているところで接続にすら至っていない。
773さんのサーバーに接続できるようになるのはいつになるのやら。
0985773
NGNGhttp://gm.a-ark.net/~shogi/clip/img/16.zip
1. パスワード必須でいいのでないでしょうか
2. 返すようにしました。その後、もう1行返しているのですが、止めた方がいいでしょうか?
3. 返すようにしました。
4. LOGOUTコマンドを忘れてました。%%LOGOUTを廃止しました。
0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNGどうもです。
> 1. パスワード必須でいいのでないでしょうか
ふむ。認証機構がない現在、空文字パスワードによるログイン失敗は syntax
error にあたる訳で、そう考えると違和感が残るのですが、あまり強く主張す
るものではありません。必須だと周知すればいいですし。
> 2. 返すようにしました。その後、もう1行返しているのですが、止めた方がいいでしょうか?
拡張モードは構わないと思います。欲を言えば "##[ERROR]" などの固有のヘッ
ダを付けてもらえるとプロトコル的に美しいかと。クライアント側も一律で処
理できますし。
CSA モードでは(規約にないので)止めた方が好ましいと思います。
# でもエラーメッセージくらい欲しいですよねえ…。まぁ、あの規約じゃしゃー
# ないですか。
> 4. LOGOUTコマンドを忘れてました。%%LOGOUTを廃止しました。
了解です。
0988デフォルトの名無しさん
NGNG拡張モードをここで自由に決めてしまえばいいでしょうね。
お歴々もここを見ているようだし、ゆくゆくは拡張モードが
DeFactoStd.になるかもしれませんがね ;-)
0989デフォルトの名無しさん
NGNGそしたら使ってあげる
0990まともに動いてない ◆R/rLuLKeEI
NGNGXML化案を出してくれそしたら検討してあげる。
そんな物言いだと誰も動いてくれないよ。
0991デフォルトの名無しさん
NGNGアップローダ (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/
くらい?
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNGttp://pc5.2ch.net/test/read.cgi/tech/1086678961/
初スレ立て。補完よろしゅう
0995まともに動いてない ◆R/rLuLKeEI
NGNG私は馬鹿なんだそうだ。
なるほどね、上手いことを言う。
思い当たる事柄が多々ある。
そうか、そうか、納得。
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。