1 名前:デフォルトの名無しさん [2007/01/24(水) 21:40:36 ] 将棋・リバーシに関してはスレがありますが、 麻雀に関するスレがなかったので、立ててみました。 <参考サイト> とつげき東北HP www.interq.or.jp/snake/totugeki/ まったりプログラミング日誌 kmo2.cocolog-nifty.com/prog/ あらのHP www8.plala.or.jp/ara3/ デジタル麻雀論 www.jan-x.jp/
2 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:44:09 ] 断る。
3 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:45:12 ] コンピュータは常に天和。まさに最強のAI。
4 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:58:23 ] >>3 それだと、コンピュータに親がまわってくるまでに、 プレイヤが勝ってしまう恐れがあるのではないだろうか。
5 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:59:36 ] ロンより証拠
6 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:03:35 ] どいツモこいツモ他人任せにしやがって
7 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:43:19 ] >>1 つ「スーパーリアル麻雀P2」
8 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 05:23:25 ] 麻雀?くだらね
9 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 15:20:54 ] 昔々の PC-8801 用の精彩麻雀は、コンピュータ側は最初に 上がった形を作っておいて、あとはランダムに上がるという ように作ってあったらしい。
10 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 23:02:59 ] 定期的に立つなこのスレ
11 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 00:08:19 ] リバーシスレの1をこっちに閉じ込めて置いてくれないか?
12 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 07:01:42 ] >>10 今回は結構期間が空いていたな。 次に立つのは夏休み中ぐらいだろう。
13 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:31:45 ] 亜樹タンの打ち方を研究してる俺が来ましたよ
14 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:09:50 ] まじめなことを聞いてみるけど、 配牌も同じプログラムで行うってことかな? それとも、配牌とサイコロはランダムなり、専用プログラムでおこなって、 4種のプログラムで対戦をおこなって最強を決めるということかな?
15 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 23:49:47 ] 配牌も手動がいいな。 元緑積みができるとか。
16 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 19:58:52 ] コンピューターとプレイヤーの配牌方法を別にしたらいいじゃん。 コンピューターだけ揃いやすいように。
17 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 03:43:11 ] >>14 ときどきゲームでイカサマなし!ってうたってるのがあるけど、 そーいうの同士で、大会とかないのかね? 麻雀で強いアルゴリズムというのを知りたい。
18 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:33:08 ] 麻雀板に似たようなスレあった気がする 俺には上がり判定すら作れそうにない。。。
19 名前:デフォルトの名無しさん [2007/03/11(日) 14:33:32 ] age
20 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:03:28 ] 全ツッパ、ラス確定アガリ上等のアガリマシーンなら作れそうだけど 防御的な思考や順位を考慮した思考を入れると面倒そうだ。
21 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:01:44 ] >>20 それでいいから、 トンプウソウとかに突撃してみてくれ。
22 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:31:58 ] いろんなアルゴリズムをバトルロワイヤルさせて自然淘汰の経過を見るとか面白いかもね
23 名前:デフォルトの名無しさん [2007/03/12(月) 10:29:04 ] まず いろんなアルゴリズムソースで戦わせられる土台のプログラムを作ってください
24 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 11:27:18 ] え?俺が?
25 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:31:44 ] >>23 東風荘でいいんじゃね?
26 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:43:55 ] jarファイルなりdllファイルなりを4つD&Dすれば 何回か対戦を自動で行って成績を表示なんてどうよ。
27 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:01:00 ] 定期的にこのスレたつけど 結論ありきだからおもしろくね
28 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:49:19 ] >>26 仕様として決めていくといいかもね
29 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:01:24 ] 形式はソースが直接見れる形がいいかな
30 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 13:35:28 ] インタプリタ方式のマージャン思考ルーチン専用の新しい言語つくってほしいね
31 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:10:53 ] >>27 で、結局結論は?
32 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:27:30 ] 麻雀記述言語MJML(仮名)を開発しる?
33 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:20:38 ] マージャンソフトウェアキットMJSKでいいよ。
34 名前:1 mailto:sage [2007/03/15(木) 10:52:42 ] みなさんレスありがとうございます。 麻雀の思考アルゴリズムについて意見を交換する場を設けようと思い、 このスレを立てたのですが、スレを見てると麻雀プログラムの対戦システムの方に 興味をお持ちの方が多いようで驚きました。
35 名前:リバーシ1 [2007/03/15(木) 13:56:42 ] 最強の麻雀アルゴリズムができた まず14枚をランダムで配る そして何を捨てるのがいいか調べるアルゴリズム もし、役が出来ていたらbreakする 残りごまの中から、一枚ランダムに加えて、どれか一枚を捨てたら 役が出来るなら、その駒が選ばれたとカウントする(もっとも得点が高くなる駒を選ぶ) 役が出来ていないならば、もう一枚加えて、どれか二枚を捨てたら 役が出来るなら、その駒が選ばれたと0.5ずつカウントする 終局までに、どんな役も揃わなかったら、カウントしない これを1万回くらい繰り返すと、役が揃いやすい捨て駒にカウントが集まる 敵からのリーチ、一発があるときは、手を変える事もあるがあとで ぽん、かん、ちーが出来るときは、するかどうか、1万回くらい試行して決める
36 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 14:09:53 ] >>34 ネタがなければ話題は転がらないよ。
37 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:32:00 ] 「駒」とか言っている奴に麻雀を語る資格なし。
38 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 06:04:46 ] >>35 それじゃ自分の手しか見えないド素人の打ち方じゃないかw 他人の捨て牌も見ない、点数状況も参照しないじゃ いくら牌効率が高い打ち方をしても勝てるのは初心者までだよ。
39 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 11:07:30 ] >もし、役が出来ていたらbreakする オーラスで接戦なのにドベ確定の平和で上がりそうだなw
40 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 18:40:00 ] 相手のその局のデータ集めてもやらないと 完全にならないな 100万回くらいやらないと、そのロジックが強いかどうか判断できんのじゃないかな
41 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:12:45 ] しゃんてんすうのもとめかたおしえてくれ
42 名前:リバーシ1 [2007/03/17(土) 03:54:29 ] >>41 1万回くらい試行してみて最短の手数をみれば良い
43 名前:リバーシ1 [2007/03/17(土) 03:57:33 ] いかに速く、役が出来ているか、点数はいくつかを計算するアルゴリズムを 作ることが重要だ ここが出来れば、麻雀プログラムはほぼ完成したといえるだろう
44 名前:デフォルトの名無しさん [2007/03/17(土) 06:22:57 ] 可能な役をすべて記録しておいて 一致したら得点を渡すようにするか たとえば、ハッシュテーブルなんかに記録しておく すると、計算量はハッシュ関数の計算だけですむ
45 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 06:26:03 ] いや、だから自分の手と捨牌の枚数だけしか参照しないんじゃダメだろと。 それじゃ麻雀のルールしか知らないド素人じゃないか。 せめて自分の切ろうとしている牌がどれほど危険かどれほど安全か、 それを決めるための評価関数作らなくちゃ話にならない。
46 名前:デフォルトの名無しさん [2007/03/17(土) 06:27:08 ] 数字の1があったら、例えば6548231という数字を割り当てて 数字の2があったら、例えば154621という数字を割り当てて それぞれの、XORを取る するとハッシュ値がでる
47 名前:デフォルトの名無しさん [2007/03/17(土) 06:29:46 ] >>45 リーチ以外は、感に頼るほかなく 敵があと何駒で上がるのかを予測することは不可能 リーチ、一発の時だけ手を変えるようにするのがいい
48 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 06:34:37 ] つまりリーチしない相手には最初から最後まで完全に無警戒、と
49 名前:デフォルトの名無しさん [2007/03/17(土) 06:35:33 ] 実現可能な、手駒の配置をすべて求めるルーチンと その得点とハッシュ関数を求めるルーチンを作ろうぜ
50 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 06:36:48 ] 例えばピンズで染めてる裸単騎を前にしても「これは要らないから」と 堂々と生牌切ることになるよね
51 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 06:38:00 ] とりあえず平和を含む役だけで何通りあるんだろう? CPU/HDDリソースなんて有り余ってるから たいしたことにはならないと思うけど。
52 名前:デフォルトの名無しさん [2007/03/17(土) 06:39:53 ] のこりの配られる駒の数によって、上がれる確率は統計的にわかる 自分の上がれる確率が、一般的なものよりも低いならば 降りる(敵の捨て駒を捨てれ)ばよい
53 名前:デフォルトの名無しさん [2007/03/17(土) 07:37:17 ] プロが、1000局対戦したとする その四人の、最終局面で上がった回数が10回 1手前のとき20回、2手前15回だとしたら 標準的に、 最終局面の上れる確率は、10/4000 1手前の上れる確率は、30/4000 2手前の上れる確率は、45/4000 となる 他の三名のうちいずれか一人が上がれる確率は、この三倍だ (親と子で分布が変わるかもしれないがここでは省略する) そして自分の上がれる確率がそれより低いなら手を変える
54 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 07:48:43 ] てか、ゴタクはいいんで、常にダマ、染めが大好きというヘボ雀士よりも そのアルゴリズムが強いと言える根拠はどこにあるか示してくれよ。 常に安牌があるわけじゃないし、どれが「比較的」安全な牌かを 評価する手段がなきゃどう考えたって強くはなれないだろ。
55 名前:デフォルトの名無しさん [2007/03/17(土) 07:54:34 ] >>54 もっとも最近に捨てられた駒や、 もっとも多く表に出ている駒や、 北東南西や、 ドラでは無い駒が安全
56 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 07:55:26 ] 相手のあがりから、捨て牌から、 相手のくせも読むようにもしないとな
57 名前:デフォルトの名無しさん [2007/03/17(土) 07:56:01 ] >>55 特にリーチ後は、その人の捨て駒と、リーチ後の捨て駒が安全
58 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:01:07 ] 染め手ならオタ風のシャボや単騎待ちなんて普通にあるじゃん。。 しかもそんな分かりやすい安牌が常に手元にあることの方が珍しいし、 本当に麻雀やってるのかどうかすら怪しい。 東風荘でもどこでもいいから、機械的にそういう打ち方をして どれだけ勝てるかちょっと実証実験してくるといいと思うよ。
59 名前:デフォルトの名無しさん [2007/03/17(土) 08:12:15 ] わかり易い安牌が無いんだったらどれを捨ててもたいして変わらないって事だろ どれを捨てても同じだっら>>55 の選び方でも特に負けやすいことは無いはず
60 名前:デフォルトの名無しさん [2007/03/17(土) 08:16:43 ] それでは、ある程度つよいプログラムでランダムに試行しておき なに待ちが多いか統計を取っておこう なにもわからなかったときこの統計を使う
61 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:22:11 ] >>59 はぁ? つまりプロが、麻雀で飯を食ってるプロが、「捨牌を『読む』」という行為は 完全に無駄だと言いたいわけですね? 最も最近捨てられた牌、最も多く捨てられている牌、ドラではない牌を ただ機械的に『見て』選んで捨てれば安全なんだから。
62 名前:デフォルトの名無しさん [2007/03/17(土) 08:23:47 ] それでは、当たると多く点数を奪われるものを捨てないようにしよう 見えている駒から、どんな役がどのくらいの確率で揃うのかは計算できる そうすれば統計的に多く点を奪われる駒が判明する
63 名前:デフォルトの名無しさん [2007/03/17(土) 08:26:18 ] >>61 あと一枚で上がりのとき以外は、捨牌を読んでも意味がないとおもうが
64 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:28:07 ] >>63 とりあえず君に麻雀を語る資格がないのはよく分かった。 一応聞いておくけど、麻雀を始めてから何年ぐらい? ネット麻雀やってる? やってるとしたらどこで、レートはどれくらい?
65 名前:デフォルトの名無しさん [2007/03/17(土) 08:30:10 ] >>64 リバーシの勝敗は判るが、 麻雀、囲碁の勝敗と得点は判らない 将棋はアマ三段の免状あり
66 名前:デフォルトの名無しさん [2007/03/17(土) 08:34:08 ] >>64 見えていない相手の役を揃わせないようにするよりは 自駒を最短で揃えるようにした方がよいと思う 人間では何を捨てれば統計的に最善なのか判断出来ないはず
67 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:35:49 ] >>65 将棋はさっぱりだけど、俺もチェスはやる。 で、君は将棋みたいに決定論的なゲームと、 ランダムの要素が絡む麻雀とをごっちゃにしすぎ。
68 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:36:10 ] あと>>63 はありえないから。マジで。
69 名前:デフォルトの名無しさん [2007/03/17(土) 08:40:19 ] 配られる駒がランダムなのだから、そのとき別の駒が配られていたとしたら 捨牌にも影響する どうしてもランダムの部分は予測できない 多く得点を取られる可能性を避ければよい
70 名前:デフォルトの名無しさん [2007/03/17(土) 08:47:05 ] 見えている駒以外を、ランダムに生成して 役が揃ったときには、その各駒に役の得点を加算する これを1万回くらい試行すると危険駒の得点が高くなる
71 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 08:47:10 ] >>69 >>61
72 名前:デフォルトの名無しさん [2007/03/17(土) 08:50:36 ] 捨牌の読みや、各人の癖の読みは、人間だから少しは出来るのであって コンピュータには難しい 経験のないコンピュータのとれる手段は確率的に有利な手を選ぶことだ
73 名前:デフォルトの名無しさん [2007/03/17(土) 08:56:26 ] 攻めアルゴリズムは>>35 守りアルゴリズムは>>70 です 役判定とハッシュは>>44 >>46 です まともらプログラムがなかなか出来ないので代わりに作って確かめてもらえないですか
74 名前:デフォルトの名無しさん [2007/03/17(土) 09:48:32 ] ハッシュ値と、実際の手持ち駒に、一対一対応があれば 自局面は、int型の変数一つで表現できる >>70 で点数が0のままならば、どんな組み合わせに対しても 役が揃わないということなので確実に安全 自分の捨牌を考えなければならないので、 自他問わないポン、チー、捨牌、ドラ以外の駒 + 重複を無くした自駒 のなかからランダムに選ぶ必要がある
75 名前:デフォルトの名無しさん [2007/03/17(土) 10:09:43 ] 駒番号について 0〜33までを次のように割り振る 萬子、索子、筒子、東、南、西、北、白、発、中 34番からは、もう一巡する ハッシュ値について 0〜143番までに、0から2の20乗くらいの数字をランダムにつける 手持ちが、0番と10番と30番ならば、上でつけた数字のxorを取る それをハッシュ値とする
76 名前:デフォルトの名無しさん [2007/03/17(土) 10:28:43 ] 役判定について www5f.biglobe.ne.jp/~kenmo/program/majang/yaku/yaku.html
77 名前:デフォルトの名無しさん [2007/03/17(土) 10:33:05 ] だれか、0から143までの数字14コと、ポン、チー情報と、ドラと場、リーチ一発情報 渡したら、役(点数)を返すルーチン作ってくれないですか
78 名前:デフォルトの名無しさん [2007/03/17(土) 12:00:11 ] unsigned int 型を5つ用意して、手持ちの番号のbitを立てれば局面が表現できるな まずは同一型を初めの方の番号に変換することだ そしてそれをソートすればすべての局面が求まる それを順にディスクに保存しよう そのデータを使って次に役になっている局面を抽出だ
79 名前:デフォルトの名無しさん [2007/03/17(土) 12:04:30 ] 単純に、144C14 (144コから14コ選ぶ数) を計算すると2の32乗より大きくなってしまう いったい何通りあるのだろうか
80 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 12:13:59 ] 高1か高2の期末試験に出てきそうな問題だなw
81 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 13:13:26 ] >>79 余分8枚は花牌とかなの? それとも(プログラム処理上の)仮想牌?
82 名前:デフォルトの名無しさん [2007/03/17(土) 13:22:36 ] 間違えたよ 萬子9、索子9、筒子9、東1、南1、西1、北1、白1、発1、中1 = 34枚 ×4 =136枚だった
83 名前:デフォルトの名無しさん [2007/03/17(土) 13:29:21 ] 間違いなく136 bit (int型5コ)あればポン、チーをのぞいて自局面は表せる これを標準型に直してからハッシュ値を求めれば32 bitでいけるか? ほとんどの組み合わせは役無しだろうから、そのときはハッシュ値は衝突してもよいが 役ありのときは衝突しないようにしたい もっとも短いビットはいくつだろうか ハッシュ値の速度も大事だ
84 名前:デフォルトの名無しさん [2007/03/17(土) 13:32:55 ] 点数を2バイトで表すと ハッシュ値が20ビットだとハッシュテーブルは2Mバイト必要 24bitだと32Mバイト必要 確保できるのはせいぜいこのくらいまでだろう 24bit以下のハッシュ関数を作れるか?
85 名前:デフォルトの名無しさん [2007/03/17(土) 13:52:52 ] 乱数を生成するルーチンを作った これで環境によらず同じ結果が得られるよ #include <stdio.h> unsigned short int rnd(int x){ int y=x/681; y=x-681*y; y=1664525*y+1013904223; return y&65535; } main(){ int x=7,i; for(i=0;i<30;i++){ x=rnd(x); printf("%d\n",x);}}
86 名前:デフォルトの名無しさん [2007/03/17(土) 13:54:31 ] すまん 乱数になってなかった ループしてる ここを参考にしたのだが hp.vector.co.jp/authors/VA004808/random1.html
87 名前:デフォルトの名無しさん [2007/03/17(土) 14:00:32 ] 今度こそいけると思うぞ #include <stdio.h> unsigned short int rnd(int x){ int y; y=(int)((1664525*(double)x+1013904223)/10); return y&65535; } main(){ int x=7,i; for(i=0;i<60;i++){ x=rnd(x); printf("%d\n",x);}}
88 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:09:14 ] ハッシュでやるなんて馬鹿げてないか? 役判定なんて速度はそれほど要求されないし。
89 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:18:32 ] チートイツと国士以外は一般的に判定できそうだしね。 しかし、モンテカルロ法とか使って上がれる確率、トップを取れる確率が 最大になる捨て牌を、とかなったら、少しでも高速で判定できるにこしたことはなさそう。
90 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:23:07 ] 牌山のアルゴリズムは何処?
91 名前:デフォルトの名無しさん [2007/03/17(土) 14:34:55 ] 固まるんですけど、どこか判りますか? #include <stdio.h> #define fore(i,N) for(i=0;i<N;i++) //乱数生成ルーチン unsigned int ransuusyokiti=1; unsigned short int rnd(){ int ransuusyokiti=(int)(1664525*(double)ransuusyokiti+1013904223)&2147483647; return ransuusyokiti&65535;} //自局面のデータ class JIHAI { unsigned int bitboard[5]; public: JIHAI(); }; //自局面初期化 JIHAI::JIHAI(){ bitboard[0]=bitboard[1]=bitboard[2]=bitboard[3]=bitboard[4]=0; int temp[14],n=1,i; temp[0]=rnd()%136; while(n<14){ temp[n]=rnd()%136; fore(i,n)if(temp[n]==temp[i])break; if(i>=n)n++; } fore(i,14)bitboard[temp[i]>>5 ] |= 1<<(temp[i]&31); } main(){ JIHAI hai; }
92 名前:91 [2007/03/17(土) 14:52:17 ] 先に進めなくなったからリバーシへ戻るとするか....
93 名前:91 [2007/03/17(土) 14:55:25 ] ルールを知らないんですけど、鳴きやリーチのときは同じ手牌でも、役が変わりますか? 鳴き、リーチ無しのときの役判定は、鳴きのときにも使えますか?
94 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 15:03:02 ] 鳴くと役が下がったり、成立しない役がある(例:リーチは鳴くと出来ない) リーチは1役、ダブルリーチは2役上がる 使える。 てかルール調べた方が早くね?
95 名前:91 [2007/03/17(土) 15:10:11 ] 判りました unsigned short int rnd(){ int ransuusyokiti = ↓ unsigned short int rnd(){ ransuusyokiti = でした
96 名前:デフォルトの名無しさん [2007/03/17(土) 15:17:38 ] >>94 そうですかわかりました
97 名前:デフォルトの名無しさん [2007/03/17(土) 15:39:19 ] 順調に進んできたよ 牌をセットして標準化して表示するところまで来た up2moe.moe.hm/img/q921.txt
98 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 16:12:56 ] まだ50行しか書いてないのかよ
99 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 16:24:50 ] いやーーすごいじゃないか
100 名前:デフォルトの名無しさん [2007/03/17(土) 16:38:08 ] あがり判定つけたけどあっているのか不明 確認してくれ up2moe.moe.hm/img/q923.txt ここを参考にした www5f.biglobe.ne.jp/~kenmo/program/majang/agari/agari.html
101 名前:デフォルトの名無しさん [2007/03/17(土) 16:41:15 ] あがり判定と点数が正しく求まれば 麻雀プログラムはほぼ出来上がったとみて良いと思うのだが ここが山だな
102 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 12:39:56 ] そうかな? 役つくりが一番難しいと昔思ったけど 配パイ時に欲しい牌を固定してしまえば楽かな
103 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:46:56 ] >>101 まあゲームとして必要な最低ラインだね 最強のものを作るんだから どんなアルゴリズムにするとか ここから話がはじまるのでは?
104 名前:reverse_1 [2007/03/18(日) 16:48:53 ] 作っているやついるの? だれもいないと作る気がしない あと4プログラムを対戦させるやつの開発は進んでるの? ハッシュはどうやらすべての役を記録するのは難しいかもしれない(かなりメモリを食う) 可能な役の数をざっと計算してみたら、26×10の20乗通りある ハッシュ長は25 bit必要になる
105 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 03:09:34 ] 相手がツモ切りかどうかの判別は? プロなら分からないような指技使うがw
106 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 03:22:11 ] じゃあ、誰かが雀卓サーバ作って配牌、役計算。 他の奴はそれに接続して対戦って感じで競わせたらどうよ。 思考時間1秒以内で。 それ以上だと人間が打てちゃうしw 1秒って言っても順番回ってくる前に何が来たら何を切るぐらい考えられるし実際の思考時間結構長い。 切る1s→鳴き・和了待ち1s→切る1s→・・・って感じだと1週8秒 ツモ切りかどうかは鯖から情報貰えば良い。 ホスト側(役計算とか)の方の議論多いけど 役計算のプログラムってそこらに転がってないか? アルゴリズムだって決まってるだろうし。 俺作っても良いけど誰かやるんか?w
107 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 21:20:07 ] >>106 >俺作っても良いけど誰かやるんか?w 「俺作ったけど、誰かやるんか?」 だと説得力あるんだけどなぁ・・・
108 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:18:23 ] 100レス以上になるのに「まうじゃん」の話が一つも出てないんだな。 思考部がプラグイン化されていて、将棋のCSA将棋、オセロのBearRevに相当するソフトなんだが。 10年以上前からあったと思うんだけど、肝心のプラグインを作る人が少ないようで… ちょっとまとめとくと [本体部] ・ルールを細かく設定できる ・ネットワーク対戦できる ・対局/成績を保存できる etc... [プラグイン] ・面子それぞれに別のプラグインを指定できる ・任意の手牌での点数計算・待ち判定などは本体部とのメッセージのやり取りで取得できる Win版:DLL形式(Cなどで) Java版:jar形式(JAVAのクラスライブラリが提供されている) [URL] ttp://www.amy.hi-ho.ne.jp/ishihata/maujong/ ttp://search.vector.co.jp/search?query=%82%DC%82%A4%82%B6%82%E1%82%F1
109 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:30:22 ] なんだ やっぱ既にあるのか
110 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:43:27 ] ============== 終了 ==========================
111 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 23:35:21 ] いや、ここからが始まりだろ?
112 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 00:23:30 ] 「まうじゃん」対戦相手プラグイン インターフェース仕様 www.amy.hi-ho.ne.jp/ishihata/maujong/iface.html ==================== 開始 ======================
113 名前:reverse_1 [2007/03/20(火) 07:44:52 ] ソース公開してくれている人 ソフトの種類: GPL 作者: tmk ------------------------ シンプルな麻雀ゲームです。 www.vector.co.jp/soft/win95/game/se316229.html
114 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 15:08:29 ] お、面白そうだな。
115 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:10:31 ] とりあえず、徹夜で頭が働かなくてトイトイしかしないやつとか作ってみてるけど 上がるだけでもけっこう大変だな
116 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:20:50 ] 何そのありがちな投げ遣り感
117 名前:デフォルトの名無しさん [2007/03/25(日) 17:38:22 ] ※麻雀ロジック研究会※ pc11.2ch.net/test/read.cgi/gamedev/1105332492/
118 名前:デフォルトの名無しさん [2007/03/29(木) 19:58:44 ] 非効率的ですが、全ての事象(サイコロを振ったり、ポンしたりチーしたりなど)の オーラスまでの確率を全て求め、相手(3人)の行動と配牌やツモ配、ドラなどから 最終的にプラスになる可能性が高い牌を選んで捨てていけばいいと思います。 ただ、膨大なデータが必要でスーパーコンピュータでもできるかわかりませんが 最強ではないでしょうか?
119 名前:デフォルトの名無しさん [2007/03/29(木) 20:23:04 ] 構想はいらないから、実際にコードかけよ
120 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 20:40:18 ] >>118 考えが浅いです。 もうちょっと頑張りましょう。
121 名前:デフォルトの名無しさん [2007/03/29(木) 22:04:09 ] そもそも>>120 の意見だと、配牌時に1・9・字牌が無い 場合にも国士無双が上がれる確率まで求めちゃうの? うわ、意味ねー
122 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 22:07:06 ] >>118 確率上の最強のプログラムができても、 そのプログラムに勝てるプログラムを作る事が可能。 結局はプログラムのいたちごっこになる。 そもそも麻雀における最強というものが存在しない。
123 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 22:09:32 ] ルールを知ってるだけだから机上の空論に陥りやすい。 戦略も経験や知識として知っていないと駄目。
124 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 22:15:27 ] >>121 ごめ、実はもっと意味ないんだけど 最初の親決めからオーラスまでの全ての事象のパターンをだして 最終的にプラスになる可能性が高い方の牌を選んでいくって事
125 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 23:01:53 ] そのうちに最強のじゃんけんスレが出来そうですね。
126 名前:デフォルトの名無しさん [2007/03/29(木) 23:31:12 ] >>122-123 が無駄道に行くから、またプログラムが出来なくなる。 最初に、「確率上の最強のプログラム」を作れよ。 「机上の空論」から始めろよ。 何もできてないくせに、「戦略」とか「経験」とかプログラムを落としにくい 要素を議論しても、意味無いじゃん
127 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 23:40:01 ] 将棋ソフトみたいに、共通のフリーのフロントエンドないかな。 ボナンザもバックエンド専用ソフトで、フロントエンドは誰かのを借りてるよね。
128 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 00:34:40 ] じゃあまずフロントエンド作りから
129 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 00:43:24 ] このプログラムの前提は麻雀の公式ルールにのっとって作ってるの? それともあらゆるルールに対応できるように?
130 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 01:25:46 ] >>108 にフロントエンドの紹介があるね。 Java版のほうは割と使いやすそうだ。
131 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 02:17:02 ] >>124 現実的にオーラスまでは無理だとしても 1巡先のあらゆるパターンを出してその中で最善のものを選ぶというのはどうだろう? …といったもののそれでも膨大な量のパターンになってしまうが
132 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 02:21:08 ] だからさ、「画期的なアイデア」募集スレじゃないんだけど、ここ。
133 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 02:28:18 ] スレッド名が良くなかったかも。 「プログラム入門に最適(これも嘘だが)!麻雀プログラムを作ろう」とかしとけば、 妙な人間は寄って来なかったろう。
134 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 03:13:33 ] こないだボナンザとプロ棋士が将棋してたけど、 麻雀ではそういうのは無いの? 運の部分が大きいから、プロでも半荘くらいなら負けることもありそう。 強いのできたら、二階堂姉妹と対戦させて、脱がせたい。
135 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 04:10:00 ] 確率が云々のプログラム以前に麻雀を勉強した方がいいんジャマイカ? 最強のプログラムを作るなら最強の定義を決めるのが先ジャマイカ?
136 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 04:46:33 ] とりあえず、鳴きだの何だのなしで、普通に上がりに向かうようにするアルゴリズムを考えてみないか?
137 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 12:26:37 ] >>127 >将棋ソフトみたいに、共通のフリーのフロントエンドないかな。 >ボナンザもバックエンド専用ソフトで、フロントエンドは誰かのを借りてるよね。 ちなみに、>>113 の/console ディレクトリ以下には、 (本体と別に)標準入出力を使って1局打つための サンプルプログラムがついている。 (何の説明も無いが・・・)
138 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 12:36:50 ] >>113 のを使ってどうしろと? >>112 でいいじゃん
139 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 11:48:20 ] 麻雀もWEB-APIの形で提供してくれればいいのにっ
140 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:17:23 ] とつげき東北が東風荘のデータを100万局分ほど解析したんだっけ? ボナンザは24の棋譜を何万局か使用して最善手を選ぶ局面評価関数の最適化をしたんだよね。 だから、そんなかんじで高レートの人の牌譜を使用したら結構強いものができるんじゃないだろうか。 ていうか麻雀はすぐ人より強いものが作れそうな気がする。 ていうのは、 @ その牌がツモ切りかどうか A もっと詳しく、その牌は配パイからあったものか、それとも何番目にツモったものか B @、Aを含め、それまでの配譜の全手順を完全に記憶できる というあたりで、人間には不可能な解析ができるから。 まあここまで解析するのを許すかどうかはひとそれぞれだろうけど。 あ、ここでのすぐってのは、オセロやチェスよりも簡単だろうって意味で、もちろんだれでもすぐってわけにはいかんけどね。 おれもこれで食っていけるのなら作ってみたいが、ただの趣味でやるにはちょっとめんどくさいなー。
141 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 01:56:52 ] >>140 ポーカーだともっと単純に似たようなことができそうだな
142 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 02:05:18 ] >>140 あのー 麻雀の局面のパターン数なんてオセロやチェスと比較にならんくらい膨大だと思いますが それとー 仮に同一局面が現れたとして、オセロやチェスと違って、麻雀は不確定要素が多すぎて 最善手なんて一意に決まらないと思いますが 総ての情報が詳らかになっているオセロやチェスの解析手法を麻雀やポーカーに応用するのは 無理があると思いますが
143 名前:デフォルトの名無しさん [2007/04/06(金) 06:57:17 ] どうなのかなぁ。 絶対最強のアルゴリズムなんかないんだろうけど、 (多分、誰かが書き込していたじゃんけんのアナロジーが正解?) でも、実際にプログラミングすることを考えると 確率重視になってしまうんだろうな。 で、そうなったら、麻雀の面白みって無くなるんだろう(ry
144 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 09:12:51 ] >>141 そういうことじゃないんだよ 頭悪すぎ
145 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 09:13:35 ] まちがえた >>142 ね
146 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 10:16:52 ] 人間がやるときだって、条件が変わらない場合は 待ち牌の数とか計算して少しでも多いほうを選ぶじゃん
147 名前:142 mailto:sage [2007/04/06(金) 20:27:18 ] >>144 そういうことじゃなかったんだ!ありがとうございます! で、どういうことなの?w
148 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 00:06:11 ] 教えてあげないよーだwww
149 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 00:31:44 ] 不確定要素があるゆえに、対人戦では相手の心理を読むことが重要になってくるはず コンピュータ同士の場合と対人の場合では有効な戦略は変わってきそう さらに対人の場合でも 相手がコンピュータであると知っているプレイヤーと 相手が人間だと嘘を教えられているプレイヤーとでは挙動が違いそう …と、また何の具体性もない机上の空論を振り回してみる
150 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 01:10:47 ] マージャンチューリングテストか。。
151 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 01:29:56 ] コンピュータ的には、他プレーヤーの癖とか傾向をどんどん蓄積していって分析するような機能は必須だな。 その上でコンピュータ自身はなるべく癖をださない。かといってイレギュラーさせることも必要だろう。 そういったプログラムを作ると、もう人間の手には負えないと思う。回数を重ねるほど勝てなくなる。 どういった分析をさせるかが、プログラマーの腕のみせどころになるんだろう。 そんで、そんなかんじで作ったコンピュータ同士を戦わせると、これは相性の問題になりそうな気がする。
152 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 03:16:46 ] このスレ恐ろしくレベルが低いなあ。 聴牌判定ルーチンを書ける奴すらいないんじゃね?
153 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 05:53:51 ] >聴牌判定ルーチンを書ける奴すらいないんじゃね? 自己紹介乙。
154 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 18:33:09 ] シャンテン数判定ルーチンは 丸々二日はもらわないと 書けない自信がある。
155 名前:デフォルトの名無しさん [2007/04/08(日) 22:58:01 ] シャンテン位、3時間で書けよ。 いやさ、マージャンの「頭」はどんなに多くても、 「7つ」しかない。その「7パータン」を全部洗い出して、 一番近い「シャンテン」を出せばいいだけの話だろ。
156 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:24:04 ] >>155 そんなに簡単なら書いたものを公開してほしいな。 おれも>>154 同様、あまり効率よく書ける自信がない。 確率を考慮するとシャンテン数判定自体は、 勝ちに行くコアのエンジンにそのままでは使えない。 むしろ、麻雀のルールの的確なインプリメントの例として出してほしい。
157 名前:デフォルトの名無しさん [2007/04/08(日) 23:43:50 ] >>156 ちょwww ここ、本当にプログラム板? 俺、本職じゃないけど、3時間で書けたぞ アップローダあればいくらでもやるぞ?
158 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:52:19 ] >>157 アップローダぐらい、 なぜ見つけられないのか、 むしろそちらの方が不思議だ。
159 名前:156 mailto:sage [2007/04/08(日) 23:55:01 ] >>157 むしろ、麻雀がよく分かってないんだと思う。 >マージャンの「頭」はどんなに多くても、 「7つ」しかない。 実際、この意味がわからない。
160 名前:デフォルトの名無しさん [2007/04/08(日) 23:55:47 ] >>158 はい、どうぞ www4.uploader.jp/dl/musashi/musashi_uljp00596.zip.html パスワードは"gomi"で
161 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:24:02 ] >>160 ま、言いたいことは色々あるけどさ・・・ とりあえず言っておかなくてはいけない事として、 一体全体そのソースの何処で 「シャンテン数を計算している」と 主張するつもりなんだ?
162 名前:156 mailto:sage [2007/04/09(月) 01:26:02 ] >>157 ありがとう。 見たけど、見ただけじゃこれで評価ができてるってのがわからない。 適当に配牌を放り込んで結果を見てみることにするよ。
163 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 01:43:50 ] >>160 これを堂々と他人に晒せるあたり、大物を感じさせるな、がんばれw シャンテン数チェックと聴牌チェックを勘違いしてるんだろうけど 聴牌チェックだとしても酷いw 眠いんで詳しくは見てないが ・七対子と国士無双を判定してないぞ ・麻雀にはカンツがあるぞ、鳴きも考慮しろよ ・同じ手牌でもあがり形は一つじゃないぞ 君のアルゴリズムだと111223344を孤立牌x1、順子x2、対子x1と判定する 直したらまたアップしろw
164 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 14:12:19 ] >>153 正解
165 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 14:17:11 ] 聴牌チェックはどうでもいいから、シャンテン数を出すやつ出してくれよ。 あと何手で聴牌するか、の何手かを出すんだぞ。
166 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:11:38 ] イーシャンテンかリャンシャンテンか、とかを判定するのか。 1ぐらいはしらみつぶしに探せばすぐわかりそうだけど、リャンシャンテンとかは ひょっとしたら探索しないとダメ? つか、最大のシャンテン数がそもそもわからん。6ぐらい?
167 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:17:09 ] 七対手があるから、最大でも5かな? めちゃくちゃ時間がかかってもいいなら、シャンテン数を出すプログラムは おそらく>>160 の聴牌判定ルーチンを使えば簡単に書けそう。
168 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:29:31 ] 牌の種類は全部で34種類。 次のツモで得られる手牌は同じく34パターン。 この34パターンに対して、14枚の手牌のうち、一つだけ除いて聴牌判定ルーチンへ。 聴牌があるなら1シャンテン。 1シャンテンじゃなければ、34パターン × 14 = 476パターンに対して、次のツモで、、、(ry
169 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:45:15 ] つか、>>160 って>>108 のサンプルDLLそのまんまじゃん。
170 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:52:12 ] >>168 もう少し賢くするなら捨ててある牌や手持ちの牌を見て得られる可能性のある手牌を絞る。
171 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 16:09:53 ] 1シャンテンを調べるのに必要な手牌 34 * 14 = 476 2シャンテンを調べるのに必要な手牌 34 * 14 = 476 * 476 = 226576, 22万 3シャンテンを調べるのに必要な手牌 34 * 14 = 476 * 476 * 476 = 107850176, 1億 4シャンテンを調べるのに必要な手牌 34 * 14 = 476 * 476 * 476 * 476 = 51336683776, 513億 5シャンテンを調べるのに必要な手牌 34 * 14 = 24436261477376, 24兆 力技では3シャンテンを調べるのすら不可能っぽいです orz
172 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 16:36:00 ] 十三不塔がないルールだと6シャンテンまであるんじゃない?
173 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 16:53:28 ] メンツ・ターツ・トイツを抜き出していくのが一番早そうだね。
174 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 17:07:17 ] 問題はチートイ狙いながら四面子と一頭の形も狙うっていう時の三シャンテンぐらいのときじゃないか? 頭をどれにとる?って計算してたらシャンテン数計算するのも面倒っぽい
175 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 17:42:53 ] 十三不塔は配牌のみだし関係なくね?
176 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 17:45:02 ] アンカンしてリンシャンツモ、とかは無視でいいのかな。
177 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 17:49:56 ] この場合、役は考慮しないだろうからカンしてもしなくても 聴牌の形は変わらないだろうし、リンシャンはツモの1つとしていいのでは
178 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 18:32:51 ] >>175 ハイパイ時よりシャンテン数下がるときって国士狙ってる時以外はなくないか?
179 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 00:59:54 ] >>178 一発回避のときもある
180 名前:デフォルトの名無しさん [2007/04/10(火) 01:42:48 ] tewt
181 名前:デフォルトの名無しさん [2007/04/10(火) 01:45:41 ] 役無しの判定が高速に行えれば全体が速くなる 全ペアの95%くらいが役無しだろう 役無し判定が5 clock 役判定が100 clock だとして初めに役がなければ、役判定しなくてすむ
182 名前:デフォルトの名無しさん [2007/04/10(火) 02:21:32 ] 総枚数と字牌と数字牌と○牌とT牌の枚数であらかた判定できる
183 名前:デフォルトの名無しさん [2007/04/10(火) 02:22:48 ] 総枚数は14〜16である 字牌が0枚、1枚、2枚、3枚、4枚などで分類する
184 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 02:26:22 ] 個々のメンツのばらばら具合から、最低必要シャンテン数をあらかじめ求めておけば かなり高速にはなりそう。 例えば 147四六九 ならば147は後2枚、1〜9が必要。 四六九は後一枚必要。 こうしてあらかじめ全てのパターンを計算しておけば表を引くだけですむ。 同じ数値牌がたくさんあるときは大変そうだけど。
185 名前:デフォルトの名無しさん [2007/04/10(火) 02:30:27 ] 土壌の話しようぜ
186 名前:デフォルトの名無しさん [2007/04/10(火) 02:33:53 ] >>184 シャンテン数の求め方 決定版 ランダムに残り牌を配って、いずれか14枚選んだとき役が出来る最小数を求める(一万回くらい試行する) これでほぼ正解になる
187 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 02:36:59 ] 1111244667799 こんなチンイツなら2シャンテンか。 すべて同種の数牌だけの時で、3シャンテン以上になることってありうるのかな。
188 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 02:39:27 ] >>186 99.9%正解じゃなくて100%正解なのが知りたいな。
189 名前:デフォルトの名無しさん [2007/04/10(火) 02:40:57 ] >>188 正確に求める必要がどこにある?説明せよ
190 名前:デフォルトの名無しさん [2007/04/10(火) 03:40:06 ] a(1),a(2),・・・,a(14)が役ありなら0 残り牌からランダムにa(15)を追加 a(1),a(2),・・・,a(15)のうちいずれか一枚をのぞいて役ありなら1 残り牌からランダムにa(16)を追加 a(1),a(2),・・・,a(16)のうちいずれか2枚をのぞいて役ありなら2 ランダム生成を繰り返して求めた数字以下である
191 名前:デフォルトの名無しさん [2007/04/10(火) 03:41:15 ] 役無し判定と、役確定判定を高速に求めるんだ
192 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:44:58 ] >>184 >こうしてあらかじめ全てのパターンを計算しておけば表を引くだけですむ。 そのパターンが何通りあるか、数えたのか? 実現可能な程度の数で収まるのか? >>189 >正確に求める必要がどこにある?説明せよ それは最強じゃないから。スレタイ嫁。 仮にその話はおいておくとしても、そもそも それで「ほぼ正解になる」という証拠が提出されていない。 実際に試したのか? ・・・何か、妄想ばかりだな。
193 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 08:35:18 ] メンツ分解型を再帰使って書けば100行程度で十分高速なもの (Pen4 3G、1万回のランダム配牌で0.15〜0.20秒)ができるよ。 牌追加型は、>>171 が言うように、シャンテン数が増えると計算できなくなる。
194 名前:デフォルトの名無しさん [2007/04/10(火) 08:48:47 ] メンツ分解型とは?
195 名前:デフォルトの名無しさん [2007/04/10(火) 09:27:15 ] メンツ、ターツ、トイツを抜き出して、シャンテン数が最小となる抜き出しパターンを見つける方法のこと。 帰ったらソースをうpしてみる。
196 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 10:09:43 ] 面子分解では、完全解は得られないんじゃない?
197 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 10:11:05 ] >>192 批判は簡単だから、どうやったらシャンテン数が高速で計算できるか書いてくれ。
198 名前:デフォルトの名無しさん [2007/04/10(火) 10:38:06 ] シャンテン数の前に役判定作れよ これ出来なきゃ駄目だろ
199 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 10:49:29 ] シャンテン数計算で役があるかどうかは関係ないっしょ。 役判定はこのスレで出てたベースにサービス関数があるから それにわたせばいい。
200 名前:デフォルトの名無しさん [2007/04/10(火) 11:01:44 ] >>199 どれに渡すって?
201 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 11:27:13 ] >>112 のインターフェース仕様
202 名前:デフォルトの名無しさん [2007/04/10(火) 14:53:13 ] >>201 windowsよくわからないから、配列渡せば役、得点返すやつ作ってクレー
203 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:38:19 ] 思うんだけど、シャンテン数がわかるのってそんなに重要? 問題は必要な牌の数だと思うんだけど。 最強の戦術は棒テン即リー状況次第でベタオリだと思うんだけど。 それならシャンテン数よりは孤立したのを落とすだけでいいよね? お前らもマージャンしててシャンテン数がわかるのがそんなに役立つときってあるか? 俺はシャンテン数は2ぐらいまでしかわかんないけどそれでも結構勝ててるぞ。 状況ってのは、たとえば先制リーチなら降りるとかあっちが先だけどこっちは国士13面だから攻めるとか。 どっちかっていうと期待値のどこらかで降りるか降りないかの閾値を設けてそれで判断するってので。
204 名前:デフォルトの名無しさん [2007/04/10(火) 16:59:14 ] 重要ではないが一つの達成目標にはなる
205 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 20:14:53 ] 互いにプログラムを闘わせられる、通信API(プロトコル)が公開された麻雀サーバってあるの? それとも東風って、API(プロトコル)公開されてる?
206 名前:デフォルトの名無しさん [2007/04/10(火) 21:23:39 ] >>112
207 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:46:40 ] サーバじゃなくてWindowsDLL限定のP2P対戦? まあ通信処理とか書かなくて良いから良いか。
208 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:50:28 ] リバーシの>>1 はいませんか?
209 名前:リバーシ1 [2007/04/10(火) 23:02:54 ] いますよ
210 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:30:03 ] 考えたんだが、このスレで実際のプログラムがなかなか出てこない理由は、 各自の技術云々よりも、作成したプログラムの評価をするのが難しいからだと思う。 では、それを簡便に評価する方法として「何切る?」を使うというのはどうだろう? 例えば void eval(char answer[3] /*選んだ捨牌候補を3枚設定*/, char te[14] /*手牌*/, char dora/*ドラ*/); みたいな形の捨牌選択関数を各自実装して、 www.geocities.jp/mitsuruakuukan/nanikiru.html のサイトとかから拾ってきた問題を、以下のように実行して総得点を比較するとか。 int main(void) { char answer[3]; // 捨牌候補 int total = 0; // 総得点 // 0x01-09 万子, 0x11-19 筒子, 0x21-29 索子, 0x31-34 風牌, 0x41-43 三元牌 { // 問題1. eval(answer, "\x03\x04\x04\x05\x06\x06\x07\x09\x09\x17\x18\x18\x27\x29", 0x42); for (char *p = "\x18\x04\x29\x09\x27"; *p; p++) // 正解の捨牌候補一覧と比較 if (strchr(answer, *p)) total++; // 正解なので 1点プラス } // 以下同様に52問まで解かせてみる printf("総得点は%dです\n", total); // 最終結果出力
211 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 01:37:26 ] 現在の手牌だけじゃなくて、結局、他家の捨て牌、点数状況、ラス前何局か、親か、 といった全体状況がないと分からないでしょ。 しかも正確な強さの評価が難しい。 結局、半チャンを1万回ぐらいやらせて平均順位を見る、といった方法しか ないと思う。しかも結果は、 1位:平均2.154位、 2位:平均2.188位、 とかのものすごい微差にしかならない。おそらく。 強い麻雀プログラムを作るよりは ・最大のシャンテン数はいくつか ・最も上がりにくい配牌はどういった形か。 ・リーのみ、の手に載りうる裏ドラは最大いくつか、 といった問題を解くほうが、数学的には面白いと思うのだが。
212 名前:デフォルトの名無しさん [2007/04/11(水) 01:41:16 ] >>210 問題とかすより1000曲くらい対戦させろ
213 名前:デフォルトの名無しさん [2007/04/11(水) 01:42:19 ] > 数学的には面白いと思うのだが。 つまらん
214 名前:デフォルトの名無しさん [2007/04/11(水) 01:43:30 ] >>211 微妙でも強いものは強い
215 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 01:52:19 ] >>210 万子がま○こに見えた俺オワタorz
216 名前:デフォルトの名無しさん [2007/04/11(水) 01:54:10 ] >>211 強さが同じなら、順位は2.5になる これを下回ったら弱い 2を切れたら圧倒的な強さだろう
217 名前:デフォルトの名無しさん [2007/04/11(水) 02:01:16 ] rateを導入するか、仮想の金を導入して稼げたやつが強いってしたらどうだ
218 名前:デフォルトの名無しさん [2007/04/11(水) 02:04:27 ] プロリーグの順位計算方法おしえろ www.ma-jan.or.jp/title_fight/pro_24.php
219 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 02:04:50 ] 麻雀マンガとかだと、平均順位よりは、総合得点で競ってるから、 その方がいいかもね。
220 名前:デフォルトの名無しさん [2007/04/11(水) 02:08:53 ] >>219 僅差でも、勝った方が強い方とした方がいい 競馬でも、2位は駄目だ 勝てば官軍だ
221 名前:デフォルトの名無しさん [2007/04/11(水) 02:21:32 ] 一試合 = 東風戦だな rateは、例えば初期値1500(万円)持ってて 4位が、1位に2(万円)支払い、 3位が2位に1(万円)支払うでどうだ? 750回連続で負け続けると破産
222 名前:デフォルトの名無しさん [2007/04/11(水) 02:22:50 ] 共通の通貨が設定してあれば、新参者(プログラム)が参加しやすくなるというメリットがある
223 名前:デフォルトの名無しさん [2007/04/11(水) 02:38:00 ] 一試合 = 一局にしないか 親というルールを無くすんだ 誰もが平等にする すると試合回数が多くできる
224 名前:デフォルトの名無しさん [2007/04/11(水) 02:39:52 ] 短くするほど、敵より速く上がる事が大事になってしまうな 戦略性がなくなるな
225 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 02:51:53 ] 公式なコンピュータ麻雀大会、が欲しいね。 囲碁や将棋はあるのに、なんで麻雀だけないのかな?
226 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 02:59:52 ] 麻雀は下賎だから。
227 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 03:05:33 ] トランプのブリッジには一応、世界選手権があるのに。 コンピュータブリッジ世界選手権 ttp://www.osk.3web.ne.jp/~mcbridge/tourn_j11.htm
228 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 03:13:23 ] >>225 プロがカスだからじゃね?
229 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 07:56:57 ] >>225 自分で主催したらいいじゃん
230 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 08:22:43 ] >>225 賞金よろしく
231 名前:デフォルトの名無しさん [2007/04/11(水) 12:01:51 ] 賞金10万が最低ラインとして 参加費2000円が限度だとして 50人集まれば運営可能
232 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:09:26 ] 大会っていっても、半チャン6回戦の総合得点、とかで優勝を決めるわけ? それなら見てる分には面白そうだけど、運の要素が大きすぎ。 じゃ、1000局対戦させて平均順位で、つーのも、 見てる方は、3時間ぐらい待ってるだけ、という味気なさ。 せいぜい、平均順位が1分単位くらいに変動するのを見て一喜一憂するだけでしょ。
233 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 19:34:46 ] >>231 参加費を賞金に当てると賭博行為になるから注意しる 以前、それで潰された大会がある
234 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 20:06:09 ] 一位に渡すのは換金チケットorトークン的な何かにしておいて、それそのものの価値は換金できる以外にないようにしておいて。 後日それを買い取るという名目で賞金を支払うor振り込むといいんじゃないかとおもった。
235 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 20:13:13 ] それなんてパチンコ?賭博行為にならなくてもヤーさんや北朝鮮に睨まれる方が怖いと思われ。
236 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 20:16:14 ] つか、仮に大会開いてもどうやって勝敗を見るんだろうね。 一応千回ぐらいは同じ同じ面子で打ち続けてってのを参加者分だけ繰り返すんだろうか? 一回二回じゃ強さは運に左右されちゃうから大変だよな。 画面を出力しないとしてもどれだけかかるんだろう・・・
237 名前:デフォルトの名無しさん [2007/04/11(水) 21:23:40 ] サーバーに登録すると、ランダムに対戦者を選んで対戦してくれる 例えば、参加期間は7月1日からとかにして 元々1500 rate持ってて、2000 rateを初めて達成したものの勝ちとする 4位が1位に2 rate 、3位が2位に1 rate渡す その日の対戦成績をネットにアップ
238 名前:デフォルトの名無しさん [2007/04/11(水) 21:25:39 ] すべて同じ強さだと、いつまでたっても終わらないかもしれないが 平均順位が2位くらいのプログラムがあれば500試合もすれば優勝者が決まる
239 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:19:24 ] プログラム組む前に議論する事か? 誰かがプログラム組んでから議論したら?
240 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:24:29 ] そうだね。じゃあ組んで。
241 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:56:30 ] 自動的に何百試合もするのは結構だが、判定にバグが無いかは誰がチェックすんの?
242 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:59:14 ] >>241 ログを取っておいてあとで人間がチェックすればいいじゃん
243 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:52:36 ] リアルタイムにやるか後でやるかの問題じゃなくて、何百試合分人間がチェックするの?
244 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 17:08:39 ] 基本的には判定ルーチンを信用して、 牌譜を公開しておけばいいと思うよ チェックするのは当事者の自由、ということで
245 名前:デフォルトの名無しさん [2007/04/12(木) 18:23:15 ] サーバプログラムを後悔すればよい
246 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:51:41 ] なんだかんだ言っても、結局株ロボみたいになって盛り下がると思うよ。
247 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 13:34:54 ] 競馬予想とかw
248 名前:デフォルトの名無しさん [2007/05/07(月) 14:24:53 ] members.jcom.home.ne.jp/hennano/maujong/java/mjai_iface.html こんなんではダメなんか?
249 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 00:16:02 ] >>248 開発が止まっているのと、オートでぶんまわすような用途としては使いづらそうなのがネックなんだよな。 今perlでちょろっと向聴数判定から書いてみているのだが、これはこれで速度的に辛い気がしてきた。。。
250 名前:デフォルトの名無しさん [2007/05/08(火) 04:46:19 ] シャンテン数計算ができたとしても、シャンテン数落として高め狙いにいく場合など 考えるともうキリがないな それこそシャンテン数計算が意味のないことになるかも 将棋みたく項目ごとにポイント割り振ってトータル点数の高い手を選択するようにすべきか
251 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 06:41:42 ] >>250 >それこそシャンテン数計算が意味のないことになるかも それは最初から分かっている。
252 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 08:41:11 ] >>250 向聴数が分からないと、向聴数が落ちるのかどうかも分からないだろ。
253 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 17:49:18 ] 向聴数は、七対と国士と一般的な和了り形の三つで独自に計算して最も小さい値を適用するようにすればいいんじゃね? 一気に調べるのは不可能だと思うな。
254 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 17:58:36 ] 実戦じゃ国士やチートイを狙うかどうか決めてからじゃないとこれらの向聴数は 参考にならない気が
255 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 18:02:37 ] 国士は配牌で行くかどうかの閾値を決めておけばいいだろう。 たとえば、点数が20000以下で配牌が九種九牌以上なら国士無双を狙うとかね。 七対については、普通の役を狙っていると、もしくは配牌から対子の数が四つ以上になったら狙うとかね。 もちろん、この基準はどうでもいいんだけど
256 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 20:33:36 ] ちぃ問いは普通の役と天秤にかけるから
257 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 00:44:08 ] >>254 それを決めるためにも向聴数が必要になるんだよ。 人間も配牌見た瞬間に(正確ではないにしろ)国士狙いなら6向聴、七対子なら4向聴で、メンツ手なら3向聴。だからメンツ手で進めていこうという流れで手の方向を考えるだろ? 判断を下す以前の基本情報として必要だろう。 何故、意味が無いとか参考にならないなどと思うのか。
258 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 08:03:14 ] >>257 >判断を下す以前の基本情報として必要だろう。 > >何故、意味が無いとか参考にならないなどと思うのか。 向聴数を求めるためのコストと 向聴数というものが与えてくれる情報の価値とを 天秤にかけた場合、どうしてもコストの方が高すぎるから。 >>171 参照 >人間も配牌見た瞬間に(正確ではないにしろ)国士狙いなら6向聴、 >七対子なら4向聴で、メンツ手なら3向聴。 >だからメンツ手で進めていこうという流れで手の方向を考えるだろ? それはいわゆる「決め打ち」だろ? 初心者の打ち筋だね。
259 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 08:09:31 ] >>171 って それはいわゆる「総当り」だろ?初心者のアルゴリズムだね。
260 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 08:23:39 ] 多少枝狩りしても、重いことには違いない。 麻雀では最悪5向聴までありえた筈だし。
261 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 10:33:35 ] >>258 決め打ちといえばナルミだな 23578リーチの3連荘はかっこよかったな
262 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 10:38:55 ] 向聴数を求めるためのコストってそんなに高いか?
263 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 10:40:46 ] >>258 > 天秤にかけた場合、どうしてもコストの方が高すぎるから。 > >>171 参照 これは無い。 メンツ、塔子を数えれば向聴数は分かる。 >>193 見れ。 普通に1ミリ秒以下で求まるよ。 > それはいわゆる「決め打ち」だろ? 初心者の打ち筋だね。 小島武夫に謝(ry えー、人間は無意識のうちに、向聴数に基づいた判断をしてるでしょ。いい配牌だ、とかそんな感じで。 そういう人間が無意識にアバウトに行う判断を、コンピュータにやらせるためには、結局向聴数という形で計算してやる必要があるってこと。 もちろん他にも色々判断材料を用意する。 だけど、じゃあ向聴数は考えなくても良いかというと、そんなことにはならないだろうと考えてるんだよ。
264 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 15:00:30 ] >>263 いや、>>193 の方法では完璧なシャンテンスウは求まらないよ。 揃っていないチンイツを正確に判断できないだろ?
265 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 15:50:44 ] >>264 手許で実験してみたけど、普通に出来たっぽい。 清一向聴数当てゲームとか勢いでこしらえてみたけど 超面白い。JavaScriptに今移植中。
266 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:10:24 ] perl -e 'print "ロン!\n";'
267 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:32:08 ] WScript.Echo("御無礼");
268 名前:デフォルトの名無しさん [2007/05/09(水) 19:43:45 ] System.out.println("あ、すまん。少牌だこれ");
269 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:09:31 ] >>265 「実験した」って・・・? だって、まだソースは上げられていないだろ?
270 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:16:22 ] ああ、失礼。 >>265 = >>193 なのね・・・ で、1万局ランダムでテストパターンを作ったらしいけど、 それ、ちゃんと全て「正しい向聴数を求めている」事を確認したの?
271 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 00:36:25 ] >>270 193じゃないよ。 アイデアだけパクらせていただきました。 でも、たまに張ってもいないのにダブリーとか 勝手にしやがってたので今デバッグ中。 もうね、手段が目的になっちゃって楽しすぎ。
272 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 00:41:22 ] >> 271 だめじゃんw 面子多多の場合とかの処理が結構難しいんだよな。 良かったら、判定ミスった時の牌姿を張ってくれまいか? > もうね、手段が目的になっちゃって楽しすぎ。 激しく同意。
273 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:39:25 ] お、久しぶりにのぞいてみたらスレ活発じゃん。 鯖の枠組みだけ作ってあってクライアント作るのまんどくさくて放置してある奴見直してみようかな。
274 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:53:41 ] 向聴数求めるの難しいよなぁ
275 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:17:59 ] 俺も興味ある。清一の時に正しく求められないって例えばどういう状態?
276 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:39:20 ] >>275 多分 >>264 の話だと思うが、 そんなの実際にソースを出さないと 議論にならないだろ?
277 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:47:41 ] 正直、シャンテン数なんか求めても仕方がなくて 「高得点で上がれる確率」 を求める方がより本質的。山に1枚しかないイーシャンテンより 山に16枚あるリャンシャンテンの方が価値があるし。 。。。でもシャンテン数は正確に求めてみたいんだよな。
278 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:53:13 ] >>277 シャンテン数を求めずにどうやってイーシャンテンやリャンシャンテンを知るんですか? シャンテン数を求めずにどうやって有効牌を知るんですか?(有効牌=シャンテン数を下げる牌)