おまいら最強の将棋プログラムしてみろよ part4
1 :
デフォルトの名無しさん :
04/06/08 16:16
>>前スレ773さん shogi-server ですが、各プレイヤーの消費時間が局をまたいで積算されてい くようです。一旦時間切れ負けすると次局の初手で切れ負けになる(´・ω・`) Game.initialize()あたり?で初期化が必要かと。
8 :
デフォルトの名無しさん :04/06/09 00:07
>>奈々美さん %TORYOを送ると%TORYOが返ってくるみたいです。
いよいよコンピュータの思考部分を作り始めようと思ったのだが、 俺自身は将棋が非常に弱いという問題が・・・ そういうのって将棋AIを作るのには関係無い? やっぱある程度、将棋がうまくないと作れないかな?
ルール知ってれば問題ないけど1手詰くらいはとけた方がデバッグが楽
そこ、ちょっと迷ったのです。
>>8 クライアントが%TORYOを送ると、
サーバは片方には
#RESIGN
#WIN
を、
もう片方には
#RESIGN
#LOSE
を送るのが正解でしょうか?
前スレ884です。 投了したほうに %TORYO #RESIGN #LOSE もう片方に %TORYO #RESIGN #WIN を送るんじゃないかな?
13 :
デフォルトの名無しさん :04/06/09 01:09
Javaでネットワーク対戦可能なフレームワークを作りかけたんだけど 不要っぽいね。
14 :
私はバカだ ◆R/rLuLKeEI :04/06/09 01:30
気分が落ち着くまで「まともに動いてない」を「私はバカだ」にしておく。 サーバープロトコル仕様を読んでいて不思議なのは、勝敗が決まると切断されるのにログイン状態は保持されるかのようにも読み取れることだ。 クライアントは次の対局またはログアウトのために再接続するのが正しいのか? それとも私の読み落としか? 奈々美さんの実装は如何に?
>>14 >3.4. 指し手と意思表示
>(略)
>以後、このように勝敗情報を伴うパケットがサーバから送られると、同時にコネクションは切断される。
>3.5. ログイン中のタイムライン
>クライアントがログイン中の、対局開始から終了までのタイムラインは以下の通りとなる。
>対局終了後は、ログイン状態が続く限りにおいて、繰り返し対局が可能である。
確かに変やね
>>11 が正解だと思い込んでて、なんで
>>12 の解釈になるのかと規約見てみたら
そうともとれる書き方なのね。 % は C->S で # は S->C かと思いきや
%CHUDAN (S->C) もあるし。
>>14 の件も合わせてよく判らんね。誰かCSAに(゚Д゚)ゴルァメールしない?
んで、規約見てて気付いた点。
>>奈々美タン
規約> また、規定時間内に指し手が送信されなかった場合、サーバは着手を待つことなく、
規約>
規約> #TIME_UP
規約> #WIN(LOSE)
規約> という情報を双方に送信する。
だそうで(今は着手しないと送信されない)。いつでもいいので直してくれると幸い。
17 :
まともに動いてない ◆R/rLuLKeEI :04/06/09 09:01
test56.exeに挙動を合わすのがよさげ。 あ、始業だ。 未確認なのでだれかやってみてください。
コンピュータ将棋のサイトをいろいろ回って考えてみたけど、 コンピュータって人間の右脳に当たる思考が出来ないから弱いんだね。 羽生「最初に良さそうな手が頭に浮かぶ。 それが成立するかどうかを読む。 次に他に手がないかを読んで、 いくつかの手を比較する」 これってまず右脳を使って、盤面から良さそうな手が思いつき 次に左脳を使ってそれの評価をする。を繰り返して一番良い手を選ぶって感じかな?
>>18 右脳左脳以前に、一般的にはコンピュータが
現局面以外の情報を持っていない = 比較対象となるものが無い、
というのが原因じゃないかな。
ある局面を与えてコンピュータなりの最善手を求めることを何回も繰り返した場合、
(起動して、最善手をもとめた後、再起動して…を繰り返すという意味)
毎回、同じ探索・評価・時間・結果になると思うよ。
局面をどこかに保存しておかないと解決しない問題のような気もするけど。
>>18 現状はそのよさそうな手を人間が考えて定石として持っておくってとこでしょうか
21 :
まともに動いてない ◆R/rLuLKeEI :04/06/09 21:27
test56.exe+csalan*2の結果: 後手%TORYOを送信で両者とも全く同じ %TORYO #RESIGN #WIN(LOSE) という三行がサーバーから返された。 三行目が仕様に合わないような気がする。 CSALANはVer 3.00でした。
23 :
まともに動いてない ◆R/rLuLKeEI :04/06/09 22:08
ところがJava版サンプルJavaSample.lzhのCsaReaderWriter.javaをみるとちゃんと#WIN、#LOSE、#DRAW、他と場合分けしている。 何なんだ一体。
>>16 >>だそうで(今は着手しないと送信されない)。いつでもいいので直してくれると幸い。
週末にやります。
>>14 現在の実装としては
CSAモードで繋がっている端末は、勝敗決定で切断
拡張モードで繋がっている端末は、勝敗決定でログイン状態保持
のつもりです。
>>15 勝敗情報を伴わない対局終了には、%CHUDANがあります。
これを考えての記述ではないと思いますけれども。
いつになったら皆で対戦できるのだろう・・・
>>25 現状で who も chat も対戦もできるよ。
>>26 もう皆対戦してるの?
ここに勝敗とか書き込まれてないけど。
対戦してるかどうかは
>>3 の「棋譜」のとこ見れば判るけど、まだやってはい
ないね。ランダムプレイヤー突っ込む手もあるけどまだテストの邪魔だろうし
なあ。
29 :
まともに動いてない ◆R/rLuLKeEI :04/06/11 00:39
>>27 >3 の棋譜などを見てください。
今日も対戦がありましたね。
みんなチャットに流れてんのか人が少ないような。
30 :
◆R/rLuLKeEI :04/06/11 00:42
嘘を書いてしまった。 粗忽ですまぬ。
>>29 チャットに流れるもなにもチャットできるクライアントがまだ揃ってないやん。
早く作ってくれ>>R/r
32 :
まともに動いてない ◆R/rLuLKeEI :04/06/11 01:24
まともに動くチャット用プログラムをプログラマさん達が各自でちょちょいと書いて行ってしまわれたとばかり思ってました。 腸炎が完治したら作ってみたいが、またまともに動かなさそう。 何しろまともに動かなくて放り出した色んな残骸が1ダースくらいあるんで…言い訳です。 すんません、多分作ります。
おまいらのAIは強さどのくらい? AIが完成してる奴は試してみた事ぐらいあるだろ? 24とかで試した自分のAIの強さを教えてくれ!
34 :
まともに動いてない ◆R/rLuLKeEI :04/06/12 21:06
>>31 まだjarにまとめてないけど何となく動いている気がするチャットプログラムならあるが…
今朝から断続的にサーバーに接続テストしてました。
夕食後、風呂までに間に合うだろうか。
明日は仕事なんで夜更かしはしたくないな。
目が疲れたよ。
35 :
まともに動いてない ◆R/rLuLKeEI :04/06/12 23:16
Part3 929氏提供のアップローダに「拡張モードでチャットしかできないクライアント」をアップしてしまいました。 まともに動きますように…
将棋プログラマーの皆様、対PCで指せるミニ将棋ソフトを作ってください。
駒が成れる陣の深さは2段、それ以外は本将棋と同じルールです。
盤36/81 駒24/40なので、ゲームの複雑さを本将棋の1/2とすると、2手読む手間は1/4、3手読む手間は1/8でしょうか?
めちゃくちゃ強いソフトが作れそうな気もしますが……
ミニ将棋 第2局
http://game6.2ch.net/test/read.cgi/bgame/1056038952/ 後手持ち駒:
6 5 4 3 2 1
┌──┬──┬──┬──┬──┬──┐
│▽飛│▽桂│▽銀│▽王│▽金│▽角│ 一 最終手
├──┼──┼──┼──┼──┼──┤ ☆★
│▽歩│▽歩│▽歩│▽歩│▽歩│▽歩│ 二
├──┼──┼──┼──┼──┼──┤
│__│__│__│__│__│__│ 三
├──┼──┼──┼──┼──┼──┤
│__│__│__│__│__│__| 四
├──┼──┼──┼──┼──┼──┤
│▲歩│▲歩│▲歩│▲歩│▲歩│▲歩│ 五
├──┼──┼──┼──┼──┼──┤
│▲角│▲金│▲玉│▲銀│▲桂│▲飛│ 六
└──┴──┴──┴──┴──┴──┘
先手持ち駒:
>>35 こいつを動かすためにはあと何をそろえるといいのでせう?
>>36 とっても興味あるけど55将棋みたいにあtからゴルァされるといやだしぃ
39 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 02:17
>>37 ああ、やはりまともに動いてないんだ。
サンのJavaサイトから実行環境JRE 1.4.2_03以上をダウンロード、インストールしてほしい。
それでもなおまともに動いてないなら、どこかに結果を丸々コピペしてほしい。
お役に立てるかもしれない。
>>39 いやうちはwindowsXPなんだけど関連付けされてないのでまるっきり動かせなかったの(w
とりあえずサンへいってきまふ
41 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 02:33
>>40 参考までに。
JREをインストールしたことがあるのはWindows98とRedHat系Linux。
今回作成したのはLinux上です。
インストール手順はサイトにあるので最後の最後までそれに従うようにお願いします。
インストール終了まではクリック三発ほどでした あっさりうごきました
44 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 02:49
ありがとう。 Java初心者スレ47(現行)もどうぞ。 URLは…すんません。出直してきます。
45 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 02:59
>>43 ええっ!そんなにあっさり…
動かねえ書き込めねえぞゴラァ七連発に打ち拉がれる準備してたんだが。
んでは・・・・・、将棋盤が出ないんですけど・・・・とか プレッシャーかけたる(w
47 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 03:29
>>46 ううっ、神経性胃炎が痛みだした。
完治してまだ需要があったら検討だけしまっさ。
48 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 03:37
おお、そうだ。 奈々美さんへ、 拡張モードで対戦中に現在の局面を確認するコマンドってありましたっけ? 実装が猛烈に困難なら無くてもいいです。
49 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 04:43
「拡張モードでチャットしか出来ないクライアント」に将棋盤を出したいが、前スレDAT落ちにより拡張コマンドの仕様を見れず。 再掲載を希望する。
これかな? 前スレより転載 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
51 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 05:12
>>50 そうそう、それそれ。
ありがとう。
%%LOGOUTは廃止だったよね。
チャットプログラムを練って作って上げて検討して二日連続で徹夜したらほんとに体調悪くなってもた。
将棋盤も出せる「拡張モードでチャットしか出来ないクライアント」はちょほいと待ちなぁ。
>>48 拡張モードは将棋に関わる拡張は(現在のところ)してないし、そもそもそのコ
マンドの必要性もよくわからんな。
それとム板的にはソースも上げてくれるとよいと思うんだけど。
53 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 10:35
>>52 ソースも上げてしまいました。
まともに動いてないかもしれないプログラムの中身を見たい方はどうぞ。
拡張モードで対戦中に現在の局面を確認するコマンドは、チャットクライアントのテキストエリアに一手毎に表示させることでクライアント内部での局面の更新をサボろうという魂胆です。
あえなく却下。
途中観戦者を受け入れるなら多分必要になるよね、現在の盤面表示
>>54 なる、観戦があるか。いずれにしろフル仕様のサーバなら盤面情報も持たなきゃ
いけないから、その機能の実装も猛烈に困難ってことは無さそうだね。
>>55 うん、審判機能の実装のほうがよっぽど面倒くさいと思うなり(w
遅くなりましたがwdoorを
>>7 のバージョンに更新しました
33だが 誰も質問に答えてくれない・・・ 完成したらそれがどれぐらいの強さなのか試したりしないのか? それとも完成してる奴がいないのか? どっち?
奈々美さん wdoor で Revision 1.5 のログを眺めていたら ./shogi-server:590:in `main': undefined method `name' for nil:NilClass (NoMethodError) from ./shogi-server:561:in `start' というエラーが出ていました.
>> 58 まだ級位者の自分より弱いので24では試したことがない もうちょっとしてからの予定 老婆心ながらAIとはあまりいわないと思う
61 :
まともに動いてない ◆R/rLuLKeEI :04/06/13 17:07
>>57 お疲れさま。
皆様、おはようございます。
反動で寝ておりました。
とりあえず現物サーバー合わせで将棋盤も出せる拡張モードでチャットしか出来ないクライアントを気ままにこしらえていきます。
本来のまともに動いてない将棋プログラムと共用出来るように練り直すつもりです。
現状、将棋盤すら出ない拡張モードでチャットしか出来ないクライアントのダイアログはクラスファイルを共用しています。
アップしたものは断りなく使って構いませんが、Javaで作る人なんて私以外に誰もいないでしょう。
遅いし、JVMはリソース食うし、 略
>>13 がうまいこと作ってくれると楽できそうだけどね。もういないかな…。
66 :
まともに動いてない ◆R/rLuLKeEI :04/06/14 01:36
ちょっと変えた「拡張モードで〜略〜クライアント」をアップしました。
>>64 まとめページ「unofficial shogi server for computer programs」作成ありがとうございます。
管理者のページは後でゆっくり見て廻ります。
>>65 盤面表示はプロトコルの「3.2.3 対局の局面情報」の形式で。
55将棋のオフィシャルサイトってないの?
>>64 乙。
でもindex.htmlおいたせいで、ディレクトリ一覧が見れないよ・・・
ログファイル一覧とか見たいけどダメ?
>>69 index.html からリンク貼ってあるぞ。
>>68 その昔ソフトハウスともめてたことがあったのよ
その後どういう結論になったのか調べようと思ったんだけど
ネット上では探せなかったのでそれ以上調べてない
プログラマーはいないの? サーバープログラムなんて結構簡単に作れそうに思うんだけどなぁ。 俺は初心者だから作れないけどw
74 :
◆R/rLuLKeEI :04/06/16 22:03
奈々美プログラマーがサーバープログラムを結構簡単に作ったように思うんだけどなぁ。 現に稼働してるし。 あっしはバカだから時間かかるけど、作れなくはない。
鯖側つくっても動かす鯖を持っていないし、 ネットワーク関連は苦手なので、 上手い人にお任せする。これ最強。 でも自分の知らない言語で書かれると読めなくて(´・ω・`)ショボーン
wdoor を
>>65 のバージョンに更新しました
>> 66
ども.「管理者」は連絡先として載せてるだけなので特に読みものはないです
>> 69
「一覧」をどうぞ
>> 70
どうも
ムマー
78 :
まともに動いてない ◆R/rLuLKeEI :04/06/22 00:58
この土日は台風6号の影響でデバッグどころではなかった。 で、昨日の23時台に拡張モードで接続してみたところtest1さんまたはtest3さんが居た。 どうやらCSAモードだったらしく反応がなかった。 奈々美さんへ、%%WHOコマンドでどちらのモードでログインしたか分かるとちょっといい。 test1さんまたはtest3さんへ、私のまともに動いてないプログラムがログイン直後にダウンしてしまいました。 対戦待ちのところご迷惑をおかけしました。 済みません。
詰め将棋のルールの話なんだが、ふと思い浮かんで寝れなくなったので
少し聞いてくれ。
「最後の審判」て詰め将棋がある。
http://www2u.biglobe.ne.jp/~nuida/h/t/syokei.htm ただし詰むかどうかは不明とされる。
なぜ「不明」なのかというと、将棋のルールの不備を突いて
詰ます詰め将棋だから。
さて、なにが不備なのかだが、これは指し将棋と詰め将棋の
反則処理に違いがあることが原因。
将棋に限らずこの手のゲームの反則には、本来2種類有り得る。
ひとつは「飛車を3枚持っちゃいけません」等のゲームの根幹に関わる反則、
もうひとつは、「二歩」なんかの運用上有り得る反則のふたつだ。
ム板的に言えば、前者は「チェック済み反則」、後者は「実行時反則」。
指し将棋のルールは殆どの場合「実行時」なのは説明不要だろう。
ところが詰め将棋のルールは「チェック済み」だ。
なぜなら詰め将棋のルールに反する手は確実に誤答であるから。
(例えば王手以外の手を指して反則負け、のようなことは詰め将棋にはない。
また解き直せばいいのだから)
「最後の審判」はこの二つの反則を混ぜているので可笑しなことになっている。
「チェック済み反則」と「実行時反則」の区別がきちんと付いている人間には、
この作品が詰むか詰まないかなど迷う余地がない。
つーわけで、漏れの結論では、上記の詰め将棋は「詰まない」。
だからなんなんだ、といわれても困るのだが、このスレ以外で
書ける場所が思い浮かばなかったもんで・・・。例外の勉強してたんだよぉ。
・・・さて、何事もなかったようにこのスレは進んでいくのであった↓
>>79 手順は追ってないけど、
打ち歩による王手を回避する手がある以上は「打歩詰ではない」し、
それによって攻方に反則手しか選択の余地がないとすれば、
「詰将棋として成立しない(=詰まない)」のでは?
結構面白かったよ。
82 :
デフォルトの名無しさん :04/06/22 08:37
>>80 同意。
連続王手も4回連続でなくて、
王手 + 王手以外 + 3回連続王手
とかだと千日手になるんだよね。
(当たり前といえばそうなんだろうけど)
はじめてこのスレみたが プロトコルうんぬんは別問題だろ そんなに難しくないし 将棋AIプログラムが難しいんであって 通信は最後でもOKだろ
ようやくうちのぷろぐらむが駒の動かし方を覚えてくれました。 将棋板番外編に話が出てた効き表示機能ってのがおもしろそう なのでやってみます。
>>83 だが、このスレももう4本目だし、
大会に参加できない人と対戦できるのも面白くないか?
自分のプログラムの弱点を知ることもできるしな。
どうせ革新的アルゴリズムができることはないから、
マターリ語る中に通信開発があるのも楽しいよ
>>83 プロトコルは難しくないかも知れないが、正しくプロトコルを実装した
サーバーを立てるのはマンドクサイ。
対戦将棋プログラムに「正しい」プロトコルを実装するのもマンドクサイ。
(漏れは通信プロトコルを実装した事なぞ無いんで多分だがw)
ところがこれらが無いと誰のプログラムがより強いのか分からんじゃないかw?
多分、一番初めにやるべきだった事を今やっていると言うのが正しい評価だろう。
でも、なかなか大変だよね。ボランティア精神のある人が大勢居ないと。
ところで将棋クラブ24にはこういう公開されたプロトコルは無いのかな?
これさえ守ってれば人間が使うクライアントと同じように対戦に参加できるというものは?
ソフト指しをやりたいと言うんじゃないデツよ!
将棋プログラムと知ってもらった上でアマチュアプログラマの作品も一般の人に
対戦、評価してもらえたら良いなあって事。
それじゃだれでも作れるじゃん ただの重労働 そこらへんにJavaアプリで対戦できるのはころがってるし
>>86 サーバは実装の手間の割に将棋プログラムの裾野を拡げる起爆剤になり得ると思う。
# 効果の方が大きいって意味ね、為念。もちろん奈々美タンには激しく感謝しています。
あと仕様がオープンなところがデカい。
24はよく知らないけど公開してないんじゃない? それに変わるものをこっちで
お膳立てできればいいなぁと思っているところ。
いつかこのスレの住人で羽生を倒したいね
どちらかっつーと俺は羽生タンに倒されたいw
時代は森内
>88 そうでつか、やっぱり無いでつか。 そうだよなあ、一般の人間に混じって,分けの分からないプログラムがどんどん 指すようになったらよっぽどプロトコルの安全性を高めておかないとえらい事になりそう。 悪意でなくともバグったクライアントのためにサーバー全体がダウンしたりしそー! あるいはその公開したプロトコルがセキュリティ上の穴になってクラッカーに狙われるとか。 >90 お,俺は谷川に指して欲しい。このサーバーで人間が誰でも自由に指せるようになったら プロ棋士がこっそり指してみたりしてくれんかなあw?
というより豊川
94 :
まともに動いてない ◆R/rLuLKeEI :04/06/23 01:54
>>93 そうしょっちゅう自爆はせんやろ。
いや、できんやろ。
彼の今後の対局において 歩を張るときは通常より3秒程、思考時間が長くなるに違いない 「二歩じゃないだろうな・・・キョロキョロ(3秒間)」
しょ、将棋講座のタイトルにわらた。 「阿部隆の良い手、悪い手、普通の手」
「張る」とかゆーな・・
奈々美様 チャットでスペースをいれるとそれ以降無視されるようです 特に不都合がなければスペースも使えると嬉しいです - when /^%%CHAT\s+(\S+)/ + when /^%%CHAT\s+(.+)/ でいかがでしょう
ところでチャットで流す文字コードは SHIFT-JIS でいいの? Win なクライアントが多いだろうから長いものには巻かれろ、かな。 まとも氏のは何で流してます? (Java はすっかり忘れちったな…)
100 :
まとも氏 ◆R/rLuLKeEI :04/06/23 22:25
>>99 >まとも氏のは何で流してます? (Java はすっかり忘れちったな…)
まったく気にしてなかった。
LINUXだから多分EUCじゃないかな。
でも、何も変換してないから各OS標準の文字コードか、さもなくばUNICODEで流れているかも…
つまり分からんというこってす。
>>99 ,100
文字コード未指定だから、流れる文字コードはシステムのデフォルト文字コードだね。
OSによって変わっちゃうから、文字コード指定した方がいいかも。
// 動作未確認
// pr = new PrintWriter(server.getOutputStream(), true);
// br = new BufferedReader(new InputStreamReader(server.getInputStream()));
pr = new PrintWriter(new OutputStreamWriter(server.getOutputStream(), "Shift_JIS"), true);
br = new BufferedReader(new InputStreamReader(server.getInputStream(), "Shift_JIS"));
>>101 CSAChat.javaのlogin()の所です。
EUCがいいなあ.
EUCが良かったら
>>101 のShift_JISの所をEUC-JPにしてください。
つーかそもそも Ruby 側はなんでもござれなんだっけ?
106 :
まともに動いてない ◆R/rLuLKeEI :04/06/23 23:19
>>101-104 ありがとう。
でもまだサービス残業中なので更新できません。
急ぎの方は各自いじくり倒して改訂版を作ってください。
週末にでもログインダイアログに文字エンコーディングコンボボックスを追加するか設定ファイル化するつもりです。
私が休日出勤にならないことを祈ろう。
108 :
まともに動いてない ◆R/rLuLKeEI :04/06/23 23:52
よく考えたら、ソケットのストリームを流れるエンコーディングであってUIで扱う文字エンコーディングとはある程度独立しているんだった。 というかJavaの内部表現はUNICODEだし。 なので、サーバー側で決めて頂ければそれに合わせます。 あと、未確認だけどRS232プロトコルはシフトJISだった気がする。
109 :
まともに動いてない ◆R/rLuLKeEI :04/06/24 00:16
>>108 >あと、未確認だけどRS232プロトコルはシフトJISだった気がする。
嘘です。
棋譜フォーマットのほうでしかもOS依存でした。
>>107 もつかれさまです。
Unicode はちょっと… って人は多くないのかな。クライアントが限定されそ
うだし。少なくとも自分はそうなんですが。
関係ないけど、wdoor のログに teamgps がキタ━━(゚∀゚)━━ !!!!!
>>110 Unicodeですかー。
OSがWindowsなので、JavaのUnicodeとは微妙に相性が悪いんですけどー…。
〜が~に化けたりとか、\がバックスラッシュになったりとかね。
まぁ、でもちょっと我慢してもらうだけだからいいかなぁ。
時間に余裕ができたらusapyonもwdoorに突入するのでよろしくー。
Shift JIS よりは Unicode に一票
>> 63 Emacs クライアント重宝してます 香が成ったら成桂になってしまったので報告します あと本質ではないですが auto scroll の関係でチャットの発言は最終行に出る方が自然かと --- shogi.el.org Sat Jun 26 01:48:39 2004 +++ shogi.el Sat Jun 26 01:48:47 2004 @@ -463,7 +463,7 @@ (cond ((eq symbol 'fu) 'to-kin) ((eq symbol 'gin) 'nari-gin) ((eq symbol 'kei) 'nari-kei) - ((eq symbol 'kyo) 'nari-kei) + ((eq symbol 'kyo) 'nari-kyo) ((eq symbol 'hisha) 'ryuu) ((eq symbol 'kaku) 'uma) (t nil))
>>65 の仕様を追加しました。
http://gm.a-ark.net/~shogi/clip/img/24.zip ほとんどチェックしてないので、バグったらすいません。
↓%%LISTコマンドによって、対局IDの一覧が出る。
%%LIST
##[LIST] b-1-a-20040626025755
##[LIST] +OK
↓%%SHOWコマンドで盤面表示
%%SHOW b-1-a-20040626025755
##[SHOW] P1-KY-KE-GI-KI-OU-KI-GI-KE *
##[SHOW] P2 * -HI * * * * * -KA *
##[SHOW] P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
##[SHOW] P4 * * * * * * * * *
##[SHOW] P5 * * * * * * * * *
##[SHOW] P6 * * * * * * * +NY *
##[SHOW] P7+FU+FU+FU+FU+FU+FU+FU * +FU
##[SHOW] P8 * +KA * * * * * +HI *
##[SHOW] P9+KY+KE+GI+KI+OU+KI+GI+KE *
##[SHOW] P+00KY
##[SHOW] P-00FU
##[SHOW] +OK
若干、ILLEGAL_MOVEのチェックを入れてます。 チェック出来ること - 持っていない駒を打つ - 歩が馬に成ったりする - 自分の駒を取る チェック出来ないこと - 角が直進するとかの、動き方 - 角が敵を跨いで進むとかの、動き方 - 敵陣以外で成る - 二歩とか 予定 他人の対局を見続ける機能 %%MONITORコマンド?
こんなスレあったのか・・・ 当方24で中級者やってます ここで作られてるソフトにはもう負けてしまうのかなぁ
お世話になってます。 wdoorの管理者さんとCHAT出来ました :-) あっという間にレスポンスが帰ってきたので、 おうむ返しプログラムでも繋がっているのかと思いました。 ./shogi-server:607:in `main': undefined method `name' for nil:NilClass (NoMethodError) これは直さないと...
wdoorのサーバを
>>114 のバージョンに更新しました
ちょうど今サーバ落としても大丈夫かなーと眺めていたところだったので:-)
> 奈々美さん
GPS将棋を接続させましたので,よろしければ遊んでやって下さい 拡張モードでゲーム名を指定して待たせています loginname: sentegps, gamename: sentegps, (GPS将棋が先手) loginname: gotegps, gamename: gotegps, (GPS将棋が後手) デバッグが不充分なので途中で落ちたらごめんなさい.
120 :
まともに動いてない ◆R/rLuLKeEI :04/06/27 00:58
まともに動いてないプログラムがやっとGame_Summaryの開始を認識できるようになった。 拡張モードでチャットしか出来ないクライアントは%%GAMEを送信するところまで。 どっちもそのあとまともに動かなくなってもた(笑)。
Thanksです >> 121 どうもしゃべる前に (get-buffer-create csashogi-chat-buffer-name) しないといけないみたいなんですが,どこにいれれば良いでしょう
>>122 あわわ、ご指摘ありがとうございます。
--- csashogi.el 26 Jun 2004 11:18:40 -0000 0.28
+++ csashogi.el 27 Jun 2004 06:37:22 -0000
@@ -223,13 +223,13 @@
(insert (concat string "\n"))))
(defun csashogi-chat-insert (id string)
- (with-current-buffer csashogi-chat-buffer-name
+ (with-current-buffer (get-buffer-create csashogi-chat-buffer-name)
(setq buffer-read-only t)
(let ((buffer-read-only nil))
(goto-char (point-max))
(insert (concat id "> " string "\n"))))
(when (equal (buffer-name) csashogi-board-buffer-name)
- (csashogi-display-buffer (get-buffer-create csashogi-chat-buffer-name))
+ (csashogi-display-buffer csashogi-chat-buffer-name)
(other-window 1)
(unless (pos-visible-in-window-p (goto-char (point-max)))
(recenter -1))
こうですかね。修正版も置いておきます。
http://tokyo.cool.ne.jp/progn/shogi-0.6.tgz
124 :
まともに動いてない ◆R/rLuLKeEI :04/06/27 19:39
何でまともに動かんのか謎だったけど、CSAモードでログインすると LOGIN matomo1 te LOGIN:matomo1 OK Protocol_Mode:Server Format:Shogi 1.0 Game_ID:default-matomo1-matomo0-20040627192729 となって、 BEGIN Game_Summary Protocol_Version:1.0 が抜けていることに気が付いた。バグ?仕様?
wdoor >> 125 のバージョンに更新しました gps将棋関係で,合法手が ILLEGAL_MOVE と判定されるという話が 二件あったのでちょっと記録をとろうかと思っています. ruby は素人なのでアドバイスお願いします. なお,wdoor のruby は ruby 1.8.1 (2004-02-03) [i386-linux] です. --- shogi-server.10 2004-06-27 23:49:26.000000000 +0900 +++ shogi-server 2004-06-27 23:56:04.000000000 +0900 @@ -550,6 +550,7 @@ @end_time = Time::new t = @end_time - @start_time t = Least_Time_Per_Move if (t < Least_Time_Per_Move) + legal_move = false; if (str != :timeout) legal_move = @board.handle_one_move(str) if (legal_move) @@ -564,6 +565,7 @@ @current_player.mytime = 0 end if (!legal_move) + log_message(sprintf("ILLEGAL_MOVE %s\nT%d\n", str, t)) illegal_end() finish_flag = true elsif (@current_player.mytime <= 0)
すみません。
何か指されてILLEGAL_MOVEの場合には、棋譜に残ります。
timeoutの場合に、ILLEGAL_MOVEとなっていたのを修正しました。
http://gm.a-ark.net/~shogi/clip/img/26.zip これでダメな場合は、
if (!legal_move)
+ log_message(sprintf("ILLEGAL_MOVE %s\nT%d\n", str, t))
illegal_end()
を入れて下さい。
+ legal_move = false;
は入れてはダメです。
>> 127 ありがとうございます.wdoor 更新しました. しばらく様子を見てみます.
連日ですみませんが、先日いくつか宿題をもらってた:-)ので
手動クライアント@Emacsをアップしておきます。
まだコードがやっつけレベルでバグがあるかもしれませんが、ないよりはマシ
かなーと。
* ##[LIST] コマンドサポート (`L' キーにバインド)
* ##[SHOW] コマンドサポート (`S' キーにバインド.但しまだ表示は生データ)
* Game_ID 指定時に補完が効くように
* kifuview の CSA 形式棋譜サポート
(kifuview-display-csa-region(), kifuview-display-csa-file())
といったところです。
http://tokyo.cool.ne.jp/progn/shogi-0.7.tgz
130 :
まともに動いてない ◆R/rLuLKeEI :04/06/29 00:49
WIN用やMAC用のクライアント作ってる人はおらへんの?
手動クライアント@Emacs はemacsさえ走れば、 どんなOSでも動くと思うのですが、違うのかしら?
>>130 時間が出来たらうさぴょんも拡張モード対応して参戦するつもり。
…って、要するにまだ作り始めてないんですが。スマソ。
134 :
まともに動いてない ◆R/rLuLKeEI :04/06/29 01:13
>>130 WIN用作りかけてますが時間がなかなかとれず停滞中
wdoor.c.u-tokyo.ac.jp にいる sentegps には勝てないけれど, yowai_gotegps ならぎりぎり勝てるかなぁ...
うさぴょんを拡張モードに対応中…なんですけど、wdoorにusapyonでログインすると、 LOGINusapyon OK って帰ってくるんだけど、これって拡張モードでログインした場合、LOGIN usapyon OK x1って帰ってくるんじゃなかったっけ? とりあえず、些細な違いは気にせずログイン成功したことにしますが。
拡張モードでログインした場合
##[LOGIN] +OK x1
が帰ってくるはずですけど・・・
拡張モード
client: LOGIN name password x1で接続
server: ##[LOGIN] +OK x1 を送る。clientは"connected"ステータス
http://wdoor.c.u-tokyo.ac.jp/shogi/
>>139 ゴメソ、何か勘違いしてた。
その後、
##[LOGIN] +OK x1
が帰ってくるのね。
もう少しで繋がってゲーム開始までは行きそう。
UserAgentみたいなのは無いの? あと、人間かコンピュータか を調べられるコマンドとか。
>>142 > UserAgentみたいなのは無いの?
まぁ login name でも事足りるのかもしんないけど、対応クライアントが増え
てくればあると面白そう。
> あと、人間かコンピュータか を調べられるコマンドとか。
こっちは判断が付かないから、結局 UA の自己申告で判断すんだろうね。
>>142 UAがあると面白そうだね。
人間かコンピュータかは自己申告しかないけど、
人間が対戦相手にコンピュータを指定とか、コンピュータが対戦相手にコンピュータを指定
ということができるのは良いね。
うさぴょんが繋がってゲーム開始して対戦するとこまでやっと行きました。 しかし、CHAT対応とかまだ課題は山積み。CHATコマンドはどんなタイミングでも 飛んでくる可能性があるから、今みたいにこの次は必ずこれが帰ってくるとか いう風に前提したプログラムだとCHATされた途端にコケてしまう。 真面目にCHAT対応しようとすると、Asyncソケットとか使わないとダメかなぁ。
>>145 おー、いよいよ来ましたね。がんがってください。
うさぴょん対うさぴょんでやってたらバグ発見。 今までは通信機能がなかったから、最後の一手(玉を詰ます手)を指したら、 その場でゲーム終了していて問題なかったんだけど、最後の一手を相手に送らないまま 勝ったと思い込んでいる(笑)。それじゃ時間切れ負けだよ(笑)。
148 :
まともに動いてない ◆R/rLuLKeEI :04/06/30 22:55
>>145 :うさぴょんの育ての親さん
早っ。
Java版チャットクライアントでもチャットデータ行が混ざる問題を考え中。
サーバーからの入力は別スレッド化してあるからそれぞれ振り分けるだけだとは思うのだが…
WIN用のを作ってらっしゃる方同様なかなかまとまった時間がとれないですね。
>>147 さっき似たようなかんじでノーマルGPSに勝ったw
ゆくゆくはサーバが判定してくれることになるんだろうけど。
しかし全然敵わねーな… orz
うっしゃーバグも取れてとりあえず終局まで指すのを確認できたぜ!
うわっもうこんな時間だ。 相変わらず医者に夜更かし禁止(23:30就寝厳守)されているのでもう寝ます。 でもタイムリミット前にうさぴょん対うさぴょんで決着が付くのを見られて幸せ。
>> 145 gps将棋ではチャットは単に無視して次の行を読んでます 対局する分には充分かと:-)
wdoorで%%WHOすると、10行くらい表示が出るのですが、 通信が途切れた場合の処理が不完全で、ゾンビみたいのが残っているのかしら...
154 :
まともに動いてない ◆R/rLuLKeEI :04/07/01 01:59
>>152 Java版チャットクライアントでは全てを単に表示しているだけです。
対局しない分には充分かと(笑)。
チャットが主で観戦が副、対局は副の副。
なので対局するならチャットデータとは振り分けたいなぁって。
生い立ちが違うと面倒が増える。
>>153 夜中にこんばんは。ちょっとトイレに起きて来ました(^^;;
おそらく通信が途切れた場合の処置が不完全なゾンビなのだと思います。
今、うさぴょんをつなぎっぱなしにしておいたログを見てみたら、
Chatの方は、Unicode変換もあることを思い出しました(笑)。
全然読めませーん(笑)。
みんな何て言っているのかさっぱりです(笑)。
でもななみさんの「hello」*だけ*は読めたので、同じUnicodeでもUTF-8ってことですかね。
うぅ、TIMEOUT判定負けを喰らったのも実装しないと…。 お約束でGPS将棋に時間切れ負けしてました。これで今のところ一勝一敗。
あう、ログインしてほうっておいたやつが誰かにタイムアウト負けしている(泣)。 yowai_gpsに挑戦した一手10秒のうさぴょんは勝ったので、通算2勝2敗。 タイムアウト多いから、いい加減、選手権用の早いマシンと定跡で本気で挑もう(^^; でもその前にタイムアウト負けなどをサーバから送られた時に処理しなくては。
タイムアウト負けって一手何秒の設定で対局させていらっしゃるのでしょうか? また、一手何秒の将棋と設定して対局を始めたら、時間が来れば途中で読みを打ち切って 手を指すわけでしょう?なぜ、タイムアウトが起きるのでしょうか? 微妙なバグというかサーバーと対局ソフトの方で時間のカウントが合ってないのでしょうか? それとも通信遅延のせい?
うーむ、投了を受け取る処理もいるのか(って受け取ってなかったんかい!) 細かいところで未実装な点がありますが、一応GPS将棋と対戦して遊べる レベルになりました。今のところ、時間切れるとうさぴょんの負け、時間内に終われば うさぴょんの勝ちという感じで2勝2敗。良きライバルのようです。
>>158 あ、コンピュータ将棋選手権と同じで25分切れ負け、0秒で指しても必ず1秒はカウントするルールです。
(そうなってなかったら審判サーバのバグです(笑))。
与えられた25分を使い切ったらとにかく負けなんですが、序盤から長考するうさぴょんは、
長い将棋になると、時間切れ負けしやすいんです。
タイムアウト負けって表現が悪かったですね。
ああ、コンピュータ将棋選手権と同じ25分切れ負け制ですか。 了解しました。 しかしそうなるとこのサーバーにはクラブ24と同じように持ち時間と持ち時間を 消費した後、何秒将棋にするかをネゴして選択できる機能を追加してもらえないのでしょうか? 25分切れ負け制ではあまりに考慮時間が短いし時間を使ってしまった方が問答無用で負けになるので 本当の実力の評価にはならないのではないでしょうか? コンピュータ将棋選手権の方は大会運営の都合上仕方が無いのでしょうけど。
>>152 CHATが来たら画面に表示するようにはしました。
でも、サーバからのレスポンスを読み込むのは、相手の指し手を待っている間だけなので、
ちゃんとチャットするには機能的に不十分です(w。
大真面目に処理しようとすると、根本的に直しを入れないといけないような感じなので、
それをやる気が起きるまではこのままですね。きちんとリアルタイムにチャットできる
ユーザエージェントになったら、次の版のうさぴょんとして公開します。
ついでにソースも。
>>161 そういう機能を追加するのは割と簡単だと思いますし、将来的にはやって欲しいと思いますが…。
まぁとりあえず大会と同じルールでうさぴょんが如何に時間切れ負けが多いか
見てやるのもまた一興かと(笑)。
wdoorの管理者の方は、コンピュータ将棋選手権参加者でもあるので、
コンピュータ将棋選手権のルールで、如何に自分のプログラムが戦えるか
見てみたいという欲求もあるでしょうし。
持ち時間が長時間の大会(9時間で切れたら1分とかね)を開くべきだと言っていた人が前スレに
いらしたのですが、そういうサーバ立ててくれないかしら。
>>163 > 持ち時間が長時間の大会(9時間で切れたら1分とかね)を開くべきだと言っていた人が前スレに
> いらしたのですが、そういうサーバ立ててくれないかしら。
漏れはこの計画に、そういうのを期待していた。
一手でも多く読む対戦で
24時間接続しっぱなしにして、自動対戦させておけば
あとから記録を見て弱点を知れるし。
>> 161 うさぴょんの育ての親さん先程は挨拶に気付かず抜けてしまってすみません 今のところサーバをおいておくマシンの負担はほとんど無さそうなので, wdoor の別のポートに持時間の長い対局用サーバをおいてもいいですね. サーバ設置者としてはまずは沢山のプログラムが集まって対局で賑わうと嬉し いです.
166 :
まともに動いてない ◆R/rLuLKeEI :04/07/01 22:34
ネゴするとなると拡張モードで%%GAMEを送る前に変更したい項目だけ残したGame_Summaryブロックを先にサーバーに送るような感じになるんかな。
>>166 むぅうう。ネゴは面倒そうですね。
>>164 >>165 wdoorの管理者さん、とりあえず持ち時間36000秒くらいのサーバを別ポートで
立ててもらうってことでどうでしょ?
実は10時間サーバを自分で立てようと思ったんだけど、こんな感じで頓挫中。 usapyon# netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp6 0 0 *.4081 *.* LISTEN なんでプロトコルがtcp4じゃなくてtcp6になるんだよーーーーー。 Ruby使いじゃないのでさぱーり分かりません。
>> 167 wdoor:5081 でどうぞ > 10時間サーバ 対局中に停電とかサーバ再起動があったらすみません # 良くみたらさっきは161と162を間違えてました
あぁ就寝のタイムリミットが近い(泣)。 とりあえず、一手400秒のうさぴょんをwdoor:5081に繋ぎました。 勝負したい方はどうぞー。勝負がつくのにえらい時間がかかると思うので、先着一名様限りだと思います(笑)。
拡張コマンドは別ポートにしといたほうがよかったのかな…
>165さん 早速のご対応ありがとうございます。 と言っても私はまだ対局プログラムなんぞ作れてませんがw。 将来的な課題として持ち時間、それが切れた後、何秒将棋にするかをネゴするための プロトコルをこのスレッドで拡張仕様として決めて頂けないでしょうか? 例えば 将棋プログラムA 持ち時間 30min-2hour 時間切れ後 一手30秒から1分 将棋プログラムB 持ち時間 1hour-4hour 時間切れ後 一手1分から3分 だとしたら両方が許容できる一番「長い」時間(2hour,一手1分)で対局できるとか。 お願いばかりで申し訳ありません。
>>172 わざわざネゴする必要性がよくわかりませんけど。
今みたいに持ち時間が違うサーバをいくつか上げとけば充分じゃない?
サーバから指定された時間に基づいてクライアントが動けばいいだけだし。
ネゴは大変だけど文法を決めてGAMEIDに含めるのはどうだろう %%GAME GAMENAME-X-Y (X: 持ち時間, Y: 切れた後一手何秒で指すか) 一致した相手としか対局しないのは今までと同じ
あぁ就寝のタイムリミットを過ぎた。また明日医師に怒られる(泣笑)。 usapyon.dip.jp:4081にも10時間サーバを立ててみました。 誰か使えるようなら使ってみて下さい。 #Rubyのバージョンとかの問題でうまく動いてなかったりしてそうな…。
>173 それでは一般性(汎用性)が無いと思うのですよ。 他にも対戦サーバーが出てきた場合、全てのサーバーがこのwdoorサーバーのやり方を 踏襲しなければいけないとなるとサーバーの立て方自体(どのポートを開けるかなど)が 制約を受けるのでは無いかと またそれぞれのサーバーが事前に規定した条件には無い条件で戦いたい場合もあるのでは無いかと。 考えすぎ(贅沢すぎ)ですかね?
以前遊びに行ってたオセロサーバーではこんな感じだったよ BさんがAさんと持ち時間5分で対局したいと思ったら BさんはサーバーへAさんと5分マッチさしてとコマンドを送る するとサーバーがAさんにBさんが5分マッチしようって言ってるよとメッセージを送る Bさんがその条件では嫌だと思ったら「そんなんだめよん」コマンドを送る その条件を受け入れるなら「いいよん」とこまんどをおくる そうすると現在の盤面(途中再開もあり)が両者に送られて対局が始まる
>>177 なるほど。自分の案は麻雀の東風荘のイメージね。東風戦と東南戦でサーバが
別れてるかんじ。
>>176 真っ先に感じたのは(ネゴを規定して実装する)労多い割に実りが…ってこと。
でも、その意見も一理あると思います。
>>174 案ならば結構楽に実現できそうかな。
>>174 案なら実装可能です。
> 真っ先に感じたのは(ネゴを規定して実装する)労多い割に実りが…ってこと。
このあたりのネゴを人間にやって貰おうと、CHATを付けました。
王手を回避せず、%TORYOも送らず、普通に指してきたクライアントに対して、 どうするのがいいでしょうか? "王手を回避しなかった"という判定が、今のサーバには難しいです。 相手クライアントが、%KACHIを送ってくれるのを期待していいですか?
…まだ起きてるし。ダメだ俺。
>>180 王を取られたら負けという判定は出来ないですか?
大抵のクライアントは、王を取る手を指すと思います。
王を取られたら、という判定は出来ますので、対局終了条件に追加したいと思います。
で、取られたほうは王手放置で反則負けですか? 恥ずかしいな、それw
>>180 %KACHI は意味合いが違うのでちょっと無理がありそうですね。
>>183 すいません、手動クライアントで恥ずかしいことかましました…(w
%KACHIは入玉の意味でしたか。
>185 手動なら仕方が無い(良くある)でしょう。 私も何回かやりましたw。
イリーガルムーブで負けでいいんじゃない?>王手回避忘れ
189 :
まともに動いてない ◆R/rLuLKeEI :04/07/02 01:58
>>188 イリーガルムーブを指した局面で自玉に敵の利きがあるかないかで判定するのが今のサーバーでは難しいのでは?
手動クライアント@Emacsをアップしておきます。主な変更点は
* csashogi.el: チャット表示フォーマットを Riece 風に変更
* csashogi.el: チャット入力用バッファを新設
* kifuview.el: 盤の向きをトグルする機能を追加 (`s' キーにバインド)
* kifuview.el: 新たにフレームを開かない設定の時はバッファをポップアッ
プするように修正
* その他細かい修正
といったところです。
http://tokyo.cool.ne.jp/progn/shogi-0.8.tgz
将棋プログラムを作成している方にお伺いしたいのですが、 駒の利き管理について、 その場所に利いている方向をビットで管理するうさぴょんタイプと、 その場所に利いている駒をスタックで管理するYSS?タイプとが思いつくのですが、 どちら(もしくはハイブリッド)を採用されているのでしょうか? 愚問と思われた方は流してください(^^;
192 :
まともに動いてない ◆R/rLuLKeEI :04/07/03 09:57
>>191 改造しようとしている方向は[その場所に利いている駒をスタックで管理するYSS?タイプ]に近い。
うさぴょんの利き管理は元になった鈴木将棋と同じです。 変わったところでは、奈良将棋は、その場に利いている駒を64ビットで管理していて、 例えば飛車1なら48ビット目、飛車2なら49ビット目…のように 管理しているよ。つまり、各駒に背番号をあたえて、その背番号の ビットが立っていたらその駒の利きがある、立っていなかったら利きがないという風に。 …こんな下手な説明でイメージできなかったらゴメソ。 これはうさぴょん2向けのアイディアだったのだが、奈良さんに先を越されてしまった(^^;
◆R/rLuLKeEIさん うさぴょんの育ての親さん レス、ありがとうございます。 (飛び駒をどのように管理するかも含め)色々と試行錯誤されているのですね。
wdoor のサーバを最新版に更新しました. 奈々美さんから直接送っていただいたので,変更点を代理でアナウンスします. 仕様変更: - user name, game nameには,A-z0-9@_-. だけが使えることになった (やる気になれば mail addresss そのものをユーザIDに使える) - game nameのフォーマットが name:total_time:byoyomi_time と変更された.total_timeが0の場合は無制限. (クライアントによる持ち時間の指定が可能になった) その他: - ゾンビ対策: ユーザIDとパスワードが同じだったら,ゲーム中以外は 古い接続を切って新しい接続が有効に - 対局中の投了処理,REJECTのサポート,持時間管理など ~~~ 同じサーバ上で持ち時間の長い対局が可能になったので wdoor:5081 は一旦廃止しました.
>>196 うーん、うさぴょんの実装が悪いのか、サーバが不安定なのか…
うさぴょんでゲームウェイトステータス中にCHATしてたらサーバがこけたみたいです。
何かクライアント側がこうだとやばいよとか、原因で考えられることありますか?
>>197 エラーしたときにサーバが出したメッセージを貼って下さい。
サーバがフリーズしたみたいで無反応状態になりました。 なのでメッセージもないです(泣)。
GPS将棋のメンバーと再現実験をやっても再現せず…。 今日はお休みなさーい…。
dead lock系みたいですね。 コード見直してますが、どこが悪いのか分かりません...
202 :
まともに動いてない ◆R/rLuLKeEI :04/07/04 02:07
チャットでは楽しい一時を過ごせました。 うさぴょん側の問題の可能性もなきしもあらず。 再現しないのが厄介ですね。
>>193 (うさぴょんの育ての親さん)
いろいろと考えていたのですが、
奈良将棋の方法が、かなり美味しそうに見えてきました(^^;
参考にさせていただきます(っていいのかな?)。
204 :
うさぴょんの育ての親 :04/07/04 12:29
>>203 奈良将棋の方法だと、64ビットの記憶域を使おうとすると24ビットも余るので、
飛車なら上下左右どちらから利いているか、角についても4方向、を持っておくと、
開き王手とか、自分の駒がピンされていて動けないかとかの判定に使えるので、
飛び駒の利きについては方向も持たせるのが吉でしょう。
うぁぁうさぴょん2の利きデータ構造これで全部しゃべってしまった(w。
うさぴょんの育ての親さん、ありがとうございます。 おっしゃられている利きの話題は、某所にありましたね。 ビットで処理した場合、 ビット検出など手間が掛かる面もありますが(これで躊躇しているのも事実です)、 飛び駒の利きの延長短縮の更新などでXOR処理が美味しいんじゃないかと… 思っていたりしながら、128(64x2)ビットで盤面を持とうなどと 無謀なことを考えていたりもします(^^;
サーバから送るメッセージ(CHATとか)を、getしてくれないクライアントに対して、 しばらくたつと、サーバのsocket writeが終了しなくなる -> lockをかけてからsocket writeしているので、全threadフリーズ というのが、サーバのフリーズの原因その1 これが発生したのかは、分からないけれど
>>206 この現象はうさぴょんが原因で起きた可能性ありますねぇ。
今日のうさぴょんは大丈夫なんですが、昨日のバージョンではマルチスレッド動作時の
ロックに問題があって、40秒〜60秒くらい(うさぴょんが考えている間)サーバからの
メッセージを取れないというバグがあったので。
それから、追加でバグっぽい現象の報告なんですけど、ゲームしているIDで
ログインしようとすると、ログインを蹴られるんじゃなくて、待たされるみたいな…。
うさぴょんはログインを長時間待たされると想定して作ってない(すぐに
蹴られるかすぐにログインOKが帰ってくると思っているので、何にも考えずに
ただ待っている)のですが、待たされるのが仕様なら、対応することを考えます。
ウィンドウズ盤の UI 部がだいぶ形になってきました 深く考えずに行き当たりばったりで作ってましたので 気が付くと駒が両方王になっちゃってることに気が付きました csaの仕様見ても書いてないようなんですが プロトコル上は王と玉はどうなってるんでしょうか?
wdoor のサーバですが, 1.14, 1.15 と立て続けに凍ったので,現在 1.12+改造版まで戻しています. その差分が原因でなさそうでしたら,また1.15 に戻しましょうか. 奈々美さん $mutex.lock でタイムアウトをかけられるでしょうか.もし可能でしたら,10 秒くらいしてもlock できなければabortさせていただけると,自動で再起動で きるので,(全体が凍るよりも)メンテナンスが楽なのでお願いしたいです.
210 :
まともに動いてない ◆R/rLuLKeEI :04/07/04 21:55
>>208 公開間近、いや対戦間近ですね。
プロトコル上は王と玉は
+OU
-OU
で区別は可能。
それをどちらで表現するかはあっしは知らぬ。
ありがと〜どちらもOUということで了解 細かい表示はあと回しにして完成を急ぎます ついでにもう一つ質問 観戦モードのときは先手が上側でいいんでしょうか? われながら将棋そのものについてあまりにも無知すぎるような気がしてきた(汗
>>211 一般的に盤面を表示するときは「先手が下側(手前側)」ですね。
>>211 そんな方が興味を持ってくれてとても心強い。
しかし先後の上下は‥‥そーかー知らない人は知らないもんなのかぁ。
うひゃ〜逆でしたか(笑 あまりにも基本すぎてあらためて解説してるとこも無いようで ざっと検索した程度では出てこなかったです もしかしたら将棋入門書になら載ってる? たぶん私が知らなさ過ぎるだけだと思います(w 将棋のレベルは駒の動かし方を知っている段階をちょっと超えたくらいです(なはは インテリジェントゲームプレイヤー全般に興味があるので いつかは将棋も作りたいと思っています オセロにはだいぶはまってましたけどあれって上下無いですし(w
え〜、おおぼけかましました 盤にふる番号も逆でした どっと疲れが・・・
がんがれ
217 :
まともに動いてない ◆R/rLuLKeEI :04/07/05 00:43
>>215 大丈夫。
わたしもかつて同じミスをやってもうたし。
wdoor を revision 1.17 に更新しました.
奈々美さんが
>>206 の対策をされたものです.
また,再びport 5081を廃止しました.
さきほどwdoorでチャットの御相手くださったかたありがとうございました telnetでは頭に%%CHAT を入れないといけないのでむっちゃ大変ですね アンノウンコマンドになってしまって同じメッセージを何度も打ち直してました クライアント作成を急ぎマフ
221 :
まともに動いてない ◆R/rLuLKeEI :04/07/05 02:36
>>219 否。将棋については無知なのに行き当たりばったりにコードを書き始める人にだけ開かれる苦難の道。
彼らに栄光あれ。
ネグルシイヨルダナ。テンデネレヤシネェ。
222 :
matomoni ◆R/rLuLKeEI :04/07/05 02:52
Emacs client で
http://www.geocities.com/rahdpp3/english.html にある将棋フォントを使って、後手の駒を正しく表示するパッチを作ってみました。
このパッチをあててしまうと、将棋フォントをインストールしていない場合、後手の駒はキリル文字になってしまうので注意してください
Emacs の設定は以下のようにして使っています。
(setq shogi-koma-gote-prefix " ")
(require 'csashogi)
(set-face-font 'shogi-gote-face "-shogi2-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0")
(set-face-font 'shogi-sente-face "-shogi2-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0")
pos)))
全部付けると改行が多すぎるらしいのでまず前半。 --- shogi.el.orig2004-07-02 23:25:49.000000000 +0900 +++ shogi.el2004-07-05 13:41:43.000000000 +0900 @@ -357,6 +357,22 @@ "KOMA を表す文字を返す." (shogi-symbol-to-string (shogi-koma-get-symbol koma))) + +(defun shogi-koma-to-string-with-muki (koma sente) + "KOMA を表す文字を返す." + (shogi-symbol-to-string-with-muki (shogi-koma-get-symbol koma) sente)) + +(defun shogi-symbol-to-string-with-muki (symbol sente) + "SYMBOL を表す文字を返す." + (let ((koma-list (if sente + '(oh "王" gyoku "玉" ryuu "龍" hisha "飛" uma "馬" kaku "角" + kin "金" nari-gin "з" gin "銀" nari-kei "й" kei "桂" + nari-kyo "л" kyo "香" to-kin "と" fu "歩") + '(oh "А" gyoku "А" ryuu "В" hisha "Б" uma "Д" kaku "Г" + kin "Ё" nari-gin "Ч" gin "Ж" nari-kei "Щ" kei "И" + nari-kyo "Ы" kyo "К" to-kin "Н" fu "М")))) + (plist-get koma-list symbol))) + (defun shogi-symbol-to-string (symbol) "SYMBOL を表す文字を返す." (let ((koma-list '(oh "王" gyoku "玉" ryuu "龍" hisha "飛" uma "馬" kaku "角"
@@ -894,7 +910,8 @@ (insert (if (eq owner shogi-display-board-muki) shogi-koma-sente-prefix shogi-koma-gote-prefix)) - (insert (shogi-koma-to-string koma)) + (insert (shogi-koma-to-string-with-muki + koma (eq owner shogi-display-board-muki))) (shogi-put-face-at-pos pos (if owner 'shogi-sente-face 'shogi-gote-face)) (shogi-cursor-jump-to-pos pos)))
Emacsクライアントに負けてはならじと、うさぴょんを公開しました。 一応CHATも出来ます。(一応、というところがミソ…ごめんorz) 対戦クライアントとしての信頼性はまだいまいちです。 特にSingleCPUだと重くて使い物にならない懸念が…。 とりあえず、うさぴょんに指させながらCHATするのは、HT対応CPUか、 マルチCPU環境の人以外にはお勧めできません。あまりにも動作重すぎ。 自分で指しながらCHATならCPU負荷に余裕があるので、マターリとCHATを 楽しめると思います。
手動クライアント@Emacsをアップしておきます。主な変更点は
* kifuview.el: 盤面を手で変更した場合も履歴をとりトレースできるように
修正
* 駒を表わす文字を先後で別に定義できるように
* 名前と駒のフェイスを別に
* フェイスを先手/後手で定義していたのを手前側/相手側に変更
といったところです。
http://tokyo.cool.ne.jp/progn/shogi-0.9.tgz >>223 ありがとうございます。手元のやつはそのあたりの修正をやりかけだったので
若干違う実装になってます。また諸般の事情でフェイス名とか変数名を変更し
てますのでご注意ください。またなにかあったらよろしくお願いします。
# いちお shogi-load-hook も設けておきました
228 :
まともに動いてない ◆R/rLuLKeEI :04/07/05 23:56
Java版拡張モードでチャットしか出来ないクライアント…一応Game_Summaryの解析が終わって盤面は出るようになった。 しかし、まだサーバーにAGREE送るところ以降書いてないから対局が始まらない。
229 :
まともに動いてない ◆R/rLuLKeEI :04/07/06 03:08
Java版拡張モードでチャットしか出来ないクライアントのApplet化…あかんわ、行き当たりばったりでやるには変更ヶ所が多すぎる。 出来そうなんだけど…後回し。 もっとよく練らないとアプリケーション版もアプレット版も爆死しかねない。 手動クライアント@Emacsさんやうさぴょんの育ての親さん達はすごいなぁ。 ほいほいっと作っちまう(ように見える)。
うさぴょんで繋いでみたけど ダイアログで対戦相手gpsgote・・・と出てOKしてもキャンセルしてもそこでかたまっちゃって挫折 早く自前のやつ作れと神さまがおっしゃっているのだろうか・・・・
231 :
うさぴょんの育ての親 :04/07/06 10:48
キャンセルしたらログアウトしちゃうので固まっているわけじゃないけど… 何も選ばずにOKすると固まりますね(−−;こりゃばぐだわ。 対戦相手を誰か選んでからOKしてくださいまし。 バグはバグで直しますが。
>>231 なる、すでに選ばれててOKか?と問われていると思ってました(w
233 :
デフォルトの名無しさん :04/07/06 16:21
長考のgpsけっこう強いじゃん。 一回目負けた...orz
win用クライアント作成中の某ですUTFエンコーディングではまり中 付属ドキュメントのサンプルをまねしてみたけど名前空間がうまく参照できないみたいで頓挫中 vb.net の達人はおられませんか、サンプルコードをめぐんでくれるとたいへんうれしいのですが(おい
>>234 VBじゃないとダメ?VC++ならうさぴょんのコードを貼り付けてもいいんですが。
.netのクラスライブラリを使ってる方法でしょうか? もしそうならむっちゃ参考になりそうです よかったら見せてください
237 :
まともに動いてない ◆R/rLuLKeEI :04/07/06 21:03
>>237 いまんとこあのへんで質問するとエスパーを呼べって言われかねない程度にしか把握できてないので・・・
>>236 うぅ、クラスライブラリは使ってません。ですが、WindowsのAPIと算術演算で
やっているので、移植可能じゃないかなーと…って、.NET知らん人間のたわ言
ですか?
>>239 うまく呼び出せさえすれば一発変換なもんで一行ですんじゃうんですよ
解決しなければ自力変換するしかないんですけど、楽したいなあと(w
241 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 00:30
>>238 そうでしたか。すまぬ
胃がキリキリ痛み、猛烈に怠くて確かめもせず、投稿後すぐにダウンしてました。
まだ怠いんでダウンし直します。
Java版クライアントのデバッグは土日だな。
>>241 あらあら、大丈夫ですか?、御大事に
とりあえず動き出しました、原因はなんというか・・・・
引数が間違ってるのにそのクラスはプライベートなのでアクセスできません云々というエラーを返してくる統合環境(ばぐ?)のせいでした
引数を直したらあっさり動いてしまい拍子抜け・・・
そういえば素のVBの時も関係ない行でエラーが出たことになっちゃう現象で、大はまりしたことが有ったっけ・・・
>>242 バグと言うかなんというか…。たまたま、その引数で呼び出されるプライベートな
関数があったんでしょうね。でも、こりゃぁはまるわ。
usapyon.dip.jp:4081でも773さんのshogi-serverを立てることに成功しました。 rubyのバージョンも1.8.1_2にしましたし、今度はまともに動いているみたいです。 でも今のところ常駐プログラムがいないのでさびしいことこの上ないです(^^;
とりあえず、usapyon.dip.jp:4081にて、usapyon-senteとusapyon-goteを動かしておきました。 常駐しているわけではありませんが。 1時間に一度くらい様子を見て、手動で常駐をエミュレートします(笑)。
246 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 11:48
サーバーが安定してトーナメント/リーグ戦が可能になったら、wdoor杯とかうさぴょん杯とかがあちこちで開催されるんだろうな。 主催者のPCが超高速で主催者が絶対有利。 で年に一度のCSA杯が公平で由緒ある世界一決定戦。 まだまだ先の話ですね。 今日も胃が痛い。
247 :
デフォルトの名無しさん :04/07/07 12:23
??? 別に参加者も超高速な PC を使えば主催者が有利には ならないかと思いますが...
248 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 12:52
>>247 ああ、そうか。
いや何、私が金ないから大容量メモリで超高速なPCを買えないなぁ...っていう…それだけ。
地球シミュレータ買いたいなぁ。
マシンの速さの件は、
>>247 さんに同意。
GPS対うさぴょんはお互いに最速マシンで戦っているのではないかと。
でも、回線遅いのはハンデになるかもなぁ。特に持将棋模様の時なんか、
切れ負けするかどうかにモロに影響しそう。
usapyon.dip.jpはこの意味でも公平なサーバで、ややこしい設定しているので
自宅から繋ぐ時も、すぐ目の前にあるのに、インターネットを越さないと繋がらない(w。
俺は地球を買いたい。
>>248 まともに動くようになれば、誰かが最速マシンで動かしてくれるかも。
なので、まずはまともに動かさないと。
それから、地球シミュレータは将棋で使うには遅いと思うので、むしろ
「理研スーパー・コンバインド・クラスタ」辺りの方がよろしいかと。
うぅ、サーバプロセスが落ちてる。ログ取ってなかった(欝)。
254 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 13:34
>>252 :うさぴょんの育ての親さん
Java版対戦可能チャットクライアントは近々。
思考部がまともに動くのは半年後。
地球シミュレータも「理研スーパー・コンバインド・クラスタ」辺りの方も買えねえ。宝くじで一発…
>>254 理研の方も10億円は軽くするので、宝くじで一発ぐらいでは…。
xxジャンボ宝くじを前後賞合わせて当てるのを2発くらいか?
256 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 14:37
>>255 :うさぴょんの育ての親さん
>xxジャンボ宝くじを前後賞合わせて当てるのを2発くらいか?
もうダメだぁ〜って金貯めて速い中古PC買うわ。
それまではまともに動くように地道に改善する。
>>249 回線の遅延が気に入らない人はどうぞ会場までいらしてくださいと言って逃げときましょう
>>256 Xeon2.8GHzのDualマシン+OSにWindows2000Serverなら25万円くらいで売るので
いつでも相談してください(笑)並列を生かしたPG書けば、十分にまだ早いです。
#僕はもうOpteronのDualに乗り換えてしまったので、半不用品ですが。
>>258 そうですね(w。
かと言って本当に自宅に押しかけられても困るわけっすが(w。
まぁ、実際のところ、持将棋模様にでもならないと関係ないですよ、遅延なんて。
…はっ!ホームの利を生かして常に入玉を目指すプログラムを書けばいいのか?
>>260 おもてにビーチパラソルを立ててコンセントとLANケーブルを用意してあげましょう(w
262 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 18:26
>>260 参加費は消費電力を割勘で。
うさぴょんの育ての親さん家のブレーカーが落ちたら解散(笑
264 :
まともに動いてない ◆R/rLuLKeEI :04/07/07 22:38
Game_Summaryに対して REJECT を送ると REJECT:<GameID> by <rejector> が返ってくると思っていたけど違うみたいやね。revision 1.15。
266 :
まともに動いてない ◆R/rLuLKeEI :04/07/08 01:41
>>265 返答待ちでクライアントが固まります。
1.17でも同じ現象でして実はクライアント側のバグでした。
一応解決済(ちょっとクライアント側の問題が残るけど目をつぶる)。
で、気付いたこと:
"game_waiting"ステータスの二つのクライアントの一方がREJECTしたら、双方に
REJECT:<GameID> by <rejector>
を返して"connected"ステータスになる。ここで他方がまだ"game_waiting"ステータスと思って遅れてAGREEまたはREJECTすると
REJECT:<GameID> by <rejector>
##[ERROR] "connected"ステータスでAGREEがどうたらこうたら。
と出るがこの##[ERROR]行は必要?
あるいはAGREEまたはREJECTする前にREJECTが送られていない事を確認するのが正しいクライアントの作法?
>>266 AGREE or REJECTする前にREJECTされてないことを確かめても、タイミングが
悪ければやはり##[ERROR]になってしまうのでは。
##[ERROR]は必要ないかも知れないですが、AGREEした「後」に、相手から
REJECTされていないかどうかチェックは必要でしょうね。REJECTした後は
特にチェックは不要でしょうが。
268 :
まともに動いてない ◆R/rLuLKeEI :04/07/08 07:48
>>267 :うさぴょんの育ての親さん
REJECTした後のチェックは害がなさそうなのでどちらの場合もREJECTされちゃったメッセージボックスを出すようにして昨日は寝ました。
サーバーがコネクトステータスにするタイミングを指し手毎にAGREE/REJECTが送られてきた後まで待ってくれると##[ERROR]が回避出来そう。
一応現物合わせで対処しますけど。
多くのクライアントの実装を真似て無条件AGREEにすれば良かった。
271 :
まともに動いてない ◆R/rLuLKeEI :04/07/09 01:35
>>270 > まともにさん報告の現象はまだこちらでは再現してません
> こまった・・・・
telnetでもつながらない環境でした。
wwwは見えるんだけど微妙にアクセス制限があるようだ。
気になさらず、続けていってください。
未だに胃が痛い、毎日下してる
272 :
まともに動いてない ◆R/rLuLKeEI :04/07/09 01:40
>>271 了解、接続不能なときですね、確かに手抜きしてます(汗
それよりお体おだいじに、病院いってね
奈々美さん、千日手判定はまだサーバの方でやってないんでしたっけ? 今日たまたま千日手になったんですが、サーバから何も来ないようなので。
>>274 すみません、やってません。
駒の動かし方に関するチェックは、ほとんどないのです。
>>275 そうでしたか。
やっぱりフル機能のサーバを作ろうとすると、将棋のプログラム半分書くくらいの
労力が必要そうですね…(泣)。
277 :
まともに動いてない ◆R/rLuLKeEI :04/07/10 12:43
今の千日手は同一局面4回ですよね。 局面のハッシュ値で遡って同じ局面らしかったら改めて完全一致を調べるというのでOK?
>>277 ハッシュ値が64ビットくらいだったら、完全一致調べなくてもまぁOKでしょう。
完全一致まで調べられるなら調べた方が好ましいけど。
手動クライアント@Emacsをアップしておきます。主な変更点は
* "*棋士控室*" バッファからでも発言,ログイン,ログアウトできるように
(Suggested by nanami さん)
* kifuview.el: 手数が盤面とマッチしていなかったバグを修正
(Thanks to kaneko さん)
* MONITOR 暫定対応 (`M' キーにバインド)
といったところです。
http://tokyo.cool.ne.jp/progn/shogi-0.10.tgz
>>278 完全一致で実装しました。
近日中に稼働出来るといいな、と思ってます。
でも、連続王手チェックはないので、千日手は全て引き分けになります。
サーバの仕様変更を予定しています。よろしくお願いします。
コメントを投稿して下さい。
1. %%GAMEコマンドのパラメータgame_nameのフォーマット変更
現在は、
game_name = base_name:total_time:byoyomi
(例えば、hogehoge:1500:0)
のように、":"で区切られているが、これを(おそらく)"-"(マイナス)に変更
game_nameはgame_idの一部で、結局、CSA形式棋譜のファイルネームに使用されているが、
":"を使用したファイルネームがwindowsで使えないため。
2. %%SHOW, %%MONITORONでの表示フォーマット変更
現在は、以下のような盤面表示のみ
##[SHOW] P1-KY-KE-GI-KI-OU-KI-GI-KE *
##[SHOW] P2 * -HI * * * * * -KA *
省略
##[SHOW] P9+KY+KE+GI+KI+OU+KI+GI+KE *
##[SHOW] P+00KY
##[SHOW] P-00FU
##[SHOW] +OK
使用変更後は、盤面表示を含む、
http://www.computer-shogi.org/protocol/tcp_ip_server.htmlの3.2.の BEGIN Game_SummaryからEND Game_Summaryのような表示になる。
各人の残り時間、最新の手など、一部パラメータが独自拡張される。
1. 了解。言われて納得。ほかに、+とか¥とか*とか?も使えませんね。 2. 独自拡張の部分をどうするか示してくれることを希望。 ってまだ決まってない? > BEGIN Game_SummaryからEND Game_Summaryのような表示になる。 ことは了解。特に問題ないでしょう。
284 :
まともに動いてない ◆R/rLuLKeEI :04/07/12 00:11
1.了解 2.了解(まだ作ってないから問題ない)
>>283 1.
+ は大丈夫だと思っています。
ダメですか?
2.
今のところは、以下のようなキーワードで、上から、
先手残り秒数、
後手残り秒数、
直前の手(一手も指されてない場合は空白)、
手数(一手も指されてない場合は0)
を考えています。
将棋の常識として適切なキーワードがあれば、教えて下さい。
##[MONITOR][hoge+a-0-0+234+123+20040712000602] Remaining_Time+:1400
##[MONITOR][hoge+a-0-0+234+123+20040712000602] Remaining_Time-:1300
##[MONITOR][hoge+a-0-0+234+123+20040712000602] Last_Move:-8384FU,T23
##[MONITOR][hoge+a-0-0+234+123+20040712000602] Current_Turn:2
BEGIN Game_Summary -- BEGIN Positionの間のどこかに、
上記拡張キーワードを足すつもりですが、具体的な場所は未定です。
286 :
まともに動いてない ◆R/rLuLKeEI :04/07/12 00:57
>>285 :奈々美さん
2.
先手残り秒数、後手残り秒数はTime内ヘ
直前の手(一手も指されてない場合は空白)、手数(一手も指されてない場合は0)はPosition内へ
キーワードの現われる順序は問わない。
私の解析部は追加や順序変更に対応可能になっているから。
287 :
まともに動いてない ◆R/rLuLKeEI :04/07/12 01:09
BEGIN Positionより前て書いてあったね。すまぬ。 Current_Turnだと現在の手番みたいだけどええの? チェス用語とかに代替案はないかなぁ…
直前の手、手数は、盤面情報の仲間みたいなものですから、Position内に 置くのは正しいような気もします。でも、Position内は、 keyword:value というフォーマット以外がくるのが原則みたいですので... でもでも、 Jishogi_Declaration:1.1 もPosition内だったり... Current_Turnでなく、Movesかな?
>>285 失礼、+は大丈夫です。ちょっと勘違い。
ダメだったら大体Microsoft Visual C++6.0なんてショートカット名作れませんね。
>>288 Current_Turnでなくて、Movesであることに一票。
それから、現在の局面そのものじゃなくて、最初のポジション(っていつも固定だけど)
と、そこから現在の局面に至る手順があった方がいいと思う。
つまり、
BEGIN_Game_Summary
いつもの文字列
+7776FU,T1
-3334FU,T1
+8786FU,T12
END_Game_Summary
みたいなイメージ。
さらに言うと、MONITORコマンドも、MONITORしているクライアントに、
MONITORしているゲームで手が指されたらその手を送信する方が、
クライアントとしては操作しやすいもの(たとえば、ユーザの要求の合わせて、
最初から見直したりとかね)が出来ると思うのだけどどうでしょう。
>>289 局面に至る手順、「3.2.3. 対局の局面情報」の所に書いてありますね。
それをそのまま使えば良いかと。
> 書式はCSAファイル形式に準拠した初期局面表記と指し手表記に一部変更を加えた形式からなる。
> 指し手表記がない場合、対局は初期局面から開始される。
> 指し手表記がある場合、初期局面と規定の持時間が与えられた状態から、
> 表記された指し手がすでに完了しているものとし、そこから再開される。
wdoor を revision 1.21 に更新しました. 奈々美さんから伺った主な変更点をwebに書いてありますが, 特に「game_name のフォーマット変更 (区切り文字を":"から"-"に)」に ご注意下さい. よろしくお願いします.
>>291 game_nameのフォーマット変更に伴い、うさぴょんはV1.2.3以降でないと、
ログイン後「対戦相手を待つ」ことが出来なくなっています。
V1.2.3は今作成中で、おそらく明日未明までにリリースできると思います。
>>290 END Positionの直前で
+7776FU,T1
-3334FU,T1
+8786FU,T12
を送るわけですね。
そうすれば、
>>285 の2.での拡張は不要になりますね。
正しい方法な気がしてきました。
>>292 V1.2.3リリースしました。
主な変更点は、
・
>>291 のプロトコル変更(game_idを':'区切りから'-'区切りへ変更)対応
・うさぴょん400秒モードで、対戦を待つ時は、10時間対戦を待つように。
・自分側の手番で、「誰」ボタンを押したときにハングするバグに対応
・「見」ボタン追加。%%SHOWコマンドを発行し、画面に局面を再現。
でし。
そのうち仕様確定したら、%%SHOW,%%MONITORともに対応しなおしでしょうね。
>>293 の続き
- 過去の手と最新盤面の両方を送る(CSAファイル形式からの拡張が必要になりますが)
- 過去の手を送るコマンド、最新盤面を送るコマンドの両方をサポートする
というのもあり得ますね。
>>295 クライアントを作る立場からすると、過去の手を得るコマンドが欲しいのも確かなのですが、
あわてて改造しないで良い分だけ、両方サポートの方がありがたいです(^^;
ごめんなさいごめんなさいごめんなさい
>>294 でリリースしたEXE、バージョンがちびっと古いやつでした
動作確認してて気が付きました m(..)m
V1.2.3ダウンロードしちゃった人はダウンロードしなおして下さい m(..)m
っつーか、医者の言うこと聞けよw
>>298 聞かないから最近全然治んない(ーー;
こないだは医者にばれて叱られてきますた。
>>299 私もかなりやばやばだったけど、
仕事やめてとにかく寝られるときに寝て寝て寝て寝て寝たおしたら
や〜っと体内時計の周期が戻ってきました
位相はまだズレっぱなしだけど・・・・・
おかげで今は超〜〜びんぼ〜
貧乏結構 体が資本 健康第一
302 :
まともに動いてない ◆R/rLuLKeEI :04/07/13 20:28
23:30以降に見かけたらさり気なく就寝を促そうか>うさぴょんの育ての親さん
>>302 あ〜さりげなくなくてもいいです(笑)。
さりげないと気が付かないかも知れません(^^;
うさぴょんも常駐モードを新たに作成してwdoorに常駐させてみました。 マシンが熱いマシンなので、熱暴走して止まる可能性が高いですが。 usapyon-1500-0 + で挑戦を待ってます。
んじゃ、いっそ23:30以降に見掛けたら警告するサーバを立てましょうかw
何気にデバッグ中、%TORYOへのサーバーのお返事って#RESIGNなのねえ なぜに %TORYO #TORYO あるいは %RESIGN #RESIGN ではないのかと素朴な疑問
ちょっと訂正 %TORYOに対して %TORYO #RESIGN と2行帰ってきてるみたいですね 頭が % だったから見逃してました
同梱の駒画像ファイルの大きいほうは前スレの884氏作のものです、ご提供ありがとうございます 小さいほうはそれを私が縮小したものです、もっと小さくしたかったけど字がつぶれてしまうので妥協しました ちっこい駒のサンプルをUPしてた前スレ921氏に期待 ほかにも画像得意なかたいらっしゃいましたらアルファチャネル付きPNGで作って入れ替えると 将棋版は画像の大きさにあわせて表示されますのでよろしくです
>>308 ぅおつかれちゃーん。
> ・先頭が%の文字列は加工せずに送信しますので全部手動で操作することもできます
おお、これは debug なんかに(・∀・)イイ!!っすね。
>>308 :reiさん
「なんとか対局可能になった版の人間用クライアント」リリースおめでとうございます。
私はサービス残業続きなので、Linuxでの試用はどちら様かやって下さいな。
うぅっ、また胃が痛みだした…
ありゃ暫く見ていなかったら呼ばれてる。 >309 あの大きさでいいなら暇見てばらして透過PNGにして詰め合わせて上げておきます。 で、希望の大きさがあるなら言ってもらえば善処します。 #早速>309さんのをダウンロードしているんだけど妙に遅い…
>>311 ありゃりゃあ、たいへんですね〜、おだいじに〜
パスの区切り文字が違うからそこでこけそうな気もするんですが
.net framework がそこまで面倒見てくれるんかな?んなわけないか?←よくわかってない
>>312 とりあえずちっこいのがほしかったので、あの大きさでバッチりです
画面が狭くてつらいのっす・・・
>>310 >おお、これは debug なんかに(・∀・)イイ!!っすね。
は〜い、ほとんど自分の為につけたような機能でし(笑
316 :
まともに動いてない ◆R/rLuLKeEI :04/07/15 03:28
Java版対戦可能なチャットクライアントがまともに動いてない原因が分かったっぽい。 対処方法も分かったっぽい。 修正を始めてるっぽい。 残業のしすぎて訳分からなくなってるっぽい。 頭が回ってないっぽい。 とても眠いっぽい。 ぽい。
え〜、おおぼけかましてましたenter押すたびにbeep鳴ってました スピーカーつないでなかったから気が付いてなかったですスンマソン 希望があればbeep止めるだけの修正版先にだしますのでよろしく とはいえ誰も何も言ってこないしなぁ
>>317 え?そういう仕様じゃなかったの(笑)?
319 :
まともに動いてない ◆R/rLuLKeEI :04/07/16 02:35
Re:ほとんど私信 モードが違っていても対戦できるのか。知らなかった。 ちょっと前のバージョンまで二つ起動してCSAモードのテストしていた。 拡張モード側のgame_nameはdefalt:1500:0にせにゃならんとかいうことはないの?
>>318 うはは、仕様ということにしてもいいけど
さすがにうっとうしくない?(笑
321 :
まともに動いてない ◆R/rLuLKeEI :04/07/16 13:08
>>64 のまとめページに「なんとか対局可能になった版の人間用クライアント」と紹介されてて笑ってもた。
reiさんのプログラム:「なんとか対局可能になった版の人間用クライアント」の本当の名前は何?
>>321 exeの名前はbulbulでしたね。ってことは、「ぶるぶる」?
うーん、「うさぴょん」に強力な名前のライバルが…
英語に堪能なかたに聞いてみたら、かなでかくと ブゥブゥ が一番近いような気がすると言われておりました。 私自身はネイティブな発音は一度も聞いたことがありませんのでよくわかりません(笑
>>319 はい。CSAモードは無条件でdefault-1500-0なので、
拡張モード側はそれに合わせて、%%GAMEコマンドを送ってください。
あちらにアップロードしておきました。<駒画像
>>274 という状態から脱するべく、
サーバに、千日手、王手千日手、打ち歩詰め、の判定を実装し、テスト中です。
皆様にお願い:
千日手、王手千日手、打ち歩詰め等、興味深い局面、そうなる直前の局面を、
CSA方式での盤面表現か棋譜で、提供して貰えませんでしょうか。
サーバのテストに使用したいと思います。
>>326 打ち歩詰めの局面はうさぴょんの実戦で出てきたことがあったと思うので、
打ち歩詰めは提供できそうです。
王手千日手も鈴木将棋の実戦であったと思うんだけど、棋譜残っている
かなぁ?
ノーマルな千日手は、こないだ実際にサーバで起きて、千日手判定が
帰ってきた記憶があります。サーバ上に棋譜が残っていると思われますので、
それのファイル名を探して見ます。
というところで、とりあえず、棋譜を漁るのでしばしお待ちを。
王手千日手は見つからない可能性大なので、誰か引き続き探して見て下さい。
>>327 申し訳ない。こないだ夏の暑さで死んだHDDに入っていたようで、
打ち歩詰めの局面が出てこない。ノーマルな千日手も、サーバのログに
残ってないようです。
何の役にも立てなくてすみません。
とりあえず、今のサーバで先手LAN対人間、先手人間対LANで、
すぐに千日手にしてみますので、千日手のデータだけはすぐ出来ます。
打ち歩詰めは、チェックしないとならないことがかなり多いので注意して下さい。 331はかなり簡単だけど。 331の42手目、78歩打ちを78角打ちとしても、次に玉頭に歩を打つと 打ち歩詰めになります。角で歩を取ると、飛車に玉を取られちゃうので、 角が動けないところがポイントです。
と、これくらいで役に立つでしょうか?>奈々美さん
>>325 駒画像サンキューです
同梱したものをアップロードさせてもらいました
今回は
駒画像を複数選択できるようになりました、あとから追加するときはEXEと同じフォルダ内に
適当な名前をつけたフォルダを作りその中に駒画像一式を入れてください
自動的に駒選択のリストに反映されます
後手の時に将棋板の上下を反転できるようになりました反転したいときはswitchにチェックを入れてください
>>332 奈々美さんの代理です(アク禁になってるそうです)
#329と#331はOK。#330は、同じ局面(2種類)が、3回出て来るのですが。うーん、謎。
だそうです
奈々美さんの代理で投稿します (1/3) --- 問題が見つかりましたので、%%GAMEコマンド関連の仕様変更/追加です。 コメントお願いします。 従来仕様: %%GAME game_name + %%GAME game_name - で、対局相手募集 / 募集している人への挑戦。 +、-は先手、後手を示す、必須の項目。 問題: 募集者に、同時に二人が挑戦し、片方は対局を開始したが、 もう片方は開始せず、"相手募集"の状態に入った。 クライアントは、即座に対局が開始されるを期待しているので、 あまりよろしくない。 将来、期待していないuserと同じgame_nameで、対局開始になる可能性が高い。
続きです(2/3) --- 解決案: 挑戦専用で、挑戦者がいない場合はエラーが即座に返って来る %%CHALLENGE game_name + %%CHALLENGE game_name - を追加。 エラーメッセージは以下。##[ERROR]移行のフォーマットは、今後、変更されるかも。 %%CHALLENGE sample_game-1500-0 + ##[ERROR] can't find rival for sample_game-1500-0 微妙に仕様変更: %%GAME, %%CHALLENGEの、+、-をオプションに格下げ。 先手、後手、どちらでもいい場合は、+、-を指定せずに %%GAME game_name %%CHALLENGE game_name とする。二人とも指定がない場合は、サーバが乱数で決定する。
続きです(3/3) --- 指定がない場合は、WHOでも表示が出ない。 ##[WHO] x x1 game_waiting I_dont_care-1500-0 ##[WHO] nanami x1 game_waiting I_like_sente-1500-0 + ##[WHO] +OK CSA標準クライアントは、接続直後に %%GAME default-1500-0 したのと同等の扱い。 とくに迷っているところ: 先手、後手どちらでも、という記号、例えば"="を決め、 %%GAME, %%CHALLENGEでの入力、%%WHOでの表示に使用すべきか?
>>339 どちらかというと、何か記号を決めてもらった方が実装(というかパーズ)
しやすいかなぁ。
記号には一応'*'を提案しておきます。
342 :
まともに動いてない ◆R/rLuLKeEI :04/07/19 07:02
>>341 :うさぴょんの育ての親さん案に一票。
私の端末では
>>341 が最新レスなんだが、本家2chではどうなんだろう。
こっち(t2.i2ch.net)が数レス遅れている模様。
343 :
デフォルトの名無しさん :04/07/20 11:17
しばらく進んでいない? ここの住人の一部は論文の締め切りで忙しいことだろう...
344 :
まともに動いてない ◆R/rLuLKeEI :04/07/20 23:50
>>343 水面下で進んでいるっぽい。
>>64 のまとめページが更新されている。
本当に皆、チャットに流れているような気がする。
私は帰宅が遅くて参加でけへんねん。
締切を知っているとは関係者!
人間用クライアントがまあ何とか使えるようになったので(まだ禁手チェックサボってるとこありますけど) 思考プログラムにかかりたいな〜と思いつつ、まず自分がそれなりに強くならねばと秘密兵器を仕入れてきました 親子で楽しむ将棋入門と将棋必勝定石の2冊(w、いいのか・・・
Cマガの特集で将棋プログラミング取り上げられたりしないのかな。
>>347 Cマガまるまる一冊分くらいの量になるから無理だと思う…。
>>348 昔某誌でやってたみたいに連載という手も
>>349 MICROですか。懐かしい。でも、その雑誌潰れたんですよねぇ(笑)。
それはともかく、最近も連載の企画の持込とか某編集部にあったみたいですよ。
そんなの読者が少ないからボツって言われたらしいですけど。
それから、今は多分ちょうど書き手がいないですね。あと半年とか経つとまた分かりませんが。
>>350 読者居ないのかなあ?
Bit誌で将棋じゃなくてオセロ方面のプログラムの記事が3連載くらいしたときも
うちの近所の本屋ではいつも次の発売日まで残ってるのにその月のだけは
店頭から姿を消してしまって買えなかったですけどね(笑
結局出版社のサイトから通販でバックナンバーを買う羽目になりました^^;
>>351 Bitを立ち読みしている人なら、その特集が背中を押してくれるかも。
結局、雑誌の個性の違いとかも大きく影響するでしょうし。
「読者がいない」と言っても、「うちの読者層に受けない」の方がきっと
正確な表現なのでしょうね。
拡張モードでチャットしか出来ないクライアントで人側の手の入力が出来ないバグは直した。 次はその手をサーバーに送る処理を作らなければ… 電車に十万円相当の忘れ物して凹んでる。
電車に十万円相当の忘れ物があったらしいが、拾えなくて凹んでる。
>>354 拾って頂ければ無料で体験ダイビング(講習費のみ)にご招待(笑)。
板違い、すんません。
sageます。
356 :
デフォルトの名無しさん :04/07/22 09:45
なんじゃろ 十万円相当?ノーパ、デジカメ、最強将棋ソフト自作?
日本語を読めない香具師
>>356 定価\146,000-のスクーバダイビング用品です。
海スポーツ板向けなので、やはりsageます。
そんな一部の人間にしか価値の判らないもの、高確率で駅に届いている希ガス。
駅に届いてました。 よって終了。 ところで私のチャットクライアントですが、手をサーバーに送る処理を練りに練り込んで、まだほんのちょっとしか書いてない。 土日はサービス出勤なので進みそうにないです。
361 :
デフォルトの名無しさん :04/07/23 08:27
誰か 最強の将棋ソフトを作るソフトを作ってくだしゃれ 十万円相当の物と交換差し上げます 権利をすべてくれ 1億ほど 儲ける予定です お願いします
>>361 知ってるよ最強の将棋ソフトを作るソフト
それはアセンブラーだなうん
え、そうじゃない
>363 いやまて、再帰が簡単に書けるCだろ? と、以下COBOL方向でネタにするか、LISPとかでマジな議論開始の悪寒。
365 :
デフォルトの名無しさん :04/07/23 09:04
361だ 最強の将棋ソフトを作れと 命令すると 翌朝出来上がってるような 1週間掛かってもいいですが!
クラスタ使って一手一週間かけて思考したら強くなるかな。
「完全読み」が終わるまで最初の一手すらささないプログラムなら…… 費用が大変だな
今のコンピュータ将棋は思考時間が長いほど強くなるけど、 もしプロ棋士と対局してプロ側持ち時間 9時間、コンピュータ側 持ち時間無制限なら、何時間(何日、何ヶ月)ぐらい思考したら プロに勝てるかな? それとも時間を長くしても無理?
それより以前にproxy同士で時間無制限かつ好きなだけ待ったしまくったら究極の棋譜ができるんだろうか。
>368 そんなんコンピュータが勝つに決まってるジャン。 「待ち時間無制限」を有効利用して、人間が死ぬまで待てばいい。 というのはチト極論だけど、体力&集中力に限界がある人間が圧倒的に不利。
いや、そういう話をしてるんじゃなくコンピュータとプロ棋士が対等に勝負するには 持ち時間ハンデをどのくらいにすれば適当か?って話。 人間の一生分(100年)ぐらいの持ち時間にしないと対等な勝負はできないって事?
下手の考え休むに似たり どれだけ時間を伸ばしても無駄。
>>372 こんぷーた君は一応考えてるわけじゃなく手をひたすら探索しているだけだからして
時間さえ与えられれば(以下略
>>373 無限の時間を与えて得られた最前手が最前手でもなんでもないから無駄。
コンピュータが探索しているだけととらえているならなお悪い。 駄目押しするが、読めば解決するような局面は将棋のごく一部。 読めば解決するような局面に行くためには発想や構想が必要だが コンピュータにはそれやその代替がないので自分の力でそこまで行けない。 全くの暗闇を適当に進んで、図らずも視界が突然開ける。 それが現在のコンピュータの状態。 目倉序盤に目倉終盤、力業で突然の明かり、本人すら予想せず。 はっきりいって超弩級の馬鹿だ。 方針も目安も予想もそれに類するものはなにひとつ持っていない。
でも結局プロに勝つ最初のプログラムも半ば力押しの馬鹿プログラムって事になるんじゃないの。 まぁ今のまま力押ししても無駄だろうけど。
無限の時間が与えられれば総当り探索以外する必要なしですがなにか
無限の扱いも知らんくせに言い返すんじゃないよこのタコ
総じておまえら考えが浅い。 哲学がない。 将棋をなめている。 頭が悪い。 もうね、死ね。マジで。 おまえらには期待できん。
能のない返しだな。 手間暇かけて殺しに行ってやるから住所と名前晒せ。 苦しませんから安心しろ。
>>385 その紹介は、ちょっと違うんだが(w
ま、いいか。
387 :
まともに動いてない ◆R/rLuLKeEI :04/07/24 00:09
今日は賑やかですな。
>>375 それらは全て事実か?
>387 ◆R/rLuLKeEIさん、まあまあ。 ここは将棋ソフトを作成する人達のための実務スレでしょ? それに徹しましょうよ、特に作成する側の人は。 その方がカッコイイ。議論は別スレで。
近況報告:サーバ revision 1.29の状況
>>337-339 については、
>>341 を取り入れ、引数や%%WHOの表示で"*"を使用することにした
>>329-333 を実装したので、CSAが定義した仕様は全てカバーしたつもり
>>319 , 324については、もっといい案がありそうだけど、
最低線は行っていると思うので、そのまま。
>>289 については、そのようなアプローチに変更したいと思っているが、
手を付けていないので、
>>285 のような状態のまま。
client に非拡張モードでのログインを追加してみました、で、接続テストしてみたんですが、 今の仕様だとゲームネームが一律なんで2機目を接続したとたんに対局が始まって 非拡張モードで常駐させられるプログラムは1機のみということになっちゃいますよね もし非拡張モードで常駐しようとするプログラムが2つ現れたら延々その2つが 対局し続けることになってしまうと思うのですが、大丈夫でしょうか?
>>390 CSA モードは規定ではそーゆーものだから大丈夫かと。
>>389 とうとうフル仕様まできちゃいましたか(驚) おつかれさまです。
さーて早速テスト… って wdoor は停電中か orz
>>391 ゲームネームでマッチングするのはCSAの仕様外だと思うんだけど
まあ常駐する人は拡張モード実装してねん、ってことでいいのかもしれないですけど
394 :
まともに動いてない ◆R/rLuLKeEI :04/07/24 09:54
>>390 でのご指摘のような問題点はあるのですが、
>>391 ,
>>393 のように、CSAプロトコルの都合上、いかんともしがたいです。
CSAプロトコルで、何かキーワードが送れれば、それでマッチング出来るのですが。
拡張コマンドという概念導入前は、LOGINでのPASSWORDをその用途に使っていました。
復活させます?
>>392 %KACHIの妥当性チェックも入れました。
バグ、仕様漏れがありましたら、教えてください。
あ、任意の局面から始める機能はないです。
>>385 CSAプロトコルで繋いだユーザが任意の相手に挑戦できるという意味では、
LOGINでのPASSWORDをゲームIDの一部に使うというのはうまい手かも知れない
と思った。
復活させてもいいのでは。
>>396 案です、拡張モードの時は LOGIN name pass x1 でログインだから
非拡張モードのときは パスワードに続けてゲームネームを入れてもらえばいいんじゃないかな?
パスワードにスペースが入ったらだめなら、pass:GameName みたいな感じで
非対応クライアントにとっては単に長いパスワードにすぎないのでそのままいけるかと思うんだけど
パスワードはパスワードとして残しておかないと将来認証が必要になったとき面倒そうですし
非拡張モードで接続したい人が結局居なかったなんてことになると悲しいので 先にリサーチしたほうがいいかも(w
奈良将棋の奈良さんがCSAモード搭載しているけど、拡張モード対応してないと YSSと彩の掲示板で書いてたはず。 需要は、とりあえず、一人分はありますね。
>>397 うーんうーん、CSA の規約ってその妥当性はおいとくとしてもやっぱり規約
(絶対)ですよね。CSA 互換モードを謳うなら CAS の範疇では余計な解釈なり
拡張なりは挟まずに淡々と実装しておくほうがいい気がするに一票入れときま
す。
まぁそんなに意固地になることもないんでしょうけど。
- CSA モードの明らかにおかしい点があれば規約を変えていく
- その範疇外だと思われるものは拡張モードでカバーしていく
ってな方向が効率がいいのではないかって気がしている酔い酔いの深夜の勢い
カキコでした。
>>400 純CSAモードしかもってないクライアントが拡張モードのクライアントと
自在に対局するにはどうすればいいかって話ですよ
wdoor 復旧しました.また Revision 1.29 に更新しました. 予定より遅くなりましてすみません.
>>402 …例によって中途覚醒してます。
しまった、うさぴょんでRevision1.29対応してないままバージョンを上げられてしまった(笑)
対応しなくちゃとか思うとまた寝るのが遅くなるじゃないかぁ(笑)
404 :
まともに動いてない ◆R/rLuLKeEI :04/07/27 01:54
…例によって終電帰宅です。 Javaクライアント、全然進まん。 急がなくちゃと思って寝ないでやると胃が痛むじゃないかぁ(実話(笑えない))。さっさと寝ます。
・・・例です (おいおい) ところで Remaining_Time の更新タイミングは今のままで仕様としちゃいますか? それとも変更されます?>ななみちゃま
406 :
まともに動いてない ◆R/rLuLKeEI :04/07/27 02:32
…うまい!
407 :
デフォルトの名無しさん :04/07/27 20:00
ワロタ。 あんな広いと人間はもはやプレイ不可能だな。 じっくり考えずに適当に打つしか。
卒研で詰め将棋アルゴリズムつくっているのですが、 駒画像つかわせてもらっていいですかー?
私(884)がUPしてる駒画像はご自由に〜
24のアカウント取ろうとしたらメアドではねられたよ、鬱・・・
>>405 現在の仮仕様は
>>285 なのですが、Remaining_Timeの更新タイミングが
1手遅れるのはバグです。手元では直してあります。
ただ、
>>289 の仕様への変更をどうしようか、というのがありまして、
マイナーバグフィックスでリリースするのもアレだなぁ、という状態です。
>>400 そのポリシーには賛成です。
ただ、どこからがCSA範疇外かという判断が難しいです。
>>397 の、:で区切る案は、どっちつかずという気がするので、
passwordをgameIDに流用する場合は、認証は無視して考えます。
ただ、純粋CSAクライアントが接続してきたら、自動的に対局を挑む
拡張モードのクライアントを用意するとかの手もあるので、
>>396 の採用は、どうしようかなぁ、というところです。
ご意見お待ちしています > all
>>413 わるさするやつがそんだけ多いということなんでしょうねえ
こまったもんだ
>>415 >ただ、純粋CSAクライアントが接続してきたら、自動的に対局を挑む
>拡張モードのクライアントを用意するとかの手もあるので、
それだとそのクライアントとしか対局できないのでパスワード流用の方向に一票です
オーナーが人間用の拡張モードクライアントで接続して、対局したい相手のゲームIDを確認し
それをパスワードにして純CSAのプログラムを接続するという方法でいけば拡張モードクライアントと
同じような行動がとれてめでたしめでたしとなるような気がします。(穴があったら指摘よろしくです)
事故で復旧が遅れましたが,wdoor のGPS将棋を復活させました. "*" を使って先手後手どちらも指せる状態で待たせています.
うさぴょんも"*"で先手後手どちらでも指せる状態をサポートするように改良終わりました。 今晩か、明日の晩にでもwdoorに実験に行くのでよろしくー。
421 :
まともに動いてない ◆R/rLuLKeEI :04/08/01 02:57
数週間ぶりに「拡張モードでチャツトしか出来ないクライアント」が対戦できるようにする改造の続きをした。 最初、????だったがクラス階層を上がったり下がったりしていたら思い出した。 サーバーからの指し手を内部表現に換えた後の処理を追加して終わり。 明日、サービス出勤が早く片付けば続きが出来るのだが…期待薄
>>421 >サーバーからの指し手を内部表現に換えた後の処理を追加して終わり。
おぉ、なんだかもう少しでゴールが見えてきそうじゃないですか。
あ、でも人間の指し手の合法性のチェックとかが残っているのかな?(あれは面倒だ)
とにかく、「まともに」さんのサービス残業/出勤地獄が早く終わりますように。
423 :
まともに動いてない ◆R/rLuLKeEI :04/08/01 14:05
422:うさぴょんの育ての親さん 応援ありがとう。 もう少しでなんですが盤面がショボイ。拘るときりがないんで当面は手を付けないつもり。 >あ、でも人間の指し手の合法性のチェックとかが残っているのかな?(あれは面倒だ) 指し手の合法性のチェックは合法手リストにあるかないかでやっていて、合法手リスト生成がまともに動いてない; ・千日手 ・打歩詰め ・持将棋 ・最上段の香の不成り がまだ。 これらは「まともに動いてないプログラム」とクラスを共有したため不具合も共有してしまっている。
>423 千日手が禁手なのは連続王手の場合だけだし、持将棋、打ち歩詰めあたりは頻度が低いので、 最上段の香の不成り以外は、直さなくてもサーバの判定に委ねてしまってもいいような 気もする。例を挙げれば、将棋倶楽部24のクライアントもその程度だし。
UnitTest用の棋譜データとかあったらいいのに
426 :
まともに動いてない ◆R/rLuLKeEI :04/08/02 00:25
427 :
まともに動いてない ◆R/rLuLKeEI :04/08/02 00:26
書き込みを間違えました。
>>425 FYI:
うさぴょんの育ての親さんに
>>329-331 を作ってもらい
(このURLでは、もうアクセス出来ないと思いますが)
http://gm.a-ark.net/~shogi/clip/img/44.zip のtest-shogi-serverに取り込んでいます。
44.zipは、.zipといいつつ、実はtar + gzipです。
ちなみに、44.zipのshogi-serverは、revision 1.30で、
>>396 ,
>>418 の通り、passwordをgame-nameとするようになっています。
例えば、wdoorではgapがgps-1500-0というgame-nameで待っているので
純粋CSAモードのクライアントは、passwordをgps-1500-0に設定して接続すれば、
対戦できます。
>>417 のバグは直したつもりです。
しばらく前にwdoorで話題になった、Rematch_On_Draw:Yesの場合のクライアント・サーバの 動作の件ですが、今のところ未定義(将来の拡張用)ということで、CSAから回答をもらいました。 というわけで、Rematch_On_Draw:Yesの話も忘れましょう(^^; 他にも当面解釈しないで良いヘッダはいくつかあるので、CSAでガイドラインを制定する そうです。
430 :
デフォルトの名無しさん :04/08/03 23:28
将棋のGUIを作ろうと思うんですが、 フリーの絵ってありますか? Javaで作るので、できたら公開しますね。
431 :
デフォルトの名無しさん :04/08/04 00:02
wdoorの棋譜を集計して星取表を作りました:-) 2局以上指していて,test/debug/yowai などでない方/プログラムが対象で 毎朝更新される予定です. 沢山の対局をお待ちしております.
>>433 うあ〜、弱いのばればれではずかし〜、今度からyowaiつけて集計されないようにしようっと(w
bulbul(windows用人間クライアント)最新版アップしました
(.net framework が必要、入手はwindows update から)
王手放置で惨めに負けることがおおかったので急遽チェックルーチン追加しました
(放置しなかったらかてるとでも?w)
ttp://gm.a-ark.net/~shogi/clip/clip.cgi
>>434 yowai ではあんまりですし,
もっと短い「集計しない目印」を決めた方が良いですね
>>434 しまったデバッグ用の表示を出したままリリースしちまいました.
すでに落としたかたは変な表示になんだこれ?だったかも
直したのあげときました
>>435 モード切替ができると最高ーかも(レイティング&フリーとか練習&本気とか)
ななみさんにプレッシャー(w
>>433 *が導入された今、先手/後手の勝ちを集計するんじゃ意味がないような…。
そのプログラムの先手勝ち星/先手負け星/後手勝ち星/後手負け星/DRAW/その他
くらいにしないといけないような気がします。
(…大変そうかな?)
確かに先手後手で別れているよりも一緒の方が見やすいですね. 折りをみて改良します.
>>436 うさぴょんと同じことをやったので、うさぴょんの仲間と認めます(笑)
>>437 そのような上位レイヤの仕様は、下位のshogi-serverに入れないのが
正解だと思います。直接の機能追加より、必要であれば
上位とのインターフェイスの追加でしょう。
対局の結果がCSA棋譜形式で残るわけですが、これに任意のコメントを
入れられるようにするコマンドとか。
>>440 うひゃひゃひゃひゃ、なかまなかま〜(w
そして香車の王手放置がバグっていたのが発覚
またあげときました、王手放置なんかしないもんねという人は
落とさなくても大丈夫です(自己嫌悪)
443 :
まともに動いてない ◆R/rLuLKeEI :04/08/07 23:50
今日こそは休みを活かして私のJava版クライアントをリリースかと思っていたが…終電には間に合わない…15日を4日に圧縮しないと…
444 :
まともに動いてない ◆R/rLuLKeEI :04/08/08 21:17
わずかに進んだ。 先手の最初の一手をサーバーに送って両手番のアプリケーションに + +7776FU が返ってくるのを確認した。 一行目の+は読み捨てていいんでしたっけ? 二行目の後、何ミリ秒以内に #ILL… などが来なかったら合法手とかいうのはないよな… 相手の手で盤面を更新して考えている最中に遅れて #WIN などが来たら…プレイヤスレッドを止めよか…まあいいや後回しにしよっと。
1行目の+ってなんだろう?
1行目の+って来ないと思うんだけどなぁ…?
ゲームサマリーの中に一発あるやつのことじゃない?
448 :
まともに動いてない ◆R/rLuLKeEI :04/08/09 01:00
ありゃ? サービス残業のしすぎでありもしない+が見えたのかも… 詳しく書くと、両者AGREEしたとき 先手 START: ... + 後手 START: ... となる。先手が手(+7776FU)を送ると例えば 先手 +7776FU,T5 後手 + +7776FU,T5 が返ってくる。手を送る前の先手の+と手を送った後の後手の+のことなのだが…クライアントの未知のバグかもしれない。
http://www.computer-shogi.org/protocol/tcp_ip_server.html を読んでみてもらうと分かるけど、その+はどこにもサーバから帰ってくる
という記述がない。
根性入れてtelnetでwdoorに繋いで見たけど、やっぱり返って来ないみたいだ。
こんな感じ
前の方は省略:先手側
P+
P-
+
END Position
END Game_Summary
AGREE
START:wdoor+default-1500-0+usa2+usa1+20040809112235
+7776FU
+7776FU,T10
前の方は省略:
P+
P-
+
END Position
END Game_Summary
AGREE
START:wdoor+default-1500-0+usa2+usa1+20040809112235
+7776FU,T10
なお、AGREEと+7776FUは、便宜上かいているけどサーバからのレスポンスではなくて、
クライアントから送った文字列です。
450 :
まともに動いてない ◆R/rLuLKeEI :04/08/09 14:36
お手数かけて済みません。 毎度毎度ありがとうございます。 プロトコルには書いてないから変だなーって思ってたんだけど、そうなるとクライアントプログラムのバグなのは間違い無いわけだ。
>>447 :rei
>ゲームサマリーの中に一発あるやつのことじゃない?
それだ!!
ゲームサマリーの構文解析を手抜きしたツケがあらわれたのだ。
うさぴょんの育ての親さん、reiさんありがとう!突破口が見つかりました!
今日帰れたら試してみます。
今日、yowai_gpsと自前のクライアントで対局してみた。 私は将棋についてはさっぱりなので、デーモン将棋の指し手をまるまる写しただけですが。 結果:「先手の持ち駒を打つことが出来ない」という情けないバグを見つけてしまいました。 実装を後回しにしてほったらかしにしたまま忘れていたらしい。
うーん、もう少しって感じですか。 完成したらJavaApplet版なんてのも期待しちゃっていいですか(笑)? あぁ、でも、AppletだとJava1.1だからGUI周りとか面倒そう…。
454 :
まともに動いてない ◆R/rLuLKeEI :04/08/13 19:22
>>453 :もうすぐ復職?
まだまだ、どんな脱力バグが潜んでいるのやら。
JavaApplet版は期待しちゃっていいです(泣)。
SwingのJAppletクラスで大部分流用と考えてるけど1.1まで戻らんとまずいでしょうか。
無関係ながら雑誌Tarzan 425号の64ページに羽生さんの記事がありますね。コンピュータのコの字もでませんけど。
>>454 うーん、IEのデフォルトのJavaRuntimeは1.1のままですよねぇ。
JRE入れろと言ってしまえばそれでOKという話はありますが。
wdoor のサーバを Revision 1.30 に更新しました. 対局お待ちしております.
457 :
まともに動いてない ◆R/rLuLKeEI :04/08/13 20:54
>>455 :
JREがでかくて場所を取るのが難点だな…。
>>456 :wdoor事務所
海外の人はwdoorのサーバを知ってんのかな。
>> 457 ほとんど宣伝していないので日本でも知っている人は少ないかもしれません. 自然に広がってゆくと良いのですが. クライアント着実に完成に近付いているようですね.
459 :
まともに動いてない ◆R/rLuLKeEI :04/08/14 02:40
>>458 :wdoor事務所さん
>クライアント着実に完成に近付いているようですね.
まあ、ぼちほち亀のようにのそのそとやってます。今宵はまだ会社…なのでおあずけ。
>>458 YSSと彩のページにも、私が引き継いだコンピュータ将棋のページにも
掲載されているので、宣伝していなくても十分存在は知られているのでは
ないでしょうか。
後はGPS、うさぴょん、K-Shogi以外に対応クライアントや常駐プログラムが
欲しいところです。そういえば、K-Shogiも*対応したみたいですよ、最新版で。
皆さん、はじめまして。 ログを見つつ、やっとwdoorにクライアントK-Shogiでログインすることができました。 comと対戦できたことに感動です。(人間指しでやってしまいましたが・・・) 将棋の実力、コンピュータ将棋に関する知識ともに素人同然ですが、それでも 昔のフリーソフトの棋力から想像できないくらい強くなっていることに驚いてます。 私はコンピュータ将棋ソフトの一ユーザに過ぎないため、プログラム技術のレベル アップに貢献できないとは思いますが、時々ココで遊んでみたいと思います。
>>461 いえいえ、遊んだ棋譜が残ることだけで(プログラム技術のレベルアップには
貢献できないかもしれませんが)、棋力の向上には寄与してますよ。
GPS将棋もずいぶんやられるパターンが分かってきたみたいなので、来年は
やられるパターンを克服してきて、うさぴょんよりも大分強くなっていそうです。
>>461 返事どうもです。昨日、うさぴょんをDLして初対局してみました。
私にはでは勝てそうにありませんね。0勝2敗です。
それから、棋力向上に寄与するかもしれないというお言葉に甘え、wdoorで
また遊ばせてもらいました。
サーバ経由でソフト同士(うさぴょんとK-Shogi)の対決が可能であること
ことにも感動しました。
464 :
◆R/rLuLKeEI :04/08/22 23:08
>>463 :yowai_gpsと対局していたmickey_usaさんやね。
アメリカから接続か?と思いきや「うさ」やねんね。
その時私はchu_gps2と自前のクライアントで対局していた。
結果:サーバーからの打つ手を認識しないバグを発見…また来週。
こっちの打つ手も送ってなかった。 まともにどころか全然動いてない…
Java Clientですが、一応終局までは行ったのですが、 ・負けたとき%TORYOが発行されない。 ・香車の他に桂馬も行き場のない駒を作る手を指せてしまう。 という問題が…。 もうちょっとなんだけどなぁ。
もうちょっとですねえ
>>467 それがですね、今日%TORYOを直そうと思って試行してましたら
・歩兵も行き場の無い駒を作る手を指せる。
という問題も発覚しまして…結局まだ%TORYOは直ってない(笑)。
469 :
デフォルトの名無しさん :04/08/26 15:42
すみません、他スレから間接的に誘導されて来ました。 質問です。 オセロ・囲碁・将棋などのゲームの思考部分のデバッグって、どうすれば良いのでしょうか? 思考アルゴリズムが正しいかどうかをデバッグしたいのです。 基本部分(駒や石を置く、ルール通りに駒を動かす、石をひっくり返す、石や駒を取る、など)のデバッグは 実際に走らせればすぐに分かるのですが、思考アルゴリズムが間違っている場合のデバッグがどうしても出来ません。 明らかにおかしい動きをする場合(意味もなくオセロで四つ角の斜め隣に置くなど)はデバッグ出来るのですが、 そうでない場合のデバッグが非常に困難です。 どうすればよろしいのでしょうか?
>>469 デバッグしたい内容によっていろいろな手法があると思いますが
定石部分や終盤の読みきりなどは答えが決まっていることなので
おそらく中盤の思考についてなのでしょうね?
枝刈りの部分は、とりあえずダミーの評価関数を作ってそちらを呼ばせれば任意の評価値を渡せるので
返ってくるべき答えが想定できるのでなんとかなると思います
そして評価関数そのものはそれ単体でテストするといいのではないでしょうか?
うさぴょんの場合、フルログモードというのがあって、読んだ手全てとその評価値を
ログに吐き出すモードがあります。
さらに、そのフルログをツリー状にして見るツールを自作しています。
思い通りの手を指してくれない場合は、フルログモードでログをとって、
思った通りの手がどれくらいに評価されているのか&どんな手順になっているのか、
実際に指された手がどれくらいの評価値なのか&どんな手順なのか、
をそのツールを使って全部調べて、非常に地道にデバッグしてます。
特に、問題集を解かせてみるなんていう場合には上記の方法で大体思い通りにならない
原因は見つかります。もっとも、直せない場合も多いですが。(直す手間が現実的でない、
それを直したら他の場合に悪影響がある、など。)
具体的にどんな局面でどんなバグがあるから直したいとかを語ってくれると
もう少し実践的なアドバイスが出来るかも知れませんが、とりあえず、
>>469 を
読んだ感じではこれぐらいです。
フリーソフトでは、K-Shogiにツリー状にして読んだ手全ての評価値を見ることの
出来るようなモードがあったので、ユーザインタフェースの参考にしたり、実際に
どんな感じでデバッグすればいいのかの参考になるかも知れません。
評価関数ってどんな感じで作れば良いんだ? とりあえず、駒に点数をつけて、成は二倍、王は99999点にして その和を使うみたいな感じでやっているんだけど、 やっぱり駒を取り捲る方法にシフトしちゃうんだよね。 上手い方法はないかなあ。何かヒントだけでもplz
>>469 思考がおかしい、というのはどうやって判断してるんですか?
>>472 単純だけど、こんな感じ。
・玉の周囲の利きの数を評価する。
・金銀や成り駒は、敵玉に近ければ近いほど高得点にする。
・自玉の回りの金銀も、守りに利いているので近いほど高得点にする。
・敵に迫るのを優先するように、敵に近い方が得点を高くする。
・歩の位置を評価する。
・飛車先の歩を切ったら得点を適当に与える。
まだ細かいことを言うと色々ある気がするけど、とりあえず上記位は実装しないと
うさぴょんにも追いつかない(笑)。
>>473 おかしいということが判定できれば苦労はしないわけで
判定できないときにバグってるのか正常に動いてるかをどうやって判断するかという問題でしょう
コーディングレベルのバグなら機械的に潰せばいいし、 思考上のバグなら対話的に潰せばいいってことか。 人間でもやるわなぁ。 「お前、その手はなんだ」 「いや、俺はこう考えたんだけど」 「その考えはダメだよ、こう考えてみろ」 「それだと、こっちの局面だとこうなるよ」 「あーダメかぁ」 ……ダメじゃんw
477 :
デフォルトの名無しさん :04/08/27 09:38
実際に おかしい手なんて なかなか判断つかないぜ。 そのおかしい一手により、相手が負けたらどうするんだ? もちろん、もともと指せない場所のチェックは 十分必要だが。
478 :
デフォルトの名無しさん :04/08/27 09:40
たとえば 初手を 一番右端の歩を突いたり、香車を動かしたりしたら それがおかしな手になるのか? 先手だったら、一歩 譲って 後手で指してく 作戦かもしれないぞ。
479 :
デフォルトの名無しさん :04/08/27 10:06
ま、おかしいと判断できるのは 誰にも負けない将棋の名人だけだろ。 負けるということは、おかしな手を指すから負けるのだ。
話がごちゃごちゃになってきている。 「思考ルーチン自体を修正したい」のか、 「思考ルーチンが設計(仕様)通りに実装されてないのを修正したい」のか。 469はどっちなんだ。
>>473 思考アルゴリズムがおかしいという表現がおかしいのであって、
最低でも、
1.思考アルゴリズムそのものが間違っている場合。
(デバッグ以前の問題)
2.思考アルゴリズムに基づいて書かれたソースプログラムが間違っている場合。
(デバッグ)
3.思考アルゴリズムの基づいて書かれたソースプログラムが
きちんと実行されているが、自分の想像している結果を得ることが出来ない場合。
(検証)
>>474 の各項目の評価点をどの程度のものにするか
例:駒割り(駒に対して点を与えるという考え方)に、どの駒に何点を与えるか。
その結果、意図せずに他の評価を隠してしまうほど影響がある場合は、
調整等が必要。
程度には、分類しないといけないでしょう。
歩を進める評価を行っている場合、
>>478 のように
右端の歩をつく手が選択される可能性はあります。
でも、「端にある(中央から離れている)」歩という評価も行っていれば、
その手を選択されにくい(または、されやすい)ようにすることもできます。
これは後者が、前者に比べて柔軟(または、複雑)に対応できるということであって
前者にバグがあるとは言えないでしょう。
>>480 内容が、かぶってしまいました。すいません。
訂正自己レス
>>481 の3.について
3.思考アルゴリズムに基づいて書かれたソースプログラムが
きちんと実行されているにも関わらず、
自分の想像している結果を得ることが出来ない場合。
と訂正します。
484 :
デフォルトの名無しさん :04/08/27 11:13
>>483 その3の場合は、思考アルゴリズムそのものが 自分が考えてたものと違うことになる。
>>484 ごめん。
流れから、自分自身で「評価関数=思考アルゴリズム」に縛られてたみたい。
どんな場合に「思考アルゴリズム≒評価関数?」がおかしいと言えるのかという ちょっと哲学的(言葉の定義的?)問題は置いとくとしても 「その局面で望ましい」指し手はどれなのかをプログラマーは判断できないといけませんよね。 やっぱり(序盤や終盤はともかく)中盤の指し手の選択をデバッグするには相応の棋力が 必要なのでしょうか?自分に棋力が無いと「次の一手」問題集を与えて検証する事はできても どう「考えさせれば良いか?」が分かりませんよね。 将棋プログラムに取っては教えた(トレーニングした)局面ばかりじゃなく、見知らぬ局面で 如何に正しい手を指すかが真価を問われる部分でしょうから。 まあ「強かろうが弱かろうが自分が考えるような手を指せば良い」というのが目標なら 棋力は必ずしも要らないでしょうが。 (これは自分に棋力が無いのを自覚しているのでどうすれば良いのか不安になって 来たためのグチですw)
>>487 思考プログラムを強くしようと思ったら棋力は必要だけど、
思考プログラムのデバッグ自体には必要ないよ。
489 :
デフォルトの名無しさん :04/08/28 16:04
>>488 今程度のコンピュータ将棋の強さなら、将棋の強さは関係ないと思う。
文献を調べ・判断する能力
アルゴリズムをうまくプログラムのする能力
だけで十分だと思う。
人によってはかえって、強くないほうがよいかもしれない。
自分が指す将棋をそっくり自分のプログラムにやらそうとして
とんでもなく弱い将棋ソフトを作っている人もいるぐらいだから。
まぁ、そういう人はプログラム能力がないだけかも知れないが・・
でも、プロに勝つには?
>>489 >自分が指す将棋をそっくり自分のプログラムにやらそうとして
>とんでもなく弱い将棋ソフトを作っている人もいるぐらいだから。
この人は逆にプログラム能力は無茶苦茶高いんじゃないか?
こういうやり方で強く作ろうと思ったら、
自分も強くないと駄目だよなぁ。
学習させていくやり方なら棋力よりも
>文献を調べ・判断する能力
>アルゴリズムをうまくプログラムのする能力
こっちの能力だけで強いのがつくれるかもしれんな。
と出品者が宣伝しています。
493 :
デフォルトの名無しさん :04/08/29 09:25
買ってね(w
思考ゲームプログラミングのパイオニア天森
コンピュータ将棋番外編スレにて私のトリップが解読されたようだ。 誰かは知らんがここに私のトリップで来るのも時間の問題だろう。
>>496 時間さえかければ見つけることが出来るからねぇ...
トリップにそこまで固執しなくてもいいんでないかい?
>>497 はあ、そうなんですか。
いや、異常なほど偏執的だと言われていて、それが本当なら私を恨む人が非常にたくさんいそうなので逆襲されてこの世から消されそう。
板違いやね。精神科に行ったほうがよさげ。
いまのうちに違うトリップに替えた方が幸せになりそうな希ガス。 まあ、書き込み内容で偽者かどうかはすぐわかりそうだけど。
CPUがどんどん速くなっているからねえ。 CPUがどんどん速くなっているんだから将棋が劇的に強くなっても良いんだけど ここはアルゴリズムなりの影響が強いからな
斜め読みしてたら、 CPUがどんどん速くなっているから私を恨む人が非常にたくさんいそう と読めてしまった。 どういう思考パターンだ>私
とりあえずトリップ変更。 デバッグに話を戻すと、再帰物の深いところで起こっているらしい不可解な現象は追跡がかなり困難なことがありますね。 メモリ関係の特にスタック破壊系はデバッガでみてもわけ分からんので大変です。
お久しぶりです。 今月のCマガジンに思考ルーチンの概説があります。 娯楽ゲーム向けのですけれど・・・入門編にいかがでしょう? 近況: 開発・・・ストップ 体調・・・不良(;_;)
えーと、9月になって仕事に復帰して暇がなくなってしまったうさぴょんの育ての親です。 前スレで話題になっていた、共通フレームワークのようなものが一応出来ました。 機能は、 ・任意の局面から開始できる(ただし、再コンパイルが必要(笑)) ・任意の局面で、合法な指し手の生成が出来る。 ・局面にハッシュコードをつけて、局面表に登録・引き出しが出来る。 ・評価関数は、駒得のみ。 ・一応αβで全手の先読みをする思考ルーチンの見本付き。 ・末端で、取って一番得する駒を取る(水平線効果対策)機能あり。 ・局面の表示。ただしコンソール。 ・人間の指し手入力。ただし、コンソールから、7776みたいに入力。 駒を成りたいときには、2423*のように最後に*を入力。 駒を打ちたい時には、歩なら0124のように入力。 以下、香車02、桂馬03、銀04、金05、角06、飛車07。 ・人間の手番を先手か後手か変えたい時には、再コンパイルの必要あり(笑)。 まぁ、これは改造すればすぐ直るけど。 ない機能は、 ・定跡通りに指す。 ・定跡を外れての駒組み(評価関数に追加が必要でしょう)。 ・指し手の評価と前向き枝刈り。<これはわざとつけてない。 ・王手の生成…これは、ちょっと手生成をいじって、王手になっているかどうか チェックするようにすればできるはず。 ・上記に伴って、詰め将棋(笑)。 ・詰め将棋がないことに伴って、詰めろをかけたりかかっていることを判定したりする機能。 ・通信。TCP/IPのCSAモードくらいならすぐ出来そうですけど。 CHATや何かが出来る拡張モードは対応が大変そう。 ていうようなところなんですが、こんな激弱いフレームワークでも欲しい人いますか? 一応、VC++とBorlandC++(<フリーで入手可能)でコンパイル・実行を 確認しています。おそらくgccでもOKでしょう。 欲しい人がいれば、うさぴょんの将棋プログラムの作り方のページを更新して、 それぞれの段階で実際のプログラムをダウンロードできるようにしようと思うんですが。
505 :
まともに動いてない ◆/8LpUMqVAk :04/09/07 09:00
>>504 :うさぴょんの育ての親さん
お疲れさまです。
予測通り、前スレで話題になっていた、共通フレームワークのようなものの発表が9月になってしまいましたねっと。
これとうさぴょんのページとが一対一対応になったら…挫折する人が激減!!…したらいいな。
近況:本業が猛烈に忙しくてデバッグが進まんです。
停電のため週末(9/10夜-9/13朝予定)wdoorのサーバが停止します 間際の連絡ですみません
>>506 あら。一応usapyon.dip.jpは終日上がってます。(バージョンが1.29くらいのままだけど。)
それでは、週末はusapyon.dip.jpにうさぴょんを常駐させておきますかね。
クライアントのデバッグに当てる時間が全く無い。 というのも本業で二重支配を受けていてそれぞれが「こっちが優先。出来てもいないのに帰るな」と…。 土日を潰してもまだ時間が足りない状態が半年くらい続きそう。 自傷癖が出てきた…鬱
またーり
null window searchというものが良く理解できません。 ウィンドウ幅をalpha, alpha + 1にして探索するとのことなんですが、 それをやってもウィンドウ内に入る値は帰ってこないと思うんですが、これは何がしたいんでしょうか。 β≦s≦vや v≧s≧α を求めるというのをチラッと見かけたんですが、何の事を言ってるのやらサッパリ。 どなたか伝授していただけないでしょうか・・・。
そもそもαβの挙動を良く分かっていないと理解が難しいのですが…。 αβ自体がFailSoftな作りでないとNullWindowSearchには意味がないし。 #FailSoftなどの用語が分からないようであれば、まずそっちから勉強することをお勧めします。 さて、NullWindowでの探索は、普通のαβ探索に比較して、高速に終了します。 まず、これはいいですか? αβ探索では、評価値sが得られるわけですが、この値sは、実は α以下ならその手の評価の上限値(実際の値vはs以下)、 β(NullWindowの場合はα+1)以上ならその手の評価の下限値(実際の値vはs以上) を表しています。 そこで、例えば、 (α、α+1)でNullWindow探索を行った後、帰ってきた値sがα<s<βならば (s、β)にWindowを設定して再探索を行うことで実際の値vを得ることができます。 また、β<=sならば、その場でβカットを行うことが出来ます。 そういう使い方をするものです。 以上が理解できたら、MTD(f)の論文を読んでみましょう。
>>510 完全な探索前の偵察だそうです
まずα、βの初期値が非常に狭いので頻繁に枝刈りが発生し超高速に探索が終了し(偵察なのですばやくないと意味がない)
本来の答えがウインドウ内にない場合、
本来の答え≧返り値≧α となり、少なくともαが取りうる値が返り値以上であることが保証されるということです
αβ探索ではより高いα、より低いβが早く得られるほど枝刈りが多くなり高速化できる為
偵察によって高いα低いβをきめうちできることが大変効果的なわけですね
げ、かぶった(大汗
>>512 …偵察なので、アルゴリズムの名前に、Scoutという名前がついていますです。
>>513 まぁ違う側面も説明していることだし、かぶりも良いかと。
515 :
まともに動いてない ◆/8LpUMqVAk :04/09/25 00:07:01
ということはウィンドウ外に出るのを期待してその値を求めるのに使うというのでええん?
window内の値(つまりα)が帰ってきたら正にその値が普通のαβ法で探索しても帰ってくる値だからバンバンザイだ
517 :
まともに動いてない ◆/8LpUMqVAk :04/09/25 00:22:25
でも最初のαの与え方が問題な気がする。
518 :
まともに動いてない ◆/8LpUMqVAk :04/09/25 00:28:31
あ、最初のαは−∞か
>>511-512 丁寧な説明ありがとうございます
ウィンドウ幅を0にしたら何も帰ってこないんじゃないかと誤解してたんですが、
fail-softにすればウィンドウ外の上限下限値sが帰ってきて、
で、そのsを基に極力狭いウィンドウで探索を行うことができて効率があがる、と。
おかげさまで今まで漠然としか理解してなかったMTD(f)やPVSについても理解できました。
520 :
デフォルトの名無しさん :04/09/29 18:23:14
あの、質問よろしいでしょうか。 将棋でのトランスポジションテーブルの効果なんですが。 単純なαβ探索にトランスポジションテーブル実装したら評価する葉の数は 平均何割くらい減るんでしょうか?一概にいえない場合は、例えば深さ5で の序盤平均とかでもいいので、知ってる方いたら教えてください。お願いします。
521 :
うさぴょんの育ての親 :04/09/29 18:58:31
単にトランスポジションテーブルをつけただけなら効果はほとんど0です。トランスポジションテーブルに、最善手を記憶するような使い方をきちんとすれば、35%程度ノードを節約できています(うさぴょんの場合。)
522 :
デフォルトの名無しさん :04/09/29 19:08:51
早速の解答ありがとうございます。 最善手の使い方ですが、単純参照が深さ的にできない場合、 せめて登録されている最善手でカットできるかを調べる方法 のことでいいのでしょうか?あと、この効果というのは、全く エントリーがない状態からある局面を読ませて35%ということ か、1局を通してということかどちらでしょうか?質問ばかりで 申し訳ありません。
>>521 0? んなことはない。
ついでに最善手を記憶させて次回反復時に
読む手として先に持ってくることはKillerMove
やHistoryHeuristicなどの範囲だから
本質的にはTranspositionTableとは別の話。
524 :
うさぴょんの育ての親 :04/09/29 20:06:15
反復深化を行っている場合の話ですが、読む際に以前の反復の最善手から 読み始めるようにした場合、そのような手法を使わない場合と比べた時の値です。 全くエントリーがない状態から、問題局面を与えて、 その局面について考えさせたときの平均値がこれくらいです。 さっきの投稿、何で改行が入らなかったんだろう?これも入ってないといやだな。
>>523 手順前後で同じ局面に至る可能性だけだから、ほとんど0と言ってかまわないと思う。
>>523 さっき書き忘れたけど、本質的には別の話だという点には同意。
全幅読むプログラムで最初の一手について実験してみると、結構効果がありました。
というわけで前言撤回。
>>523 さんが正しいようです。
本当に何も工夫のないプログラム(評価関数は駒得のみ、手の生成は端っこから順番)
で調べた場合、TranspositionTableのみでもαβで5手読みのノード数が3798から2224に減りました。
ついでに、ハッシュに最善手を入れた場合は、2210に減りました。
こっちは序盤じゃあまり効果がなさそうです。
528 :
522 :04/09/29 20:42:18
なるほど、反復深化での効果ですね。ありがとうございます。 ちなみに、上で書いた最善手は、次回反復時に使うものを想定したわけでなく、 1回の探索中に、登録されるある部分木の最善手を、そのトランスポジションに遭遇 したときに使用する場合です。 登録値の部分木の大きさが、そのときの読む深さ以上の場合は、その 値を使用して、小さい場合は登録されてる最善手でカットができるか 調べてみるというものを想定していました。ですので、トランスポジションテーブルの 話だと思っていたのですが。
ゴメソ、ノード数数え間違えた。 ハッシュ表を引いて一致したときにも、そのノードは訪れているからカウント しないといけないんだよな。さっきはカウントしてなかった。 というわけで、効果は、3798ノードを3406ノードに減らすくらいの効果です。 7%くらいかな?
>>527 実験してくださったんですね、ありがとうございます。
何か今日は血迷っている(−−; 引き算間違えてる。7%じゃなくて10%くらいの効果ですね。
>>529 実は自分でも駒の損得だけの序盤とうい単純なやつで
>>528 の方法を使って、
やってみて、1−2割くらいの削減しかできなかったので、こんなものかと
思い、質問してみた次第です。
やはり、反復深化にしないと効果は小さいということでしょうか。
今日は何か色々血迷っている(--; 末端のノードを数えていなかったみたいです。 末端のノードも数えたら、28186ノード対15994ノードで、ほとんど半分読みを 省略できているみたいです。 序盤では可能な指し手が少なく、同じ局面が現れやすいから効果が期待できるようです。 しかし、中盤以降、手持ちの駒が打てる様になると、急激に同じ局面が現れにくく なり、TranspositionTableだけでは、効果がほとんど0になると思います。 (今はちょっと実験する暇がないので数字を出すのは勘弁してもらいますが。) こういう状況になって、初めて反復深化+最善手の記憶が効果を出して来ます。 最初に、うさぴょんでは35%くらい、と言ったのは、中盤での反復深化+最善手の記憶 により速い段階でのβカットを起こすと言った効果の数字です。
534 :
某某 :04/10/01 01:32:24
>>532 反復進化による効果は専らNodeの探索手のOrderingに
よって上がる探索効率の話だと思う。
例えばTTを使わず、深さ別に単純な配列にKiller手を
数個登録するようなことをやるくらいでも探索効率は
かなり違ってくる。
Chessに比べ将棋でのTTの効果があまり大きくないこ
とはいくつか報告があり、貴殿の10-20%の実測痴は
概ね納得できる線だと思う。
(但し探索中に詰将棋を呼び当然の如く詰め将棋部で
TTを使っているとしたらその効用は別次元の話になる)
もちろんTTのサイズ、何を登録するか、Replacement
Scheme、局面(強制手順がどのくらいあるか)等によっ
ても違ってくる。
>>533 例えばxx角打、yy歩打、zz香打と打つ手が3つ続い
て出発ノードに戻りTTにRecord、それ以降不幸にして
Cutが起こらずzz香打、yy歩打、xx角打のノード先以下
同一局面検出による恩恵からして出てくるんだがそれ
でも0と?
>>534 全幅探索しているならとにかく、将棋プログラムの場合、
指し手を前向き枝刈りしているので、おそらく、順序が違うと同じ手が
生成されない可能性が高いと思う。
例にあげてもらった駒打ちなんてのは特に激しく枝刈りされるし。
以下の局面で、全幅探索をやった場合、 TTありで1621747ノード、 TTなしで2264331ノードの探索を行った。 少なくとも全幅探索では、TTの効用はある。(まぁそれはそうかなと思うけど。) でも、指し手の前向き枝刈りを行うとどうかなぁとやっぱり思う。 |v香v桂 ・ ・ ・v金 ・v桂v香 | ・ ・ ・ ・v金 ・v玉v角 ・ | ・ ・ ・v歩v銀v歩 ・v歩 ・ |v歩 ・v飛 ・ ・ ・v歩 ・ ・ | ・v歩v銀 ・ ・ ・ ・ ・v歩 | 歩 ・ ・ 歩 ・ 歩 歩 角 ・ | 香 歩 ・ 銀 ・ 金 ・ 歩 歩 | ・ ・ 飛 ・ ・ ・ 銀 玉 ・ | ・ 桂 ・ ・ ・ 金 ・ 桂 香
前向き枝刈りのあるプログラムで実験。 末端での静止探索などが複雑なプログラムなので、 今回はノード数は数えられなかった。 なので、時間での比較でご勘弁。 TT+TTに最善手を記憶した場合 28.8s TTのみ 45.9s TTなし 50.1s というわけで、TTのみでも10%程度の効果はあるらしい。 思っていたより効果があることが分かりました。反省。 某某さんの方が正しいようです。
追伸: 前向き枝刈りありのプログラムで、 TT+最善手記憶ありがTTのみに比べてかなり早いのは、最善手でβカットを 起こせた場合、手生成などが呼ばれないからです。 αβの中身が、 TTの最善手でβカットをチェック ↓ 手生成 ↓ 生成した手を読む というようになっているので、後半部分を省略できるのが大きいわけですね。 なお、手生成と簡単に書きましたが、実際にはTTからの手のコピーだったりすることも あります。
最短の合流は「XX Y成 同Z」と「XX Y不成 同Z」の場合の2手かな
ゴタクはいいから早くプロに勝てと
542 :
まともに動いてない ◆/8LpUMqVAk :04/10/02 20:25:54
545 :
デフォルトの名無しさん :04/10/11 12:34:16
あの、最弱の将棋プログラムを作ったのですが、どなたかボロクソに言って下さい。 もしもプログラムの駄目だし(特にデータ構造について)をしてくださる奇特な方がおられましたら、 アップローダを教えてください。
>>545 最弱の将棋プログラムは既に囲碁将棋板の過去スレで発表されています。
(ここですぐにスレが出せるといいのですけど、すみません。)
で、あれより弱いプログラムは作成不可能だと思われます。
なので、残念ながら?あなたのプログラムは最弱ではないか、過去のプログラムの
弱さを超えていないと思われます。
548 :
545 :04/10/11 22:21:55
>>547 最も早く簡単に(コンピュータが)負けるプログラムですね。
そういうことなら、最弱ではないです。
一応、中途半端な強さのプログラムなら作ったのですが・・・。
・駒を出来るだけ多くとる
・自由度(駒の動きやすさ)を上げる
・敵陣に駒をきかせるようにする
・王手を回避する
とりあえず、この4つを実装してみました。
あとは、将棋の格言を実装すれば、少なくとも初心者には勝てる将棋プログラムが
作れると思いますが、どうでしょうか?
550 :
548 :04/10/11 22:40:00
>>549 ファイルが複数になるので、圧縮ツール(LHAとか)をキボン。
詰め将棋モードも作っているところですが、バグがあるので(w 詰め将棋モードは使わないで下さい。
変なバグが出たので、デバッグのために明日まで待ってくださいm(_ _)m 釣りの意図がないことを示すために、仮トリップをつけておきます。
>>550 XPなら標準でzip圧縮できるんだが
LHAがほしいならベクターか窓の杜にあります
がんばれ〜
>>552 身体こわさん程度に頑張れぇ!
私の方はと言うと、2ヵ月ぶりの休暇が出来たので、まずは何が問題だったかを復習してる間に時間切れ。
明日、時間があれば続きをするけど、無ければ多分2ヵ月後に再検討…
555 :
◆g1oZzVyfEE :04/10/12 00:44:34
バグの修正が出来たので、うpします。
ttp://gm.a-ark.net/~shogi/clip/img/52.lzh 今のところは非常に弱いですが、これから強くしていく予定です。
コンパイル方法などは、readme.txt を参照願います。
画面イメージは、こんな感じです。
1 2 3 4 5 6 7 8 9
1 ky ke gi ki ou ki gi ke ky
2 __ hi __ __ __ __ __ ka __
3 fu fu fu fu fu fu fu fu fu
4 __ __ __ __ __ __ __ __ __
5 __ __ __ __ __ __ __ __ __
6 __ __ __ __ __ __ __ __ __
7 FU FU FU FU FU FU FU FU FU
8 __ KA __ __ __ __ __ HI __
9 KY KE GI KI OU KI GI KE KY
sen*:
go :
command>
>555 とりあえず、普通の盤とx軸が逆なのは何故? 76歩を指してみたら飛車のコビンが空いてビックリした。 ・勝手に駒が動いた ・ないはずの駒(しかも敵の駒)を打てた(go* : fu*-1 とか表示された) ・ちゃんとコマンド入れてるのにやたらSyntax error. が出る
>>556 まずは、素早い御指摘に感謝致します。
>とりあえず、普通の盤とx軸が逆なのは何故?
>76歩を指してみたら飛車のコビンが空いてビックリした。
コンピュータで x 軸が左から右の方が楽だから、コンピュータの座標系にしてしまいました。
単に右→左にするのをサボっただけです。
すみません、すぐに直します。
>・勝手に駒が動いた
勝手にというのは、具体的にどのような状況でしょうか?
>・ないはずの駒(しかも敵の駒)を打てた(go* : fu*-1 とか表示された)
敵の駒を打てないようにチェックするのを忘れてしまいました。
>・ちゃんとコマンド入れてるのにやたらSyntax error. が出る
駒を動かせないときは他の文を表示すべきなのに、
エラー(駒を動かせないなど)に対して全て Syntax error. にしてしまいました。
これも直します。
思考ルーチンの部分だけを独立したUIを持たせて カルネージハートみたいに、二次元枠にブロックを ならべて、パラメータをいじるようなものできないかな。 ブロック組み合わせてできるから、 24の高段者でプログラム素人が参入してくれて、 飛躍的な発達が期待できると思うんだけど。
>>557 VSでコンパイル、shogi.cにWarningが複数。
?を連打しただけで盤面が二度表示、ヘルプファイル
スクロールアウト、駒が勝手に動く。
直します直しますはいいけど、晒すならもう少し
完成度を上げたほうがよいのでは?
>>559 完成度の低いものを見たくないならDLすんのを待てばいいだけだからそんな風に言わなくてもいいんじゃない?
突っ込みどころが多いほうがネタとしても面白いじゃん
>>558 もしかして、複数の評価関数があって、それぞれに重みを手動でつける方法ですか?
パラメータにしても、評価関数みたいなものがないと難しい気がするのですが・・・
>>559 >VSでコンパイル、shogi.cにWarningが複数。
readme.txt にその旨を書いたのですが・・・
>?を連打しただけで盤面が二度表示、ヘルプファイル
>スクロールアウト、駒が勝手に動く。
盤面が二度表示されるのは、原因を調べてみます。
ヘルプファイルが大きいので、スクロールアウトは御勘弁下さい。
もしGUIバージョンに移植する時は、別窓に開くようにします。
駒が勝手に動くというのは、敵の駒でしょうか?
敵の駒が勝手に動くのは、敵(コンピュータ)が考えて動かしているのですが・・・
>>560 そう言って頂けると嬉しいです。
私ゃ>559に同意。 ・LSI-Cじゃあっという間に限界が来るのが目に見えてるからとっとと32ビットコンパイラに移行すべき。 ・特にLSI-Cの場合、ファイル末尾に改行は必要。無いと誤動作の原因になる。 ・相手の手くらい表示して欲しい。 ・Undoで相手が勝手に打つから事実上Undoできない。 #テストすればすぐわかるはず。 ・fgets()は改行まで読み込むからprintf()で改行を付け足す必要はない。 ・hコマンドで相手の手番に入ってしまい、自分の駒が勝手に指される。 #指摘された瞬間にこの程度のミスに気付けないのは詰めが甘いからか?
おもしれー。 要はエラーじゃないコマンドは全て相手が勝手に指すから、 例えば'#'かなんかを連打するとCPU同士の対戦になるのね。 んで、あっさり千日手に陥ると。
docommand()のswitch文のbreakはreturn 0にした方がいいんでわ・・・
指摘事項追加。
・sscanf()で文字列をばらすときは長さ制限をかけないとあっさりcoreを吐く羽目になる。
#例えば"abcdefghijklmnopqrstuvwxyz"でも入力すれば覿面。
>>564 確かに。そうすれば少なくとも>562で指摘したような現象は生じないね。
>>561 もっと複雑なもの「思考ルー釣んのすべて」を実現できるものです。
カルネージハート知りません?
知っていただけるとイメージがわくと思うんですけど。
カルネージハートではプログラムを素人や子供が組めます。
そして、どのプログラムが優れているか対戦させることができます。
大会まで開かれました。
優秀なあるいはユニークなプログラムが数多く輩出され
プログラム集が何冊も出版されました。
将棋ソフトもそんなふうに敷居が低くなれば、
将棋の高段者やプロが遊びで参加できて
大会のレベルがあがると思います。
567 :
まともに動いてない ◆/8LpUMqVAk :04/10/12 07:25:00
>>566 :
>カルネージハート知りません?
後でgoogleで調べてみるけどプログラム板的にお薦めのページがあれば教えてください
知らないのでイメージが全然湧かないんですけど。
将棋ソフトも敷居が低くなるのは賛成。
おはようございます。
>>562 >・LSI-Cじゃあっという間に限界が来るのが目に見えてるからとっとと32ビットコンパイラに移行すべき。
すみません、単に無料だという理由だけで使っていました。
そのうち Visual C++ などに移行したいと思っています。
>・特にLSI-Cの場合、ファイル末尾に改行は必要。無いと誤動作の原因になる。
それは(勉強不足で)知りませんでした。以後気をつけます。
>・相手の手くらい表示して欲しい。
すみません、怠慢でした。
>・Undoで相手が勝手に打つから事実上Undoできない。
これも直します。
>#テストすればすぐわかるはず。
すみません、アルゴリズムのことばかり考えていて、コマンドのバグのテストが甘かったです。
>・fgets()は改行まで読み込むからprintf()で改行を付け足す必要はない。
おっしゃるとおりです。
>・hコマンドで相手の手番に入ってしまい、自分の駒が勝手に指される。
すみません、直します。
>#指摘された瞬間にこの程度のミスに気付けないのは詰めが甘いからか?
すみません、詰めが甘かったです。
実は、自作のソフトウェアをWeb上に公開したのは今回が初めてです。
あ、別に初めてだから大目に見て欲しいというつもりは全くなくて、
むしろ容赦なく厳しく指摘して下さった方が、プログラムも良くなるし、
勉強にもなるので助かります。
>>564 確認してみます。
>>565 sscanf を使ったのは手抜きでした。本当は、
fgetsで読み込んでから strtok で分解すべきでした。
>>566 「カルネージハート」という言葉は知りませんでした。
だいぶ前に、システム開発が子供でも出来るとか出来ないとかを
ニュースか新聞で見たことがあるので、そのことかも知れません。
ググって見ます。
>>567 >>569 ここで雰囲気はわかると思います。
カルネージハートpart2
http://game8.2ch.net/test/read.cgi/famicom/1068353700/ 具体的な内容がイメージしにくいと思いますので、
中古ソフト屋でゲームを買ってきて遊んでください。
必ず、今後のプラスになります。
簡単に説明します。
カルネージハートは、プログラムをロボットに組み込んで対戦させるゲームです。
二次元座標の16*16(いくつでもよい)のマスがあります。
マスにブロックをはめ込みます。
プログラムフローは左上からスタートし右下で終了します。
右下に行ったら左上に戻り、またフローします。
ブロックとは、サブプログラムをパッケージ化したものです。
様々な種類があり、フローを繋ぐだけの矢印→↓から
外部状況分析、内部状況判断、条件分岐、アクション、
など多種多様のブロックがあります。
サブプログラムは内部の設定値をGUIで調整できます。
これらのブロックを、上述のマスにはめ込みフローをつくります。
原則として左上から右下へフローします。
基本的には、状況判断→アクション→フィードバック→状況判断→…と進みます。
応用として条件判断と組み合わせて有限ループさせる部分もつくれます。
>>569 老婆心ながら。
・フリーのコンパイラがいけないのではなく、gcc/bccのようなフリーの良質なコンパイラに慣れるべき。
そうすれば<<4のような姑息なコーディングを意識することなくコンパイラ任せにできるから。
#LSI-Cじゃ余りにも古く小さすぎ。フリー版ということはメモリ空間も小さいしintも16bitだし。
##できればオブジェクト思考プログラミングに向かった方がいい気もするけど。
・sscanf()を使ってはいけないのではなく、使うのならきちんと使うこと。
#大丈夫、LSI-Cのsscanf()の%3.3s周りの幾つかのバグは私が指摘して潰してもらったからw
まぁ、一番大事な頑張る気力はありそうだからこそ指摘してるわけだけどね。
このシステムと将棋を組み合わせると(「鉄心」と名付けます)、 全国各地の子供から大人まで、将棋初級者からプロまで、 「鉄心」という同一基盤上で最適な評価関数やシステム構造を求めて競いあう 状況がつくれます。これは将棋プログラムの前進に大きく貢献します。 「鉄心」をフリーで作り広く配布すれば、非常に多くの手と頭を以て、 非常に幅広い人々の手によって、永遠に改良と競争が行われます。 これによって続々と成果が上がった評価関数やシステム構造を 将棋プログラムに反映し、高速な環境でさらにチューンを加えたものを 大会で競わせればコンピュータ将棋界そのものの大きな進歩が期待されます。 開発は、開発とは、より多くの手、より幅広い頭によってなされるべきだと考えます。 鉄心はそれを満たすひとつの解です。
飛車取っても持駒にならなかった
懐かしいね、カルネージハート。 基本的に閉鎖的なシステムだから実現できる面もあると思う。 目的を達成するための手段(ルーチン)や判断材料(パラメータ)が あらかじめ固定数で決められていて、 用意された以外のことが出来ないんだよね。 あれやこれやをシステム側として柔軟に対応しようとすると、 とてつもなく大きいシステムになってしまうし、 かといって、不十分な対応だとシステムから離れてられてしまう。 システムをメンテしていくことも考えないとダメポ。 { ブロックを縦や横に数十個並べるより } { 普通のプログラムソースのほうが } { 見易いし解かり易いと思うんだけど... } (´-`).oO
学研の電子ブロックを思い出してしまった。 自作ブロックを作り出す輩がかつていたそうだけど… sage
>>574 素人や子供の中にも天才はいるんです。
そういうののアイデアをゲームをえさに発掘したいんです。
577 :
◆g1oZzVyfEE :04/10/12 18:03:16
ttp://gm.a-ark.net/~shogi/clip/img/53.lzh 御指摘のあったバグを修正しました。
>>570 そのスレを後で読んでみます。
>>571 >・フリーのコンパイラがいけないのではなく、gcc/bccのようなフリーの良質なコンパイラに慣れるべき。
学校には gcc があるのですが、ネットワークを通すと全角文字が文字化けしてしまうのと、
パソコンを置いてある部屋は飲食禁止(←些細なことですが・・・)という理由で自宅で作成しています。
Windows対応のフリーの gcc や bcc もあるのでしょうか?
> そうすれば<<4のような姑息なコーディングを意識することなくコンパイラ任せにできるから。
「<<」演算子は邪道ですか?容量節約と高速化のためにビット単位で情報を詰め込んでいるのですが、
それはやめた方がいいのでしょうか?
>#LSI-Cじゃ余りにも古く小さすぎ。フリー版ということはメモリ空間も小さいしintも16bitだし。
あの、lcc の limits.h では、INT_MAX は 2147483647(=2^31-1) となっていますが・・・
>##できればオブジェクト思考プログラミングに向かった方がいい気もするけど。
それも考えています。
>・sscanf()を使ってはいけないのではなく、使うのならきちんと使うこと。
>#大丈夫、LSI-Cのsscanf()の%3.3s周りの幾つかのバグは私が指摘して潰してもらったからw
一応、Ver1.1 ではきちんと使ってみました。
>まぁ、一番大事な頑張る気力はありそうだからこそ指摘してるわけだけどね。
ありがとうございます。
意味的に *16 のところを <<4 にする必要はないけど そうでないなら、そんなことはないと思うよ。
簡単のため、上位4ビットを y 座標、下位4ビットを x 座標にしています。 あまり *16 という意識はないです。
gccはmingwでいいんじゃないの? 飛車とか角とか普通に逃げられるのに ただ取りされるのが気になる。
>>◆g1oZzVyfEE 氏 IDEが必要と考えているなら bcc + BCCDeveloper、 mingw(gcc) + DEV-C++ ※英語 などをお勧めしたい。 IDEが必要ないのなら MSVCToolkit2003 という手もあるでよ。
583 :
デフォルトの名無しさん :04/10/13 00:28:37
概して勉強不足だと思う。 将棋プログラム以前に一般的なプログラミング 初心者用のスレにまず行ったほうがいいと思う。
>>577 ごめん、lccっててっきりLSI-Cのことかと思ったよ。
#今検索して始めてlcc-win32の存在を知った罠。
585 :
まともに動いてない ◆/8LpUMqVAk :04/10/13 03:30:51
Java版拡張モードで対戦可能なチャットクライアントの行き場の無い駒が作れる不具合が治ったっぽい。 もうちょっとテストしてみます。 >・相手の手くらい表示して欲しい。 すみません、私のもしてません。 思考時間の表示とかも実装してからupしようと思います。 恰好良く表示させるのは2の次でとりあえず(+|-)xyXYoo,Tddのようなサーバーから返って来るそのまんまの形式で…
CUIで、スクロールタイプだとどれが動いたか判り辛いんですよ。
587 :
まともに動いてない ◆/8LpUMqVAk :04/10/13 04:01:47
>>586 :
CUIで、スクロールタイプでも動いた駒を反転させてくれれば判り易くはなりますね。
GUIでも表現力が乏しいと時々分からなくなったりしますよ。
私のはコンソールにスクロールタイプのCUIを出しているのでなんとかなっているけどやっぱり格好悪い。
588 :
デフォルトの名無しさん :04/10/13 05:37:23
羽生レベルに勝てるにはあと何年必要?
羽生がボケるまであと30年? 40年? その頃にゃ勝てる。
590 :
デフォルトの名無しさん :04/10/13 07:47:14
なんか揉まれてるって感じでいいね。 将棋版カルネージハートは面白いかも。 作ろうかな。 ただ、モジュールを作る方法が必要だと思うんだよね。 誰かいいアイディア欲しいね。 関数的な考えでは 変数に値ぶっこむモジュールか if/elseしてくれるモジュールがあれば終了か? ◆g1oZzVyfEE にはがんばって欲しいね。 とりあえず、Java+Eclipse使えば? C言語なんてカス言語な上に 環境を整えるのも面倒だし。 Javaなら2つインストールするだけで、 極上の環境が一瞬で出来上がる。 java5の対応もかなり進んでるし。 GUIは一瞬とは言わないけど、三瞬くらいでできるよ。 paintComponentに書きなぐるだけだ。 あとはmouselistner使えばやりたいことは全部できる。(極論) 俺もカル将棋作りつつ、将棋アルゴ作ってみるか。
591 :
まともに動いてない ◆/8LpUMqVAk :04/10/13 09:13:35
まだカルネージハートやってないからピンと来ないんだけど、ブロックはブロックを敷き詰めて表現するのかな。 再帰処理くらいは表現出来ないと苦しそう。 ブロック版FORTH言語もどきをブロック・トランスレータ(仮称)でC言語か何かに変換てなところか…
592 :
◆g1oZzVyfEE :04/10/13 09:48:10
すみません、あれから進展がありません(汗 勉強不足という御指摘がありましたが、これでも一応コンピュータ専門です。 本当はある程度完成度を上げてからうpするべきですけど、 とりあえず皆さんからの御指摘を仰ぎたいという気持ちがありましたので、 あえてうpさせて頂きました。 とりあえず、最初から(コンピュータに)組み込むことなく、コンピュータが自発的に 角道を開けたり、飛車先歩交換をするようにしようと考えています。 つまり、出来るだけ小さいプログラムで最大の強さを目指しています。 羽生レベルとは言わなくても、とりあえず、(天才的に強い子じゃなくて) 普通の将棋好きな小学生に勝てる程度のプログラムを作るのが最初の目標です。
なんか4スレも消費した挙句、なんで今頃になって 厨化してしまうのか良くわからん。
やっとそれらしくなった気がするけどな。 馬鹿な議論もなくなって。
ここ数日間は就職活動専念のため、将棋プログラムの活動はお休みさせて頂きます。 試験・面接が終わったら、lcc でぐいを作ってみます。 それまで◆g1oZzVyfEE を生暖かく見守ってやってください。
期待してるよ
もう来るな。添削希望の甘い考えなら単発質問スレより悪い。 そもそもこの板の、C言語なら俺に聞けスレくらい読んでたら Cygwinも知らんなんてことは言えんはず。
>>598 いいじゃんようだれも発言しないんだから
ツマランネタ書くなっていうんならなんかネタ振ってよ(w
600 :
まともに動いてない ◆/8LpUMqVAk :04/10/14 22:30:21
YSSの掲示板にあった「直線的に16手先を読む」とかいう方法は将棋でも使えるでしょうか?
使えるような気がしますけど、16倍時間をかけて、かつ10倍のマシンが必要と なると実験がとても出来ないですねぇ…。 将棋の場合、要するに、8〜20手くらい先まで読んで最善手だと判断された手で 1手ずつ直線的に16手進めて見て、最初に選んだ10手の中から、そこでの形勢 判断で指し手を選ぶ、ということになるわけでしょうか。 特に序盤では、そのように直線的に深く読めることが「構想力の無さ」をカバー してくれるような気がしますね。
直線的に読むというのは勝手読みのことですか?
603 :
まともに動いてない ◆/8LpUMqVAk :04/10/15 00:16:09
ものすごい勝手読みらしい。
604 :
デフォルトの名無しさん :04/10/15 00:36:12
10 PRINT "将棋ゲーム" 20 PRINT "!YOU LOST!"
>>604 10 PRINT "将棋ゲーム"
25 PRINT "おまえはすでに負けている" ' 2004/10/15
20 PRINT "!YOU LOST!"
>>605 LIST
10 PRINT "将棋ゲーム"
20 PRINT "!YOU LOST!"
25 PRINT "おまえはすでに負けている" ' 2004/10/15
607 :
デフォルトの名無しさん :04/10/16 01:22:00
最高の評価関数ができれば先読みなんていらないんだけどね。
逆に究極の先読みができれば評価関数はいらないよね。
いや、やはり最後に勝つのは至高の評価関数だと思う。
昨日就職の試験と面接が終わったので、内定/不採用の結果が出るまで活動を再開します。
>>608 残念ながら、評価関数が必要ないほど究極の先読みは不可能です。
全宇宙の全ての素粒子を使って究極の量子コンピュータを作ったとしても、
それでも完全な先読みは出来ません。
何故ならば、将棋の全ての指し手は 10^160 程度と言われており、
全宇宙の全素粒子の数は 10^90 といわれています。
よって、全ての素粒子が 10^70 回の演算を現実的な時間内で完了させる必要があります。
ちなみに、1年間(うるう年でない年)は 31536000 秒なので、
100年以内に全計算を終わらせるためには、約 3*10^60 ヘルツで動作させる必要があります。
よって、将棋の完全先読みは絶対に不可能なので、至高の評価関数を作る方が
現実的だと思われます。
ちなみに、今は効率を上げるためにデータ構造を変えているところです。
>>610 先読みがいらないってのに対比して書いたんだけど。
どっちも不可能でしょ。
>>611 どちらも不可能だと思います。
計算量で言えば、先読みしない評価関数を作る方がまだマシだと思ったのですが・・・
もちろん、「至高の」評価関数を作った人は世界にいないですけど。
探索で勝ったディープブルーの前例は・・・・・・・・
>>613 あれは全探索ではなくて、人間が(ディープブルーに)助言したらしいですよ。
>>607-608 両方必要。
バランスが大切。
究極とか至高は存在しない。
至高の評価関数が存在しないのは将棋に最善手がないから。
しかし、いまは先読み手法はいいところまでいってるが、
評価関数は駄目駄目だから改善するなら評価関数。
定跡データベースと組み合わせた戦型別評価関数、序中終番別評価関数、
先読みと合わせた手の早さ別評価関数、
局面判断に合わせた玉の堅さ別評価関数、
これからまだまだ伸びシロがある。
>>615 >しかし、いまは先読み手法はいいところまでいってるが、
>評価関数は駄目駄目だから改善するなら評価関数。
>定跡データベースと組み合わせた戦型別評価関数、序中終番別評価関数、
>先読みと合わせた手の早さ別評価関数、
>局面判断に合わせた玉の堅さ別評価関数、
>これからまだまだ伸びシロがある。
それを聞いてちょっと安心しました。自分で頑張る余地が十分あると知って。
隠すのは卑怯なので白状しますと、最強の将棋プログラムを作るのは、実は◆g1oZzVyfEE の
卒研のテーマでもあります。スレを立てたのは他の方ですが、勝手ながらこのスレに寄生させて頂いております。
あ、もちろん、参考にさせて頂いた部分については、当然のことながら、
引用元のスレ・レス番・コテ・サイトなどをちゃんと書きます。
もし良いプログラムが出来たら、どうか誉めてやって下さい。
悪いプログラムだったらどんな罵声でも浴びる覚悟でいます。
>>598 さんのような厳しい御指摘もありましたが、出来るだけバグを排除してプログラムを強くして、
「どう、強いでしょう?」と言えるように完成度を上げてからうpするようにします。
>>616 そういうことなら協力しないでもないから適宜投下してみ。
よくなっていく過程を見るのは面白いし、暇があればソース叩いてもいいし。
>>617 暖かいお言葉をありがとうございます!!
データ構造を変えたところでまだ人に見せられるようなものじゃないので、
(・∀・)イイ!と思えるプログラムになったらうpします。
一生懸命がんがります!!
619 :
デフォルトの名無しさん :04/10/16 21:53:50
どこぞの天才数学者が数学をうまいモデルに落として 究極の評価関数を作ってしまうかもしれない・・・ >あ、もちろん、参考にさせて頂いた部分については、当然のことながら、 >引用元のスレ・レス番・コテ・サイトなどをちゃんと書きます。 誰も著作権なんて主張しないと思うけど。 ここに書かれる事は全部ゴミレベルだと思うぞ。 引用なんてのは説明を省くために使えばいい。 それから そこそこ強い将棋を作っても研究にならん。 特に評価関数のチューニングだけじゃだめだし。 何か新しいアイディアを提案して、その有効性を示すのが研究だからね。 ついでに、探索に関しては研究は成熟しきって、もうやることはない。 100台並列で探索できたとしても、ほとんど強さに貢献しない。 さて、どんな研究をするんだろう?
>>619 探索に関しても別に研究が成熟しきっているということはないと思いますよ。
現に激指が、「読みの深さを局面の実現確率で打ち切る」というアイデアを出したのは
4年ほど前に過ぎません。
「水平線効果を効果的に取り除く一般的な手法」というのも誰もまだ解決していません。
例えば、DeepBlueで行われたSingularExtensionはChessでは成功して、一つの解に
なっているわけですが、それが将棋でもベストであるとはいえない状態です。
100台並列で探索する手法についても、どんな方法で探索すればベストか、
きちんとした研究は将棋ではされていません。
チェスと同じ方法でうまく行く可能性が高い、というだけで。
> 何か新しいアイディアを提案して、その有効性を示すのが研究だからね。
ここには激しく同意。
単に強いプログラムを作るだけだったら全く研究としては意味なしです。
っていうか、うさぴょんレベルの強さですら、1から始めたら、普通、
卒研で作れるようなもんじゃないですよ。
成熟しきってないのに同意 GPWにおいでませ
622 :
デフォルトの名無しさん :04/10/17 19:34:54
>>620 将棋の世界って遅れてると思うんだよね。
将棋やってる人達はCS(コンピューターサイエンス)とかかじった程度で、
CSでやられてる最新の手法を全然取り込んでない。
>「読みの深さを局面の実現確率で打ち切る」
ってのも、CSやってる人なら普通に思いつくことだろうし。
まあ、それはそのうち論文でも投稿しときます。
SingularExtensionなんてのも、素人芸にしか見えなくて
もうちょっと根拠ありの手法を考えようよって思うし。
根拠ありの手法が必ずしもうまく行くわけではないことはわかるけどね。
まあ、将棋とかチェス独特の手法ってのも必要で、
詰め将棋での、分岐の数を調べるのはなるほどって思ってるけど。
623 :
デフォルトの名無しさん :04/10/17 19:45:32
ビジネスで使いたい人以外は 将棋大会も、評価関数はみんな共通でやればいいのに。 今は評価関数のチューニング具合で 中盤のよしあしが決まってると思う。 もちろん、序盤のデータベースも公開。 人間の知識を使ってる部分は全部公開するべきでしょう。 将棋パラメーターチューニングコンテストがしたいなら、 それでもいいんだけどね。 アルゴリズムで競った方が頭をフルに使えて面白いと思うんだけどな
>>622 で、肝心の今の将棋に欠けているCSでやられてる最新の手法
を書き忘れてるわけだが。
東大や東工大や筑波大の情報関係の修士卒とか、あるいは博士卒とか、 現在進行形でAlberta大学で博士論文書いている人とかに向かって 「CSとかかじった程度」とは良く書けたもんだ。 どこの大学の教授かな?
622はCSをちょっとかじって 自分ができる(できた)気になったんだろ、大目に見てやれよw
627 :
デフォルトの名無しさん :04/10/17 21:10:27
>>624 論文にするから書けないって。
さすがに修士の学生には負けないよw
大学名とかは関係ない。
実力の問題。
実際のところ東大博士の半分以上は役に立たないし。
>>625 2004年に提出された論文の中で、
君が素晴らしいと思う論文を教えてくれ。
そう簡単には見つからないと思うよ。
さすが2chだなw
629 :
デフォルトの名無しさん :04/10/17 21:18:16
まあ、最新の手法を教えられない代わりに お詫びにネタ振りしときますんで、それで勘弁してね。 中盤に限った話ね。 「探索をすると本当に強くなるのか?強くなるとすれば、なぜ強くなるのか?」 「10手読みと、20手読みと、30手読みと・・・10000手読みを比較する。 強さはどのように推移するか?」 「Singular Extensionは有効か?なぜ有効か?」 考えてみてね こっちは純粋な質問 「詰め碁問題が提示された時、その問題が何手詰めかを予想する事ができるか?」 どうなのか? 探索をして解答を見つけてしまえば、予想じゃなくて答えがでちゃうけど 探索しないで予想する事はできるのかね? まあ、それが分岐の数なのかな・・・
>>627 2004年のコンピュータ将棋の論文に限るの?
GPWを待たないと分からないけど、今のところないね。確かに。
まぁ、それだけでかい口を叩いて貰ったので、来年かな?の論文は楽しみにしてみましょう。
631 :
まともに動いてない ◆/8LpUMqVAk :04/10/17 21:22:28
かつてのコンピュータ将棋番外編スレみたいになってきたな。
>>629 形式的にきちんと証明しようとすると面倒な課題だなぁ。
・評価関数の誤差
・探索による評価関数の誤差の吸収
と言うあたりをきちんと定式化すればいいんだろうけど。
将棋の場合、さらに前向き枝刈をしているから、
・前向き枝刈による誤差の蓄積
も絡んでくるのか。面倒だなぁ。
そして、10手…20手…10000手読みの話になると、さっきの話に絡んで、
log読みの深さ と勝率が比例する、と言うような感じの予想になるけど、
第一段階で形式的な証明が出来てないとlogだとは言えないしなぁ。
SingularExtensionが有効な分けは、評価関数の誤差が大きい局面を見つけだして、
その局面に対して深い探索を行うことで評価関数の誤差を抑えることができるから。
Singularな局面は評価関数の誤差が大きいと予想されるわけだけど、これも
証明は難しいね。
ここまでの議論を正しいとして、
将棋の場合、Singularな局面が多すぎるので、評価関数の誤差の大きい局面を
見つける方法として適当でないのでSingularExtensionはあまり有効ではない。
わけですね。
詰め碁問題が何手詰めかは、予想不可能と言うか、そもそも詰め碁の問題は、
詰将棋と違って何手詰めとか余詰とかの定義がないので、探索しても何手詰め
だとは言えないと思うんだけど、どうかな?
633 :
デフォルトの名無しさん :04/10/17 21:47:00
>まぁ、それだけでかい口を叩いて貰ったので、来年かな?の論文は楽しみにしてみましょう。 そろそろ世代交代だと思うので、楽しみにしててね。 詰め碁じゃなくて、詰め将棋だった・・・ ごめんなさい。
なんか楽しみでなくなってきた
んで、でかい口を叩く622の論文は結局世に出ないまま終わるのだろう。 質問の2つは両方とも経験則で言われているだけだろ。 それを自分の論文のアイデアで証明できる、と言いたいだけなんじゃないか? 2chなんかで自慢話をする時点でそいつは机上の空論の可能性大だ。
636 :
デフォルトの名無しさん :04/10/17 22:01:25
>まぁ、それだけでかい口を叩いて貰ったので、来年かな?の論文は楽しみにしてみましょう。 楽しみにしててね。 詰め碁じゃなくて、詰め将棋だった・・・ ネタ振りに関しては、数学的な証明は目指しても無理でしょう。 いろいろ考えてもらう事で、誤った道に踏み込む事を防ぐのが目的なんで。 はたして探索によって誤差は吸収できているのか? 誤差が吸収できるとすれば、めちゃくちゃな評価関数でも 探索する事で強くなるのか? 探索すればするほど強くなるのか? Singular Extensionに関しては 「評価関数の誤差」がポイントなんだよね。 でも、評価関数の誤差ってわかるのかな? わかるなら、評価関数修正アルゴリズムができちゃうね。 まあ、本当はできないんだけど、どうしてできないのか? ってとこがポイントかな。
637 :
デフォルトの名無しさん :04/10/17 22:04:31
>質問の2つは両方とも経験則で言われているだけだろ。 経験則でなんて言われてるの? >それを自分の論文のアイデアで証明できる、と言いたいだけなんじゃないか? 経験的にわかってて、それが正しいなら、証明したって 強い将棋できないじゃんw >2chなんかで自慢話をする時点でそいつは机上の空論の可能性大だ。 可能性推定アルゴリズム?
638 :
デフォルトの名無しさん :04/10/17 22:08:36
>log読みの深さ と勝率が比例する、と言うような感じの予想になるけど、 探索木の深さと強さ(勝率?)が比例する? まさかまさか。 深さに対してlogで効いてるかもよ。 まあ、俺もわかりません。 めちゃくちゃな評価関数に対して 探索と強さの関係を調べる研究をしてみてはいかが?
つくりかけのソースさらした某のほうが100倍建設的に一票
まぁ調べるまでも無くランダムな評価関数だったらいくら読みを深くしても強くならないけど(w めちゃくちゃというのは、そこまでめちゃくちゃでいいのかな? さすがに、勝ちの局面に対して勝ちの評価値を返すことぐらいは最低でも 評価関数の必要事項だろうから、それだけの評価関数で、 強さ(とりあえず勝率)は読みの深さに対してどうなるか? は調べて見ると面白いだろうね。
ランダムな評価関数=639 クズもつもれば、ゴミとなる
642 :
デフォルトの名無しさん :04/10/17 23:13:53
今日初めてダウンロードしてプレイしてみたけど・・・ うさぴょん強すぎまーす。 将棋はもうソフトのほうが強すぎてつまんないね。 モノポリーとかのほうが面白いや。
643 :
デフォルトの名無しさん :04/10/17 23:19:09
例えば・・・ f(盤面、持ち駒) を評価関数だと思って 自分の王がとられた -1 相手の王をとった +1 それ以外 0 だとする。 最初の一手を考えよう。 深さ1の探索では、王手されたら逃げる。 偶然、王手したらとる、ができる。 深さnの探索では、n手目以内に王手ができそうだったら突撃 n手目以内に王手されそうだったら逃げる、となる。 評価関数で何か目標を指定するとそこへ接近したり、 退避したりする。 動物でいう視界みたいなもんである事がわかる。 次に、ノイジーな評価関数を考える 自分の王がとられた -1 相手の王をとった +1 それ以外 ランダムに-0.1か+0.1 としよう。 以下略(枝狩りをした場合の考察もどうぞ)
644 :
まともに動いてない ◆/8LpUMqVAk :04/10/18 00:38:11
かぶりませんように…
>>643 :
これくらいは仮定していいよね。
f(盤面、持ち駒)は
・ノードの展開順序によらず同じ(盤面、持ち駒)に対して常に同じ値を返す。
・ノードに依存する分岐数や詰め将棋の探索で使われる証明数・反証数の概念を含んでいる。
・盤面に手番は含まない。
たとえば
自分の王がとられた -1
相手の王をとった +1
それ以外 局面のハッシュ値を(-1,+1)に変換
などとする。
こんなことをすると終局の1手前の評価値と本当の評価値が無関係になってしまうが、どうせ中盤では端まで行かないから棚上げしておく。
この評価値でMINMAXをす 略
もう十分強くなったんだから多少不利になったとしても 振り飛車めがけて特攻するような重み付けしてよ。 このままじゃ一生コンピュータ将棋で遊べないよ。
>>644 勝手に読み違えてました。
それ以外 ランダムに±0.1のどちらか
なのね。
すんません。
で、±0.1は本当に何ら意味を持たないノイズであれば0として扱って問題ないはずだが…。
もしそれぞれ勝つかも負けるかもという状態ならそれらを考慮して…証明数・反証数の探索の自然な拡張を目指してる?…んなわけないわな
647 :
デフォルトの名無しさん :04/10/18 10:11:45
>>646 枝狩りの意味を考えてね。
証明数は今はいらない。
>>638 >>632 では、(log 読みの深さ) と 勝率(強さ) が比例すると言ったので、
言っていることは深さのlogと何も変わらないんだが…
そう読んで貰えなかったのかな?
649 :
まともに動いてない ◆/8LpUMqVAk :04/10/18 21:36:31
>>647 :
>枝狩りの意味を考えてね。
無駄に忙しいので続きは数ヵ月後に。
wdoorに久しぶりに繋いでみますと、全部「x1 connected」になってました。 あまりにも長い期間game waiting状態には出来ないということでしょうか。 wdoor事務所さんへ 現在動作しているサーバーとまとめページのサーバーの仕様がずれて来ているので、 手が空いたときで結構ですから更新して頂けませんか。
651 :
デフォルトの名無しさん :04/10/18 22:48:05
>>648 ごめんごめん、想像で書いちゃった。
じゃあ、logやめて「深さに比例するかもね」ってのに修正。
まあ、どっちでもいいんだけど。
またまたネタ振り
評価関数
自分の王がとられた -1
相手の王をとった +1
自分で劣勢だと思う曲面を5000個適当に列挙したもの -1
自分で優勢だと思う曲面を5000個適当に列挙したもの +1
それ以外 0
2*5000個入力すれば案外強いと思うんだけど、どうだろ?
>>650 gps将棋@wdoorですがgps側の問題でこけてたので復活させました.
とりいそぎ
653 :
まともに動いてない ◆/8LpUMqVAk :04/10/19 01:30:32
>>651 書き込みのクオリティが低いので相手にする気がおきなくなりますた。
651も含めて、以後、おそらくスルーします。
655 :
まともに動いてない ◆/8LpUMqVAk :04/10/19 08:07:43
先人の残した全ての結果が無に帰するぐらいの万人が素晴らしいと思う論文を待ちましょう。 私はまともに動いてないプログラムのデバッグに勤しむよ。
656 :
デフォルトの名無しさん :04/10/19 09:30:22
貪欲に学習してくる将棋プログラムってある? 相手の有力手をパクるとか震え上がるような向上心見てみたいな。
>>656 評価関数のパラメータを自動調整するのは結構一般的だよ。
ただ、どの一手が有力手だったかを適切に判断するのは難しい。
学習させすぎると変な癖が付いて弱くなっちゃうし。
>>657 人間もそうなんだよね、へたがうつるとか言われて相手にしてもらえない俺(W
>>657 学習のパラメータと評価関数の決定が難しそうですね。
逆に、それさえ出来れば、自動的に強くなるプログラムを作ることは比較的簡単ではないでしょうか。
今、kiki table(駒の利きのテーブル)の実装をやってます。
将棋のコアの部分は出来ました。
中途半端なものをうpすると怒られるので、
ある程度ちゃんとした思考ルーチンが出来てからうpします。
×将棋のコアの部分は出来ました。 ○将棋のコアの部分を作り直しました。
連続カキコですみません。 kiki table は、yss のページを参考にしたものであって、オリジナルではありません。
>>659 はやくwdoorに繋げるようにするのだ(w
>>662 すみません、ネットワークプログラミングに弱いので、しばらく勉強させて下さい。
Java版拡張モードで対戦可能なチャットクライアントの行き場の無い駒が作れる不具合は治っていなかった。 ・王が動かせない(直した)。 ・3段目の桂が進まない(直したが未確認)。 今日はもう寝ます。 まともに動いてないプログラムはなかなかまともに動いてくれないな。
666 :
論外な人 ◆/8LpUMqVAk :04/10/20 08:19:37
CS(コンピューターサイエンス)でやられてる論文にするから書けないという最新の手法を CSとかかじった程度の将棋やってる人達は全然取り込んでないという奇妙な論理を展開されると、 困ってしまうね。
>>665 そこまではまったら、一旦仕切りなおして一から書き直したほうがすっきりするかも
「まとも」さんって結構前から時間見て少しずつ書いてたよね。 それでも未だそういう状態ってことでちょっと気になったんだけど。 将棋のプログラム書いている人たちって駒の動きをクラス(或いはそれに類似した構造)にしてないのかな? 確かに駒クラスを用意するやり方は思考ルーチン書く際には冗長で遠回りな感じもすると思うけど、 最初に一つ一つの駒がきちんと実装されていれば動けない場所に転進することもないだろうと思うわけで。 「トリップg1」さんも駒の利き筋を配列で持ってたし、皆さんそんな感じなんですかね。 #うさぴょんのソースくらい読んでみるべきか。 ##とと、一応書いておくと、私は掻い摘んでヲチしてるだけなんで将棋は門外漢。
>>668 私は根っこがアセンブラ屋なもんでクラスってなに?って感じです(w
クラスにちょっと触れてみた印象は、むっちゃくちゃ冗長なプログラムって感じかな
メンテナンス性はたしかにいいんでしょうけどねえ
極限の高速化を求める場合はだめんなんじゃないのぉ?って感じ
(あくまでも印象ね、さわりしかいじってないから)
>>669 私ゃ根っこが論理回路屋なC++屋ですw
あれだ、一度(思考部分は兎も角)C++で作ってみてからクラス云々言ってみろって感じで砂。
>>669 アセンブラでも作れると思いますけど、駒の利きを配列化する以上の効率的な方法を御存知でしたら
是非教えてください。
あ、もちろんその時には、(御希望でしたら)special thanks to に貴方のコテを載せます。
あと、アセンブラでもCでも、コアの部分(駒を動かしたりする部分)とインタフェース部分は
分けた方が後々便利だと思います。
672 :
まともに動いてない ◆/8LpUMqVAk :04/10/20 10:58:05
>>667 :reiさん
それも考えているけど…まだ収拾がつくかもしれないから
>>668 さん
「こびと」さんが書いてくれたりするよね。
それも大抵間違ってて。
将棋のプログラムで駒の動きをクラスにしはじめたのが、今のプログラム。
つまり勉強不足です。
最初から手抜きして一つ一つの駒を適当に実装してたから、そのツケ。
というか本業が大変疲れるのも一因かも(今月また一人鬱病で退職するのがいるらしい)。
そういう私はC言語屋です。
673 :
デフォルトの名無しさん :04/10/20 12:12:04
将棋やってる人はコンピューターサイエンスで開発された手法を使ってない。
だから、将棋にただ使うだけで論文になる。
だから、ここでは公表しない。
なんで奇妙な論理なんだろう?
>>664 >最善手を外す確率が小さくなったら打切なんてどう?
まあ、明確な意図に基づいてアルゴリズムを設計してる点は評価できる。
p(f(x)=y)が計算できるという仮定はどうかと思うけど
まあ、それもいいや。
あとは、どうやって計算してるかだけど・・・
あの論文読みにくすぎるので要約して欲しいな。
実験結果から読もうとしたら、わけわからん。
674 :
論外な人 ◆/8LpUMqVAk :04/10/20 15:40:51
>>673 :
すまんすまん、てきとーに書いてもた。
675 :
デフォルトの名無しさん :04/10/20 16:55:54
ヽJ(`Д´)しノ そんな悪い子はウチの子やないっ!出て行きなさいっ! (ノД`) アーンアーン、出て行ってやる〜 ヽJ(`Д´)しノ 待ち!その服はオカーサンが買うてやったんや!置いてき! (ノД`) アーンアーン(服脱いで出て行こうとする) ヽJ(`Д´)しノ 待ち!そのパンツもオカーサンが買うてやったんや!置いてき! (ノД`) アーンアーン(パンツも脱いで出て行く) __[警] ( ) ('A`) カーチャーン・・・・ ( )Vノ ) | | | |
676 :
デフォルトの名無しさん :04/10/20 16:56:21
>>673 >p(f(x)=y)が計算できるという仮定はどうかと思うけど
うーん、たしかに将棋では難しいかもね。
打切に興味ありそうだったから紹介してみたんだけど。
論文執筆期待してるよ。できればそのアイデアを組み込んだ革新的な将棋プログラムもw
>>670 ということはクラスを使うと高速化に有効だということですかい?
あおってんじゃなくて素朴な疑問です
私のプログラミングスタイルは外枠とアルゴリズムはVBで開発速度優先で作ってしまって
本気の高速化が必要なところをアセンブラなりでチューニングというかんじですが
まあ、速度が十倍になっても読みの深さがせいぜい一段深くなるくらいだから
最近のPC使ってるとそこまでやる気はあんましおきません
>>678 煽りじゃないけど、私ゃ高速化に有効なんて一言も書いてないし。
思考部分を(駒の詳細や実装に煩わされずに)シンプルに書ければ
カルネージハートじゃないけど部品の独立性を高められるかな、と。
で、実例を提示しないでは机上の空論に終わってしまうのでせめて
「一度作ってみてから」出直そうかな、と思った次第。
ま、お題目をぶち上げて自分を追い込むのも手なんですが、根が
現物志向なんで物がないと安心できないもんで。
そうそう、実際問題として高速化のためにクラス化したことはありませんが、
クラス化して問題を整理していったら結果的に早くなったことはあります。
#ベースになったプログラムが蛸だったのは内緒。
お久しぶりです.
>>650 まとめページ更新しました.
http://wdoor.c.u-tokyo.ac.jp/shogi/protocol.html おかしなところが残っていましたらご指摘お願いします.> みなさま
;;; 多少頑張ってみましたが,状態遷移は図がないとやっぱり分かりにくいですね
;;; あと,wiki にすれば良かったかな..
>>663 - RS232Cで指せる様にしてから,K-Shogiをブリッジに使う
- stdin/stdout でやりとりするプログラムにして gps用perl スクリプトをちょっ
と改造してつなぐ
などの抜け道があるようです.(自分では確認してませんが)
動けばCなどでネットワークプログラミングをするより簡単かと.開発頑張って下さい.
682 :
まともに動いてない ◆/8LpUMqVAk :04/10/21 03:18:48
>>680 私の場合、クラスを使うのはオブジェクト指向の勉強を兼ねて、行く行くは本業の開発効率を高めることが目的です。
だからかまだまだセンスの悪い、バグに発展しそうな部分がたくさん残っていそうです。
トップクラスのソフトが名人を倒す頃になってもなお自分のプログラムをこねくり回している気もしますが、
まあ気長にボチボチと続けるつもりです。
>>681 お久しぶりです。
まとめページ更新感謝です。
鬱病じゃないけどまた一人会社を辞めるみたいで、日曜プログラミングに充てられる時間が更に減りそう(泣)。
とりあえず次世代に期待。
>>681 >- RS232Cで指せる様にしてから,K-Shogiをブリッジに使う
RS232Cって、懐かしいですね。
一応、ソケット通信は出来るようになったのですが、ソケット通信には対応していないのでしょうか?
あと、差し支えなければプロトコルも教えて頂けませんか?
>- stdin/stdout でやりとりするプログラムにして gps用perl スクリプトをちょっ
>と改造してつなぐ
UNIXなどで、ソケットをあたかもファイルハンドルのように使うということでしょうか?
>などの抜け道があるようです.(自分では確認してませんが)
>動けばCなどでネットワークプログラミングをするより簡単かと.開発頑張って下さい.
一応動きますが、二歩を禁止したり千日手ルールを組み込んでいなかったり、
まだ欠陥が多いです。
二歩防止の解決方法は分かっている(指導教官から教わった)のですが、
千日手ルールは同一局面を4回繰り返すことなので、始まりからの全ての状態を
保存する必要があって、少々大変です。
解決方法は分かっているのですが、それを実装する気力が低下している状態で、
はっきり言ってメンヘラ状態なので、どうか生暖かく見守ってやって下さい。
684 :
デフォルトの名無しさん :04/10/21 18:40:02
>千日手ルールは同一局面を4回繰り返すことなので、始まりからの全ての状態を >保存する必要があって、少々大変です。 あははw
686 :
まともに動いてない ◆/8LpUMqVAk :04/10/21 19:36:13
連続投稿すまぬ。
>>683 : ◆g1oZzVyfEE
ソケット通信プロトコルについては
>>3 を参照。
>千日手ルールは同一局面を4回繰り返すことなので、始まりからの全ての状態を >保存する必要があって、少々大変です。 俺も、あははw 将棋のルールぐらい知ってから語ってください。
>>687 >将棋のルールぐらい知ってから語ってください。
もっと詳しく。
>>687 あっしも知りたい。
・同一局面が4回現れた場合千日手となり、無勝負指し直しとなる。
・(連続王手の千日手の禁止)連続王手での千日手は王手している側が指し手を変更しなければならない。
これじゃいかんの?
>>687 は多分、20年以上も前にルール変更があった事を知らないのです・・・
692 :
◆g1oZzVyfEE :04/10/21 22:39:04
>>684 >>687 昔は、「千日手=同一手順3回」でしたが、それだと永久に終わらない場合が存在するので、
1983年4月1日から「同一局面4回」に変更されました。
きっかけは、1983年3月8日に行われた名人戦挑戦者決定リーグ(現在のA級順位戦)第8戦
米長邦雄−谷川浩司 戦でした。
証拠→
ttp://www.webspace-jp.com/~mozu/mozuiro/moromoro/senkou.html 数学的証明は数学板で聞いてみて下さい。
日本将棋連盟→
ttp://www.shogi.or.jp/osirase/qa.html >2003年11月に日本将棋連盟より発行された「将棋ガイドブック」という本にルールが一通り掲載されています。
>お近くの書店で購入されるか、こちらのページでご注文願います。
証拠を2つ挙げましたが、将棋板でも聞いてみて下さい。同じ答えが返ってくるはずです。
当方は将棋の(中途半端な)素人ですが、これくらいのことは知っています。
人を笑う前に、ちゃんと正式なルールを確認してソースを出すくらいのことはして下さい。
はっきり言って、本当のルールも知らずに思い込みだけで安易に人を嘲笑う人って、すごく腹が立ちます。
メンヘルのせいもあって異常な眠気に襲われて、あれから進展なしです。
期待されている方々、本当にすみません。
>>691 変更前のルールってこれですか?
将棋で、双方が同じ指し手を繰り返す状態。三度繰り返した場合、無勝負として指し直
しとなるが、王手の連続である場合、攻め方が指し手を変更しなければならない。千遍
手。三省堂『大辞林 第二版』
たしか、同一局面が無限に現れるのに異なる指し手を指し続ける事が出来ることが、ある
対局で示されたと読んだけど。
>>692 イライラしたってしょーがないさ。ちゃちな煽りは鼻で笑いつつソースを貼る
くらいの度量がないと(`・ω・´)
ま、あせらずやりましょーや。
# 竜王戦も始まったことだし俺もそろそろたまってる宿題かたずけんとなぁ…orz
>>695 煽りだったら別にいいんですけどね。
本当の勘違いだったらプログラムそのものに影響が出ると思ったので、
つい本気で書いてしまいました。
>>696 本気なら、軽軽しくメンヘル云々なんて書くな。
お茶ドゾー(・∀・)つ -==旦
699 :
まともに動いてない ◆/8LpUMqVAk :04/10/22 01:32:36
では、発端の投稿
>>683 :に戻って
>RS232Cって、懐かしいですね。
>略
>あと、差し支えなければプロトコルも教えて頂けませんか?
RS232Cプロトコルも
>>3 のTCP/IP通信プロトコルのページの下の方にリンクがありますよ。
>UNIXなどで、ソケットをあたかもファイルハンドルのように使うということでしょうか?
否。Perlのpipe, fork, exec関数を使ってサーバー⇔Perlスクリプト⇔自前のプログラムとすることだと思う。
「サーバー⇔Perlスクリプト」間はソケット、「Perlスクリプト⇔自前のプログラム」間はパイプ。
で、後者が出来るようにPerlスクリプトを改造する必要があると思う。
これで如何でしょう?
>> 683
>一応、ソケット通信は出来るようになったのですが
お,早いですね.そしたらまず
>>3 の一つ目のリンクのCSA公式プロトコルを実
装すると,GPW杯にも出られるしwdoorにもつなげられるのでお勧めかな.
wdoorにつなげるなら拡張プロトコルの方が楽しいけど最初はちょっと面倒だ
と思うので.
RC232Cは,今までのコンピュータ将棋選手権で使われていた通信方法だったりします.
そのうち
>>3 のネットワークプロトコルに移行しそうですが.
あと,二歩はともかく千日手は後回しにしても充分対局を楽しめるのではないかと.
>>699 >「サーバー⇔Perlスクリプト」間はソケット、「Perlスクリプト⇔自前のプログラム」間はパイプ。
>で、後者が出来るようにPerlスクリプトを改造する必要があると思う。
その意味でした.自前プログラムを起動する時のオプションの与え方くらい改
造すれば動くかなと思いますが未確認です.ただ,
>>683 の方はもうソケット
対応されたようなので,自前でやった方が早いかもしれないですね.
702 :
◆g1oZzVyfEE :04/10/22 07:17:06
おはようございます。
>>697 実は、精神的に問題を抱えていることは本当で、通院もしております。
「メンヘル」という言葉がふざけた印象を与えてしまうとは知りませんでした。
すみません、以後気をつけます。
>>699 >RS232Cプロトコルも
>>3 のTCP/IP通信プロトコルのページの下の方にリンクがありますよ。
ありがとうございます。後で読んでみます。
>否。Perlのpipe, fork, exec関数を使ってサーバー⇔Perlスクリプト⇔自前のプログラムとすることだと思う。
>「サーバー⇔Perlスクリプト」間はソケット、「Perlスクリプト⇔自前のプログラム」間はパイプ。
>で、後者が出来るようにPerlスクリプトを改造する必要があると思う。
>
>これで如何でしょう?
それはいい考えですね。
実は、C言語で Winsock で通信できるプログラムを作ってしまったのですが・・・
ちなみに、HTMLファイルなどのダウンロードくらいなら出来ます。
>>700 実は、卒業研究の関係もあって、「kiki table」(yssのHPを参照)の実装をしているところです。
早く wdoor にも繋げてみたいです。
703 :
デフォルトの名無しさん :04/10/23 15:48:11
がんばらない みつを
頓珍漢な質問かもしれませんが 通信部分をDLL化して共有するといった試みはなされていないのでしょうか 各人で作ってねというのは酷く無駄なようにも見えるのですが
問題は、開発言語もばらばらなので、それでも共通で使えるようなDLLは書くのも面倒だということ。 いっそ、思考部分だけをプラグインみたいに導入できるGUIを作れればいいんだけどね。
>>705 >>706 Windows版では、思考部分だけを導入できるGUIをソース付きで配布してますよ。
都万さんのCSA将棋がそれです。
「うさぴょん」のGUI作ったのは選手権に出て2年目以降だったし、
今でも通信の実装は面倒なので、そのGUIを使ってます。
>>706 要望多いならつくりましょか?(bulbulに足すだけですが)
CSA反転表示くらいほしいもんだ
それいるのか?<反転表示
あればあったで便利
反転表示って、上下引っ繰り返すってこと? デバッグにはよさそうだね。
713 :
デフォルトの名無しさん :04/10/26 16:10:42
すごい初心者的な質問で申し訳ありませんが・・・ 金で香を取って飛角の田楽刺し、という局面があるとするじゃないですか この時、コンピューターは 1.金で香を取った……香得 2.金を取り返された……金香交換の駒損 3.香を打って飛角両取……多分駒得 と一手ずつ深く読んでいくんですよね 候補手を一定数に絞る仕様になっていると、2.の段階で損になる、ということになって 候補から抜け落ち、この手順を選択しない、ということになったりしませんか?
>>713 そういう風に作ればそうなりますね。
なので、そういう風にならないように工夫するわけです。
716 :
まともに動いてない ◆/8LpUMqVAk :04/10/27 07:44:13
wdoorでの実現で問題となった曖昧な部分と空行の送出とかが改定された模様。 URLを削ると改訂前のが出るので比較が楽ですな。
717 :
◆g1oZzVyfEE :04/10/28 01:13:08
相変わらず完成度が低くて呆れ気味。 #でもお節介焼きは指摘しまくるけどw 詳細は、Upload板の55参照で。
指摘の追加 ・pコマンド 正しく引き数を二つ取るように修正してみたが、駒を相手の駒として置いてしまう。 勿論二歩の判断もおかしなことになっている。 ・nコマンド 成れない。 にも関わらず、香が最奥まで進軍できてしまう。 ・コマンドの大文字小文字の判断 腐ってる。大文字でコマンドを入れるとコアを吐く可能性大。 #試す人はくれぐれもご注意を。 其々の指摘をするのはこちらの勝手なので一向に構わないのだが、 最低限動かしてみてから公開して欲しい。 この最後の指摘(最低限動かしてみろ)は二度目なので、次はないだろうなw
720 :
デフォルトの名無しさん :04/10/28 17:09:28
722 :
デフォルトの名無しさん :04/10/29 00:44:10
同梱しての再配布はオケーという解釈でいいんでしょうか? あるいは、ダウンロード用に直接リンク貼っていいですか?
>>722 普通はそういう解釈になると思います
直りんはアプローダーのアドレスが変わったときにトホホになるよ(w
つーか、記事数制限でそろそろ消えますぜ。 #今一番古いのが6番? 後6回書き込まれたらアウト。
>>724 うげ、そんなことになってるとは(大汗
とりあえず記事数制限増やしました
>>725 あやまれ、1〜5にあやまれ!! (AA略
ま、いらないファイル(旧世代とか)もないわけじゃないから テキトーなところで、今回の駒画像みたいな汎用性のあるものについては 別の場所に保存してリンクを貼っといてくれれば嬉しい あぷろだはファイル置き場とは違うからな
うさぴょんさん応援してますよ といいつつインターネット将棋でいまだ勝ち星ないのでした 残念
729 :
◆g1oZzVyfEE :04/10/29 22:41:38
すみません、卒研でライセンス(特許・その他)に関係する(かも知れない)プログラムを、 将棋プログラムの御専門の先生と共同開発している関係上、 あまり高度なプログラムのうpは差し控えさせていただきます。 これは逃げではありません。来年の9月までに(もし)特許を出願できれば、 その後に(同一トリップで)公開する予定です。 でも、出来るだけバグの少ないプログラムをうpするようにします。 今までバグを指摘してくれた方、感謝と共にお詫びしますm(._.)m
>特許を出願 このスレから盗めるだけ盗んで特許取得でつか
731 :
デフォルトの名無しさん :04/10/30 00:07:11
最近大学も特許とれプレッシャーがかかりつつあるからしょうがないのかもね
ここでの意見を利用する代わりに研究の過程は公開しますってことなら こちらもアイディアも出すに吝かじゃないけど、 貰うだけ貰って1年間出しませんってのは確かに鳥滸がましいねぇ。 特許出願となれば(ここではないとはいえ)公開するのは当然だから、 「公開する予定です」なんて台詞は逃げ口上にしかならないね。 まぁ、恥を掻かない程度にいいものができることを期待していますよ。
もしかしてコンピュータサイエンスの中の人なのか?
ここで使える意見とかあったっけ?
まあサブマリン特許に苦しめられないようにアイデアはなるべく公開の方向でいきましょ
737 :
デフォルトの名無しさん :04/10/30 04:58:18
>>729 特許だけではなくて、研究の場合も
発表するまでは非公開にするべきなんだけどね。
実験データをコンピューターから引き出されて、
そのデータで先に発表されて、研究おじゃんって話もあるし。
738 :
デフォルトの名無しさん :04/10/30 05:01:33
>あまり高度なプログラムのうpは差し控えさせていただきます。 重要な部分を除いたバージョンをアップすると意味かな? だとしたら、それもお奨めできないな。 間違って、開発版とかアップした時に悲惨だからね。
739 :
デフォルトの名無しさん :04/10/30 09:36:40
将棋の専門の先生と共同開発をやるのなら、あんまり幼稚な質問をここですんな。 レベルが低すぎる。その先生に聞きなよ。 あんなレベルの低いプログラムしかかけないのに、特許なんてむりだよ。
740 :
デフォルトの名無しさん :04/10/30 11:12:38
いや分からんぞ。特許は取ったもん勝ちだからなw
うむ、レベルなんか関係ないからな。
742 :
デフォルトの名無しさん :04/10/30 13:51:16
>あんなレベルの低いプログラムしかかけないのに、特許なんてむりだよ。 それは言えてる。
いや、特許は実際に使えるかどうかとは関係なく取れるからなあ
日本のはそれなりに審査されるだろ
745 :
デフォルトの名無しさん :04/10/30 23:18:05
まあスレが盛り上がったからいいんじゃないですか? 何か面白い話題ないですかね?
746 :
まともに動いてない ◆/8LpUMqVAk :04/10/31 00:21:20
>何か面白い話題ないですかね? ない。 つまらない話ならちょいと…。 私のまともに動いてないプログラムなんですが、なんとか詰みまで辿り着いたものの%TORYO辺りがやっぱりまともに動いてない。 ヌル ゚になる直接の原因は分かっているのだが、あまりに騒々しい環境なんで調べる気が起こらない。 深夜は静かで善いけれど反動が本業に差し支えてしまう。 皆さんの開発環境は静寂ですか?
>>746 >深夜は静かで善いけれど反動が本業に差し支えてしまう。
とりあえずプロ倒して世間に名を売って
会社に将棋開発部門を新設してもらえば無問題。
748 :
デフォルトの名無しさん :04/10/31 00:54:19
749 :
まともに動いてない ◆/8LpUMqVAk :04/10/31 01:34:07
騒々しい原因は部屋にあるテレビ。 耳の遠くなった父が大音量で観るんのだが、「五月蝿い」と言うと、「何でも自分の思い通りになると思ってたらあかんぞ」って返される。 老いても父だし、楽しみを奪うのもなんかなあと思う。 アンテナ線の引き回しが面倒だけど、テレビの移動を提案してみる。多分、駄目っぽい。
750 :
デフォルトの名無しさん :04/10/31 02:19:59
赤外線でスピーカーに飛ばすやつ買えば?
指向性スピーカーを買って上げるとか 高音質なヘッドフォンを買って使ってもらうとか
スピーカー内蔵のマッサージチェアなんてのもいいかも知らん。
753 :
まともに動いてない ◆/8LpUMqVAk :04/10/31 02:50:56
>>750 :
電波で飛ばす奴ならあるんですけど、私が観たい番組もあって、しかし間があると速攻でチャンネル切り替えられて、
運良く元に戻るかもしれないので結局観てしまう(伏線ばかりで結末の分からない映画、ドラマ、クイズがいっぱい(泣))。
そういう訳で電波で飛ばす奴は使ってない。
結局、自業自得。 つーか、自分を納得させる言い訳?
いったい何のスレだここは?
756 :
まともに動いてない ◆/8LpUMqVAk :04/10/31 03:06:44
>>754 :
>結局、自業自得。
>つーか、自分を納得させる言い訳?
多分、言い訳。
将棋にもプログラミングにもほとんど関係ないつまらない話ですんません。
棋泉入れてみたんですが、これの局面検索ってリニアサーチなんですね…。 局面にインデックスつけるような手法に興味あるんですが、 チェスとか他のゲームも含めて、読んどけっていうのがあったら情報ください。
>>758 ハッシュだと同一局面の検索はできても、部分一致局面の検索は難しいですよね。
棋譜データベース向けの手法で何かないかなと。
760 :
デフォルトの名無しさん :04/11/07 16:27:36
k-meansとかは?
>>760 k-means ですか。その方向考えてませんでした。
局面間の距離をどうするかとか、初期点をどうとるのか、とかはまあ考えるとして、
そもそも k をいくつにとれば、使い物になる類似局面がでてくるのかが謎。
でも実装できちゃえば、(人間による)戦形分類との比較なんかしたりして面白そうです。
762 :
まともに動いてない ◆/8LpUMqVAk :04/11/08 10:40:47
>>761 :757さん
kの求め方ならこんなんありますけど…
クラスタ数Kをどうやって決めるか
・事前の知見がない場合には、様々な数学的、統計的基準を用いる。
・ただし、これらによる計算結果を妄信してはいけない。必ずその数Kの妥当性を知見に照らして吟味することが必要。
代表的手法
・群内距離・群間距離法
・情報量基準法
役立ちそうにないっぽい
特定の駒が特定の場所にある確率とかは?
ハフマン法みたいに一番特徴が現れやすい駒の配置に大きなビットを 割り当てて全体を64bit程度のKeyにして局面と同時に登録してソートして やれば高速に検索できそうな希ガス。 王には4bit、香には1bit、とかで。
765 :
デフォルトの名無しさん :04/11/08 11:38:11
766 :
デフォルトの名無しさん :04/11/09 07:17:26
・盤面を(正方形5×5)で9個に分割してハッシュ化(逆方向も含めれば18個) ->部分的な形 ・盤面を(厚さ1〜3のリング)で分割してハッシュ化 ->通常予想される大駒の利きや王等の位置関係 ・盤面を(厚さ1〜2の斜線)で3(中央)×2(反対)個をハッシュ化 ->通常予想される大駒の利きや王等の位置関係 ・大駒,玉の位置関係でハッシュ化 ・持ち駒の有無 ・戦形の基本図の有無
767 :
デフォルトの名無しさん :04/11/09 07:31:55
ケータイバージョンもつくってくれよ コンピュータは強くていいから
>>762 さんくす。やっぱり一大研究になっちゃいそうですね。
>>763 それが王道かと。確率にするかどうかはともかく。
>764 ほぼ同案が"将棋 盤面 ハフマン"でぐぐると出てきますね。 ただ局面をどんなに小さくエンコードしても、検索は最善で O(n) なのが痛い。 (n は全局面数。ヒットした局面数ではなく。)
せっかく作ったアルゴリズムが 常に置けるとこが一番多いところに置く、という超単純アルゴリズムに負ける という漏れにも理解できる単純で強い オセロの思考アルゴリズムないでつか
>>770 意味がわかるようにもういっぺん書き直してくれ(w
局面検索って結局はどの棋譜かを知りたいだけだと思うので 棋譜ごとに特徴データを持たせるのはどうかな? 王が88に動いた棋譜には王が88に動いた、というビットを立てて 王だけで81ビット、金銀も入れて先手後手も考えると 500ビット、ぐらい、、、たくさんすぎるかも。 しかも結局棋譜の数だけのリニアサーチだし、、、orz
>>770 相手の置くところが一番少なくなるようにしてみれ
>770は「という漏れ」を「こんな漏れ」と解釈すればいいようだね。
>常に置けるとこが一番多いところに置く、という超単純アルゴリズムに負ける そしてこれがけっこういいとこを突いているわけでそれなりに強いわけだ
>>766 さんくす。有用そうなキー(の組み合わせ)をどう定義するかが問題ですね。
>>772 うんにゃ。基本的にはその線は有望かと思います。
ただ棋譜ごとにデータを持たせるってところが逆かと。
778 :
デフォルトの名無しさん :04/11/10 16:53:59
>>772 >しかも結局棋譜の数だけのリニアサーチだし、、、
int配列の固定長のハッシュだったら
intをカテゴリで分けるとかして
ソートしておけば対数時間じゃないの?
しかしまあ、なんですね。近況ですけど。 行き場の無い駒は解決したっぽい。 で、負けたときに"%TORYO"を送って %TORYO #RESIGN #LOSE が返って来るのを確認した所で今日は終り。 とろとろとやってます。 そのうち出来てひっそりとupするっぽい。
お、順調ですね
782 :
デフォルトの名無しさん :04/11/22 16:15:25
783 :
まともに動いてない ◆/8LpUMqVAk :04/12/01 09:33:17
まともに動いてない。 今は先手後手の二つのスレッドで人側が負けたとき人側のスレッドは正常に終了したのに、 サーバー側のスレッドが正常に終了しない…と書いてたら原因っぽいのが見えてきた。 人側が手番を離さないで終了しているみたいだ(笑)。
784 :
デフォルトの名無しさん :04/12/14 00:18:52
javaで将棋のフレームワークを作っています。 途中までしかできていませんが、 公開したらコメント等いただけますか?
ぜひ
786 :
うさぴょんの育ての親 :04/12/14 22:06:25
>>784 公開楽しみにお待ちしております。
ついでに宣伝。
コンピュータ将棋選手権が、来年度の選手権より
「思考ルーチンにライブラリの使用を認める」
ようにルールが変わりました。
来年度の選手権で使用可能なライブラリとして、うさぴょん2になる予定だった
もののフレームワーク部分を登録する予定です。(VC++で動作を確認して
いますが、多分フリーのBorlandCコンパイラでもコンパイルできる…はず)
選手権に参加してみたいけど、スクラッチから全部ビルドは無理だと諦めていた方
でC++使いの方がいれば是非使ってみてくださいまし。
>>784 >公開したらコメント等いただけますか?
私のはもうほとんど挫折してしまっただけに期待してます!
がんばれー
789 :
デフォルトの名無しさん :04/12/15 01:53:05
#/bin/sh echo "王手!"
#!/usr/local/bin/perl print "却下\n”;
#!/usr/bin/ruby STDOUT.print("負けました\n");
「相当弱いけど、自分で勝手に改造して使ってね」というC++将棋プログラムの
フレームワーク、「れっさーうさぴょん」こと「れさぴょん」を今日公開しました。
http://homepage1.nifty.com/Ike/lesserpyon/ VC++では、ビルドして対人で将棋がプレイ出来ることを確認しました。
BorlandC++用のMakefileも書いてみたのですが、リンク時に
謎のエラーが出ます(−−;
これについては、もし誰か原因が分かる方がいたらこのスレでレス下さいまし。
れさぴょん 頑張ったら gcc@linux でも動かせました BorlandC++は知りませんがたぶん OBJS に Joseki.o が必要かと
gcc@linuxでも動いたと言うのは嬉しいな。 BorlandC++で動かないのは何か複雑なわけがありそうです。 .objが足りないのは直しましたが、リンクで、 Fatal: Error detected (IMP302) Fatal: なんて出るのって一体何が悪いのかさぱーりわからん。
BorlandC++でリンクできない話の続き。 ぐぐってみたら、ソースファイルが大きいとなることがあるとか書いてあった。 しかし、ソースが8Mとかそんなに巨大なサイズじゃないのだけどなぁ。 巨大な配列を宣言しているのがいかんのかなぁ?
うーむ、ダウンロードしてから10秒でバグを発見してしまった。 gccの-Wall -pedanticでコンパイルしてみることをお勧めしておきます。
っ了解しますた。 #明日にでもやってみよう…。
main.cppの中でかなり恥ずかしいのを見つけた(動作には影響しないけど。)。 if (ss=3 && ...) の箇所は明らかにif (ss==3 && ... ) だね。 kyokumen.cppの中で、<<=1とするべき箇所が<<1になっているのも複数箇所見つけた。 結構恥ずかしい間違いだなぁ。 まぁ、あとはVC++とISOで動作が違う部分の指摘なので、こんなもんでしょうか。
エラー出力の抜粋。 kyokumen.cpp:46: warning: too few arguments for format kyokumen.cpp:510: warning: left-hand operand of comma expression has no effect kyokumen.cpp:510: warning: value computed is not used kyokumen.cpp:895: error: `max' undeclared (first use this function) kyokumen.cpp:2148: error: name lookup of `dir' changed for new ISO `for' scoping
800 :
デフォルトの名無しさん :04/12/17 00:00:01
bcc32 のオプションに -V0 -Vd をくわえるとリンクできました
まったく別の話だが、df−pnのGHI問題はどうすれば解決できるんだ? 「コンピュータ将棋4」の論文読んでもまったくわからん・・・。 プログラムリスト見ながらある程度まで実装できたんだが、このままでは長手数の問題は解けそうにない。 誰かいい論文あったら教えてくれー。
>>799 46行はデバッグのためのが中途半端に残っているので削除
510行は、
>>798 で言及した、<<=1が<<1になっているやつ。
895行は、ヘッダの中のmax関数を有効にしてくれ。
2148行は、for(int i=0;i<xx;i++) {のようにして宣言した変数のスコープが、
ISO規格だとfor文の中のみで有効、VC++ではfor文から抜けても有効、という
問題なので、
int i;
for(i=0;i<xx;i++) {
のように書き換えれば解決。
>>800 情報サンクス。全然わかりませんですた。
>>801 今年、確かGHI問題に対する一般的な解法についての論文がアルバータ大の
岸本さんから出ているので、それを探して見ては?
#探してみつかるかどうかは分からないけど。
ところで、コンピュータ将棋の進歩4の方法は、Ad-Hocな方法だけど、
詰将棋には有効だと思うんだけど、あれ、どこが分からなかった?
実装が遅そうなのは私も思うけど。
しかし、今のところ、一番最適化がイイ!のがVC++なのだよな…(-_-;
うん、だからVC6は捨ててよりC++の準拠度が高くて最適化が強力なVC7にしよう。
VC7にすると、ランタイムに.NETが必要なのがなぁ…(--;
VC7でもC++なら.Net Frameworkなんて必要ないよ /G7オプションとかあるし絶対VC7がお勧めだよ 最近コンピュータ将棋に興味出てきた。 CSAプロトコルしゃべるだけのプログラム作るので、 うさぴょんもCSAプロトコルしゃべるやつ作ってください。 UI作るの大変だから(w
ん?CSAプロトコル喋る「れさぴょん」じゃなくて、うさぴょん? うさぴょんは、CSA将棋と組み合わせればCSAプロトコル喋るので それで勘弁して下さい(^^;
809 :
デフォルトの名無しさん :04/12/17 13:35:45
using std::max;
それが必要だったのか 自分でmaxとmin書いてた
VC6のforの問題は自分はこうしてるが問題があっても責任は(ry #define for if(0); else for
大胆だw
>>815 でもGCCやBorlandC++のようなISO準拠コンパイラじゃ通らん
というバグ報告が上がっているのでちょっと行数が増えちゃいます(w
惜しかったなぁ(w
>>816 :うさぴょんの育ての親さん
ちょうど4096行になったりはしない?
>>815 圧縮ファイルのサイズおよび展開後のサイズ等も、
表示していただけるとうれしかったりします。
サブセットと書かれてあったので、容量が小さいかと思いきや、
doxygen用のファイルが・・・(^^;
>>817 コメントで水増しすれば(笑)なるかも。
>>818 わはは、確かに12MB超ってすげぇよな。
>>809 見逃してた〜。
PDSでもGHI問題は起きます。
>>818 webにサイズ追加しました
展開するとdoc だけで76MBもありますね
次はパッケージング考えないとなあ
あと補足ですが選手権で使えるかどうかは審査待ちですのでその点御了承下さい
823 :
th :04/12/18 21:55:53
824 :
th :04/12/18 21:56:42
あげときます。
jdkのバージョンはいくつが必要でしょう
826 :
デフォルトの名無しさん :04/12/19 17:28:22
1.4でも動くとは思いますが、 jdkのバージョンは1.5でお願いします。
>570辺りで紹介されていたカルネージハート、川崎ヨドバシで600円台くらいであったよ。
ぜひ買ってやってみるべき>カルネージハート
>>802 レスサンクス。
岸本さんの論文見つかりましたんで読んでみます。
岸本さんらぶ
831 :
th :04/12/22 02:39:37
反応なくて寂しいですが、
ホームページを作ってクラスの解説を少し。
http://www.geocities.jp/jshougi/ ランダムに手を打つプレイヤーを作って、
それらが対戦してるところを眺めるところまでできました。
最新版はホームページの方にアップしました。
れさぴょんにはとてもかなわないので
アンチC++なJavaプログラマー向けフレームワークになりそうな気がしてきた。
832 :
まともに動いてない ◆/8LpUMqVAk :04/12/22 08:04:56
憶測ですが…師走なだけに皆さん忙しいのではないかと…。 あっしは休んでいいのなら年末年始にダウンロードしてみようかと思ってま。
ゴメソ、ただいま扁桃腺炎で寝込み中…。 あと、JDKの1.5なんてそんなに新しいの入れてないもので(苦笑)
おだいじに
停電のため12/24(金)早目の夜 - 12/27(月)朝までwdoorを停止します. ご迷惑をおかけします. 記録によると shogi-server は10/25以来事故もなく約2ヶ月間稼働しているの ですが,停電で連続運用記録が途切れてしまって残念ですね
まだ寝込み継続中…(涙)。 「れさぴょん」の本の原稿の締め切りが新年早々にあるので、コメントは 締め切り過ぎてからで。ほんとにスマソ。>thさん
wdoor故障のようです.復帰次第またアナウンスします.とり急ぎ. お大事にです > うさ親さん
>>836 >「れさぴょん」の本の原稿の締め切りが新年早々にあるので
おお素晴らしい。
期待してます。
>締め切り過ぎてからで。ほんとにスマソ。>thさん
つまらないものなので、本当に暇な時にちょこっと見てください。
適当な評価関数を作って、ただの木探索をいれてやってみたんですけど
すごい弱かったorz
…れさぴょんも相当弱いです。予定以上に弱い…orz.
wdoor の shogi-server 復活させたつもりです. また遊んで下さい.
>また遊んで下さい. りょーかーい。 大晦日から元旦にかけてサービス残業してなけりゃ…プログラムいじり倒しま。 thさんのも見たいし。 どーでもいいんだが、この頃原因不明の頭痛やめまいを感じるようになった。疲れてんかな。
843 :
th :04/12/31 00:18:42
wdoorにも対応させないと。 現在、決定木で学習できるように改良中です。
>>842 :
とりあえず倒れたら病院いってきまっさ。
来世に期待。
最近コンピュータ将棋に興味を持ち始めて自分で作っていたのですが、挫折しました。 そこで世の中でソースが公開されているものを利用する方向で試そうと思いましたが、 openshogilib make失敗原因良く分からず。g++ にparse errorと言われるのでお手上げ。 osl-csa make通った。が説明が少なくこれを使うのは厳しそう。でもtemplateいっぱいで速そう。 れさぴょん まだ触っていない。 とりあえず一通り見てみたいと思うので、他にあればご教授ください。
>>845 将棋関係では、公開されているソースは極めて少ないと思います。
さらに、それを「利用する」というのであれば、
そういう目的で公開されている osl、osl-for-csa、れさぴょん、
ぐらいしかないのでは?
デーモン将棋はGPLだから利用できそう
今って誰かのサーバーに繋げて対戦とかしてるの? してるんなら俺も参加したい
851 :
【大吉】 :05/01/01 02:12:49
!omikuji 出るかな
852 :
【623円】 :05/01/01 02:16:51
!dama 出るかな
ん?新機能?
854 :
デフォルトの名無しさん :05/01/01 13:07:18
855 :
【小吉】 【456円】 :05/01/01 14:19:58
良さげなスレが見つからないので、比較的層が重なってそうなここで お聞きします、 フリーセル(Win付属等)で、カードが自動的に場に出される時の条件は どうなっているのでしょうか。 ゲーム終盤、ここ動かせば終わるんだろうなぁと言う事は解るのですが、 序盤での挙動がイマイチ解らず、はっきりと式に出来ません。
test
>>855 前後のパターンをとことん調べてみるとか、
あと、フリーセル自動解答プログラムなんてものもあるから
そういうサイトをたどってみると、どっかに書いてるかも。
>>855 そのカードを場に出すことによって他のカードの動きを阻害しないことが確定的な場合。
具体的には、例えば場に2が3枚(仮にハート以外)出ているときにハートのAが出たら場に積まれるが、
既に出ているスートの3(例えばスペード)が出ても場には出さない。
何故ならば、タブローでスペードの3にハートの2を重ねる可能性があるから。
詳細は自分で観察して見れば境界条件がわかると思う。
>>858 その場合、初期状態で、H2の下にS3が載っていれば、勝手にS3を出した
後にH2を出しますよね・・・場のカードだけじゃなく、列も監視しないといけ
ないんでしょうか・・・
>>857 かなり探し回ったつもりですが、見つかりませんですた。
>>859 SS撮りながらやってみたのですが、
ホームセル D2,S2,C2,H0(なし)
フリーセル H7
列1 H3-D3-H1-DQ…
列2 省略
列3 省略
列4 省略
列5 なし
列6 S4-D5-C6-D7…H5
列7 C3-H4-S5-D6…
列8 H2-S3-D4-C5…C4
の状態から、H3をフリーセルに移すと、
ホームセル D4,S5,C3,H4
フリーセル H7
列1 DQ…
列2 省略
列3 省略
列4 省略
列5 なし
列6 D5-C6-D7…H5
列7 D6…
列8 C5…C4
になりました。
1ゲームで数回はチャンスがあるので、数を集めてみてはどうでしょうか?
>かなり探し回ったつもりですが、見つかりませんですた。 Googleも知らんのか? つっても、フリーセルあらしのサイトにはたいした情報はないが。
>>860 そのケースから考察すると、D56が出ないのは、D5に乗せるかも知れない
C4がまだ出ていないからで、C4が出せる位置にあれば、C456 D567
を出せるが、ホームのH4から、H5を乗せる可能性のあるC6は出ない、
D6もC5が乗る可能性はあるが、先にC5が出されて、D6もお払い箱。
C45 D56が出されて、D6 S5 C5 H4 になるのかな、等と想像しても、
何だか全く違う結果になるんですよね・・・orz
>>861 場に出されるカードの規則について触れてるサイトがです。
[最強の将棋プログラム] ↓コンピュータの思考ルーチン コンピュータが適当に一手指す while(1){ printf("降参しませんか?(Y/N)->"); if(入力がYなら){ break; } } printf("あなたの負けです");
thさんの56.zipは1.4ではコンパイル出来ないっぽい。 次の休みに1.5をインストールしてみようっと。 $ javac -source 1.4 jsf/Point.java jsf/Point.java:18: jsf.Point の clone() は java.lang.Object の clone() をオーバーライドできません。互換性のない戻り値の型を使おうとしました。検出値 : jsf.Point 期待値 : java.lang.Object public Point clone(){ ^ エラー 1 個
棋力は14級の者です 歩香角飛の不成を選択する理由ってのは 打ち歩詰めの回避のため、だけですか? とりあえず駒動かせるところまでは完成したつもりだったんですが 本業が一段落したんで半年振りにソース開いて読んでたら死にたくなってきた・・
>>866 同じく棋力は14級のものです。
はい、歩角飛の不成りは、打ち歩詰めの回避以外には特に得する局面はありませんので、
打ち歩詰めの回避のためだけ、と言って構わないと思います。
香車の場合は、3段目では成らないことが有力な場合がありますので、2段目での
不成りが打ち歩詰めの回避のためだけの指し手になります。
>>868 あぁ、なるほど、詰め方だけでなくて受け方の方の関係で打ち歩詰めが関係する
ケースもあるわけですね。納得。
まぁ打ち歩詰め回避の不成り以上に実戦には現れにくそうな手筋ですが(笑)。
ところで、将棋プログラムでは、詰将棋ルーチン以外では歩角飛車、2段目の香の
不成りは、無視している=そんな手はそもそも生成しないものも多いですよ。
>>867-869 ありがとうございます
いずれにせよ実戦での出現確率はとても低いということですよね
手の生成を詰みを探してるときとそうでないときでわけるのも
めんどうなので、とりあえずこのまま(不成の手を生成していない)
進めてみます
少し生きる希望がわいてきました
>>866 実は打ち歩詰回避、誘致以外にも不成りが有効な場合も(理論上は)ありえます。
不利な局面を千日手で引き分けに持ち込みたい場合で、
成ってしまうと連続王手の千日手で反則になってしまうが、
不成りだと途中の手が王手にならず通常の千日手にできるというものです。
理論上ありえるというだけで実際に手順を作ってみろと言われると私には不可能ですが。
現在最強の将棋ソフトはAI将棋 Version 12 for Windowsである。
現在最強の将棋ソフトは相手が投了するまでしつこく聞き続ける俺が作ったプログラムである。
それは最狂ソフト
875 :
デフォルトの名無しさん :05/01/15 20:13:05
AI将棋 Version 12 for Windowsを wdoorで指せたらいいな ね! ほりえもん
もうシングルCPUの性能向上は失速するって話だけど マルチコアCPUへの対応って普通にやってるの?
>>876 YSS、KCC、激指、うさぴょんはやってる。
それを普通と言うかどうかは知らない。
…考えて見たらうさぴょんのマルチCPU化なんてもう5年も前からやってるなぁ。
>>878 キチガイにしか見えない・・・ドクター中松を仰いでるのかね?
大変間が空いてしまいましたが CSA プロトコルの手動クライアント@Emacsをアッ
プしておきます。主な変更点は
* csashogi.el: GAME の `*' に対応 (Thanks to kaneko さん)
* kifuview.el: 現在の盤面を CSA 形式の棋譜フォーマットでセーブする関
数 (kifuview-save-csa-logfile()) を追加 (Thanks to Hayashi さん)
* csashogi.el: MONITOR 機能に正式対応
* csashogi.el: サーバからのメッセージが分割されて渡された場合でも正
しく処理できるように
* csashogi.el: LOGOUT で heartbeat を止めていなかったのを修正
* csashogi.el: 盤の向きをトグルできるように (`s' キーにバインド)
* shogi.el: background が明るい時の
shogi-{player,opponet}-side-koma-selected-face の色変更
* csashogi.el, kifuview.el: 対局のトレース機能をちゃんと実装
* 駒の文字を手前側は「王」,相手側は「玉」に固定 (Suggested by
* kaneko さん)
* csashogi.el: SHOW の出力で駒のシンボルは漢字で表示するように変更
(Suggested by kaneko さん)
といったところです。パッチを送っていただいてた御二方、長らく放置プレイ
になって申し訳ありませんでした。
いつもながらテストが充分でないので変なところがあったらごめんなさい。
http://tokyo.cool.ne.jp/progn/shogi-0.12.tgz
test
883 :
デフォルトの名無しさん :05/02/03 19:14:23
wdoor事務所の中の人のblogが年末から始まっていたのですね。
奈々美さんお久しぶりです ゆっくりですが始めました
886 :
デフォルトの名無しさん :05/02/05 17:09:16
すみません。 将棋の1局面を表現するには最低何バイト必要になりますか?
25バイトくらいでいけるんでね?
888 :
デフォルトの名無しさん :05/02/05 17:41:18
人にもの聞くなら最低限、弁えるべきことがあると思うが。 #2chで何言ってんだって? 至極ご尤も。
各升目の状態は なし 歩 香 桂 銀 金 角 飛 玉 と 成香 成桂 成銀 馬 龍 で15種類(0〜F) 4bit x 9 x 9 = 324bit さらに先手後手識別用に 1bit 使って 5bit。 5bit x 9 x 9 = 405bit 40〜50バイトは必要(「駒なし」の部分が若干圧縮可能)
可変長符号表作ればもっと減らせるはず 「駒なし」と「歩」が多い
894 :
886 :05/02/05 18:23:41
ありがとうございました
始まったよ! www.nhk.or.jp/zero/ 人工知能で名人を超えろ(2/5 放送予定) 土曜日19:00-19:44 人工知能の研究の中で、将棋やチェス、囲碁などの「ゲームプログラム」は 人間の論理的思考を分析する分野。チェスではすでにコンピューターが人間 をしのぎ、さらに複雑な将棋でも10年以内には名人を倒すソフトが生まれる といわれるなど、近年めざましい進歩を遂げている。
897 :
デフォルトの名無しさん :05/02/05 19:21:06
つまり将棋ってそろばんの足し算と同じくらいつまらないゲームなんだね
898 :
デフォルトの名無しさん :05/02/05 19:46:55
直観とはなにか?
899 :
デフォルトの名無しさん :05/02/05 21:07:14
定跡ファイルはどのように棋譜を記録しているのか解析したいのですが すでに知られていないですか。 柿木将棋で登録してバイナリエディタで変更点を探してみようかと思っています。
900 :
899 :05/02/05 22:54:56
まったくわからない。教えてくださいおねがいします。
柿木将棋は多分ブロック暗号使ってるよ 頑張れば解読できるかもしれないけど
902 :
899 :05/02/05 23:27:37
そうなんですか。 記録手数はふつうに一ずつ増えてます。 多分解析されないような暗号ではないとは思うのですが。 容量を減らす工夫くらいだと思います。しかしスキルがなく判りません。
例えば差分攻撃だと初手から76歩と86歩を登録したデータの違いを見るとか
棋譜をRDBに保持して局面検索とかしたい場合、 どういう構造にするのが適切ですかね?
906 :
デフォルトの名無しさん :05/02/06 08:41:56
>>905 またそれか。
それだと持ち駒の保持が記録されてないよ。
持ち駒を入れると(81+20+20)×5 = 605ビット
必要になる。
位置、持ち駒を記録するのは7ビット、敵味方、成駒を記録するのに2ビット
40×9= 360ビット
後半の方を圧縮したほうが効率よくないか?
907 :
デフォルトの名無しさん :05/02/06 09:15:59
>それだと持ち駒の保持が記録されてないよ。 >持ち駒を入れると(81+20+20)×5 = 605ビット >必要になる。 持ち駒の場合は3ビットで表現できるから81×5 + 20×3 = 465ビットだな。
908 :
まともに動いてない ◆/8LpUMqVAk :05/02/08 03:11:16
過去スレで1局面は281ビット、圧縮して237ビットまでなら可能って誰かが算出してたような
圧縮したらもっと小さくなる
910 :
まともに動いてない ◆/8LpUMqVAk :05/02/08 04:10:11
>>907 眠れないので持ち駒含めて281ビットの訳をば。
・持ち駒は後で
・駒は盤上の有無ビットを加えて6ビットとする。
81*6=486
・有無ビットが無の時、残り5ビットに意味はないので有無テーブルと駒情報に分ける。
81+81*5=486
・有無テーブルで有が出てくる順に駒情報を詰める(無は不要なので削除)。
81+40*5=281(41*5が不要)
・持ち駒と盤上の駒の総数は同じなので有無テーブルの有の数の駒情報の後の空いた部分に持ち駒情報を間借りさせる。
で、どうでっしゃろ?
・駒は盤上の有無ビットを加えて6ビットとする。 81*6=486 いきなりおかしいw
912 :
まともに動いてない ◆/8LpUMqVAk :05/02/08 04:19:40
>>911 すんません。やっぱり私は駄目なんだー!
単純に、 ・盤上の駒の有無は81ビットで表現できる。 ・駒の種類は15種類なので敵味方識別を入れても5ビット ・駒のある場所順に駒の種類を持てばいいから40駒*5ビット ∴81+40*5→281ビット と考えれば医院で内科医?
914 :
まともに動いてない ◆/8LpUMqVAk :05/02/08 04:40:57
昔から、単純なことをややこしく考えて難しく表現して誰にも理解されないんですよ。 現世に絶望、来世に期待。
915 :
デフォルトの名無しさん :05/02/08 05:41:07
>>913 それいい。
81ビットのところは連続する0、1でまだ圧縮できそうだし
5ビットのところは歩が多いことでハフマン符号化できそうだし。
素朴な疑問、データベースや総当たりじゃない純粋なアルゴリズムで、 自分より強いアルゴリズムって作れる物なの?
917 :
デフォルトの名無しさん :05/02/08 09:10:05
それは作れるだろ。
918 :
デフォルトの名無しさん :05/02/08 09:43:13
柿木の定跡ファイルフォーマットってわかりますか
>>914 いや、>910あればこその>913だから。
つーか、既出じゃないの?
>>915 なるほど、横スキャンなら初期位置では必ず27ビットの0が連続するわけだしね。
あ、でも、縦スキャンの方が駒の順序が入れ替わりにくいから局面間圧縮が効くのかなw
#どっちみち、展開に時間掛かりそうですが…
920 :
デフォルトの名無しさん :05/02/08 11:27:26
>>919 111111111010000010111111111
000000000000000000000000000
111111111010000010111111111
初めの配置だとこうなりますが実戦譜から十分多くのパターンを
調べておいてパターンが多く現れるものに短いビットを与える
辞書を作っておくといいと思います。
>>919 >つーか、既出じゃないの?
既出です。281ビットは十数年前のコンピュータ将棋の本に出てきます。
>#どっちみち、展開に時間掛かりそうですが…
展開はそんなに重要ですか。
2百数十ビットの一意な鍵番号が得られたなら
((鍵,評価)(手1,鍵1)(手2,鍵2)…(手m,鍵m))
で順方向のデータができますが、鍵の探索はO(n),O(log n),O(1)?
平日休日問わず社内泊サービス残業してたら死にたくなりませんか?
922 :
デフォルトの名無しさん :05/02/08 13:10:57
81ビットの部分を圧縮して平均ビット長が32ビットくらいに なれば局面検索が早く出来そうですが。 しかし、局所局面の検索が不便になります。 実用的には圧縮はしないほうがいいですかね。
私ゃ将棋は門外漢ですから。 単に展開が面倒だと思っただけですし。 社内泊こそしないものの、休日はずっと仕事してます。 そろそろ死にたくというより、死ねます。
924 :
デフォルトの名無しさん :05/02/08 15:45:46
柿木の定跡ファイルフォーマットを教えてください。 おねがいします。
926 :
デフォルトの名無しさん :05/02/08 16:00:43
ここには定跡、手筋の研究のために定跡ファイルを解析した人はいませんか。 どなたか柿木の定跡ファイルフォーマットを解析してもらえないでしょうか。 粘ったんですが出来なかったです。
927 :
まともに動いてない ◆/8LpUMqVAk :05/02/08 19:19:03
>>926 >粘ったんですが出来なかったです。
まともに動いてないプログラムをたくさん作るのが得意な私でよければ、どこまで粘って何が分かって何が分からなかったか経過を教えてほしい。
928 :
デフォルトの名無しさん :05/02/08 19:58:37
>>927 ↓これくらいしか判らないです。
・判っていること
アドレス100〜に手数がカウントされている
・一手指したときに変化するアドレスの例について。
アドレス 初手26歩 初手36歩 初手16歩
00550〜 31 32 33
02000〜 A8BA 9684 A2B0
アドレス 初手58王 初手58金右 初手58金左
00550〜 31 32 33
02000〜 88 82 F6
>>928 それはどちらの形式ですか?
柿木将棋III・柿木将棋IV用の定跡ファイル(*.KJK)
柿木将棋V/VI/VII用の定跡ファイル(*.KJ2)
930 :
まともに動いてない ◆/8LpUMqVAk :05/02/09 05:02:46
# nkf persimmon.kj2 | more KJSK1.00]V7.10C:\Program Files\KShogi7\定跡\persimmon.kj2 # od -a persimmon.kj2 | head 0000000 K J S K nul nul nul nul 1 . 0 0 nul nul nul nul 0000020 ] o stx nul nul nul nul nul soh nul nul nul V 7 . 1 0000040 0 nul nul nul C : \ P r o g r a m sp F 0000060 i l e s \ K S h o g i 7 \ dc2 h dle 0000100 U \ p e r s i m m o n . k j 2 nul 0x100にあるのは跡の2バイト目
前段は、kj2ファイルが、 先頭の512バイトはヘッダー(無意味?) 以後、局面が増える度に100バイトずつ増えて行く という話でしょう。 後段は私にも意味不明だが、100バイトごとの中での変化について言いたいんじゃないかな。
早くも手探り状態です。 頻出文字列でアスキーダンプを検索するとf?MbxYWTsubC1VL}がよく出てきます。 # strings persimmon.kj2 | sort | uniq -c | sort -nr | head -1 11621 C1VL # od -a persimmon.kj2 | grep "C 1 V L" | more 3200バイトの周期で現われる。 意味ありげだけど何だか分からんです。
933 :
デフォルトの名無しさん :05/02/09 07:17:50
persimmon.kj2 (2004年12月23日、18:06:44)の 初手76歩好手を76歩悪手に変えたときの変化について。 (初めの値、更新後の値) adr = 0000001F (31, 30) adr = 00000024 (43, 44) adr = 00000035 (4B, 6B) adr = 00000036 (53, 73) adr = 0000003C (5C, 64) adr = 0000003D (92, 5C) adr = 0000003E (E8, 92) adr = 0000003F (90, E8) adr = 00000040 (D5, 90) adr = 00000041 (5C, D5) adr = 00000042 (70, 5C) adr = 00000043 (65, 70) adr = 00000044 (72, 65) adr = 00000045 (73, 72) adr = 00000046 (69, 73) adr = 00000047 (6D, 69) adr = 00000049 (6F, 6D) adr = 0000004A (6E, 6F) adr = 0000004B (2E, 6E) adr = 0000004C (6B, 31) adr = 0000004D (6A, 2E) adr = 0000004E (32, 6B) adr = 0000004F (00, 6A) adr = 00000050 (00, 32) adr = 00000223 (61, 60)
934 :
デフォルトの名無しさん :05/02/09 07:22:13
persimmon.kj2 (2004年12月23日、18:06:44)に初手58王を追加したときの変化について。 (初めの値、更新後の値) adr = 00000010 (5D, 5E) adr = 0000001F (31, 30) adr = 00000024 (43, 44) adr = 00000035 (4B, 6B) adr = 00000036 (53, 73) adr = 0000003C (5C, 64) adr = 0000003D (92, 5C) adr = 0000003E (E8, 92) adr = 0000003F (90, E8) adr = 00000040 (D5, 90) adr = 00000041 (5C, D5) adr = 00000042 (70, 5C) adr = 00000043 (65, 70) adr = 00000044 (72, 65) adr = 00000045 (73, 72) adr = 00000046 (69, 73) adr = 00000047 (6D, 69) adr = 00000049 (6F, 6D) adr = 0000004A (6E, 6F) adr = 0000004B (2E, 6E) adr = 0000004C (6B, 31) adr = 0000004D (6A, 2E) adr = 0000004E (32, 6B) adr = 0000004F (00, 6A) adr = 00000050 (00, 32) adr = 00000208 (77, 4C) adr = 00000209 (F4, CE) adr = 00000230 (45, 18) adr = 00000231 (D2, 3D) adr = 00000232 (46, 44)
935 :
デフォルトの名無しさん :05/02/09 07:37:10
定跡ファイルを作っている新潟支部はコンバータを独自で開発したか、 フォーマットを教えてもらっていることは間違いないのだが。 フォーマットがわかれば激遅の定跡登録を速く出来るんだけど。
513バイト目以降、4バイト一組で何かを表しているらしい部分が繰り返し出てくる、けど中身が分からない。
>>935 がんばって手作業でいれてるんじゃね?<新潟支部
938 :
デフォルトの名無しさん :05/02/09 12:14:15
>>937 >新潟支部開発の平手定跡ファイルは80000局以上の実戦譜をもとに編成したデータベースより250万手におよぶ平手定跡ファイルとして作り上げられております。
>実際に将棋ソフトで使用するためには,それぞれの将棋ソフト用に,又ファイルサイズ等と再編成をしなくてはなりません。
新潟支部専用データベースフォーマット → 柿木、銀製、ファミリ−将棋
と変換しているはず。各定跡ファイルのフォーマットは判っている。
939 :
デフォルトの名無しさん :05/02/09 18:45:18
懐石まだー
懐石を諦めました。次回会社に泊まったときに続きをするかもしれない。帰って寝る。おやすみ。
<推測:柿木6の場合。7では他に端歩の設定情報がある?> *ヘッダー:512バイト 16:バージョン? KBOK(KJSK) nul nul nul nul 1.00 nul nul nul nul 等 4:登録手数+1(0なら0) 8:00 00 00 00 01 00 00 00 以降の484:ファイル名〜00 経験的には登録手数があっていればヘッダーを入れ換えても支障なく使えるので、 無効チェック等はしてるとしてもデータとしては殆ど無意味な筈。 KBOKとKJSKの違いは謎。柿木のバージョンにより(?)KJSKには1.00や3.00等もある模様。 *以後、1局面毎に100バイト単位の暗号化されたデータ。 2*16:指し手=(移動元座標) (移動先座標) 4*16:手の情報=(次の局面のデータ番号)*3バイト (手の評価) 4:() (局面の形勢) () ()
*局面データを上の様に推測した理由 様々な初手1手だけを登録したファイルを比較すると、 最初の100バイトは、先頭の2バイトを除き一致し(稀に例外あり)、 次の100バイトは完全に一致する! ここから、これらのファイルの2番目(最後)の100バイトには局面の情報は含まれておらず、 何も登録されていない「2番目のデータの初期値」であるものと推測する。 *取り得る方針(自分で実行する予定はなし) 1.16通りの初手だけを登録したファイルを作る。 これによって、2〜17番目までの初期データが得られる。 2.1のそれぞれの分岐に様々な2手目を登録したファイルを作る(対局設定を自由ルールにするのが吉)。 手の好悪や、初手の局面での形勢等も、充分に登録しておく。 これによって、16局面分の登録後データと、次の256個分の初期データが得られる。 3.1と2のファイルの比較により、情報の表現法を推理する。 4.バイナリエディットで3の推理を検証できれば、初めの推測も正しかった事になる。 5.1と2で得られた初期データの法則が解明できれば幸せになれる。(まともに氏は、この初期データを調べるべき) 「3200バイトごとの繰り返し」みたいになってれば楽だけど、おそらくそう甘くはないだろうね。 6.暗号が解けなくても、柿木自身に解いてもらえる可能性もあるかも。 柿木プロセスのアドレス空間を調べてみて、復号化された情報が見付かったりしたら少し幸せになれる。 (以後、続かない)
実は柿木持ってない。 とはいえいろんなデータおくれなどと厚かましいことを言えるはずもなく、手を出したのが無謀だったと今更ながら後悔。 931さん他のヒントを頼りにまたまた職場でこっそり調べてみようかと思う次第。解雇されるかもなー(笑)。
まともにさんの場合、寧ろ解雇された方が幸せだったりしない? 就職フェアで待ってますから〜(ぉぃ
945 :
デフォルトの名無しさん :05/02/10 16:22:29
評価関数の作り方を教えてください。 コンピュータ将棋の論文はどこで手に入りますか。
日本人はケチなので情報処理学会入らないと一切見せてくれません。
>>945 コンピュータ将棋の進歩、2、3、4でも買ってみて下さい。
あるいは、2月末まで待って、工学社の「将棋のアルゴリズム」でも買って下さい。
(本のタイトルは仮題だけどね)
>>946 私も情報処理学会入ってないし。
ありがとうございます
950 :
デフォルトの名無しさん :05/02/11 04:09:27
>>945 ベイズ理論でぐぐれば新しいアルゴリズムがみえてくる・・・はず
951 :
デフォルトの名無しさん :05/02/11 12:30:27
>>950 ベイズ理論があれば古い探索系アルゴリズムがいらなくなる・・・かな
>>950 膨大すぎて扱う事が不可能なほどのデーターが必要だな。
又は少ないデータに収める人間の知能並みの学習能力が必要。
将棋じゃむりっぽ。
953 :
デフォルトの名無しさん :05/02/11 17:50:49
理論とかいってるけど頻繁に指される手を調べるのは当たり前だろ
ベイズねえ
>>953 藻前、頻繁に指される手を調べればヘイズ法になるのかと子1時間(ry
実行速度気にしない場合Lispとかのが作りやすいの? C/C++は純粋に速度のためだけに使われてるの?
スレ違い&ターゲットによる&違う。
lisp マニアにはそうかも
959 :
デフォルトの名無しさん :05/02/22 17:43:53
てす
960 :
デフォルトの名無しさん :05/02/22 17:50:18
スマソ.公開プロキシとかいわれてたから... 大学図書館で数理科学コピーしてきたよー ハッシュと詰将棋のところ。 ハッシュについてだけど局面を一度圧縮してから の方がいいとおもうんだけど。もしくはそのデータを そのままアドレスに使うとか。今圧縮アルゴリズムを考え中。 あと全ての処理についてだけどループとビット演算だけで 済ませられないかな。 移動できるマス、駒の利きについては分岐なしで求められたけど。
961 :
デフォルトの名無しさん :05/02/22 18:15:48
頻繁に変化(駒があったり無くなったり)する升目の方が情報価値が 高いだろうからそれを高頻度順に並べるというのを考えたけど。 あとは空白が多くなることに注目して圧縮してみるというのもありそうだ。 プロの棋譜3万3千から統計を取ったところ、 情報価値が高いだろう升目は (3,3) 変化する割合0.259544 (7,7) 変化する割合0.247682 (6,8) 変化する割合0.207760 (4,2) 変化する割合0.198430 (4,6) 変化する割合0.184319 (6,4) 変化する割合0.183549 で 〜〜 低い升目はこんな感じ。 (1,2) 変化する割合0.030271 (9,8) 変化する割合0.027014 (9,1) 変化する割合0.026362 (1,9) 変化する割合0.027567 (9,2) 変化する割合0.024516 (1,8) 変化する割合0.025566
962 :
デフォルトの名無しさん :05/02/22 18:29:58
とりあえず何局面ハッシュに保存できれば十分なんだ? 数理科学では1秒で100万手調べて×一局に1万秒使う=100億局面となっているのだが。 みんな100億もの配列を用意しているの? int型(32ビット)配列を2^32個を用意してひとつひとつのデータを8ビットで記録すれば 120億局面保存できるのだが。
疑問が有ります。1つの局面の最良手は相手が未来に何を指してくるかによって 変わってくと思ってる。皆さんは、相手がどんな人間やどんな手を未来に 指そうが、1局面の最両手は1つだと思っていますか?
964 :
まともに動いてない ◆/8LpUMqVAk :05/02/22 19:12:04
データのサイズと搭載メモリのサイズによるとおもう。 それで出来るだけ大きく取ればいいはず。
>>963 私は、相手がどんな手を未来に
指そうが、1局面の最良手は複数だと思っています。
局面の点数付けで同点を導く二つの筋以外は全て評価が低いことがありそうなので…
>>955 さんに質問。
では平手の最初の最良手は1つですか?
実際には複数あると言われています。
追記。もし
>>955 さんが正しかったら。
論理的に考えて、先手必勝のパターンが必ず存在することになり、
それが見つかった時点で将棋は終わりを迎えることになる。
う〜〜〜ん、やっぱり有りえないと思う。
>>970 >最良とはいえそれが引き分けでそれ以外が負けということはありませんか。
平手から考えて必ず最良が1手であるなら、先手必勝でしょう。(証明は出来ないけど。
お前らまずは言葉の定義を先に合わせろ
最良の負けなら簡単に作れるだろ、王だけ一人で飛び出せばいい。
最高の評価値を導く手が二つあったら最善手は存在しないと言い張るうみねこみたいな人だったら嫌だな。
相手が一手間違えればこちらの勝ちで一手違いで負けというのと 逃げ回って最長手数で負けるのとどちらを最良の負けと定義するべきだろうか
980 :
デフォルトの名無しさん :05/02/22 21:23:21
>>978 一手目指さずに投了とどっちが最悪の負け?
急に将棋プログラマ人口が増えたと感じるのは 全くの気のせいなんだろうな。
もうすぐ次スレなんだから、いいんじゃない。 誰か次スレよろ。
984 :
デフォルトの名無しさん :05/02/22 21:50:45
>>979 の考え方好きだな
引っ掛けってやつだよね
完全に最後まで読み切れない人間相手なら
負けると分かってて逃げ回るより
騙しのテクニックの方が有効だと思うよ
985 :
デフォルトの名無しさん :05/02/23 10:28:09
どなたか df-pn、pnサーチ、pn+TT、pn+Mobility、pn+TT+Mobility、pn二乗 を教えてくだされ。 数理科学のdf-pn読んでも詳しいところがよくわからないのですが。
986 :
デフォルトの名無しさん :05/02/23 11:01:51
「探してきた」のレベルがずいぶん低いなw 煽りだぜ。俺はなんの知識もないからアドバイスできないぜ!
pnの論文を読んでノードの展開順序を理解してからdf-pnにいくのがいいんじゃない
989 :
デフォルトの名無しさん :05/02/23 13:39:07
ぶらくらです
991 :
デフォルトの名無しさん :05/02/23 23:47:43
992
993
994
995
996
997
998
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。