おまいら最強の麻雀プログラムしてみろよ
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/01/24(水) 21:40:36麻雀に関するスレがなかったので、立ててみました。
<参考サイト>
とつげき東北HP
http://www.interq.or.jp/snake/totugeki/
まったりプログラミング日誌
http://kmo2.cocolog-nifty.com/prog/
あらのHP
http://www8.plala.or.jp/ara3/
デジタル麻雀論
http://www.jan-x.jp/
0002デフォルトの名無しさん
2007/01/24(水) 21:44:090003デフォルトの名無しさん
2007/01/24(水) 21:45:120004デフォルトの名無しさん
2007/01/24(水) 21:58:23それだと、コンピュータに親がまわってくるまでに、
プレイヤが勝ってしまう恐れがあるのではないだろうか。
0005デフォルトの名無しさん
2007/01/24(水) 21:59:360006デフォルトの名無しさん
2007/01/24(水) 22:03:350007デフォルトの名無しさん
2007/01/24(水) 22:43:19つ「スーパーリアル麻雀P2」
0008デフォルトの名無しさん
2007/01/25(木) 05:23:250009デフォルトの名無しさん
2007/01/25(木) 15:20:54上がった形を作っておいて、あとはランダムに上がるという
ように作ってあったらしい。
0010デフォルトの名無しさん
2007/01/25(木) 23:02:590011デフォルトの名無しさん
2007/01/26(金) 00:08:190012デフォルトの名無しさん
2007/01/26(金) 07:01:42今回は結構期間が空いていたな。
次に立つのは夏休み中ぐらいだろう。
0013デフォルトの名無しさん
2007/01/27(土) 19:31:450014デフォルトの名無しさん
2007/01/28(日) 21:09:50配牌も同じプログラムで行うってことかな?
それとも、配牌とサイコロはランダムなり、専用プログラムでおこなって、
4種のプログラムで対戦をおこなって最強を決めるということかな?
0015デフォルトの名無しさん
2007/01/28(日) 23:49:47元緑積みができるとか。
0016デフォルトの名無しさん
2007/02/01(木) 19:58:52コンピューターだけ揃いやすいように。
0017デフォルトの名無しさん
2007/02/02(金) 03:43:11ときどきゲームでイカサマなし!ってうたってるのがあるけど、
そーいうの同士で、大会とかないのかね?
麻雀で強いアルゴリズムというのを知りたい。
0018デフォルトの名無しさん
2007/02/18(日) 12:33:08俺には上がり判定すら作れそうにない。。。
0019デフォルトの名無しさん
2007/03/11(日) 14:33:320020デフォルトの名無しさん
2007/03/11(日) 15:03:28防御的な思考や順位を考慮した思考を入れると面倒そうだ。
0021デフォルトの名無しさん
2007/03/11(日) 21:01:44それでいいから、
トンプウソウとかに突撃してみてくれ。
0022デフォルトの名無しさん
2007/03/11(日) 21:31:580023デフォルトの名無しさん
2007/03/12(月) 10:29:040024デフォルトの名無しさん
2007/03/12(月) 11:27:180025デフォルトの名無しさん
2007/03/12(月) 12:31:44東風荘でいいんじゃね?
0026デフォルトの名無しさん
2007/03/12(月) 19:43:55何回か対戦を自動で行って成績を表示なんてどうよ。
0027デフォルトの名無しさん
2007/03/13(火) 11:01:00結論ありきだからおもしろくね
0028デフォルトの名無しさん
2007/03/13(火) 11:49:19仕様として決めていくといいかもね
0029デフォルトの名無しさん
2007/03/13(火) 12:01:240030デフォルトの名無しさん
2007/03/13(火) 13:35:280031デフォルトの名無しさん
2007/03/14(水) 03:10:53で、結局結論は?
0032デフォルトの名無しさん
2007/03/14(水) 23:27:300033デフォルトの名無しさん
2007/03/15(木) 10:20:3800341
2007/03/15(木) 10:52:42麻雀の思考アルゴリズムについて意見を交換する場を設けようと思い、
このスレを立てたのですが、スレを見てると麻雀プログラムの対戦システムの方に
興味をお持ちの方が多いようで驚きました。
0035リバーシ1
2007/03/15(木) 13:56:42まず14枚をランダムで配る そして何を捨てるのがいいか調べるアルゴリズム
もし、役が出来ていたらbreakする
残りごまの中から、一枚ランダムに加えて、どれか一枚を捨てたら
役が出来るなら、その駒が選ばれたとカウントする(もっとも得点が高くなる駒を選ぶ)
役が出来ていないならば、もう一枚加えて、どれか二枚を捨てたら
役が出来るなら、その駒が選ばれたと0.5ずつカウントする
終局までに、どんな役も揃わなかったら、カウントしない
これを1万回くらい繰り返すと、役が揃いやすい捨て駒にカウントが集まる
敵からのリーチ、一発があるときは、手を変える事もあるがあとで
ぽん、かん、ちーが出来るときは、するかどうか、1万回くらい試行して決める
0036デフォルトの名無しさん
2007/03/15(木) 14:09:53ネタがなければ話題は転がらないよ。
0037デフォルトの名無しさん
2007/03/15(木) 19:32:000038デフォルトの名無しさん
2007/03/16(金) 06:04:46それじゃ自分の手しか見えないド素人の打ち方じゃないかw
他人の捨て牌も見ない、点数状況も参照しないじゃ
いくら牌効率が高い打ち方をしても勝てるのは初心者までだよ。
0039デフォルトの名無しさん
2007/03/16(金) 11:07:30オーラスで接戦なのにドベ確定の平和で上がりそうだなw
0040デフォルトの名無しさん
2007/03/16(金) 18:40:00完全にならないな
100万回くらいやらないと、そのロジックが強いかどうか判断できんのじゃないかな
0041デフォルトの名無しさん
2007/03/16(金) 22:12:450042リバーシ1
2007/03/17(土) 03:54:291万回くらい試行してみて最短の手数をみれば良い
0043リバーシ1
2007/03/17(土) 03:57:33作ることが重要だ
ここが出来れば、麻雀プログラムはほぼ完成したといえるだろう
0044デフォルトの名無しさん
2007/03/17(土) 06:22:57一致したら得点を渡すようにするか
たとえば、ハッシュテーブルなんかに記録しておく
すると、計算量はハッシュ関数の計算だけですむ
0045デフォルトの名無しさん
2007/03/17(土) 06:26:03それじゃ麻雀のルールしか知らないド素人じゃないか。
せめて自分の切ろうとしている牌がどれほど危険かどれほど安全か、
それを決めるための評価関数作らなくちゃ話にならない。
0046デフォルトの名無しさん
2007/03/17(土) 06:27:08数字の2があったら、例えば154621という数字を割り当てて
それぞれの、XORを取る するとハッシュ値がでる
0047デフォルトの名無しさん
2007/03/17(土) 06:29:46リーチ以外は、感に頼るほかなく
敵があと何駒で上がるのかを予測することは不可能
リーチ、一発の時だけ手を変えるようにするのがいい
0048デフォルトの名無しさん
2007/03/17(土) 06:34:370049デフォルトの名無しさん
2007/03/17(土) 06:35:33その得点とハッシュ関数を求めるルーチンを作ろうぜ
0050デフォルトの名無しさん
2007/03/17(土) 06:36:48堂々と生牌切ることになるよね
0051デフォルトの名無しさん
2007/03/17(土) 06:38:00CPU/HDDリソースなんて有り余ってるから
たいしたことにはならないと思うけど。
0052デフォルトの名無しさん
2007/03/17(土) 06:39:53自分の上がれる確率が、一般的なものよりも低いならば
降りる(敵の捨て駒を捨てれ)ばよい
0053デフォルトの名無しさん
2007/03/17(土) 07:37:17その四人の、最終局面で上がった回数が10回
1手前のとき20回、2手前15回だとしたら
標準的に、
最終局面の上れる確率は、10/4000
1手前の上れる確率は、30/4000
2手前の上れる確率は、45/4000
となる
他の三名のうちいずれか一人が上がれる確率は、この三倍だ
(親と子で分布が変わるかもしれないがここでは省略する)
そして自分の上がれる確率がそれより低いなら手を変える
0054デフォルトの名無しさん
2007/03/17(土) 07:48:43そのアルゴリズムが強いと言える根拠はどこにあるか示してくれよ。
常に安牌があるわけじゃないし、どれが「比較的」安全な牌かを
評価する手段がなきゃどう考えたって強くはなれないだろ。
0055デフォルトの名無しさん
2007/03/17(土) 07:54:34もっとも最近に捨てられた駒や、
もっとも多く表に出ている駒や、
北東南西や、
ドラでは無い駒が安全
0056デフォルトの名無しさん
2007/03/17(土) 07:55:260057デフォルトの名無しさん
2007/03/17(土) 07:56:01特にリーチ後は、その人の捨て駒と、リーチ後の捨て駒が安全
0058デフォルトの名無しさん
2007/03/17(土) 08:01:07しかもそんな分かりやすい安牌が常に手元にあることの方が珍しいし、
本当に麻雀やってるのかどうかすら怪しい。
東風荘でもどこでもいいから、機械的にそういう打ち方をして
どれだけ勝てるかちょっと実証実験してくるといいと思うよ。
0059デフォルトの名無しさん
2007/03/17(土) 08:12:15どれを捨てても同じだっら>>55の選び方でも特に負けやすいことは無いはず
0060デフォルトの名無しさん
2007/03/17(土) 08:16:43なに待ちが多いか統計を取っておこう
なにもわからなかったときこの統計を使う
0061デフォルトの名無しさん
2007/03/17(土) 08:22:11はぁ?
つまりプロが、麻雀で飯を食ってるプロが、「捨牌を『読む』」という行為は
完全に無駄だと言いたいわけですね?
最も最近捨てられた牌、最も多く捨てられている牌、ドラではない牌を
ただ機械的に『見て』選んで捨てれば安全なんだから。
0062デフォルトの名無しさん
2007/03/17(土) 08:23:47見えている駒から、どんな役がどのくらいの確率で揃うのかは計算できる
そうすれば統計的に多く点を奪われる駒が判明する
0063デフォルトの名無しさん
2007/03/17(土) 08:26:18あと一枚で上がりのとき以外は、捨牌を読んでも意味がないとおもうが
0064デフォルトの名無しさん
2007/03/17(土) 08:28:07とりあえず君に麻雀を語る資格がないのはよく分かった。
一応聞いておくけど、麻雀を始めてから何年ぐらい?
ネット麻雀やってる? やってるとしたらどこで、レートはどれくらい?
0065デフォルトの名無しさん
2007/03/17(土) 08:30:10リバーシの勝敗は判るが、
麻雀、囲碁の勝敗と得点は判らない
将棋はアマ三段の免状あり
0066デフォルトの名無しさん
2007/03/17(土) 08:34:08見えていない相手の役を揃わせないようにするよりは
自駒を最短で揃えるようにした方がよいと思う
人間では何を捨てれば統計的に最善なのか判断出来ないはず
0067デフォルトの名無しさん
2007/03/17(土) 08:35:49将棋はさっぱりだけど、俺もチェスはやる。
で、君は将棋みたいに決定論的なゲームと、
ランダムの要素が絡む麻雀とをごっちゃにしすぎ。
0068デフォルトの名無しさん
2007/03/17(土) 08:36:100069デフォルトの名無しさん
2007/03/17(土) 08:40:19捨牌にも影響する
どうしてもランダムの部分は予測できない
多く得点を取られる可能性を避ければよい
0070デフォルトの名無しさん
2007/03/17(土) 08:47:05役が揃ったときには、その各駒に役の得点を加算する
これを1万回くらい試行すると危険駒の得点が高くなる
0071デフォルトの名無しさん
2007/03/17(土) 08:47:10>>61
0072デフォルトの名無しさん
2007/03/17(土) 08:50:36コンピュータには難しい
経験のないコンピュータのとれる手段は確率的に有利な手を選ぶことだ
0073デフォルトの名無しさん
2007/03/17(土) 08:56:26守りアルゴリズムは>>70です
役判定とハッシュは>>44>>46です
まともらプログラムがなかなか出来ないので代わりに作って確かめてもらえないですか
0074デフォルトの名無しさん
2007/03/17(土) 09:48:32自局面は、int型の変数一つで表現できる
>>70で点数が0のままならば、どんな組み合わせに対しても
役が揃わないということなので確実に安全
自分の捨牌を考えなければならないので、
自他問わないポン、チー、捨牌、ドラ以外の駒 + 重複を無くした自駒
のなかからランダムに選ぶ必要がある
0075デフォルトの名無しさん
2007/03/17(土) 10:09:430〜33までを次のように割り振る
萬子、索子、筒子、東、南、西、北、白、発、中
34番からは、もう一巡する
ハッシュ値について
0〜143番までに、0から2の20乗くらいの数字をランダムにつける
手持ちが、0番と10番と30番ならば、上でつけた数字のxorを取る
それをハッシュ値とする
0076デフォルトの名無しさん
2007/03/17(土) 10:28:43http://www5f.biglobe.ne.jp/~kenmo/program/majang/yaku/yaku.html
0077デフォルトの名無しさん
2007/03/17(土) 10:33:05渡したら、役(点数)を返すルーチン作ってくれないですか
0078デフォルトの名無しさん
2007/03/17(土) 12:00:11まずは同一型を初めの方の番号に変換することだ
そしてそれをソートすればすべての局面が求まる
それを順にディスクに保存しよう
そのデータを使って次に役になっている局面を抽出だ
0079デフォルトの名無しさん
2007/03/17(土) 12:04:30いったい何通りあるのだろうか
0080デフォルトの名無しさん
2007/03/17(土) 12:13:590081デフォルトの名無しさん
2007/03/17(土) 13:13:26余分8枚は花牌とかなの?
それとも(プログラム処理上の)仮想牌?
0082デフォルトの名無しさん
2007/03/17(土) 13:22:36萬子9、索子9、筒子9、東1、南1、西1、北1、白1、発1、中1 = 34枚
×4 =136枚だった
0083デフォルトの名無しさん
2007/03/17(土) 13:29:21これを標準型に直してからハッシュ値を求めれば32 bitでいけるか?
ほとんどの組み合わせは役無しだろうから、そのときはハッシュ値は衝突してもよいが
役ありのときは衝突しないようにしたい もっとも短いビットはいくつだろうか
ハッシュ値の速度も大事だ
0084デフォルトの名無しさん
2007/03/17(土) 13:32:55ハッシュ値が20ビットだとハッシュテーブルは2Mバイト必要
24bitだと32Mバイト必要
確保できるのはせいぜいこのくらいまでだろう
24bit以下のハッシュ関数を作れるか?
0085デフォルトの名無しさん
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);}}
0086デフォルトの名無しさん
2007/03/17(土) 13:54:31乱数になってなかった
ループしてる
ここを参考にしたのだが
http://hp.vector.co.jp/authors/VA004808/random1.html
0087デフォルトの名無しさん
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);}}
0088デフォルトの名無しさん
2007/03/17(土) 14:09:14役判定なんて速度はそれほど要求されないし。
0089デフォルトの名無しさん
2007/03/17(土) 14:18:32しかし、モンテカルロ法とか使って上がれる確率、トップを取れる確率が
最大になる捨て牌を、とかなったら、少しでも高速で判定できるにこしたことはなさそう。
0090デフォルトの名無しさん
2007/03/17(土) 14:23:070091デフォルトの名無しさん
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; }
009291
2007/03/17(土) 14:52:17009391
2007/03/17(土) 14:55:25鳴き、リーチ無しのときの役判定は、鳴きのときにも使えますか?
0094デフォルトの名無しさん
2007/03/17(土) 15:03:02リーチは1役、ダブルリーチは2役上がる
使える。
てかルール調べた方が早くね?
009591
2007/03/17(土) 15:10:11unsigned short int rnd(){
int ransuusyokiti =
↓
unsigned short int rnd(){
ransuusyokiti =
でした
0096デフォルトの名無しさん
2007/03/17(土) 15:17:38そうですかわかりました
0097デフォルトの名無しさん
2007/03/17(土) 15:39:19牌をセットして標準化して表示するところまで来た
http://up2moe.moe.hm/img/q921.txt
0098デフォルトの名無しさん
2007/03/17(土) 16:12:560099デフォルトの名無しさん
2007/03/17(土) 16:24:500100デフォルトの名無しさん
2007/03/17(土) 16:38:08確認してくれ
http://up2moe.moe.hm/img/q923.txt
ここを参考にした
http://www5f.biglobe.ne.jp/~kenmo/program/majang/agari/agari.html
0101デフォルトの名無しさん
2007/03/17(土) 16:41:15麻雀プログラムはほぼ出来上がったとみて良いと思うのだが
ここが山だな
0102デフォルトの名無しさん
2007/03/18(日) 12:39:56役つくりが一番難しいと昔思ったけど
配パイ時に欲しい牌を固定してしまえば楽かな
0103デフォルトの名無しさん
2007/03/18(日) 16:46:56まあゲームとして必要な最低ラインだね
最強のものを作るんだから
どんなアルゴリズムにするとか
ここから話がはじまるのでは?
0104reverse_1
2007/03/18(日) 16:48:53あと4プログラムを対戦させるやつの開発は進んでるの?
ハッシュはどうやらすべての役を記録するのは難しいかもしれない(かなりメモリを食う)
可能な役の数をざっと計算してみたら、26×10の20乗通りある
ハッシュ長は25 bit必要になる
0105デフォルトの名無しさん
2007/03/19(月) 03:09:34プロなら分からないような指技使うがw
0106デフォルトの名無しさん
2007/03/19(月) 03:22:11他の奴はそれに接続して対戦って感じで競わせたらどうよ。
思考時間1秒以内で。
それ以上だと人間が打てちゃうしw
1秒って言っても順番回ってくる前に何が来たら何を切るぐらい考えられるし実際の思考時間結構長い。
切る1s→鳴き・和了待ち1s→切る1s→・・・って感じだと1週8秒
ツモ切りかどうかは鯖から情報貰えば良い。
ホスト側(役計算とか)の方の議論多いけど
役計算のプログラムってそこらに転がってないか?
アルゴリズムだって決まってるだろうし。
俺作っても良いけど誰かやるんか?w
0107デフォルトの名無しさん
2007/03/19(月) 21:20:07>俺作っても良いけど誰かやるんか?w
「俺作ったけど、誰かやるんか?」
だと説得力あるんだけどなぁ・・・
0108デフォルトの名無しさん
2007/03/19(月) 22:18:23思考部がプラグイン化されていて、将棋の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
0109デフォルトの名無しさん
2007/03/19(月) 22:30:22やっぱ既にあるのか
0110デフォルトの名無しさん
2007/03/19(月) 22:43:27============== 終了 ==========================
0111デフォルトの名無しさん
2007/03/19(月) 23:35:210112デフォルトの名無しさん
2007/03/20(火) 00:23:30http://www.amy.hi-ho.ne.jp/ishihata/maujong/iface.html
==================== 開始 ======================
0113reverse_1
2007/03/20(火) 07:44:52ソフトの種類: GPL
作者: tmk
------------------------
シンプルな麻雀ゲームです。
http://www.vector.co.jp/soft/win95/game/se316229.html
0114デフォルトの名無しさん
2007/03/21(水) 15:08:290115デフォルトの名無しさん
2007/03/23(金) 00:10:31上がるだけでもけっこう大変だな
0116デフォルトの名無しさん
2007/03/23(金) 00:20:500117デフォルトの名無しさん
2007/03/25(日) 17:38:22http://pc11.2ch.net/test/read.cgi/gamedev/1105332492/
0118デフォルトの名無しさん
2007/03/29(木) 19:58:44オーラスまでの確率を全て求め、相手(3人)の行動と配牌やツモ配、ドラなどから
最終的にプラスになる可能性が高い牌を選んで捨てていけばいいと思います。
ただ、膨大なデータが必要でスーパーコンピュータでもできるかわかりませんが
最強ではないでしょうか?
0119デフォルトの名無しさん
2007/03/29(木) 20:23:040120デフォルトの名無しさん
2007/03/29(木) 20:40:18考えが浅いです。
もうちょっと頑張りましょう。
0121デフォルトの名無しさん
2007/03/29(木) 22:04:09場合にも国士無双が上がれる確率まで求めちゃうの?
うわ、意味ねー
0122デフォルトの名無しさん
2007/03/29(木) 22:07:06確率上の最強のプログラムができても、
そのプログラムに勝てるプログラムを作る事が可能。
結局はプログラムのいたちごっこになる。
そもそも麻雀における最強というものが存在しない。
0123デフォルトの名無しさん
2007/03/29(木) 22:09:32戦略も経験や知識として知っていないと駄目。
0124デフォルトの名無しさん
2007/03/29(木) 22:15:27ごめ、実はもっと意味ないんだけど
最初の親決めからオーラスまでの全ての事象のパターンをだして
最終的にプラスになる可能性が高い方の牌を選んでいくって事
0125デフォルトの名無しさん
2007/03/29(木) 23:01:530126デフォルトの名無しさん
2007/03/29(木) 23:31:12最初に、「確率上の最強のプログラム」を作れよ。
「机上の空論」から始めろよ。
何もできてないくせに、「戦略」とか「経験」とかプログラムを落としにくい
要素を議論しても、意味無いじゃん
0127デフォルトの名無しさん
2007/03/29(木) 23:40:01ボナンザもバックエンド専用ソフトで、フロントエンドは誰かのを借りてるよね。
0128デフォルトの名無しさん
2007/03/30(金) 00:34:400129デフォルトの名無しさん
2007/03/30(金) 00:43:24それともあらゆるルールに対応できるように?
0130デフォルトの名無しさん
2007/03/30(金) 01:25:46Java版のほうは割と使いやすそうだ。
0131デフォルトの名無しさん
2007/03/30(金) 02:17:02現実的にオーラスまでは無理だとしても
1巡先のあらゆるパターンを出してその中で最善のものを選ぶというのはどうだろう?
…といったもののそれでも膨大な量のパターンになってしまうが
0132デフォルトの名無しさん
2007/03/30(金) 02:21:080133デフォルトの名無しさん
2007/03/30(金) 02:28:18「プログラム入門に最適(これも嘘だが)!麻雀プログラムを作ろう」とかしとけば、
妙な人間は寄って来なかったろう。
0134デフォルトの名無しさん
2007/03/30(金) 03:13:33麻雀ではそういうのは無いの?
運の部分が大きいから、プロでも半荘くらいなら負けることもありそう。
強いのできたら、二階堂姉妹と対戦させて、脱がせたい。
0135デフォルトの名無しさん
2007/03/30(金) 04:10:00最強のプログラムを作るなら最強の定義を決めるのが先ジャマイカ?
0136デフォルトの名無しさん
2007/03/30(金) 04:46:330137デフォルトの名無しさん
2007/03/30(金) 12:26:37>将棋ソフトみたいに、共通のフリーのフロントエンドないかな。
>ボナンザもバックエンド専用ソフトで、フロントエンドは誰かのを借りてるよね。
ちなみに、>>113 の/console ディレクトリ以下には、
(本体と別に)標準入出力を使って1局打つための
サンプルプログラムがついている。
(何の説明も無いが・・・)
0138デフォルトの名無しさん
2007/03/30(金) 12:36:50>>112でいいじゃん
0139デフォルトの名無しさん
2007/04/01(日) 11:48:200140デフォルトの名無しさん
2007/04/05(木) 19:17:23ボナンザは24の棋譜を何万局か使用して最善手を選ぶ局面評価関数の最適化をしたんだよね。
だから、そんなかんじで高レートの人の牌譜を使用したら結構強いものができるんじゃないだろうか。
ていうか麻雀はすぐ人より強いものが作れそうな気がする。
ていうのは、
�@ その牌がツモ切りかどうか
�A もっと詳しく、その牌は配パイからあったものか、それとも何番目にツモったものか
�B �@、�Aを含め、それまでの配譜の全手順を完全に記憶できる
というあたりで、人間には不可能な解析ができるから。
まあここまで解析するのを許すかどうかはひとそれぞれだろうけど。
あ、ここでのすぐってのは、オセロやチェスよりも簡単だろうって意味で、もちろんだれでもすぐってわけにはいかんけどね。
おれもこれで食っていけるのなら作ってみたいが、ただの趣味でやるにはちょっとめんどくさいなー。
0141デフォルトの名無しさん
2007/04/06(金) 01:56:52ポーカーだともっと単純に似たようなことができそうだな
0142デフォルトの名無しさん
2007/04/06(金) 02:05:18あのー
麻雀の局面のパターン数なんてオセロやチェスと比較にならんくらい膨大だと思いますが
それとー
仮に同一局面が現れたとして、オセロやチェスと違って、麻雀は不確定要素が多すぎて
最善手なんて一意に決まらないと思いますが
総ての情報が詳らかになっているオセロやチェスの解析手法を麻雀やポーカーに応用するのは
無理があると思いますが
0143デフォルトの名無しさん
2007/04/06(金) 06:57:17絶対最強のアルゴリズムなんかないんだろうけど、
(多分、誰かが書き込していたじゃんけんのアナロジーが正解?)
でも、実際にプログラミングすることを考えると
確率重視になってしまうんだろうな。
で、そうなったら、麻雀の面白みって無くなるんだろう(ry
0144デフォルトの名無しさん
2007/04/06(金) 09:12:51そういうことじゃないんだよ
頭悪すぎ
0145デフォルトの名無しさん
2007/04/06(金) 09:13:35>>142ね
0146デフォルトの名無しさん
2007/04/06(金) 10:16:52待ち牌の数とか計算して少しでも多いほうを選ぶじゃん
0148デフォルトの名無しさん
2007/04/07(土) 00:06:110149デフォルトの名無しさん
2007/04/07(土) 00:31:44コンピュータ同士の場合と対人の場合では有効な戦略は変わってきそう
さらに対人の場合でも
相手がコンピュータであると知っているプレイヤーと
相手が人間だと嘘を教えられているプレイヤーとでは挙動が違いそう
…と、また何の具体性もない机上の空論を振り回してみる
0150デフォルトの名無しさん
2007/04/07(土) 01:10:470151デフォルトの名無しさん
2007/04/07(土) 01:29:56その上でコンピュータ自身はなるべく癖をださない。かといってイレギュラーさせることも必要だろう。
そういったプログラムを作ると、もう人間の手には負えないと思う。回数を重ねるほど勝てなくなる。
どういった分析をさせるかが、プログラマーの腕のみせどころになるんだろう。
そんで、そんなかんじで作ったコンピュータ同士を戦わせると、これは相性の問題になりそうな気がする。
0152デフォルトの名無しさん
2007/04/07(土) 03:16:46聴牌判定ルーチンを書ける奴すらいないんじゃね?
0153デフォルトの名無しさん
2007/04/07(土) 05:53:51自己紹介乙。
0154デフォルトの名無しさん
2007/04/08(日) 18:33:09丸々二日はもらわないと
書けない自信がある。
0155デフォルトの名無しさん
2007/04/08(日) 22:58:01いやさ、マージャンの「頭」はどんなに多くても、
「7つ」しかない。その「7パータン」を全部洗い出して、
一番近い「シャンテン」を出せばいいだけの話だろ。
0156デフォルトの名無しさん
2007/04/08(日) 23:24:04そんなに簡単なら書いたものを公開してほしいな。
おれも>>154同様、あまり効率よく書ける自信がない。
確率を考慮するとシャンテン数判定自体は、
勝ちに行くコアのエンジンにそのままでは使えない。
むしろ、麻雀のルールの的確なインプリメントの例として出してほしい。
0157デフォルトの名無しさん
2007/04/08(日) 23:43:50ちょwww
ここ、本当にプログラム板?
俺、本職じゃないけど、3時間で書けたぞ
アップローダあればいくらでもやるぞ?
0158デフォルトの名無しさん
2007/04/08(日) 23:52:19アップローダぐらい、
なぜ見つけられないのか、
むしろそちらの方が不思議だ。
0159156
2007/04/08(日) 23:55:01むしろ、麻雀がよく分かってないんだと思う。
>マージャンの「頭」はどんなに多くても、 「7つ」しかない。
実際、この意味がわからない。
0160デフォルトの名無しさん
2007/04/08(日) 23:55:47はい、どうぞ
http://www4.uploader.jp/dl/musashi/musashi_uljp00596.zip.html
パスワードは"gomi"で
0161デフォルトの名無しさん
2007/04/09(月) 00:24:02ま、言いたいことは色々あるけどさ・・・
とりあえず言っておかなくてはいけない事として、
一体全体そのソースの何処で
「シャンテン数を計算している」と
主張するつもりなんだ?
0162156
2007/04/09(月) 01:26:02ありがとう。
見たけど、見ただけじゃこれで評価ができてるってのがわからない。
適当に配牌を放り込んで結果を見てみることにするよ。
0163デフォルトの名無しさん
2007/04/09(月) 01:43:50これを堂々と他人に晒せるあたり、大物を感じさせるな、がんばれw
シャンテン数チェックと聴牌チェックを勘違いしてるんだろうけど
聴牌チェックだとしても酷いw
眠いんで詳しくは見てないが
・七対子と国士無双を判定してないぞ
・麻雀にはカンツがあるぞ、鳴きも考慮しろよ
・同じ手牌でもあがり形は一つじゃないぞ
君のアルゴリズムだと111223344を孤立牌x1、順子x2、対子x1と判定する
直したらまたアップしろw
0164デフォルトの名無しさん
2007/04/09(月) 14:12:19正解
0165デフォルトの名無しさん
2007/04/09(月) 14:17:11あと何手で聴牌するか、の何手かを出すんだぞ。
0166デフォルトの名無しさん
2007/04/09(月) 15:11:381ぐらいはしらみつぶしに探せばすぐわかりそうだけど、リャンシャンテンとかは
ひょっとしたら探索しないとダメ?
つか、最大のシャンテン数がそもそもわからん。6ぐらい?
0167デフォルトの名無しさん
2007/04/09(月) 15:17:09めちゃくちゃ時間がかかってもいいなら、シャンテン数を出すプログラムは
おそらく>>160の聴牌判定ルーチンを使えば簡単に書けそう。
0168デフォルトの名無しさん
2007/04/09(月) 15:29:31次のツモで得られる手牌は同じく34パターン。
この34パターンに対して、14枚の手牌のうち、一つだけ除いて聴牌判定ルーチンへ。
聴牌があるなら1シャンテン。
1シャンテンじゃなければ、34パターン × 14 = 476パターンに対して、次のツモで、、、(ry
0169デフォルトの名無しさん
2007/04/09(月) 15:45:150170デフォルトの名無しさん
2007/04/09(月) 15:52:12もう少し賢くするなら捨ててある牌や手持ちの牌を見て得られる可能性のある手牌を絞る。
0171デフォルトの名無しさん
2007/04/09(月) 16:09:532シャンテンを調べるのに必要な手牌 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
0172デフォルトの名無しさん
2007/04/09(月) 16:36:000173デフォルトの名無しさん
2007/04/09(月) 16:53:280174デフォルトの名無しさん
2007/04/09(月) 17:07:17頭をどれにとる?って計算してたらシャンテン数計算するのも面倒っぽい
0175デフォルトの名無しさん
2007/04/09(月) 17:42:530176デフォルトの名無しさん
2007/04/09(月) 17:45:020177デフォルトの名無しさん
2007/04/09(月) 17:49:56聴牌の形は変わらないだろうし、リンシャンはツモの1つとしていいのでは
0178デフォルトの名無しさん
2007/04/09(月) 18:32:51ハイパイ時よりシャンテン数下がるときって国士狙ってる時以外はなくないか?
0179デフォルトの名無しさん
2007/04/10(火) 00:59:54一発回避のときもある
0180デフォルトの名無しさん
2007/04/10(火) 01:42:480181デフォルトの名無しさん
2007/04/10(火) 01:45:41全ペアの95%くらいが役無しだろう
役無し判定が5 clock
役判定が100 clock
だとして初めに役がなければ、役判定しなくてすむ
0182デフォルトの名無しさん
2007/04/10(火) 02:21:320183デフォルトの名無しさん
2007/04/10(火) 02:22:48字牌が0枚、1枚、2枚、3枚、4枚などで分類する
0184デフォルトの名無しさん
2007/04/10(火) 02:26:22かなり高速にはなりそう。
例えば
147四六九
ならば147は後2枚、1〜9が必要。
四六九は後一枚必要。
こうしてあらかじめ全てのパターンを計算しておけば表を引くだけですむ。
同じ数値牌がたくさんあるときは大変そうだけど。
0185デフォルトの名無しさん
2007/04/10(火) 02:30:270186デフォルトの名無しさん
2007/04/10(火) 02:33:53シャンテン数の求め方 決定版
ランダムに残り牌を配って、いずれか14枚選んだとき役が出来る最小数を求める(一万回くらい試行する)
これでほぼ正解になる
0187デフォルトの名無しさん
2007/04/10(火) 02:36:59こんなチンイツなら2シャンテンか。
すべて同種の数牌だけの時で、3シャンテン以上になることってありうるのかな。
0188デフォルトの名無しさん
2007/04/10(火) 02:39:2799.9%正解じゃなくて100%正解なのが知りたいな。
0189デフォルトの名無しさん
2007/04/10(火) 02:40:57正確に求める必要がどこにある?説明せよ
0190デフォルトの名無しさん
2007/04/10(火) 03:40:06残り牌からランダムにa(15)を追加
a(1),a(2),・・・,a(15)のうちいずれか一枚をのぞいて役ありなら1
残り牌からランダムにa(16)を追加
a(1),a(2),・・・,a(16)のうちいずれか2枚をのぞいて役ありなら2
ランダム生成を繰り返して求めた数字以下である
0191デフォルトの名無しさん
2007/04/10(火) 03:41:150192デフォルトの名無しさん
2007/04/10(火) 07:44:58>こうしてあらかじめ全てのパターンを計算しておけば表を引くだけですむ。
そのパターンが何通りあるか、数えたのか?
実現可能な程度の数で収まるのか?
>>189
>正確に求める必要がどこにある?説明せよ
それは最強じゃないから。スレタイ嫁。
仮にその話はおいておくとしても、そもそも
それで「ほぼ正解になる」という証拠が提出されていない。
実際に試したのか?
・・・何か、妄想ばかりだな。
0193デフォルトの名無しさん
2007/04/10(火) 08:35:18(Pen4 3G、1万回のランダム配牌で0.15〜0.20秒)ができるよ。
牌追加型は、>>171が言うように、シャンテン数が増えると計算できなくなる。
0194デフォルトの名無しさん
2007/04/10(火) 08:48:470195デフォルトの名無しさん
2007/04/10(火) 09:27:15帰ったらソースをうpしてみる。
0196デフォルトの名無しさん
2007/04/10(火) 10:09:430197デフォルトの名無しさん
2007/04/10(火) 10:11:05批判は簡単だから、どうやったらシャンテン数が高速で計算できるか書いてくれ。
0198デフォルトの名無しさん
2007/04/10(火) 10:38:06これ出来なきゃ駄目だろ
0199デフォルトの名無しさん
2007/04/10(火) 10:49:29役判定はこのスレで出てたベースにサービス関数があるから
それにわたせばいい。
0200デフォルトの名無しさん
2007/04/10(火) 11:01:44どれに渡すって?
0201デフォルトの名無しさん
2007/04/10(火) 11:27:130202デフォルトの名無しさん
2007/04/10(火) 14:53:13windowsよくわからないから、配列渡せば役、得点返すやつ作ってクレー
0203デフォルトの名無しさん
2007/04/10(火) 16:38:19問題は必要な牌の数だと思うんだけど。
最強の戦術は棒テン即リー状況次第でベタオリだと思うんだけど。
それならシャンテン数よりは孤立したのを落とすだけでいいよね?
お前らもマージャンしててシャンテン数がわかるのがそんなに役立つときってあるか?
俺はシャンテン数は2ぐらいまでしかわかんないけどそれでも結構勝ててるぞ。
状況ってのは、たとえば先制リーチなら降りるとかあっちが先だけどこっちは国士13面だから攻めるとか。
どっちかっていうと期待値のどこらかで降りるか降りないかの閾値を設けてそれで判断するってので。
0204デフォルトの名無しさん
2007/04/10(火) 16:59:140205デフォルトの名無しさん
2007/04/10(火) 20:14:53それとも東風って、API(プロトコル)公開されてる?
0206デフォルトの名無しさん
2007/04/10(火) 21:23:390207デフォルトの名無しさん
2007/04/10(火) 21:46:40まあ通信処理とか書かなくて良いから良いか。
0208デフォルトの名無しさん
2007/04/10(火) 22:50:280209リバーシ1
2007/04/10(火) 23:02:540210デフォルトの名無しさん
2007/04/11(水) 00:30:03各自の技術云々よりも、作成したプログラムの評価をするのが難しいからだと思う。
では、それを簡便に評価する方法として「何切る?」を使うというのはどうだろう?
例えば
void eval(char answer[3] /*選んだ捨牌候補を3枚設定*/, char te[14] /*手牌*/, char dora/*ドラ*/);
みたいな形の捨牌選択関数を各自実装して、
http://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); // 最終結果出力
0211デフォルトの名無しさん
2007/04/11(水) 01:37:26といった全体状況がないと分からないでしょ。
しかも正確な強さの評価が難しい。
結局、半チャンを1万回ぐらいやらせて平均順位を見る、といった方法しか
ないと思う。しかも結果は、
1位:平均2.154位、
2位:平均2.188位、
とかのものすごい微差にしかならない。おそらく。
強い麻雀プログラムを作るよりは
・最大のシャンテン数はいくつか
・最も上がりにくい配牌はどういった形か。
・リーのみ、の手に載りうる裏ドラは最大いくつか、
といった問題を解くほうが、数学的には面白いと思うのだが。
0212デフォルトの名無しさん
2007/04/11(水) 01:41:16問題とかすより1000曲くらい対戦させろ
0213デフォルトの名無しさん
2007/04/11(水) 01:42:19つまらん
0214デフォルトの名無しさん
2007/04/11(水) 01:43:30微妙でも強いものは強い
0215デフォルトの名無しさん
2007/04/11(水) 01:52:19万子がま○こに見えた俺オワタorz
0216デフォルトの名無しさん
2007/04/11(水) 01:54:10強さが同じなら、順位は2.5になる
これを下回ったら弱い
2を切れたら圧倒的な強さだろう
0217デフォルトの名無しさん
2007/04/11(水) 02:01:160218デフォルトの名無しさん
2007/04/11(水) 02:04:27http://www.ma-jan.or.jp/title_fight/pro_24.php
0219デフォルトの名無しさん
2007/04/11(水) 02:04:50その方がいいかもね。
0220デフォルトの名無しさん
2007/04/11(水) 02:08:53僅差でも、勝った方が強い方とした方がいい
競馬でも、2位は駄目だ 勝てば官軍だ
0221デフォルトの名無しさん
2007/04/11(水) 02:21:32rateは、例えば初期値1500(万円)持ってて
4位が、1位に2(万円)支払い、
3位が2位に1(万円)支払うでどうだ?
750回連続で負け続けると破産
0222デフォルトの名無しさん
2007/04/11(水) 02:22:500223デフォルトの名無しさん
2007/04/11(水) 02:38:00親というルールを無くすんだ
誰もが平等にする
すると試合回数が多くできる
0224デフォルトの名無しさん
2007/04/11(水) 02:39:52戦略性がなくなるな
0225デフォルトの名無しさん
2007/04/11(水) 02:51:53囲碁や将棋はあるのに、なんで麻雀だけないのかな?
0226デフォルトの名無しさん
2007/04/11(水) 02:59:520227デフォルトの名無しさん
2007/04/11(水) 03:05:33コンピュータブリッジ世界選手権
ttp://www.osk.3web.ne.jp/~mcbridge/tourn_j11.htm
0228デフォルトの名無しさん
2007/04/11(水) 03:13:23プロがカスだからじゃね?
0229デフォルトの名無しさん
2007/04/11(水) 07:56:57自分で主催したらいいじゃん
0230デフォルトの名無しさん
2007/04/11(水) 08:22:43賞金よろしく
0231デフォルトの名無しさん
2007/04/11(水) 12:01:51参加費2000円が限度だとして
50人集まれば運営可能
0232デフォルトの名無しさん
2007/04/11(水) 12:09:26それなら見てる分には面白そうだけど、運の要素が大きすぎ。
じゃ、1000局対戦させて平均順位で、つーのも、
見てる方は、3時間ぐらい待ってるだけ、という味気なさ。
せいぜい、平均順位が1分単位くらいに変動するのを見て一喜一憂するだけでしょ。
0233デフォルトの名無しさん
2007/04/11(水) 19:34:46参加費を賞金に当てると賭博行為になるから注意しる
以前、それで潰された大会がある
0234デフォルトの名無しさん
2007/04/11(水) 20:06:09後日それを買い取るという名目で賞金を支払うor振り込むといいんじゃないかとおもった。
0235デフォルトの名無しさん
2007/04/11(水) 20:13:130236デフォルトの名無しさん
2007/04/11(水) 20:16:14一応千回ぐらいは同じ同じ面子で打ち続けてってのを参加者分だけ繰り返すんだろうか?
一回二回じゃ強さは運に左右されちゃうから大変だよな。
画面を出力しないとしてもどれだけかかるんだろう・・・
0237デフォルトの名無しさん
2007/04/11(水) 21:23:40例えば、参加期間は7月1日からとかにして
元々1500 rate持ってて、2000 rateを初めて達成したものの勝ちとする
4位が1位に2 rate 、3位が2位に1 rate渡す
その日の対戦成績をネットにアップ
0238デフォルトの名無しさん
2007/04/11(水) 21:25:39平均順位が2位くらいのプログラムがあれば500試合もすれば優勝者が決まる
0239デフォルトの名無しさん
2007/04/12(木) 00:19:24誰かがプログラム組んでから議論したら?
0240デフォルトの名無しさん
2007/04/12(木) 00:24:290241デフォルトの名無しさん
2007/04/12(木) 00:56:300242デフォルトの名無しさん
2007/04/12(木) 14:59:14ログを取っておいてあとで人間がチェックすればいいじゃん
0243デフォルトの名無しさん
2007/04/12(木) 16:52:360244デフォルトの名無しさん
2007/04/12(木) 17:08:39牌譜を公開しておけばいいと思うよ
チェックするのは当事者の自由、ということで
0245デフォルトの名無しさん
2007/04/12(木) 18:23:150246デフォルトの名無しさん
2007/04/12(木) 23:51:410247デフォルトの名無しさん
2007/05/06(日) 13:34:540248デフォルトの名無しさん
2007/05/07(月) 14:24:53こんなんではダメなんか?
0249デフォルトの名無しさん
2007/05/08(火) 00:16:02開発が止まっているのと、オートでぶんまわすような用途としては使いづらそうなのがネックなんだよな。
今perlでちょろっと向聴数判定から書いてみているのだが、これはこれで速度的に辛い気がしてきた。。。
0250デフォルトの名無しさん
2007/05/08(火) 04:46:19考えるともうキリがないな
それこそシャンテン数計算が意味のないことになるかも
将棋みたく項目ごとにポイント割り振ってトータル点数の高い手を選択するようにすべきか
0251デフォルトの名無しさん
2007/05/08(火) 06:41:42>それこそシャンテン数計算が意味のないことになるかも
それは最初から分かっている。
0252デフォルトの名無しさん
2007/05/08(火) 08:41:11向聴数が分からないと、向聴数が落ちるのかどうかも分からないだろ。
0253デフォルトの名無しさん
2007/05/08(火) 17:49:18一気に調べるのは不可能だと思うな。
0254デフォルトの名無しさん
2007/05/08(火) 17:58:36参考にならない気が
0255デフォルトの名無しさん
2007/05/08(火) 18:02:37たとえば、点数が20000以下で配牌が九種九牌以上なら国士無双を狙うとかね。
七対については、普通の役を狙っていると、もしくは配牌から対子の数が四つ以上になったら狙うとかね。
もちろん、この基準はどうでもいいんだけど
0256デフォルトの名無しさん
2007/05/08(火) 20:33:360257デフォルトの名無しさん
2007/05/09(水) 00:44:08それを決めるためにも向聴数が必要になるんだよ。
人間も配牌見た瞬間に(正確ではないにしろ)国士狙いなら6向聴、七対子なら4向聴で、メンツ手なら3向聴。だからメンツ手で進めていこうという流れで手の方向を考えるだろ?
判断を下す以前の基本情報として必要だろう。
何故、意味が無いとか参考にならないなどと思うのか。
0258デフォルトの名無しさん
2007/05/09(水) 08:03:14>判断を下す以前の基本情報として必要だろう。
>
>何故、意味が無いとか参考にならないなどと思うのか。
向聴数を求めるためのコストと
向聴数というものが与えてくれる情報の価値とを
天秤にかけた場合、どうしてもコストの方が高すぎるから。
>>171 参照
>人間も配牌見た瞬間に(正確ではないにしろ)国士狙いなら6向聴、
>七対子なら4向聴で、メンツ手なら3向聴。
>だからメンツ手で進めていこうという流れで手の方向を考えるだろ?
それはいわゆる「決め打ち」だろ? 初心者の打ち筋だね。
0259デフォルトの名無しさん
2007/05/09(水) 08:09:31それはいわゆる「総当り」だろ?初心者のアルゴリズムだね。
0260デフォルトの名無しさん
2007/05/09(水) 08:23:39麻雀では最悪5向聴までありえた筈だし。
0261デフォルトの名無しさん
2007/05/09(水) 10:33:35決め打ちといえばナルミだな
23578リーチの3連荘はかっこよかったな
0262デフォルトの名無しさん
2007/05/09(水) 10:38:550263デフォルトの名無しさん
2007/05/09(水) 10:40:46> 天秤にかけた場合、どうしてもコストの方が高すぎるから。
> >>171 参照
これは無い。
メンツ、塔子を数えれば向聴数は分かる。
>>193 見れ。
普通に1ミリ秒以下で求まるよ。
> それはいわゆる「決め打ち」だろ? 初心者の打ち筋だね。
小島武夫に謝(ry
えー、人間は無意識のうちに、向聴数に基づいた判断をしてるでしょ。いい配牌だ、とかそんな感じで。
そういう人間が無意識にアバウトに行う判断を、コンピュータにやらせるためには、結局向聴数という形で計算してやる必要があるってこと。
もちろん他にも色々判断材料を用意する。
だけど、じゃあ向聴数は考えなくても良いかというと、そんなことにはならないだろうと考えてるんだよ。
0264デフォルトの名無しさん
2007/05/09(水) 15:00:30いや、>>193の方法では完璧なシャンテンスウは求まらないよ。
揃っていないチンイツを正確に判断できないだろ?
0265デフォルトの名無しさん
2007/05/09(水) 15:50:44手許で実験してみたけど、普通に出来たっぽい。
清一向聴数当てゲームとか勢いでこしらえてみたけど
超面白い。JavaScriptに今移植中。
0266デフォルトの名無しさん
2007/05/09(水) 18:10:240267デフォルトの名無しさん
2007/05/09(水) 18:32:080268デフォルトの名無しさん
2007/05/09(水) 19:43:450269デフォルトの名無しさん
2007/05/09(水) 21:09:31「実験した」って・・・?
だって、まだソースは上げられていないだろ?
0270デフォルトの名無しさん
2007/05/09(水) 21:16:22>>265 = >>193 なのね・・・
で、1万局ランダムでテストパターンを作ったらしいけど、
それ、ちゃんと全て「正しい向聴数を求めている」事を確認したの?
0271デフォルトの名無しさん
2007/05/10(木) 00:36:25193じゃないよ。
アイデアだけパクらせていただきました。
でも、たまに張ってもいないのにダブリーとか
勝手にしやがってたので今デバッグ中。
もうね、手段が目的になっちゃって楽しすぎ。
0272デフォルトの名無しさん
2007/05/10(木) 00:41:22だめじゃんw
面子多多の場合とかの処理が結構難しいんだよな。
良かったら、判定ミスった時の牌姿を張ってくれまいか?
> もうね、手段が目的になっちゃって楽しすぎ。
激しく同意。
0273デフォルトの名無しさん
2007/05/10(木) 22:39:25鯖の枠組みだけ作ってあってクライアント作るのまんどくさくて放置してある奴見直してみようかな。
0274デフォルトの名無しさん
2007/05/11(金) 21:53:410275デフォルトの名無しさん
2007/05/11(金) 22:17:590276デフォルトの名無しさん
2007/05/11(金) 22:39:20多分 >>264 の話だと思うが、
そんなの実際にソースを出さないと
議論にならないだろ?
0277デフォルトの名無しさん
2007/05/12(土) 00:47:41「高得点で上がれる確率」
を求める方がより本質的。山に1枚しかないイーシャンテンより
山に16枚あるリャンシャンテンの方が価値があるし。
。。。でもシャンテン数は正確に求めてみたいんだよな。
0278デフォルトの名無しさん
2007/05/15(火) 22:53:13シャンテン数を求めずにどうやってイーシャンテンやリャンシャンテンを知るんですか?
シャンテン数を求めずにどうやって有効牌を知るんですか?(有効牌=シャンテン数を下げる牌)
0279デフォルトの名無しさん
2007/05/16(水) 14:55:44メンツ分解型の手抜きの方法でも十分な精度は出るでしょ。
それこそランダムにツモ、捨て、を繰り返して1万回ぐらい試行してみて
最高得点の捨て牌を選ぶだけでも正しい捨て牌はかなりの確率で得られる。
捨てるときに多少メンツを崩さないように考慮してやって。
0280デフォルトの名無しさん
2007/05/17(木) 10:41:320281デフォルトの名無しさん
2007/05/19(土) 17:08:53>最高得点の捨て牌を選ぶだけでも
これ今現在のパソコンでやっても将棋並の思考時間になるのかな?
>>279 試してくれ
0282デフォルトの名無しさん
2007/05/20(日) 16:04:25でもシャンテン数を下げない有効牌もあるよね(有効牌って言葉の正確な定義は知らないけどな!)
待ちの切り替えとか
0283デフォルトの名無しさん
2007/05/20(日) 20:20:33どうやって向聴数が下がらないことがわかるんだ?
なんとなく向聴数数えられるようになった気がする。
バグが残っているかのテストが難しいな。
0284デフォルトの名無しさん
2007/05/22(火) 22:26:23>どうやって向聴数が下がらないことがわかるんだ?
だからぁ、「有効牌=シャンテン数を下げる牌」とは限らないって話だよ。
プログラム上は、それが有効牌であることが分かればよい。
0285デフォルトの名無しさん
2007/05/22(火) 23:04:24それは枠ができてからの話でしょ?今は関係ないよ。
0286デフォルトの名無しさん
2007/05/23(水) 11:47:35上がりやすさも評価点数に入るだろうから、シャンテン数も考慮されるだろうし
0287デフォルトの名無しさん
2007/05/28(月) 08:21:12http://gamdev.org/up/img/9526.zip
0288デフォルトの名無しさん
2007/05/28(月) 08:30:010289デフォルトの名無しさん
2007/05/28(月) 08:31:080290287
2007/05/28(月) 08:57:15他の部分も書き始めてしまったので後戻りできないです。
Cが読めるなら大体分かると思うが。。。(´・ω・`)
0291287
2007/05/28(月) 22:51:09C鬼のように速えええええ
0292287
2007/05/29(火) 22:01:56Cで書き直した版。ソース汚いのは勘弁してくれ。コンパイルは自前でお願いします。
windowsではこんな感じでc++としてコンパイルしないと通らないみたい。
cl /TP shanten.c
vc++2005 express edition付属のcl.exeでコンパイル、動作確認済み。
0293デフォルトの名無しさん
2007/05/30(水) 02:35:20ま、しかし乙。
まず、拡張子がcppじゃないとVCでは通らないよ。
と思ったらすでに書いてあるのか。
メンツ分解?タイプなのかな。
一部再帰が入ってるけど何をやってるのかよくわからなかった。
>>187のチンイツとかもちゃんと判定してるようだし
いくつか試したけど例外は見つけきれなかったな。
作った本人ならわかると思うけど、どういうケースで間違うの?
あとmeldって何の略?
0294287
2007/05/30(水) 09:21:00おお、見てくれた人がいた。トンクス
linuxではcとしてコンパイルできるのにな。拡張子変えてもらってももちろんOK。だとおもう。Cはよくわからんので。すまん。
再帰の中では、基本的に以下のような処理を、一つの数牌(1-9)のセットに対して行ってます。
この関数は、そのセットから最も効率よく面子、塔子を取り出せる組み合わせを見つけ出し、その組み合わせのスコアを返します。
スコアは、単に面子がたくさん取れたほうが良い、というレベルのもの。if文の数減らすために4桁の16進数の各桁に割り当てる形で一つの整数にまとめています。各桁は(面子の数)(対子含む塔子の数)(対子の数)(単独牌の数)です。
関数内の流れは
・ある牌を基準に、その牌を含む全ての牌の組み合わせ(嵌張、順子、等。単独牌も。)を取れるか判定
・・駄目なら、基準を変更
・その組み合わせをセットから取り除き、再帰
・帰ってきたスコアに、今回取り出した組み合わせのスコアを加算
・他の組み合わせを取り出した場合と比較して、より高いスコアを採用してreturn
repeater変数による処理の振り分けは、単に重複した取り出し方を行わないため。
えーと、必死にデバッグしたので、今のところ特に間違えるケースは無いと思う。
まあ、多分なにかあるとは思うけど。見つけたら教えてくれ。
meldは略じゃない、立派な英単語です。俺も初めて知ったけど、トランプ用語で得点になる組み合わせとかそんな。
0295デフォルトの名無しさん
2007/05/30(水) 10:07:31gcc, icc, sunのccはc99だけど、VCはc89だからな。
0296デフォルトの名無しさん
2007/05/30(水) 10:15:19transitive verb : to declare or announce (a card or combination of cards) for a score in a card game especially by placing face up on the table
intransitive verb : to declare a card or combination of cards as a meld
meld[2, noun]
: a card or combination of cards that is or can be melded in a card game
0297デフォルトの名無しさん
2007/05/30(水) 11:44:40一つ一つの牌姿を人間が確認するのは骨が折れるから、
benchmark関数の中身をいじって、平均シャンテン数を出すようにしたんだけど、
結果がおかしいよ。
ランダムは13枚のハイパイの平均シャンテン数は約3.79なのに、
このルーチンに食わせると3.415付近の値が出てくる。
benchmark関数をいじった部分は以下の通り。
int i; → int i, sum = 0;
shanten(tiles,res); → sum += shanten(tiles,res);
printf("average = %f\n", (double)sum / (double)repeat_times);を追加
0298デフォルトの名無しさん
2007/05/30(水) 12:35:55その3.79はどっから持ち出した数字なの?
0299デフォルトの名無しさん
2007/05/30(水) 12:56:41http://www.jan-x.jp/engine/01-average.htm
>>1のリンク先くらい見ようぜ。
よく考えると、3.79はメンツ手としてみた場合の平均シャンテン数で、
>>294のプログラムは七対子・国士も含めたシャンテン数なのか。
それでも3.58にはなってないから、どこか間違ってるんじゃないかな。
0300デフォルトの名無しさん
2007/05/30(水) 13:02:57乙
>>297
ランダムなハイパイを出したアルゴリズムは?
0301デフォルトの名無しさん
2007/05/30(水) 13:09:26>>294のプログラムをそのまま使ったよ。
0302デフォルトの名無しさん
2007/05/30(水) 13:44:030303287
2007/05/30(水) 14:39:52なるほど、それは良いテストですね。で、確かに理論値より良い数字が出る模様。
ただ、アルゴリズムの問題で悪い数字が出ることはあっても、良い数字が出るというのは考えにくい。
で見てみたところ>>300氏の疑念通り、ランダムの手牌の生成方法に問題があったようです。。。
今のバージョンだと、対子、刻子が作られやすくなっていました。
これを修正すれば、理論値にほぼ一致した解が得られることを確認しました。夜に修正版をアップします。
見てくれた方、特に>>297氏、>>300氏サンクスです。
0304デフォルトの名無しさん
2007/05/30(水) 15:11:13ランダムハイパイ生成ルーチンで34の余りを取っていることに全然気づかなかったwww
int deck[136]; // 全部の要素に1
for(i=0;i<13;){
int rnd = rand() % (opt_chin ? 36 : 136);
if(deck[rnd]){
buf[i] = rnd/4;
deck[rnd]--;
i++;
}
}
ってな感じに修正したらいいのかな?
それにしても素晴らしく速い方法だなあ。
>>1のリンク先で説明されているルーチンより速いね。
0305デフォルトの名無しさん
2007/05/30(水) 15:15:320306デフォルトの名無しさん
2007/05/30(水) 15:30:380307287
2007/05/30(水) 20:40:22修正版upしました。
修正点は以下です。
・配牌の作成で対子に偏る問題を修正
・ベンチマーク実行時に平均向聴数が表示されるようにした
・全てのルーチンの恥ずかしいL/R問題に対応した
0308デフォルトの名無しさん
2007/05/31(木) 05:25:38テンパイ判定は流用させていただいてます。
http://gamdev.org/up/img/9542.lzh
で、以下の配牌でシャンテン数=0、と間違うみたいです。
mj : 8c 8c 9c 9c 9c 9c 1d 1d 1d p p w g
--------
checking for 13 tiles...
sorted_tehai : 8c 8c 9c 9c 9c 9c 1d 1d 1d P P W G
best mentsu :
mentsu | tahtsu | toitsu : 3 | 2 | 2
float suit | dead suit : 0 | -2
float honor | dead honot : 2 | 0
each shanten:
mentsu | seventwins | kokushi : 0 | 3 | 7
shanten-suu : 0
"brute" とコマンドを打てば、シャンテン数2、までを10000回チェックするように
なってます。(705回目でエラーになります)
しかし、力任せはやっぱだめですね。シャンテン数3でほとんど使い物になりません...
0309デフォルトの名無しさん
2007/05/31(木) 05:28:280310デフォルトの名無しさん
2007/05/31(木) 09:58:240311287
2007/05/31(木) 10:47:24理解した。>>42とか>171前後での話しを実装してみたということっすね。
和了りを見るルーチンも作って、きちんとやってみます。
で、バグ再現しましたー。9の槓子がある時に、隣の色の牌を見に行ってしまうケースがあったようです。
Perlの実装では配列のコピーを使ってたので、見なくて良かった部分なのですが、移植した際に紛れ込んだようです。
八九(1)でヒトメンツだよねってどこの初心者だ。
直しました。
・9の槓子がある場合のバグを修正
・和了りを見るようにした
・>>308さんのコードは、このままいただいてしまってよければ、これからマージします。
0312287
2007/05/31(木) 10:56:17http://jamong.s285.xrea.com/src/shanten/shanten0.03.zip
です
0313308
2007/05/31(木) 12:26:07マージしてもらえるならサンクスです。日本語コメントとか使ってるので
好きにいじちゃって下さい。
0314287
2007/05/31(木) 19:04:31ありがとうございます。ということで適当に組み込みました。
bruteと入力するとレベルを聞かれるので、1かせいぜい2を選択してください。
以後、通常のトライ時に、入力した手数までで最短和了手順の探索を行います。
家の環境だと、レベル2で7秒前後、3以上だと帰ってきません。。。
http://jamong.s285.xrea.com/src/shanten/shanten0.04.zip
bruteモード追加した
ファイルを分割した
さて、向聴数は大体求められるようになったが、今後どうしようかな。。。
0315デフォルトの名無しさん
2007/05/31(木) 19:59:51麻雀は確実に運が絡むゲームだから
牌効率と手役の得点の期待値をとって
その中で優秀なものを選択していくということをベースにして、
その選択プロセスを状況によって適宜スイッチできる
というのが、論理的に最強な麻雀プログラムということになるが
運が絡むので、半チャン10回や20回じゃとても最強かどうかの判定なんてできない。
最後に行き着く先が確率論なゲームのアルゴリズムに
学者が本気で取り組むわけがない
0316デフォルトの名無しさん
2007/05/31(木) 20:05:58>学者が本気で取り組むわけがない
馬鹿すぎw
0317デフォルトの名無しさん
2007/05/31(木) 23:10:13>>315じゃないが、開発には賛成だけど学者が本気で云々は正しいと思うぞ・・・
それに、あくまでもゲームだからどっちにしろ学者が本気になって取り組むとはどうも思えない。
0318デフォルトの名無しさん
2007/05/31(木) 23:18:400319デフォルトの名無しさん
2007/05/31(木) 23:25:03かえるの目玉に寄生するウィルスの研究とかな
あやまれ
確率論に本気で取り組んでる学者にあやまれ!w
ゲーム理論に本気で取り組んでる学者にあやまれ!w
0320デフォルトの名無しさん
2007/06/01(金) 00:03:27|v|/,
彡 r´
| ヽ
ヽ .\ _,,,─-、、 _
\ `'>,´| ,, --ヽ > ´ `ヽ
`- ,/' / ノ′ ,|/|/,., L,
./ / 人 ノ_ ' '´'二´ノ
| | ./'| 丶- ´'′ .ミ′
.'i';' `i ,〃6 6ヽ|
|\ .| ≡丶.,人,,ノ | ガクシャ、ゴメンナ
.| \| ____ ,,,,-)ノ
.\ '|_ >つ_;;;/
〜''
0321デフォルトの名無しさん
2007/06/01(金) 04:53:12ちょっとテストしたので一応報告です。
2シャンテンを3シャンテンと間違うケース
sorted_tehai : 1c 3c 4c 4c 5c 7c 6d 7d 8d 3b 3b 6b P
sorted_tehai : 3d 4d 5d 2b 4b 5b 5b 6b 8b T T S W
3シャンテンを2シャンテンと間違うケース
sorted_tehai : 3c 4c 6c 8c 3d 5d 1b 3b 4b 6b N N N
3,4,5といった高いシャンテン数を正確に高速に求めるのは難しいような希ガス。
0323デフォルトの名無しさん
2007/06/01(金) 12:59:231万回、10万回とか試行して、あがりやすい捨て牌を選んだ方が良いと思うんだが・・・
0324デフォルトの名無しさん
2007/06/01(金) 13:25:38具体的にどうやって試行するのかも書いてよ
0325デフォルトの名無しさん
2007/06/01(金) 13:35:52ポン、カン、チー、場に対応した得点を計算するルーチンがあればCのソース作れるんだけど・・・
0326デフォルトの名無しさん
2007/06/01(金) 14:30:54確率論に本気で取り組んでる優秀な学者はいっぱいいるよ。
そういう話じゃない。
「最強じゃんけんソフト」を作るようなバカなことに
賢い人は挑まないということ。
0327デフォルトの名無しさん
2007/06/01(金) 14:39:450328デフォルトの名無しさん
2007/06/01(金) 15:13:15実はそういうバカなことをしてる賢い人もいるんだがw
ttp://www.cs.ualberta.ca/~darse/rsbpc.html
ただ、でたらめに手を選ぶののは禁止で、ちゃんと「相手が出してきた手を見て」
何を出すか選ぶ、という決まりはあるけどね。
0329デフォルトの名無しさん
2007/06/01(金) 17:18:20上のケースは、1c 3c 4c 4c 5c 7c を1メンツ(と単独牌3つ)とみるか、2ターツ+1トイツとみるか、ですね。
このプログラムではメンツ優先のために前者と見てるんでしょう。
この辺りを解消するよいアルゴリズムが見つかるかどうかですね。
>>323
1行目については仰る趣旨は解りますが、それはシャンテン数を数えた後でもよい話ですね。
シャンテン数だけで捨て牌は決められませんが捨て牌決定の重要なパラメータであるのは間違いないし。
モンテカルロは一つのアルゴリズムではあるけど、麻雀の場合は数学的に解いたほうが効率が良い気がする。
>>325
そういうルーチンがある、として書いてみれば?
面白そうなら誰か作ってくれるかもしれん。
0330デフォルトの名無しさん
2007/06/01(金) 17:20:51枝刈りとかはいるだろうけど
0331287
2007/06/03(日) 19:35:42>>329
麻雀の牌の組み合わせは、雀頭が絡むときにややこしくなるので、あらかじめ雀頭候補を抽出して場合分けすれば上手く行くとは思います。
0332デフォルトの名無しさん
2007/06/03(日) 19:50:58がんがれw
さらに追い討ちをかけるようにバグ報告です。
3シャンテンを4シャンテンと間違うケース
sorted_tehai : 3c 3c 5c 1d 2d 4d 3b 5b 6b 6b 7b 9b P
sorted_tehai : 5c 1d 3d 4d 4d 5d 7d 1b 2b 6b 7b W R
>>321の上と同じパターン?かな。
0333デフォルトの名無しさん
2007/06/03(日) 20:14:42ttp://jamong.s285.xrea.com/
0334287
2007/06/03(日) 20:34:50うはwww
ありがとうです。もう少し頑張ってみます。
>>333
そうそう。あまっていた垢があったので、麻雀関係のファイルupやmemo用に公開しようと準備してる。
wikiはこっちで公開します。
http://jamong.s285.xrea.com/x/wiki/
落書きや、ややこしい牌姿の形をメモりたい時など好きに使ってください。
このスレに関連するような話なら何でもokです。
0335デフォルトの名無しさん
2007/06/05(火) 23:24:45http://itpro.nikkeibp.co.jp/article/COLUMN/20070516/271225/?ST=develop
0336デフォルトの名無しさん
2007/06/06(水) 15:13:03このスレ的にはタイムリーでいいね。
丁寧に書いてあってわかりやすそうだし。
これ書いてるのは女性なのか。
0337デフォルトの名無しさん
2007/06/06(水) 16:36:23俺としては役の完成品が欲しい
0338デフォルトの名無しさん
2007/06/06(水) 19:15:09そういや晒すと1飜落ちるやつとか
書いてないみたいだしな
0339デフォルトの名無しさん
2007/06/07(木) 00:16:53正しい向聴数が出るようになったかも。
計算時間が約2倍になった事と、ソースをかなり変更してしまった事が問題ですが、参考になれば。
0340287
2007/06/07(木) 01:11:05超乙!!
自分のあのノーコメントなソースからここまで・・・
かなり感動してます。
あまりの変わりように理解し切れて無いですが、順子と雀頭の組み合わせ系については上手く取れるようになってるみたいです。すげえ。
先に字牌をカウントして、その後数牌については一気にやって、取りきった段階で雀頭のあるなしを考慮しつつ比較を行っている、という感じでしょうか。
ただ、dead何とかをつかってやってた四枚目関係の処理部分が抜け落ちちゃってるので、例えば次のような牌姿が正しく判定できなくなっているみたいです。実際は三向聴の以下の手牌
mj : ttttnnnnssssp
--------
checking for 13 tiles...
sorted_tehai : T T T T N N N N S S S S P
best mentsu :
mentsu | tahtsu | toitsu : 3 | 0 | 0
float suit | dead suit : 0 | 0
float honor | dead honot : 1 | 3
each shanten:
mentsu | seventwins | kokushi : 2 | 6 | 8
shanten-suu : 2
#自分は仕事が佳境に入って時間があまり無いのですが、役判定のルーチンをちびちび書いているので、そのうちupします
0341デフォルトの名無しさん
2007/06/08(金) 00:20:03deadあたりが抜けていますね。失敗しました
それで>>314のソースを見ていて気づいたんですが、
1c1c1c1cttttnnnns のような形で間違えますね。
0342デフォルトの名無しさん
2007/06/08(金) 23:46:58今度こそ大丈夫かな。
0343287
2007/06/09(土) 21:58:07おお。直ってるっぽい。
クリアするべき牌姿、問題がおきうる形がよく分からなくなってきたので、>>342をベースにテストを追加してみます。
しかし、随分コードがすっきりしたなあ;-)
0344デフォルトの名無しさん
2007/06/17(日) 12:54:31しばらく見てなかった間に具体的な話になってきているね
0345デフォルトの名無しさん
2007/07/04(水) 08:11:06>しばらく見てなかった間に具体的な話になってきているね
からカキコミなし
0346デフォルトの名無しさん
2007/07/04(水) 08:46:100347デフォルトの名無しさん
2007/07/20(金) 00:17:29「東風荘画面入出力DLL」
ttp://www.interq.or.jp/snake/totugeki/MJexeIODLLman.htm
参考
ttp://www.melma.com/backnumber_103464/
>とつげき東北さんのHPで公開されている「東風荘画面入出力DLL」を
>使用した東風荘の自動打ちツールというものがインターネット上に
>いくつか存在しています。
>
>今のところ強さは1600未満のものがほとんどのようですが、今後研究
>が進んでいけば超ランにも耐えうるようなものも出てくるでしょう。
>
>実際、とつげき東北さんは今後そのようなものを作りたいと書かれて
>います
>
0348デフォルトの名無しさん
2007/07/20(金) 02:49:10使用に耐えうる速度が出るかは疑問だけど(妥協が必要)
0349デフォルトの名無しさん
2007/07/20(金) 18:54:05「麻雀シミュレータ MJSim」(以後MJSimと略す)と言うAI同士が対戦するプログラムが有り、
何万回も戦いを行い、その結果も公表されていました。御存知でしょうか?
もし、AIを実際に戦わせたいのであれば、「MJSim」を作られた方に
再度公開してもらえれば良いかもしれません。
「MJSim」はC言語でソースごと公開されたいました。
「MJSim」は各AIをDLLの形で読み込み必要な回数自動で対戦をします。
出力は東風の雀譜形式でテキストに出され、Toolを使い試合の動きを目で見ることもでき。
また、各種の強力な分析Toolで分析も出来ました。
そのとき作られたAIは
MJAI_NON
MJAI-253
MJAI-003
MJAI-283
MJAI-302
MJAI-395
Ryoko252
モンテカルロ
七対子のみ
西家
等々でした。
0350デフォルトの名無しさん
2007/07/20(金) 20:02:25スレの96が頑張ってた。
※麻雀ロジック研究会※
http://proxy2.bbsnews.jp/2ch/gamedev/1105332492/
2chでこの手の話をするとアップローダのファイルがすぐ消えちゃって
不便だな。
0351349
2007/07/20(金) 21:40:01多少なりとも、参考になればと過去の経験を書いてみます。もし多数がウザイと思ったら
終了します。
>>349の公開された物は総て持っています。>>350の物は持っていません。
その1
>>349
>役判定が出来れば期待値計算も出来る
について。
1.麻雀に勝つということは自己の手だけ_見て、最良の手を行ってもあまり強くは無
いと思っています。順目・立風・風・自風・順位・自己及び他者の点数・他者の聴牌状況
(リーチ等)・河の状況・ドラの状況・他者の泣き状況、等を考慮した期待値が計算
ができればいいのですが非常に困難な物です。
これらを多少考慮したAIを作りましたが、パラメーターが膨大となりとても最適化
できない状況に至りました。
2.自己の手だけ見た期待値計算でも、リャンシャンテンぐらいなら有意の時間内で
可能かもしれないが、サンシャンテン以上は時間的に難しいかもしれません。
問題はサンシャンテン以上の時、いかに最適捨て稗を求めるかでしょう。
0352349
2007/07/20(金) 22:04:37麻雀の本にステ稗から、相手の手を読む方法等がありますが、それをプログラム的に
解析しても、その状況における危険稗の重み付けがどのような物か想像が出来ません。
これも、その1で示したように、単なる計算で得られる内容より、その他の状況による
関連の影響が多いであろうと思います。
では、読む必要が無いのか? と言えばそうではなく。河から有る程度の稗の危険率が
計算できます。私は主に「とつげき東北HP」を参考に組み込んでみました。
これが良かったのかどうかは、定量的判断が出来ず、解析するに至りませんでした。
しかし、より前向きに危険率を計算できると思っています。それは、相手の手をモンテカルロ
方により可能な手をCPUパワーで計算する方法。これで、手の高さなりパイの危険率なりが
計算可能ではないかと思っています。アイデアだけで実装には至りませんでした。
>>349の「モンテカルロ」と言うAIが棄て稗の判断にモンテカルロ法を使っています。
残念な事に一番弱い方法のようでした。これには理由がありますがここでは省きます。
しかし、相手の手を想像する方法としては良いのではないかと考えています。
0353349
2007/07/20(金) 22:49:39麻雀シミュレータ MJSim、東風のようなネット麻雀、リアル麻雀の違い。
この3つは、多数の勝負をした場合、根源的な性質が表面化すると考えています。
それは、山の並びに現われてきます。前2者の山の並びはコンピュータのランダム
関数によって作られます。ランダム関数の性質をプログラマーなら御存知だと思います。
性能のいい乱数ほど、小さい範囲を切り取っても比較的ランダムになっています。
これは一様乱数と表現しています。いわゆる、コンピューターの宿命として一様乱数で
作られた山は、一様にバラバラになっているのです。バラバラ差に偏りが少ないのです。
MJSimで数多くの試合をしました。
ふと、上記点に思いつき、一様ランダムな山牌に完全固定ロジックのAIが4人・・・
何千回何万回をやって・・・・・・この結果に意味があるのだろうか?
東風のようなネット麻雀
山は一様ランダムだが4人は人間であり固定処理は出来ない。しかし、「とつげき東北HP」
を代表とするネット麻雀の解析データーは一様ランダムな山を元に解析されている。
その解析結果は一様ランダムなコンピューターの性質を引き継いでいる。(影響されている)
リアル麻雀
詰れた山も人も、けっこう偏っている・・・・・
この疑問に気がついたとき、AI作製の定量的判断に疑問をもちAI作製が終わりました。
補足、MJSimの場合最も強いのは、自己の手だけを見て、最も速く上がる可能性を選ぶ
AIが一番強いのではないかと、私は感じてしまいました。これを戦術とするならば。
場全体を評価する戦略にどんな意味があるのだろうかと・・・・・まったく意味が無いとは
思いませんが、結果的に強さにあまり差が無い事を見た私は・・・・・落胆が・・・・
これは、誰かに理論的に否定してもらいたいと思います・・・・
0354デフォルトの名無しさん
2007/07/20(金) 23:17:00ください。お願いします。
0355デフォルトの名無しさん
2007/07/20(金) 23:52:21麻雀板では、麻雀は運か実力か、が激しく議論されています。
その後、私は運派に変わりました。なぜかって?・・・・(板違い。
実力派に変わるような議論を皆様に期待します。
>>354
ごめ、他人のソースを晒す事は私にはできません。
0356デフォルトの名無しさん
2007/07/21(土) 15:56:49昔のプロが一発・裏ドラをなくせば初心者との差がなくなる
と言ってましたね。ルールをかえればよいと思う。人気もなくなるけど。
0357デフォルトの名無しさん
2007/07/21(土) 16:47:19DLLの形で渡せばいっぱい対戦できるやつをつくろう
0358デフォルトの名無しさん
2007/07/21(土) 19:09:09麻雀が運に左右されるのは当たり前、でもそれは人間同士の場合でコンピューターなら話が違う
コンピューターなら対戦相手全員の手牌をある程度確率的にはじき出せるし、確率的にもっとも最善の手を打つことも可能。
高度な確率統計の数学とゲームの理論、さらに麻雀の定石を駆使できればトータルで言えば無敵になれるはず。
(リバーシでは人間はコンピューターに勝てなくなったそうだ)
0359デフォルトの名無しさん
2007/07/21(土) 19:29:53何回も言われていた内容である気はするが…
唯一の最善アルゴリズムが存在する事は自明ではない。
(存在しない事も自明ではないと思うが、だぶん存在しないだろう)
仮に「最善」のアルゴリズムが存在するとして、それをAとする
相手が常にAに従うを使うことを知っていて、かつAの内容を全て把握していれば
それがA使用者の手を確率的にはじき出すための情報源になり、情報が多いぶんA使用者よりも有利になれる
適当過ぎて証明になっていないが、こんなイメージで。
0360デフォルトの名無しさん
2007/07/21(土) 21:06:42競馬予想も似たようなものだろう。
趣向とか体調とか心理状態とかそういうものに大きく左右される。
0361349
2007/07/21(土) 23:21:29>>乱数を付け替えられるように設計すればいい
50個ぐらいの計算式が違う乱数計算式を使って、1つずつの出た値を使えば、50個内は
偏った乱数が出るかもしれませんね。コンピューターの乱数の歴史は、いかに綺麗に
散らばった乱数を作るかで発達したような物。乱数評価は偏りを見つけ無くすように発達。
その結果、綺麗な一様にバラバラな乱数が・・・・
なぜMJSimで最短上がりを目指すAIが強いのか。
1.山が確率に近いように綺麗な乱数だから、AIが予測する一番可能性の高い(確率の高い)
予測結果に素直に山が答えている。偏った山なら、予測より外れる可能性が高くなる。
AIと山の親和性が高い。
2.4人に配られた手が、一様にバラバラな手配なので、似たようなシャンテン数や手配構造
が似やすくなる。 とても良さそうな手、とても悪そうな手になるバランスが多少少ない。
手配の均一化・・・
3.2.と同じようですが、ツモ牌の進み方も一様乱数で似たような雰囲気になりやすい。
これは、うがった見方だと思われるかもしれませんが、少ない試合ならまず表面化しないでしょう。
数千数万回の試合を定量化した場合、無視出来ないと考えています。
PS.上の50個の乱数の案では、予測できない偏りが発生する可能性があります。
0362デフォルトの名無しさん
2007/07/21(土) 23:27:180363デフォルトの名無しさん
2007/07/21(土) 23:42:21ふーん、やっぱり最短で上がりをめざすのが強いのか。
とつげき東北さんが書いた本では
「好形なら迷わずリーチ」「手代わりを待つな」
と、棒テン即リーを推奨してたのだけど、本当なんやね。
0364デフォルトの名無しさん
2007/07/21(土) 23:45:202.向聴UPの為の有効牌数
これだけで結構捨てる牌の候補は立つ
>>353
デジタルとしての麻雀の理論の完成としては確率→期待値計算だろう
どの上がり点を目指しても期待値が同じ事はないから(特殊な計算方法だから)
もし上がり点よりも上がり早さの方が期待値に効果があるとするなら早上がり有利だと思う
自分の妄想では上がり点3900辺り(かそれ以下)が最善解な気がする
局平均1000点位になるから、そうすると最速=最強の可能性もw
(4人リーチ麻雀、赤含まず、ドラ裏ドラ含む)
0365349
2007/07/21(土) 23:59:53手配構造=「頭の有無、面子の数、対子の数」
手配に存在する手配構造を総て抜き出す。
手配構造から簡単な計算式でシャンテン数を計算。
一番小さいシャンテン数をその手配のシャンテン数とする。
上記方法の利点は、手配を分析した手配構造から、数ステップでシャンテン数が出ます。
よろしければ参考にしてください。
0366デフォルトの名無しさん
2007/07/22(日) 00:22:31独立した別の乱数系でも、同じ勝率ならばそのプログラムは実戦でも使える可能性が高い
ちょんぼをしなければ、人間が混ぜるのも、機械が混ぜるのも、
疑似乱数を使うのも違わないだろう?? (ただし、一回限定に限る)
回数を重ねれば、疑似乱数ではそれにフィットしたプログラムが強くなる
0367デフォルトの名無しさん
2007/07/22(日) 00:25:57一番上がりやすい役と、その得点を掛けた、期待値の高い手を指せばよい
0368デフォルトの名無しさん
2007/07/22(日) 01:33:19言うだけなら誰でもできる。
>>367はプログラマーじゃなくて営業ですか?
そうでなければ、可能なロジックを出してくれw
特に下記の点をよろしく!
>どの役で上がれそうかは確率が出せる
0369デフォルトの名無しさん
2007/07/22(日) 02:03:45でアガれる配牌にすればよい。
0370デフォルトの名無しさん
2007/07/22(日) 02:07:470371デフォルトの名無しさん
2007/07/22(日) 02:09:07まず14枚をランダムで配る
もし、役が出来ていたらbreakする
残り牌の中から、一枚ランダムに加えて、どれか一枚を捨てたら
役が出来るなら、その駒に役の得点を加算する
役が出来ていないならば、もう一枚加えて、どれか二枚を捨てたら
役が出来るなら、その駒たちに、役の得点/2を加算する
これを1万回くらい繰り返すと、役が揃いやすい捨て牌に得点が集まる
同様にして、相手のリーチなどがあったときは、自牌と見えている牌を
除いたものからランダムに14枚選び、役が揃うならその牌に得点を加算する
すると危険牌に得点が集まる
0372デフォルトの名無しさん
2007/07/22(日) 02:12:08確率的には最善だと思うが どうか
0373349
2007/07/22(日) 02:19:42ちなみに計算してみる。手配が配られた状態の親の開始。
牌の種類=34
牌の数=34*4=136
見えている牌=手配13+どら1=14
見えない牌=136-14=122
ツモ予測 = 34種類(確率付き)
棄て牌 = 最大14種類
1回のツモ棄てのパターン=34*14=476
全部違う牌でもないし枝狩りをしたとして、棄てるのが3種類あったとしよう。
うーーん、3種類まで落とす枝狩りは、けっこう大変なのだが、>>367さんには
出来るとして。
1回のツモ棄てのパターン=34*3=102種類の手パターン (けっこう減ったな)
もちろん此れでは上がり役がわからないので次のツモを = 102*102 = 10404
10404回、余裕で計算可能。
10回積もってもまだ総てのパターンが見えないな・・・104の10乗=とても多い数
見えない牌の種類は34種類だけど同じ牌をツモるのも想定しないと。
適当に70回ツモをすれば良いかも。
(注意:他家のツモがあると言う人がいるかもしれないが、見えない牌での総ての
上がりパターンを読むと言う命題において、残りの122を使用した計算が必要である)
104の70乗・・・計算できない・・・100の70乗だと 1000・・・000 (0が140個)
うむ、ちょっと無理かな。
きっと>>367はツモ棄てなんか要らないと言うかもしれない。
でも、モンテカルロ法が最弱なのを理解していたら、そんなことは絶対に言わないと信じている。
0374デフォルトの名無しさん
2007/07/22(日) 02:21:13これを5進数に対応させると、数牌は、0から5の9乗で表せる
あらかじめ、役があるかないかを記憶しておけば計算が速い
244Kバイト程度あればすべての場合を登録できる
0375349
2007/07/22(日) 02:24:38おお〜〜既に回答が出ている。
しかしだ、まあ、方法は違えど
>これを1万回くらい繰り返すと、役が揃いやすい捨て牌に得点が集まる
まったく計算がおお甘すぎる。
正確に計算してみて。
0376デフォルトの名無しさん
2007/07/22(日) 02:24:56モンテカルロが最強だ
プログラムしたやつが弱いだけだ
>>371のようにやれば良い
基幹システムを作ってくれれば、プログラムするぞ
0377デフォルトの名無しさん
2007/07/22(日) 02:28:11回数のことか?
例えば思考時間6秒で出来るだけ繰り返せばよい
高速化することが重要だ
0379デフォルトの名無しさん
2007/07/22(日) 02:29:10してもダメだろ
しかも相手が上がる(自分が振り込む/自模られる)事も考えるためには相手のモデル(早上がりを目指してるとか高い手を目指してるとか)を仮定する
ことも必要になるだろうし
そこまで考えたら普通の確率による期待値計算は余り有効じゃないと思う
0380デフォルトの名無しさん
2007/07/22(日) 02:32:53了解しました。MJSim持っていますので。
そのインターフェースを公開します。 (そのぐらい良いと思われ)
それで、AIを作ってくださいな。
ちなみに、そのモンテカルロ法のAI作った人。MJSimを作った人なので、
技術力、理解力、行動力等、十分に信頼の置ける良い人ですよ。
0381デフォルトの名無しさん
2007/07/22(日) 02:34:15一手進むごとに、見えている牌が増えるから再計算するんだ
そのときに見えている牌以上のことはわからない
相手の癖というものがあればいいが、わからなければ意味がない
0382デフォルトの名無しさん
2007/07/22(日) 02:35:51他家の手も見なきゃいけないし、
可能なら他家のアルゴリズムや癖を見抜く
のが、確率計算なんかより有効だったりする。
株ロボ大会なんてそれに近付いてる感じ。
0383349
2007/07/22(日) 02:49:19MJSim についてるサンプルAI(ツモって棄てるだけのAI)をUPします。
これを元に作りました。
0384デフォルトの名無しさん
2007/07/22(日) 02:50:290385349
2007/07/22(日) 03:03:040386349
2007/07/22(日) 03:35:03http://uproda11.2ch-library.com/src/1116486.zip.shtml
0387デフォルトの名無しさん
2007/07/22(日) 03:43:13123 123 345とそろうけど、始めに333を取り出すとそろわない
0388デフォルトの名無しさん
2007/07/22(日) 03:44:210389デフォルトの名無しさん
2007/07/22(日) 03:47:00開いてみたけど、windows プログラムとかわからないし開発無理そう
適当に作るから誰かコンバートして欲しい
0390349
2007/07/22(日) 03:51:54その場合、色々なパターンの手配構造データーを作ります
112233345
↓
構造1 構造2 ・・・・・・ 構造N
そして各構造を評価して最良を選びます。
もちろん33が頭の構造も作ります。
22が頭の構造も、意味が有るか無いかわ、評価によって変わります。
いわゆる枝がりです。
0391デフォルトの名無しさん
2007/07/22(日) 03:53:46親と子の、捨て牌と(見えている)ポンカンチー
自牌と、親子の情報と、場の情報
だけだろ???これに基づいて作ればコンバート出来るか???
0393デフォルトの名無しさん
2007/07/22(日) 03:56:23>>374の様にして、枚数で頭を含む場合とそうでない場合を分けて
役が揃う可能性があるかどうかをあらかじめ判定しておこうと思うんだが
そろう可能性があれば厳密に求める
0395349
2007/07/22(日) 04:05:45う〜〜ん、難しいように見えますが。
DLLに関係するのはごく一部で、殆どが麻雀のためのデーターです。
MJSimAI.cpp内のCASE:部分を書くだけです。
麻雀に必要なデーターは思った以上に多く複雑なんです。
特にMJSimは東風をそのままシミュレートしたもので、
総てのパターンに対応していると言ってもいいほど素晴らしいです。
case MJMSG_TSUMO:
がツモった時の処理。
case MJMSG_REACTION:
が他家が棄てた時の処理
自分が南家の時。
親が棄てたら case MJMSG_REACTION: が呼ばれ。
ツモが来たら case MJMSG_TSUMO: が呼ばれ
西が棄てたら case MJMSG_REACTION: が呼ばれ。
北が棄てたら case MJMSG_REACTION: が呼ばれ。
この繰り返しです。
case MJMSG_GAMESTART:break; //東風戦開始時
case MJMSG_GAMEEND:break;
case MJMSG_KYOKUSTART:break; //局開始時
case MJMSG_KYOKUEND:break;
は試合の開始や終りです。
0396349
2007/07/22(日) 04:11:08何となく良さそうなので、MJSim.EXEとサンプルによる試合が出来るものをUPします。
ちょっと時間をください。 多分明日には。
0397デフォルトの名無しさん
2007/07/22(日) 06:35:51今作ってる
0398デフォルトの名無しさん
2007/07/22(日) 07:06:13全体の4.7%
あってるか???
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4705.txt
0399デフォルトの名無しさん
2007/07/22(日) 07:09:15まず、頭を含まない場合(牌数が3で割り切れる)に役が揃うか調べて
その結果を使って頭を含む場合を求めて、最後に出力する
0400デフォルトの名無しさん
2007/07/22(日) 07:11:300401デフォルトの名無しさん
2007/07/22(日) 08:18:21の計算を元にした。>>397−>>400なのか?
意味不明なんだが?
ツモで上がっている状態のチェックと考えていいのか?
0402デフォルトの名無しさん
2007/07/22(日) 09:23:21#define N 1953125
は5の9乗という意味なのか・・・・・・・間違っている。
数牌だけで考えるなら。
組み合わせ (27、3) = 2925 (これで3牌)
これが4セットで 2925の4乗 = 73198719140625 (これで12牌)
これに頭の2牌を追加するのだが、計算めんどいので
73198719140625 * 27 = 1976365416796875
頭の分が少しだけ余分に計算されるので少し引いて
#define N 1953125 これが間違い ↓ の回数ぐらい。
約 1、800、000、000、000、000 パターンぐらいあると思われ
0403デフォルトの名無しさん
2007/07/22(日) 09:37:29組み合わせ (34、3) = 5984 (これで3牌)
これが4セットで 5984の4乗 = 1282231197761536 (これで12牌)
これに頭の2牌を追加するのだが、計算めんどいので
1282231197761536 * 34 = 43595860723892224
頭の分が少しだけ余分に計算されるので少し引いて
約 40、000、000、000、000、000 パターンぐらいあると思われ
0404デフォルトの名無しさん
2007/07/22(日) 09:52:54このソース見るとリバーシスレの1を思い出す。
0405デフォルトの名無しさん
2007/07/22(日) 10:09:160406デフォルトの名無しさん
2007/07/22(日) 10:21:36それを考えると4.7%どころではないのでは?
あと、全組み合わせは134C14じゃないの?
0407デフォルトの名無しさん
2007/07/22(日) 11:27:50スレとあんまり関係ないけどさ。
この間、近所の吉野家行ったんです。吉野家。
そしたらなんか人がいっぱいで入れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ、最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前は、牛鮭定食でも食ってなさいってこった。
0408デフォルトの名無しさん
2007/07/22(日) 11:57:45うお、 失礼それが正しいです。
数牌だけの手のパターン数
全組み合わせは106C14 = 105710363656182610
総ての牌の手のパターン数
全組み合わせは134C14 = 3417374882384597500
失礼しました。
0409デフォルトの名無しさん
2007/07/22(日) 12:30:16wikipediaをソースに使うのはよくない、あれは信用性まったく無いから。
あと誰もが基本的に雀頭+4面子を集めることが分かてるんだから、麻雀の場合手牌の全パターンを考えるのはあまり意味無いと思う、
どちらかといえばUNOとか大富豪の思考パターンに似ているかも。
0410398
2007/07/22(日) 12:32:133種ではなくて、1種の数牌だけを求めるんだ
一つでも役無しと判定されれば全体でも役無しと使う
0411デフォルトの名無しさん
2007/07/22(日) 12:33:430412デフォルトの名無しさん
2007/07/22(日) 12:42:14これに>>398を使えばテーブルを参照するだけで、全体で役があるか無いか判別できる
有りとなったら、次に個数が多いものをチェック
3種ありとなったら、字牌と頭の個数のチェックをしてそれもクリアしたら厳密に求める
ここまで来るのは少ない為かなりの高速化が出来る
0413デフォルトの名無しさん
2007/07/22(日) 12:51:53三種の数牌の個数と,字牌の個数に対して
いずれか3つが3で割り切りれ、一つが3で割ると2余る
これを満たさなければ役は無い
0414デフォルトの名無しさん
2007/07/22(日) 13:35:540415デフォルトの名無しさん
2007/07/22(日) 13:46:40約が有る無しの表現は辞めた方がいい。
役があっても上がれない場合もあれば、役が消える場合もある。
0416デフォルトの名無しさん
2007/07/22(日) 13:52:34役がつく可能性だけを素速く求めたいってことなんですよ
役が付かないことが判れば直ちに調査する必要が無くなります
0417デフォルトの名無しさん
2007/07/22(日) 14:03:13だから、役と言わずに、聴牌(テンパイ)とか和了(ホウラ)や上がり等の用語を使おう。
役の意味が違いすぎ。
0418デフォルトの名無しさん
2007/07/22(日) 14:04:26↓
ttp://www.ix3.jp/hiii/02mahken/1-01yougo.htm
0419デフォルトの名無しさん
2007/07/22(日) 14:04:46麻雀の標準的なルールが書いてあるところって無いですか??
ルールが違えば役の得点も変わってしまいます・・・
0420デフォルトの名無しさん
2007/07/22(日) 14:05:140421デフォルトの名無しさん
2007/07/22(日) 14:07:00ひいいの麻雀研究
http://www.ix3.jp/hiii/
0422デフォルトの名無しさん
2007/07/22(日) 14:12:32もっとシンプルに役が書いてあるところはないですか??
一番メジャーなやつで
0423デフォルトの名無しさん
2007/07/22(日) 14:16:54麻雀の役
↓
ttp://www.geocities.co.jp/Hollywood/6347/mj/ma-jan_yaku.html
0424デフォルトの名無しさん
2007/07/22(日) 14:57:43http://www.ma-jan.or.jp/guide/game_rule.php
0425349
2007/07/22(日) 16:50:45MJSimのサンプルAIを見て作ってみたいと言う方はいますか?
本当に作ってみたい方がいればMJSimの動作環境をUPします。
麻雀AIはには大きく分けて2種類有ります。
1.手の内容を理解せず、純粋に待ちが一番高いと思われるのを選ぶAI
このAIは、とても単純で強いです。しかし、その他の事はあまり出来ません。
自分の手を理解して動いてはいないため、いろいろな操作が出来ません。
でも強いんです。
2.手を分析し、最良を見つけようとするAI。作るのはとても困難です。
>>349でこの手法をしたのは私のAIだけでした。
正直完成させるのはとても大変な作業です。
しかし、役の分析や性格付け、泣きの対応、場の状況による戦略の組み立て、
降り牌の分析。等々が組み込めました。最適化する前に作製は終わりました。
1のAIプログラムは探せば見つかり簡単に作れるし、それなりに強いです。しかし、
そこから先があまりないのです。そのとても短いプログラムに込められたノウハウや
最適化には、尊敬の思いを強く感じます。メモリーの無い時代に作られた先人達の
凝集された知能の素晴らしさ。とても単純では有るが素晴らしき性能。
これを元にこの方向を超えるには、先人達の苦労を超える努力が必要です。
正直お勧めできないし、過去の環境で完成された高い技術は。一つの山です。
後は下るのか登るのかは分かりません。
つづく
0426349
2007/07/22(日) 17:09:25今こそ明かしましょう。そのAIを分析し、機械語からアセンブラへ。
そして、コンパイラにより高度に最適化されたアセンブラから、
完全なC++ソースを作ってしまいました。これは研究のために行ったので
ソースやノウハウは公開されないし、それにも勝るAIを自身で作っているので
純粋に研究です。
その結果、皆さんに言えることは、今の環境での新しい技術を考えて欲しい。
2の手法で目を見張る物があるのは、下記のHPです。
デジタル麻雀論の次世代麻雀エンジン「雀-X」
↓
ttp://www.jan-x.jp/
これは、ほぼ私の方向と同じで、より完成された物だと思います。
私のAIは「雀-X」と似たような機能を持っています。
この方向で、AIとして麻雀を分析し、「とつげき東北」を越える、麻雀の
分析者となる事も夢ではないでしょう。
0427デフォルトの名無しさん
2007/07/22(日) 17:32:53囲碁だとモンテカルロは9路板だとプロと互角らしい
囲碁は、最大指し手が80手ほどあってかなり大変だが
麻雀では指し手は14手しかない
その上、>>371の様にやれば、指し手ごとに勝率を求める訳では無いから
実質、指し手は一手のみと考えられる
モンテカルロが最強だ
0428デフォルトの名無しさん
2007/07/22(日) 17:37:500429デフォルトの名無しさん
2007/07/22(日) 17:39:53りんしゃんかいほう!!
0430デフォルトの名無しさん
2007/07/22(日) 19:07:00それとも子が100点ずつ支払うんでしょうか??
0431デフォルトの名無しさん
2007/07/22(日) 19:35:04麻雀そのもののルールに関する質問はこっちへ
http://money6.2ch.net/mj/
0432デフォルトの名無しさん
2007/07/22(日) 21:28:00ちゃんとソースだせよ
0433デフォルトの名無しさん
2007/07/22(日) 21:30:07まずルールが確定しないとソースが出来ない・・・
430はどこから300点出るのか教えてくれ・・・
0434デフォルトの名無しさん
2007/07/22(日) 21:33:16モンテカルロ最強が間違いないと言いつつ、その理由は滅茶苦茶なあたり
やはりリバーシスレの1の匂いがする。
ageてるのも共通。
0435デフォルトの名無しさん
2007/07/22(日) 21:33:27振ったやつから、積もれば全員からもらうだろ
0436役はこれでいいか??
2007/07/22(日) 21:36:17●一翻役
*リーチ
*門前自摸
*平和
タンヤオ
海底撈月
河底撈魚
嶺上開花
搶槓(他の人がポンした牌を付け足してカンしたときその牌であがること)
*一盃口
翻牌 三元牌、場風牌、自風牌のコーツ、カンツ一組ごとに一役とする
●二翻役
ダブルリーチ
対々和
三暗刻
三槓子
三色同刻
*三色同順
混老頭
小三元
*チャンタ
*一気通貫
連風牌 コーツ、カンツ一組に対して二翻とする
チートイツ 二十五符二翻で計算
●三翻役
リャンペーコー メンゼンに限る
*混一色
*純チャン
0437デフォルトの名無しさん
2007/07/22(日) 21:37:06*清一色
●満貫 7飜以下で基本点が2000点以上、40符6翻、人和のとき 2000点
●ハネ満 8〜9飜のとき 3000点
●倍満 10〜12飜のとき 4000点
●三倍満 13飜以上のとき 6000点
●役満(四倍満 8000点)
天和、地和、大三元、四暗刻、清老頭、大四喜、小四喜、字一色
緑一色 發を含まなければならない
国士無双 暗カンでもチャンカン可
九連宝燈 和了形が九連宝燈なら可
四槓子 雀頭の完成をもって和了とする
0438デフォルトの名無しさん
2007/07/22(日) 21:40:02どっからコピーしたんだw
バンバンつけて数える人は今はもう年配にしかいないぞ
0439デフォルトの名無しさん
2007/07/22(日) 21:43:190440デフォルトの名無しさん
2007/07/22(日) 21:44:35ルールを確定させなければ、強いプログラムは作れないのだが・・・
日本プロ麻雀連盟競技ルールに基づくものなのだが 駄目なのか??
0441デフォルトの名無しさん
2007/07/22(日) 21:48:50運の要素に関わる部分は排除した方が強さが判る
(日本プロ麻雀連盟競技ルールに基づく)
0442デフォルトの名無しさん
2007/07/22(日) 21:51:53それ以外にも、〜連盟とか、〜協会みたいなのが存在するのかな?
0443デフォルトの名無しさん
2007/07/22(日) 21:52:42プログラムを作ってくれます
0444デフォルトの名無しさん
2007/07/22(日) 21:54:22ttp://www.zenjanren.com/zen/jmoc/yaku%5E.htm
麻雀日本公式ルール
ttp://www.tuuhankan.com/mahjong/rulu.htm
こんなのもあった。中身は見てないからシラネ
0445デフォルトの名無しさん
2007/07/22(日) 21:56:02修正していって統一ルールを決めようぜ!!!
0446デフォルトの名無しさん
2007/07/22(日) 21:57:23そういうモードをつける、という方向なら構わないけど・・・
そもそも、その程度の運なんて全体の運からみたら
大した問題ではないんだよね。
なにしろ、配牌、自摸に関しては全てが運なのに。
あと、運を排除するよりも 運をも計算する 方がいい。
裏ドラ、赤5までじっくり考慮しての一打ってのは
戦略戦術に深みが出るよね
0447デフォルトの名無しさん
2007/07/22(日) 21:58:330448デフォルトの名無しさん
2007/07/22(日) 22:02:01面白そうだし、牌の巡りが運だってのもそのとおりなんだが、裏ドラまで計算に入れるのってツラクネ?
人間同士でもそこまで考えてるやつもそうそう多くないように思うし。
最終的には、そこまで目指さないと最強とは言えないだろうが。
0449デフォルトの名無しさん
2007/07/22(日) 22:02:19ある程度出来た段階で一般化(この場合裏アリ一発アリ)への
対応をしていかないと最強もクソも無いけど
0450デフォルトの名無しさん
2007/07/22(日) 22:06:26やっていては追いつけないなわけで、プログラムにしか出来ないことを
軸に戦術(アルゴリズム)を立てることが重要だと思う。
0451デフォルトの名無しさん
2007/07/22(日) 22:09:11そのとおりなんだけどさ。けど、>>449も言っているけど、現状基本的ロジックが固まっていないから、そこからビルドアップしていくほうが早くね?
そこからバージョンアップしていくほうがいいと思うんだけどなぁ
0452デフォルトの名無しさん
2007/07/22(日) 22:14:00各所でコンピュータの得意な事を取り入れるのが重要だと思う。
0453デフォルトの名無しさん
2007/07/22(日) 22:23:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4710.txt
0454デフォルトの名無しさん
2007/07/22(日) 22:26:24麻雀のルールくらい知ってる
そろそろおまえらも何かプログラム出してみろよw
0455デフォルトの名無しさん
2007/07/22(日) 22:28:33それをなくすためだ
ルールを知ってるなら、ローカルルールに依存する部分だけ抽出してくれ
0456デフォルトの名無しさん
2007/07/22(日) 23:06:46・喰いタン先ヅケの有り無し
・ウマ、トップ賞、箱下
・一発、裏、赤、チップ
・連荘の条件、二翻しばりの有無と条件
・半荘か東風か。 あと西入(南入)の有り無し、条件
・あがりやめの有無
・パオの有り無し、条件
競技ルールこそがローカルルール とも言えるので
そこは十分注意した方がいい。
あと、役判定はどの役もON/OFFできるようにすべし。
0457デフォルトの名無しさん
2007/07/22(日) 23:09:00そこからサンマについての考察に分岐するのも
面白いので、136牌を固定値としない工夫も
あったらいいかもしれない
0458デフォルトの名無しさん
2007/07/22(日) 23:17:26せっかくだからプロ(人間)と対戦可能なルールがいいだろ???
0459デフォルトの名無しさん
2007/07/22(日) 23:22:29>>398にあるが・・あってるのか???
あと、>>436>>437>>453に基づいて、役の点数を出すルーチンを作ろう
二人が一致すればokだろう(簡単のためまず東場で親を仮定することにする)
0460デフォルトの名無しさん
2007/07/22(日) 23:32:46プログラム上可変にしておいて
固定で研究すればいいだろ
0461デフォルトの名無しさん
2007/07/22(日) 23:35:00そうしたいやつはそうすればいいけど・・・しかしルールは決定しなければ対戦できない
0462デフォルトの名無しさん
2007/07/22(日) 23:38:51そのへん麻雀をやってる人間ならそれぐらい分かると思うんですよ、日本プロ麻雀連盟競技ルールなんかはっきり言って意味無い。
あと麻雀もローカルルールが無いようで雀荘ごとに違うようなものだから>>456に一般的なものを付け加えるなら
・大車輪、流し役満、十三不塔などの一般的でない役の扱い
・九種九牌を認めるか?
・国士無双のカン上がりは有りか?
・焼き鳥、割れ目を認めるか?
・食い換えを認めるか?
等々すごく有る、普通は「ありあり」で全部認めちゃうけど。
とりあえず競技ルールはまったく一般的ではないから考えるだけ無駄だと思う、
俺が理想だと思う最強の形は玄人の打ち筋+コンピュターの頭脳。
0463560
2007/07/22(日) 23:46:58{刻子34+順子21種(+2枚組み:それぞれ34,24,21種)}^5通りくらい、を役判定に突っ込ませる
これが普通だと思ってるんだけど。
で、字牌の対子とか、塔子を持つ三色(1枚足らずとか)を点数つけてやれば評価関数が出来る気が
・・・問題は面子構成が数十種類はできることなんだけど
0464デフォルトの名無しさん
2007/07/22(日) 23:49:38・一発、裏、赤、チップ
一発、裏、槓裏ドラ、ダブルトリプル役満
焼き鳥、割れ目
などは入れては駄目だろ???
最強の雀士は、運が味方をするはずだという発想があるだろ???
運とか、技とかはなるべく排除して対戦したものが最強だろう
0465デフォルトの名無しさん
2007/07/22(日) 23:52:21上三つは普通にありなんじゃね?
焼き鳥・割れ目は微妙。
食いかえはどうなんだろ?ロジック組む上で、認めちゃうと結構ツラくなっちゃうような希ガス
0466デフォルトの名無しさん
2007/07/22(日) 23:57:32それには、運任せの一発逆転はなるべく排除した方がいいんだ
異常に得点が動くのは望ましくない
賭麻雀とかならば楽しみがあるんだろうけど・・・
0467デフォルトの名無しさん
2007/07/22(日) 23:58:330468デフォルトの名無しさん
2007/07/22(日) 23:59:07九種九牌はリセット扱いで場の変動が柴棒のみなのでどうでもいいと思った。
十三不塔は アルゴリズムに無関係なので無視した。
役については、ON/OFFすればいいので書かなかった。
焼き鳥割れ目の考慮は さすがに一番最後でいいと思った。
食い換えと 国士の暗カンあがりは忘れてた。ごめんなさい
0469デフォルトの名無しさん
2007/07/23(月) 00:02:21期待値の計算には一発は普通に入ってくる。
一発で積もれる確率は 上がり牌÷残り牌 だから
特に難しく考えなくても計算に組み入れることは加納。
裏ドラも同様に非常に簡単な式なので除外するのは
もったいない。
最初のうちは無視しててもいいけどさ、いずれは考えないとね。
0470デフォルトの名無しさん
2007/07/23(月) 00:08:57追加することが簡単かどうかじゃないんだ
一発はまあいいとして、普通に考えて裏ドラが予測出来る可能性はほぼない
運が味方をするとか、ツキに見放されたとかいう要素は、強さ以外の部分であり無い方がいいだろ
0471デフォルトの名無しさん
2007/07/23(月) 00:10:17ゲームの性格上、得点を手に入れる回数(局数)に限りがあるので
逆転するだけの得点および役 が要求される場面は結構多いと思う。
あと、終盤でのリーチでは 当然一発ツモの確率も上がるので
(相手に上がり牌を消化されてることを考慮しても、計算上は上がる)
それを戦術に組み入れることは強さの条件になる。
0472560
2007/07/23(月) 00:11:020473デフォルトの名無しさん
2007/07/23(月) 00:11:58↑
昔、哲也であったネタww
0474デフォルトの名無しさん
2007/07/23(月) 00:15:10花牌は無視したほうがいい、使い方知らない人のほうが多い。
>>466
もう君はいいから、麻雀の基本を何も分かってない人間が何を発言しても無駄、
ぐだぐだ言ってないで自分の考える最強アルゴリズムを作れば良いだろ、
あと、ウマ、トップ賞、箱下、チップ、焼き鳥、割れ目は運とは関係ない実力が物を言うルールなんだけど。
0475デフォルトの名無しさん
2007/07/23(月) 00:15:43だからその逆転は、強さではなくて運にかなり依存してしまうだろ???
打つ人の力ではなく、たまたま逆転出来たっていうのは、伝説の雀士とかならありだけど・・
それはたまたまの可能性が強まる
0476デフォルトの名無しさん
2007/07/23(月) 00:20:04統一ルールを決定する事が重要だ
0477デフォルトの名無しさん
2007/07/23(月) 00:21:21裏ドラの予測はできるよ。
たとえば、一通が出来ていれば裏ドラの乗る確率は
一通の色で見えてる数牌をXとすると (36-X)/(見えない牌-X)
残り8順とかなら見えない牌数は相手の手牌13×3+8×4+11とちょっと。
一通の数牌は20枚程度見えてるとして 16/90=17%
確定マンガン手に 裏を期待(=跳ね満)したときに 17%はデカイでしょう。
まあ実際にはもうちっと減って10%くらいだけどそれでもデカイ
0478デフォルトの名無しさん
2007/07/23(月) 00:21:41逆転ってのは、きちんと狙ってやるんだよ。
いいから雀荘行ってきたら?
やっぱり麻雀はトップを競ってナンボだと思う。
細かいルールは何でもいいから、評価は順位点のみ、トップ1点、他0点にしようぜ。
0479デフォルトの名無しさん
2007/07/23(月) 00:22:16外すなら、運依存のルールからだと思うな
0480デフォルトの名無しさん
2007/07/23(月) 00:22:44運と確率論をごっちゃに考えてませんか?
確率以上のことが起きることを 運 というんです。
0481デフォルトの名無しさん
2007/07/23(月) 00:25:47裏ドラの付く確率は出せても、どんなあがりに対してもほぼ平等でしょ??
だからこれは運任せと言うんだ
0482デフォルトの名無しさん
2007/07/23(月) 00:26:490483デフォルトの名無しさん
2007/07/23(月) 00:30:02だから、そこまで計算して、はじめて
・逆転する可能性が20%あるならリーチで攻める
・ないならもう1ハンつけるまで手を育てる
なんていうアルゴリズムが産まれる余地が出来るわけでしょ。
牌効率追求だけならこんなスレはいらないし、全部電卓で出来ちゃうよ。
0484デフォルトの名無しさん
2007/07/23(月) 00:30:19指し手の実力に依存が少ない要素は削るべきなんですよ(簡略化と一発逆転を無くす為)
初心者が、天和だして後は適当で一位になっても実力は不明でしょ??
裏ドラが沢山付いて一位になっても実力は不明でしょ??
0485デフォルトの名無しさん
2007/07/23(月) 00:33:56天和の確率は1/30万と言われている。(実際に計算したときはもう少し小さかったけど)
ただ、それは全員に平等に割り振られる期待値なので
計算上は省いてもいいし、逆転の要素にはならない。
しかも期待値としては32000/30万=0.1以下なので 誤差です。
0486デフォルトの名無しさん
2007/07/23(月) 00:36:47だから、全員に平等に割り振られる要素は、はじめから入れない方がいいんですよ
初心者でも、上級者でも、その平等な要素があることで、初心者が上級者を
打ち負かすということが起こるわけです
0487デフォルトの名無しさん
2007/07/23(月) 00:39:33実現確率の有無とは関係なしに、減らした方が
簡略化と実力を計る為にいいんです
0488デフォルトの名無しさん
2007/07/23(月) 00:41:25天和とかぷーtぅとかは無視してもいいんじゃない?
一発と裏はかなり影響力が大きいので無視できないけど
0489デフォルトの名無しさん
2007/07/23(月) 00:43:50裏ドラは、初心者でも上級者でもほぼ予測不可能で、高得点がついてしまうんですよ
0490デフォルトの名無しさん
2007/07/23(月) 00:45:46裏ドラは十分に予測可能で、勝敗に影響する得点の変動をもたらし
かつその発生条件をプレイヤーが選択できる
という話なんだけどなぁ。
0491デフォルトの名無しさん
2007/07/23(月) 00:51:08どう考えても誰にでも平等に起こるだろ???
0492デフォルトの名無しさん
2007/07/23(月) 00:53:56そのときには、手牌を変更していく事は難しいだろ??
変更可能だととしてもそれはたまたまだろう
0493デフォルトの名無しさん
2007/07/23(月) 00:56:07見えてない牌 の種類と枚数がわかる。
次に、自分の牌を見て、裏ドラとなりうる牌の種類と枚数がわかる。
これらから、裏ドラが乗る確率がわかる。
0494デフォルトの名無しさん
2007/07/23(月) 01:00:31例えば3通りの指し手であがりに近づけるとする
このとき、どう指しても裏ドラがつく確率はほぼ変化が無いだろ???
あがりなら初心者でも上級者でも裏ドラがつく確率は同じようなものだろ???
0495デフォルトの名無しさん
2007/07/23(月) 01:13:09ダマで行くか、降りるか、リーチをかけるか
そういう選択をするときに必要になる。
何切る?で裏ドラを考慮する必要はほとんどないが
他に問題が無ければ 裏ドラ枚数が多い方の選択を
すべきだしね。
0496デフォルトの名無しさん
2007/07/23(月) 01:53:06ほかに戦略性があって誰にでも平等でないルールはありますか?
0497デフォルトの名無しさん
2007/07/23(月) 02:01:19順子系は入手割合が2倍、刻子系は入手割合が4倍
0498デフォルトの名無しさん
2007/07/23(月) 02:14:37こればっかしは状態が半端無いから面倒だよな・・・
最強の面前戦士という設定でいいんじゃないかw
0499デフォルトの名無しさん
2007/07/23(月) 02:43:35もう好きにルールを決めていいですよ。
0500デフォルトの名無しさん
2007/07/23(月) 02:57:30コレでも見て対策練ろうぜ
0501デフォルトの名無しさん
2007/07/23(月) 07:17:25麻雀のこともよくわかってないのに他人のアドバイスを聞こうともしないDQNに見えるな。age厨だし。
だいたい裏ドラ入れるかどうかなんてフラグ一つで切り替えられるだろうに。
0502デフォルトの名無しさん
2007/07/23(月) 09:44:30でもまあ、競技麻雀としてはインフレルールはなるべく外せる形が望ましい。
0503デフォルトの名無しさん
2007/07/23(月) 09:50:11それによって、ルールも変わってくるんだろうね。
>戦略性があって誰にでも平等でないルール
そんなもんナンボでもあるだろう?ダブ東だって親しか狙えないって意味では、平等じゃねーぞ。
0504デフォルトの名無しさん
2007/07/23(月) 10:29:33通常ルールでも最強なんですよ 時々運で負ける事があっても統計的には最強です
という訳で、実力を計る為には、簡略化したものでやれば十分なんです
あと、フラグで入れるとかではなくルールとして採用するかどうかなんです
統一ルールを決めない事には最強のプログラムが決定できません
0505デフォルトの名無しさん
2007/07/23(月) 10:32:28>フラグで入れるとかではなくルールとして採用するかどうかなんです
?
0506デフォルトの名無しさん
2007/07/23(月) 10:35:20ルールを設定しなければ最強のプログラムは作れないんですよ
例えば、役満の得点は1000点、平和の得点は8000点だとしますと、
平和をねらっていくような思考ルーチンにしなければなりません
0507デフォルトの名無しさん
2007/07/23(月) 10:36:44そんな例えをするDQNに用事はない
0508デフォルトの名無しさん
2007/07/23(月) 12:03:21そんなの評価関数の重みのひとつに過ぎないんだから
対応できない思考ルーチンはうんこだろ
0509デフォルトの名無しさん
2007/07/23(月) 12:04:40弱小プロレスラーみたいでワラタ
0510デフォルトの名無しさん
2007/07/23(月) 12:07:580511デフォルトの名無しさん
2007/07/23(月) 13:30:21評価関数f(2):面子
評価関数f(3):裏ドラ
評価関数f(k):色々
結果F=Σa(n)・f(n)だろうな(a(i):それぞれの重み係数)
0512デフォルトの名無しさん
2007/07/23(月) 13:54:540513デフォルトの名無しさん
2007/07/23(月) 13:58:28やはり裏ドラは無くしましょう
0514デフォルトの名無しさん
2007/07/23(月) 14:00:52今日たまたまよくわかる量子コンピュータなる本を立ち読みして仕入れた知ったか知識なのですが、
麻雀は奥深い気がします、チェスは完全情報ゲームなので量子コンピュータを使えば完全解析可能だと思われます、
将棋は取った駒を再利用できるのでチェスよりも複雑ですがこれも完全情報ゲームなのでいつか解かれるかも知れません。
でも麻雀の場合は極端な話山を積んで初めの配牌の時点でコンピュターですらやはり運に支配されてしまうので全局無敵は不可能でしょう、
それに誰かのポン・チーでツモ順も変わってしまうしこれもやはり運に作用されてしまう要素が大きいでしょう、
最強を目指すなら何万局単位で最強ということになるでしょうね。
0515デフォルトの名無しさん
2007/07/23(月) 14:02:28一発は、他人からは避ける事は出来ますが、するとツモでやるしか無くなるわけですが
これは運ですな
0516デフォルトの名無しさん
2007/07/23(月) 14:24:11一発を計算しないんだったら
高め安めも計算しないってことだね
0517デフォルトの名無しさん
2007/07/23(月) 14:30:480518デフォルトの名無しさん
2007/07/23(月) 14:38:50中盤(6巡)での判明牌数:38(手牌、捨て牌、ドラ)
終盤(12巡)での判明牌数:64(↑と同様)
確定している牌はそれぞれ全体の1割、3割、5割程度。
中盤以降なら十分意味あるだろうな。鳴きや字牌、壁など使えば更に増えるし
0519デフォルトの名無しさん
2007/07/23(月) 14:43:02予測した裏ドラにあわせて残す牌を決めて上がりにくくなるリーチをかけるわけ?
0520デフォルトの名無しさん
2007/07/23(月) 14:43:57一発は、ある程度確率が求まるだろうが一巡目という制約によりほぼ運任せだろ
0521デフォルトの名無しさん
2007/07/23(月) 14:47:36結果の点数だけが上下するということになるのなら、
無いほうがいい気がする。
0522デフォルトの名無しさん
2007/07/23(月) 14:56:36何百、何千と対局して決めるなら、裏ドラを考慮した方が
強いような気がするけど。
もしそうなら単に「運」とは言えないよね?
ところで「はったり」「ひっかけ」とかも考慮の内?
0523デフォルトの名無しさん
2007/07/23(月) 14:56:56リーチをかけなければ裏が乗らないんだから
リーチするかしないかの判定にはいるじゃん?
0524デフォルトの名無しさん
2007/07/23(月) 14:57:54東南戦半荘を一回戦とする。持ち点は各自三万点とする。
全局を一翻しばりとし、常に場に二翻つくゾロ場とする。
順位点
三万点を基準とし、三万点以上の者をプラス、三万点未満の者をマイナスとしそれぞれに順位を加える。
一人プラスのときの順位点は、それぞれ+12 、-1 、-3 、-8とする。
二人プラスのときの順位点は、それぞれ +8 、+4 、-4 、-8 とする。
三人プラスのときの順位点は、それぞれ +8 、+3 、+1 、-12 とする。
四人マイナスのときの順位点は、それぞれ +8 、+4 、-4 、-8 とする。
0525デフォルトの名無しさん
2007/07/23(月) 14:59:350526デフォルトの名無しさん
2007/07/23(月) 14:59:25一発裏ドラを考慮したアルゴリズム と
考慮しないアルゴリズムを 戦わせればいいじゃんか。
そのための規格だろ?
0527デフォルトの名無しさん
2007/07/23(月) 15:01:100528デフォルトの名無しさん
2007/07/23(月) 15:02:55いや、、、状況によって裏ドラ期待でリーチするのかどうか、でしょ。
一定の率でリーチの率が上がるだけだったら無くても一緒じゃん。
0529デフォルトの名無しさん
2007/07/23(月) 15:03:21ほぼ予測が不可能なんだって
裏ドラが乗ったり、一発になる確率はどんな局面に対してもほぼ平等だろう(運任せだろ)
0530デフォルトの名無しさん
2007/07/23(月) 15:16:25それを何局繰り返すの?
要は多数繰り返したときで「裏ドラ有り無しで差がつくか」が問題かと。
>>529
裏ドラ乗っても点数は変わらないの?
トップ取れるかどうかの瀬戸際で影響しない?
勝負手はありえない?
0531デフォルトの名無しさん
2007/07/23(月) 15:18:480532デフォルトの名無しさん
2007/07/23(月) 15:26:37そう思うなら、双方ともまったく互角の戦いをするんじゃないの?
そういう結果が出たらそれで十分じゃないか。
0533デフォルトの名無しさん
2007/07/23(月) 15:28:22可能ですが何か
0534デフォルトの名無しさん
2007/07/23(月) 15:32:170535デフォルトの名無しさん
2007/07/23(月) 15:34:04上の方に計算方法あるよ
0536デフォルトの名無しさん
2007/07/23(月) 15:41:080537デフォルトの名無しさん
2007/07/23(月) 15:54:47何万回か戦わせれば 統計取れるんじゃないの?
ちょっとかっこいいんだけど
0538デフォルトの名無しさん
2007/07/23(月) 16:07:47そりゃ最終的には裏ドラ有りプログラムのほうが強いんじゃね?
0539デフォルトの名無しさん
2007/07/23(月) 16:41:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4724.txt
0540デフォルトの名無しさん
2007/07/23(月) 16:44:59東場、親、一局目で役の得点を計算するルーチンを作ろうぜ
二人が一致すればルールにおかしなところは無い事になるとおもう
0541540
2007/07/23(月) 16:55:1614枚の牌に対して基本点(または符、飜数)を求めればいいんだ
0542デフォルトの名無しさん
2007/07/23(月) 16:58:26まずここを作ろうぜ
0543デフォルトの名無しさん
2007/07/23(月) 17:01:48こういう条件も簡単に浮かぶし(裏ドラのる率なんて簡単に出せるんだから)、
それ位入れないと逆転に対して極端に弱くなりそう
0544デフォルトの名無しさん
2007/07/23(月) 17:16:35int maisu[38];
public:
};
//ここを開発するんだ!!
void hantei(TEHAI h, int buf[] ){
buf[0]=1; //役の組み合わせの数
buf[1]=3;buf[2]=5;buf[3]=7;buf[4]=10; //コーツ、カンツの駒番号
}
main(){
TEHAI h;int buf[100];
hantei(h,buf);
0545デフォルトの名無しさん
2007/07/23(月) 17:30:180〜8:マンズ
9〜16:ピンズ
17〜24:ソーズ
25〜31:白発中東南西北
32は駒が存在しない事を表す
あがりの種類は役満、国士、チートイなどを除けばコーツ(カンツ)のペアを
決定すれば一意に求まるはずである
1123456789白白白ならば、hantei(h,buf);を呼ぶと、
buf[0]=1 buf[1]=32 buf[2]=32 buf[3]=32 buf[4]=32 とセットする
種類が2とおり以上あれば、配列4つを追加してコーツの駒番号を記述する
0546デフォルトの名無しさん
2007/07/23(月) 17:52:19最終局で裏ドラが出る確率よりも
そこまでに裏ドラ出されて点取られる確率の方が50倍(適当)以上ありそうなんですが
相手は3人で、そこまでの対局数がある為
0547デフォルトの名無しさん
2007/07/23(月) 17:55:43るべく速くあがった方がいいような感じになって
手作りの工夫が減ると思うんですけど・・・
運に依存しない上手な試合運びが出来て最強だと思うんですが
0548デフォルトの名無しさん
2007/07/23(月) 17:58:31http://www.biwa.ne.jp/~seiji-i/rating.htm
0549デフォルトの名無しさん
2007/07/23(月) 18:01:54それがどうかしたの?
0550デフォルトの名無しさん
2007/07/23(月) 18:06:19あってるのか誰か別ルーチンをつくって調べてくれ・・
0551デフォルトの名無しさん
2007/07/23(月) 19:17:40でbufには何が入るん?(あと、コーツ、カンツ?コーツ、シュンツじゃなくて?ってかメンツ)
0552デフォルトの名無しさん
2007/07/23(月) 19:26:10すまん
牌番号間違えた 下が正解
0〜8:マンズ
9〜17:ピンズ
18〜26:ソーズ
27〜33:白発中東南西北
34は駒が存在しない事を表す
0553デフォルトの名無しさん
2007/07/23(月) 19:30:53111222333
のときは、
buf[0]=2で、次の4つはNULL,NULL,NULL,NULLで次の4つ0,1,2,NULLだよ
NULL=34とする
0554デフォルトの名無しさん
2007/07/23(月) 19:32:110555デフォルトの名無しさん
2007/07/23(月) 19:41:10あがりの可能性があれば、その個数と組み合わせが返る
0557デフォルトの名無しさん
2007/07/23(月) 19:43:54そうだけど・・・そしたら状況(鳴きとかリーチとか)に応じて役がつくか判定する
ルーチンへ渡す
0558551
2007/07/23(月) 19:46:37※面子手のみなら5要素の配列(頭、メンツ、メンツ、メンツ、メンツ)
0559デフォルトの名無しさん
2007/07/23(月) 19:49:21いや、普通に考えるなら数牌は数字を合わせた方が楽だぞ。
あと、せっかく同じ牌は4つあるんだから
役判定ではビットに埋めちゃえば
数牌の列が36ビット5バイトで済むから、
シフトと反転を使えばテーブルにしてしまう
ことだってできる
0560デフォルトの名無しさん
2007/07/23(月) 19:50:10そうすると渡すと容量食うんです・・・
すべての組み合わせを求める手間に比べれば、
コーツが決定している状況から求める手間は無いようなものです
0562デフォルトの名無しさん
2007/07/23(月) 19:56:13コーツは無しにしても2種類あった・・・
11 123 234 234
123 123 123 44
0563デフォルトの名無しさん
2007/07/23(月) 19:56:5910進だからしかたないぴょん
あと、1から9を使うメリットはもうひとつある
もしも判定ルーチンを 真正面から作るなら
「0,10,20は存在しない」というのが とても便利
0564551
2007/07/23(月) 20:01:30ってことでOKですか?
それともhantei{刻子の抽出}→yaku{他の面子取り出し+役判定}ってこと?
0565デフォルトの名無しさん
2007/07/23(月) 20:04:22int型でペアになるビットを立てて4つ持てばいいんだ
数牌だけなら32個ですむからな これなら一意だな
たとえば
111222333
のときは、
buf[0]=2で、次の4つは1,2,4,NULLで次の4つ7,7,7,NULLだ
0566デフォルトの名無しさん
2007/07/23(月) 20:08:37コーツの決定だけでは一意では無い事がわかったため変更しました
111 は、32ビット列で (1000・・・・)
別の111は(000・・・10000)
234は(011100・・・)
とします
0567551
2007/07/23(月) 20:13:14どう取るか一意に考えるのが面倒だから、自分の場合は刻子・順子の組み合わせを
出してたな(役まで含んで考えると一意に求まらないかも)
0568デフォルトの名無しさん
2007/07/23(月) 20:13:20アッー!
0569デフォルトの名無しさん
2007/07/23(月) 20:14:395ビット×4=20ビットですみますね
0570デフォルトの名無しさん
2007/07/23(月) 20:25:494×4=16ビットですみますね
これならshort int型に入ります
コーツビットが1で、コーツ種類があり得ないものならば数字の9とすれば3ビットですみます
0571デフォルトの名無しさん
2007/07/23(月) 20:28:27コーツ(カンツ)判定に1ビット、数字の種類に2ビット、数字に3ビット必要でした
6×4ビット=24ビットで平気です
0572551
2007/07/23(月) 20:31:03メンツ構成を刻子→順子で作り出して、今度は刻子を一つ開放させてその次の牌から刻子→順子を作り出す
で、・・刻子がなくなるまでやる(刻子・順子の和が最大のものだけ採用)
これじゃメンツ判定できない?(遅いか)
11122233→111,222,33→×111,33→×222,33→123,123,12
で渡す時は手牌で渡して3つずつ取り出せるように並べ替える(11122233か12312312)
0573551
2007/07/23(月) 20:35:10で45bit分。
単騎とか入っているのは役計算時に符計算も行うから。
0574これならどうか
2007/07/23(月) 20:35:55int maisu[34];
public:
};
class KUMI {
char cotubit : 1;
char syorui : 2;
char bango : 3;
};
//組み合わせ数を返す、KUMI kに組み合わせを入れる
int hantei(TEHAI h, KUMI k[] ){
return 1;
}
main(){
TEHAI h;
KUMI k[10];
hantei(h,k);
}
0575デフォルトの名無しさん
2007/07/23(月) 20:48:09char cotubit : 1; //コーツかジュンツか
char bango : 7; //駒の番号をいれる
};
にしておいて、すべてのコーツ、ジュンツを登録した方が一般性がありますね
0576デフォルトの名無しさん
2007/07/23(月) 20:54:20int hantei(TEHAI h, KUMI k[] ){
k[0].cotubit =1 ; k[0].bango = 1;
k[1].cotubit =1 ; k[1].bango = 2;
k[2].cotubit =1 ; k[1].bango = 3;
k[3].cotubit =0 ; k[1].bango = NULL; (NULL=0や34など)
k[0].cotubit =0 ; k[0].bango = 2;
k[1].cotubit =0 ; k[1].bango = 2;
k[2].cotubit =0 ; k[1].bango = 2;
k[3].cotubit =0 ; k[1].bango = NULL;
return 2;
}
0577デフォルトの名無しさん
2007/07/23(月) 20:55:43麻雀ごときに「量子コンピューター」を持ち出してるお前が
一番馬鹿だとおもうが?
あのさ、「1・9字牌」が一枚も無い状態で、国士無双を
求める気なのか、お前はwww
0578デフォルトの名無しさん
2007/07/23(月) 20:55:52int hantei(TEHAI h, KUMI k[] ){
k[0].cotubit =1 ; k[0].bango = 1;
k[1].cotubit =1 ; k[1].bango = 2;
k[2].cotubit =1 ; k[2].bango = 3;
k[3].cotubit =0 ; k[3].bango = NULL; //(NULL=0や34など)
k[4].cotubit =0 ; k[4].bango = 2;
k[5].cotubit =0 ; k[5].bango = 2;
k[6].cotubit =0 ; k[6].bango = 2;
k[7].cotubit =0 ; k[7].bango = NULL;
return 2;
}
0579デフォルトの名無しさん
2007/07/23(月) 20:59:02ある程度、形になってからアップロードしてね
0580デフォルトの名無しさん
2007/07/23(月) 21:01:00共通仕様を書いておいて、別の人が作っても同じ結果になるかどうかが大事なんです
仕様とサンプルをのせているだけですよ
0581551
2007/07/23(月) 21:04:29順子は普通に頭の数字を渡せばいいと思うが
あと、そのやり方だと役計算の時にまた手間がかかるのがイヤな感じがする
役計算はその結果を使ってテーブルで手を抜きたい所
0582デフォルトの名無しさん
2007/07/23(月) 21:05:34実践でこなれてない思いつき仕様を
断片的に出されても、カスはカスですよ
0583組み合わせを求めるルーチンを作ろうぜ
2007/07/23(月) 21:06:58public:
int maisu[37];
//1〜9マンズ 11〜19ピンズ 21〜29ソーズ 30〜36:白発中東南西北 0駒が存在しない
};
class KUMI {
public:
char cotubit : 1;
char bango : 7;
};
//組み合わせ数を返す、KUMI kに組み合わせを入れる
int hantei(TEHAI h, KUMI k[] ){
return 1;
}
main(){
TEHAI h;
KUMI k[10];
hantei(h,k);
}
0584デフォルトの名無しさん
2007/07/23(月) 21:13:10なるべく変数と容量は削っておいた方がいいとおもうんですよ
例えばデータを保存する必要が出てきたときなど
順子は最初の数字でいいです(途中ビットを削ろうとした名残です・・・)
0585551
2007/07/23(月) 21:30:35試行数が多いものはデータのサイズより速度を考えた方が良いです。
データは大して大きくならないし。
(自分の方法の場合でも3*5+6*5bit→6byte。10万通りで600kBまあ平気じゃない?)
0586デフォルトの名無しさん
2007/07/23(月) 21:39:20変数名がローマ字ってかっこ悪い気が・・・
0587デフォルトの名無しさん
2007/07/23(月) 21:44:54そしてKUMI k[] は、5個ずつ格納していきます
class KUMI {
public:
char cotubit : 2; //0〜3単騎、ジュンツ、コーツ、カンツ
char bango : 6; //駒番号
};
0588デフォルトの名無しさん
2007/07/23(月) 21:47:57メンツ構成で、7種類必要なのはなぜでしょうか??
鳴き牌は、判定する際に外しておけばいいですよね
0589551
2007/07/23(月) 22:02:411,12,13,11,123,111,111の4つ(単騎,辺塔子,間塔子,対子,順子,刻子,槓子(3枚のメンツ扱い))
これとは別に上がり牌と鳴き用のフラグも渡す。(上がり牌の符は別に用意しても良いけど)
上がり形だけなら対子順子刻子(槓子)だけで十分だけど評価させる為には入れておきたい
0591デフォルトの名無しさん
2007/07/23(月) 22:15:020592デフォルトの名無しさん
2007/07/23(月) 22:17:06#include <string>
using namespace std;
class TEHAI {
public:
int maisu[37];
TEHAI & operator =(string s){ return *this;}
};
main(){
TEHAI h="123456789x1y1abcd"; //1〜9マンズ x1〜x9ピンズ y1〜y9ソーズ a〜g:白発中東南西北
}
0593551
2007/07/23(月) 22:24:37いや、それは別に用意した方が早いだろうから(七対子は楽、国士はテーブルでOK)
シイサンはホントに知らない、というかローカルルールになりつつあるから排除w
0594デフォルトの名無しさん
2007/07/23(月) 22:27:36→m112234p235s2j112
0595デフォルトの名無しさん
2007/07/23(月) 22:40:30#include <string>
#include <iostream>
#define fore(i,j) for(i=0;i<j;i++)
using namespace std;
class TEHAI {
public:
int maisu[37];
TEHAI & operator =(string s){
int i,m;fore(i,37)maisu[i]=0;i=0;
while(i<s.size()){
m=s[i]-'0';
if(m>=1 && m<=9)maisu[m]++;
else if(m>48 && m<56) maisu[m-19]++;
else if(m==72){i++;m=s[i]-'0'+10;maisu[m]++;}
else if(m==73){i++;m=s[i]-'0'+20;maisu[m]++;}
else {fore(i,37)maisu[i]=0;break;}
i++;}return *this;}
};
main(){
int i;
TEHAI h;
h="123456789x1y1abcd"; //1〜9マンズ x1〜x9ピンズ y1〜y9ソーズ a〜g:白発中東南西北
fore(i,36)cout<<h.maisu[i+1]<<" ";
}
0596デフォルトの名無しさん
2007/07/24(火) 00:11:020597デフォルトの名無しさん
2007/07/24(火) 00:23:420598デフォルトの名無しさん
2007/07/24(火) 00:28:580599デフォルトの名無しさん
2007/07/24(火) 00:31:36tehai[14];
}
から作る
↓
役判定はおろか、テンパイ判定すら作れない。
↓
途中で投げる。
↓
別の人間が
main(){
tehai[14]
}
から作る。
↓
以下、繰り返し
0600デフォルトの名無しさん
2007/07/24(火) 00:35:53学生プログラマーとプロのプログラマーの間に有るのは。
プロのプログラマー>>>(越えられない教育の壁)>>>学生プログラマー
プロのプログラマー>>>(越えられない才能の壁)>>>学生プログラマー
最近、下のような気がしてならない。
0601デフォルトの名無しさん
2007/07/24(火) 00:36:470602デフォルトの名無しさん
2007/07/24(火) 00:38:39おれは、才能が有ればプロ並みのプログラム_かく学生を知っている。
0603デフォルトの名無しさん
2007/07/24(火) 00:39:18経験とか、才能以前に、「頭が幼稚」なんだろ
0604デフォルトの名無しさん
2007/07/24(火) 00:45:040605デフォルトの名無しさん
2007/07/24(火) 00:50:270606デフォルトの名無しさん
2007/07/24(火) 00:51:24順子,刻子,槓子のペア、もしくはそれに対子を加えたもの
一種の数牌のみだといくつあるんだよ???
0607デフォルトの名無しさん
2007/07/24(火) 00:52:05で、何分くらいで解けそう?
0608デフォルトの名無しさん
2007/07/24(火) 00:53:340609デフォルトの名無しさん
2007/07/24(火) 00:53:520610デフォルトの名無しさん
2007/07/24(火) 00:55:53あんたが高校生以下なら、受験時に少しは役に立つかもしれんから、勝手にやってくれ。
そうじゃないなら、まったくの不勉強。もしくは宝くじ必勝プログラム並みのトンデモさん。
0611デフォルトの名無しさん
2007/07/24(火) 00:56:44今の場合、14枚無くてもいいんだ
例えば、11555は、あがれる可能性有りと判定し、11255は可能性無しとするんだ
0612デフォルトの名無しさん
2007/07/24(火) 00:58:52何通りあるのか正しく求まらなければ、組み合わせを正しく判定出来ていない事になる
点数も正常でなくなるんだよ
どこかのページに書いてあったけど、売られている複数の麻雀ゲームが正しく
役判定出来ないらしい
0613デフォルトの名無しさん
2007/07/24(火) 01:00:44ならない
まずは、一種限定にして求めるのがいいやり方なんだよ
0614デフォルトの名無しさん
2007/07/24(火) 01:00:47何で、「組み合わせ」と「点数計算」が関係あるんだよ
高校生が糞みたいなこと書いてんじゃねーよwww
0615デフォルトの名無しさん
2007/07/24(火) 01:01:360616デフォルトの名無しさん
2007/07/24(火) 01:02:10「マンズ」も、「ソーズ」も、「ピンズ」も上がれる確率は一緒だろ。
小学生は書くな
0617デフォルトの名無しさん
2007/07/24(火) 01:03:08いつあがれる可能性があって、そのときのその組み合わせを求めたいんだ
麻雀ゲームをつくる上で必然の部分だろうが
0618デフォルトの名無しさん
2007/07/24(火) 01:03:30int Tehai[14]; //適当なデーターをセットしやがれ!
main(){
}
if(MentsCut(1)) cout "うひょーー上がってるぜゴラァーーーー!!";
cout "これが上がってるだって? ふざけるなゴラァーーーー!! 100万べん顔を洗って出直してきな!";
}
bool MentsCut(int i)
{
Tehai[46] = 0;
bool result = false;
for(; !Tehai[i]; i++){ if(i >= 46) { return true;} }
if(i <= 30) {
if(Tehai[i + 1] && Tehai[i + 2]) {
Tehai[i]--; Tehai[i + 1]--; Tehai[i + 2]--;
result = MentsCut(i);
Tehai[i]++; Tehai[i + 1]++; Tehai[i + 2]++;
}
}
if(T_Tehai[i] == 3) { Tehai[i] -= 3; result = MentsCut(i); Tehai[i] += 3; }
if(result)return true;
return false;
}
0619デフォルトの名無しさん
2007/07/24(火) 01:04:37○int Tehai[50]; //適当なデーターをセットしやがれ!
0620デフォルトの名無しさん
2007/07/24(火) 01:04:42どれも同じだから、同一視して、一種類のみ限定にして
あがりの可能性があるかを判定したいんだよ!
0621デフォルトの名無しさん
2007/07/24(火) 01:07:36wwwwwww
なんだよそのカス思考はwwwww
>いつあがれる可能性があって、そのときのその組み合わせを求めたいんだ
だから、なんでここで一々組み合わせを求めるんだよ。
無駄だろ
0622デフォルトの名無しさん
2007/07/24(火) 01:09:06そのうち、順子,刻子,槓子もしくはそれに対子がそろっているものはいくつあるんだよ
二人の値が一致すればそのプログラムは正常だといえるだろ
0623デフォルトの名無しさん
2007/07/24(火) 01:10:19コンパイル通して無いぜ、後は知らん。
0624デフォルトの名無しさん
2007/07/24(火) 01:13:08100000000 ×
200000000 ○
300000000 ○
400000000 ○
010000000 ×
110000000 ×
210000000 ×
310000000 ×
410000000 ×
020000000 ○
0625デフォルトの名無しさん
2007/07/24(火) 01:14:270626デフォルトの名無しさん
2007/07/24(火) 01:17:04でもそれは「トイツ」「アンコ」である判定は必要でも、
わざわざ「何通りがあるか?」を求める必要ないことは
理解できるよね?
0627デフォルトの名無しさん
2007/07/24(火) 01:17:14麻雀暦大体あわせて6年弱の若輩者ですが何を言いたいのかまったく分かりません。
それとも私の雀力では解読できない暗号なのでしょうか?
0628625
2007/07/24(火) 01:18:11>>624
上がれる条件がイマイチ分からない。それならメンツn個+トイツで考えた方がいいんじゃない?
121000000←こんな場合はどうするの?
0629デフォルトの名無しさん
2007/07/24(火) 01:18:43マンズのみ組み合わせが2通り、ソーズのみの組み合わせが2通りと出れば
計4通りに役がつく可能性があるわけだ
だから個別 (一種のみの数牌) で調べておくといいわけだ
0630デフォルトの名無しさん
2007/07/24(火) 01:21:23>計4通りに役がつく可能性があるわけだ
('A`)
ここから、どーやってプログラムに落とし込む気なのか
全然理解不能
0631デフォルトの名無しさん
2007/07/24(火) 01:21:37大丈夫、俺もよく分からん。
しかしだ、5進数の暗号は解読できた。どうやら同じ牌の数らしい、0枚1枚・・4枚とねw
0632デフォルトの名無しさん
2007/07/24(火) 01:22:1912100000はあがれる可能性は無いだろ
順子はひとつあるが、余りが出るからあがれる形ではない
0633625
2007/07/24(火) 01:25:22昔の記憶だけど3シャンテンでも、可能性は100種くらい行くぞ
そこからシャンテン落としたものまで含めると桁が違うし、メンツ構成にそんな
手間はかけてられない
0634デフォルトの名無しさん
2007/07/24(火) 01:25:25410000000 × 11112
020000000 ○ 22
120000000 × 122
220000000 × 1122
320000000 ○ 11122
420000000 ○ 111122
030000000 ○ 222
0635デフォルトの名無しさん
2007/07/24(火) 01:27:30今現在の手牌があがっている(可能性がある)のか、どうかを調べたいだけなんだよ
0636デフォルトの名無しさん
2007/07/24(火) 01:27:350637デフォルトの名無しさん
2007/07/24(火) 01:28:20この場合数杯とは マンズの1−9だけのようだ。
ポンジャン?
0638625
2007/07/24(火) 01:28:36例にそれを出したのは、他の構成にトイツがあれば13,15の組み合わせが可能性を持つ
ということ。ワザワザ分けるとこういう事に対処する必要が出てくる
0639デフォルトの名無しさん
2007/07/24(火) 01:28:58奴らばかりだから。
手牌に1枚も「ヤオチュー牌」が無くても、「量子コンピュター」使って
「国士無双」が上がれる確率を求めないと気がすまないんだろ?
0641デフォルトの名無しさん
2007/07/24(火) 01:29:28020000000 ○ 22
頭としてあがる可能性有り
320000000 ○ 11122
頭とコーツであがる可能性有り
420000000 ○ 111122
頭とカンツであがる可能性有り
030000000 ○ 222
コーツであがる可能性有り
0642デフォルトの名無しさん
2007/07/24(火) 01:30:26はカンなのか! そうなんだな!
0643デフォルトの名無しさん
2007/07/24(火) 01:31:43('A`)
どっちなんだよ?
「手牌があがっている」だけなら、ものの30分で作れるだろ。
「手牌があがれる可能性」を求めるなら、シャンテン計算は
重要な要素だろ。
0644デフォルトの名無しさん
2007/07/24(火) 01:31:580646デフォルトの名無しさん
2007/07/24(火) 01:32:53名前が違うのか??黙って手牌に4つ牌があるときはカンツと言わないのか??
0647デフォルトの名無しさん
2007/07/24(火) 01:34:37あがれる可能性といってるのは、他の牌も調べなければわからないためだ
一種のみで、あがりの形になっていなければ、全体でもあがりではないとわかる
0648デフォルトの名無しさん
2007/07/24(火) 01:34:470649デフォルトの名無しさん
2007/07/24(火) 01:36:06配列に計算結果を格納しておけば、一瞬であがれない事が判別できるんだよ
モンテカルロなど回数をこなす場合にかなり有効なんだ
0650デフォルトの名無しさん
2007/07/24(火) 01:36:24「カンした状態の3枚」と見ると「場合分け」ができないのか?
意味不明なところで場合わけして、肝心なところで場合わけが出来ない
0651デフォルトの名無しさん
2007/07/24(火) 01:36:33その考えなら字牌のテーブルも簡単
0653デフォルトの名無しさん
2007/07/24(火) 01:38:320654デフォルトの名無しさん
2007/07/24(火) 01:38:44111122の場合、
111 1 22や11 11 22と分けたらあがり形にはならないだろが
0655デフォルトの名無しさん
2007/07/24(火) 01:38:47('A`)
>420000000 ○ 111122
>頭とカンツであがる可能性有り
「111」(アンコ)+「12」(ペンチャン)の可能性は無視
「チャンタ」という概念が無いのですか?
0656625
2007/07/24(火) 01:40:17その後どうすんの?(ってかそこまで持っていくのはどうすんの?)
0657デフォルトの名無しさん
2007/07/24(火) 01:40:270658デフォルトの名無しさん
2007/07/24(火) 01:41:15そうだよ
あがっいる(形になっている)かどうかを調べたいんだ
一種の数牌のみだと何通りあるんだ?それが二人一致すれば正しいプログラムだろ
0659625
2007/07/24(火) 01:41:390660デフォルトの名無しさん
2007/07/24(火) 01:41:530661デフォルトの名無しさん
2007/07/24(火) 01:42:53いま現在があがれる形になっているか(加えてその組み合わせ)を知りたいんだよ
0662デフォルトの名無しさん
2007/07/24(火) 01:43:030663625
2007/07/24(火) 01:43:130664デフォルトの名無しさん
2007/07/24(火) 01:44:36お前は、どーやってプログラムを作りたいのか
こっちは全然理解できない前提で書くが、
俺は
・現在の手配で上がっている…(1)
↓
・1枚切ればテンパイである…(2)
↓
・一番テンパイに近い切り方をする…(3)
というプログラムの流れなると思う。
(1), (2)は1日あれば直ぐできるだろ。(今はシャンテン落としはなしの前提)
で、今一番議論してるの(3)のところだろ。
お前は何がしたいんだ?
0665デフォルトの名無しさん
2007/07/24(火) 01:47:45任意に14枚牌が与えられたら、それがあがりの形になっているのか調べたいんだよ
そのために、まず一種の数牌に限定して、あがりの形になっているか調べるんだ
なっていなければ、そこで終わる なっていれば、次の数牌を調べる
テーブルに格納しておけば判定は一瞬
0666625
2007/07/24(火) 01:49:07でもそれぞれ(4種)について考えるとでかすぎるし、一つの事にしか使えない
(私信:ビーチボーイズいいな)
0667デフォルトの名無しさん
2007/07/24(火) 01:49:240668デフォルトの名無しさん
2007/07/24(火) 01:49:40wwww
つか、それくらい1日でつくちゃえよwwww
0669デフォルトの名無しさん
2007/07/24(火) 01:49:43今は、役がつく可能性があるペアを求めてから、
その最大の得点を計算したいっていうところだ
0670デフォルトの名無しさん
2007/07/24(火) 01:51:54役がつく=上がれる形
0672デフォルトの名無しさん
2007/07/24(火) 01:53:34すみませんが参考にあなたの雀暦を教えてください、我々には高度すぎて宇宙言語並に理解できません。
0673デフォルトの名無しさん
2007/07/24(火) 01:54:06そういうことなんですけど・・・全部でなんとおりあるのか知りたい訳なんですよ
プログラムの正当性を調べるため
0674デフォルトの名無しさん
2007/07/24(火) 01:54:44ちょっと待て!、 現在のPCで点数もあるテーブルは不可能
0675デフォルトの名無しさん
2007/07/24(火) 01:55:17麻雀はルールをよく知らない トンプウ荘なら一応出来るが、現実世界では手順が不明
0676デフォルトの名無しさん
2007/07/24(火) 01:55:320677デフォルトの名無しさん
2007/07/24(火) 01:56:42「麻雀のルール」知らないなら来なくていいよ。
「雀荘」で1年打ってきてから、このスレにきてくれ
0678625
2007/07/24(火) 01:56:48例:111222333
上がり形だけど、テーブルにした場合にそれしか分からない。←どういう構成かが分からない
123で鳴いている、2のポン、3アンコ、ピンフ+ジュンチャン+イペコ、等々
つまり、上がり点を求められない。←求めるにはもう一度分解する必要が出る
0679デフォルトの名無しさん
2007/07/24(火) 01:57:290680デフォルトの名無しさん
2007/07/24(火) 01:59:31すでにメンツが決定しているものは、判定ルーチンに渡すまえに外しておくんです
何通りか組み合わせがありそうな部分のみ判定するんです
その個数と、組み合わせを登録しておけば、役判定までがかなり速くなります
0681デフォルトの名無しさん
2007/07/24(火) 02:00:19「麻雀のルール」知らないのに、「「麻雀プログラム」をつくろうとかwww
まず、麻荘でも、ゲーセンでもいいから、ルール覚えてから
来いって感じだよな
0682625
2007/07/24(火) 02:01:17メンツ構成として渡してやった方がいい、という話なんだな
現実的に上がり点まで含めて総当りは無理があるんだよ・・・(見積もりだけで断念w)
0683デフォルトの名無しさん
2007/07/24(火) 02:01:46君は大きな間違えをしている。君のアイデアの方が遅い。
0684デフォルトの名無しさん
2007/07/24(火) 02:03:40「宇宙麻雀」の極意が少し読めてきた!!!
つまり、「上がり牌の全ての組み合わせ」を求めて、
それを「テーブル」としてプログラム内に格納して、
それで上がりを判定するんだwwwww
すげぇ「王様プログラム」だし、そんなののために、
一体どれだけ、リソース消費すんだよwww
0685デフォルトの名無しさん
2007/07/24(火) 02:04:22それなら基本点を求める速いアイデアっていうもの書いてくれ
0687デフォルトの名無しさん
2007/07/24(火) 02:06:180688デフォルトの名無しさん
2007/07/24(火) 02:07:21いやちょっと待て!、そのリソースにアクセスするための仕組みが遅い。とてつもなく
0690デフォルトの名無しさん
2007/07/24(火) 02:09:11・1種類で全ての「上がり手牌のとおり」を求めてテーブル格納
↓
・1種類+字牌の全ての「上がり手牌のとおり」を求めてテーブル格納
↓
・マンズ、ピンズ、ソース+字牌の全て(略
↓
・全て上がり手牌の通りに対して、「ハン数+符」を求める
どんだけメモリ使う気だよwww
0692デフォルトの名無しさん
2007/07/24(火) 02:11:4010万回ほど試行したとき何秒かかるのかっていう事だ
0693デフォルトの名無しさん
2007/07/24(火) 02:12:40動いてるとでも思ってるのかww
0694625
2007/07/24(火) 02:13:100695デフォルトの名無しさん
2007/07/24(火) 02:14:03テーブルにするのは一種のみですよ
判定だけなら5の9乗ビットあればいいんです
高々238Kバイト使うだけですよ
0696デフォルトの名無しさん
2007/07/24(火) 02:14:31うん 何か誤解_与えたかな? 688をどの様に受け取った?
0698デフォルトの名無しさん
2007/07/24(火) 02:15:55100msとかかからないですか?
テーブルに記録してあれば10倍以上は速いと思うんでけど・・・
0699デフォルトの名無しさん
2007/07/24(火) 02:16:22宇宙麻雀の真髄を見たり
0700625
2007/07/24(火) 02:17:020701デフォルトの名無しさん
2007/07/24(火) 02:18:070702デフォルトの名無しさん
2007/07/24(火) 02:18:22そんなにたくさんはいらないだろ
同一色の登場数の上限は手牌の数だって忘れたか?
0703デフォルトの名無しさん
2007/07/24(火) 02:19:04その考えそのものは正しいが、100msはかかりすぎ
0704デフォルトの名無しさん
2007/07/24(火) 02:19:230705デフォルトの名無しさん
2007/07/24(火) 02:20:23判定処理を適当にライブラリ化しておいて
遅かったら高速版こしらえて差し替えるだけだろ
つか、高速化なんざ、後でも出来るんだから
基本設計だけちゃんと作って あとはがむしゃらに
作りこめよ
0706デフォルトの名無しさん
2007/07/24(火) 02:20:23まぁ、頑張ってくれ。止めはしない。
死ぬほどある「手牌の組み合わせ」を求めくれ。
万が一、ソースが出来たらあげてくれ。
しかし、無駄だらけの「上がりテーブル」だよな。
任意の手配が、その「上がりテーブル」に含まれているか
を探すだけでも、凄いコストになりそうだがwww
>>618のプログラムを改良すれば、瞬殺で終わる仕事を
無駄に時間掛けてどーする気だよ
つーか、「夏休み」だよなぁwwww
0707デフォルトの名無しさん
2007/07/24(火) 02:20:345進数で、000000000〜000002444 は必要ですよ
うまくやればかなり減らせるかと思いますが、単純に変換すると
約5の9乗ビット必要ですよ
0708デフォルトの名無しさん
2007/07/24(火) 02:21:58高速化のほかに、プログラムの正当性を調べるために
一種のみのあがりの形の数を求めたいんですよ
0710デフォルトの名無しさん
2007/07/24(火) 02:23:460711デフォルトの名無しさん
2007/07/24(火) 02:23:52間違っていたら、その後の調整にも影響が出てきます
0712デフォルトの名無しさん
2007/07/24(火) 02:24:59全種の牌を渡す事は無理だと思うのですが・・・
0713デフォルトの名無しさん
2007/07/24(火) 02:27:25一人であっていると思って作って、あっていなければ意味が無いじゃないですか
だから簡単な部分から検証したい訳なんですよ
そのため誰か同じルーチンを作ってくれないかと思うわけです
0714625
2007/07/24(火) 02:27:29とりあえず可能性のあるメンツ構成を数え上げるだけのプログラム書いてご覧
一種で6枚の時と8枚の時の二つ。
で使い道を考えると、多分使用するのに必要なデータが足りてないのが分かると思う。
0716デフォルトの名無しさん
2007/07/24(火) 02:29:120717デフォルトの名無しさん
2007/07/24(火) 02:29:57小学生は早く寝て、宿題でもすればwww
「上がり判定」が確定した時点で、「2+3+3+3+3」
ができて、あとはそこから「ハン数」と「府計算」するだけだから、
別段、得点計算も「瞬殺」。ものの1秒も掛からない。
いくつかの麻雀プログラムで得点計算が間違える理由は、
「2」の頭の部分が複数ある場合、得点が高くなる場合がある。
そこの作りが甘いだけの話。
つか、>>711が作るテーブル自体、「最初から得点計算が
間違えだらけ」ということじゃねwwww
0718デフォルトの名無しさん
2007/07/24(火) 02:30:34まず、上限が14というのを無視してます 最大36まで計算しちゃってます
0719デフォルトの名無しさん
2007/07/24(火) 02:30:59お前の糞仕様のプログラムなんか、誰も賛同
なんかしねーよwww
0721デフォルトの名無しさん
2007/07/24(火) 02:34:24作れなかった実績がある奴の考えなんか採用する者はおらんけどな
0722デフォルトの名無しさん
2007/07/24(火) 02:40:29> 得点計算も「瞬殺」。ものの1秒も掛からない。
たとえば一回500msかかれば1000回試行すれば50秒もかかるんですよ
それでは遅すぎます 一回50msでも一万回試行すけば50秒かかります
一回平均5ms以内で点が計算出来れば実用的だと思うんですが・・・
0723デフォルトの名無しさん
2007/07/24(火) 02:40:35その方法論は、プログラムがそれなりによく書ける誰が見ても
現実的でないと判断すると思う。そう思って見ない?
0724デフォルトの名無しさん
2007/07/24(火) 02:42:12君の方法論のほうがもっと遅い
0725625
2007/07/24(火) 02:43:51面子手:000033CB,00016411,000037DA,0000005A,00000000,00000000,00000000,00000000,00000000,00000000,
トイツ手(7対子):00000024,00000DC8,000087D8,0000F324,000045E4,00000144,00000000,00000000,
(全通り数?):0001D010
昔のデータなんで、どの数字が対応しているかあやふやだが多分これでいいはず
0726デフォルトの名無しさん
2007/07/24(火) 02:44:29役無しを高速に求められれば全体での平均判定時間は縮まります
0727デフォルトの名無しさん
2007/07/24(火) 02:47:00上がりが知りたいんじゃない、なにを棄てたら一番いいか知りたいのです
0728デフォルトの名無しさん
2007/07/24(火) 02:48:20お前、麻雀もカスなら、プログラム能力もカス以下だな。。。
麻雀の役って、20種類程度しかないだろ。
すげぇ下等に全ての役判定個別に
関数化して、一個ずつ調べても、なんで50秒もかかるんだ?
「トンプウ荘」が、役判定に50秒も掛けてるのかよ。
0730デフォルトの名無しさん
2007/07/24(火) 02:51:360731デフォルトの名無しさん
2007/07/24(火) 02:52:05ちゃんとよめ 一回の判定は500msとか、50msとか、5msとかと言っている
0732デフォルトの名無しさん
2007/07/24(火) 02:53:390733デフォルトの名無しさん
2007/07/24(火) 02:53:41pinfu();
tanyao();
ipeko();
}
pinfu(){ピンフ判定ルーチン}
tanyao(){タンヤオ判定ルーチン}
ipeko(){イーペーコー判定ルーチン}
こんな下等ルーチンでも、50秒掛けられる
なら、それは別の意味で才能があるwww
0734デフォルトの名無しさん
2007/07/24(火) 02:54:20思考ルーチンも同時に完成した様なものなんです
0735625
2007/07/24(火) 02:55:37今までの中身だとそれは難しいぞ。
3シャン→2シャンに上げるのにどう使えるの?
0736デフォルトの名無しさん
2007/07/24(火) 02:56:59>一回500msかかれば1000回試行
のイミフな前提を馬鹿にしてるだけ、
「500msを1000回試行」て、
「お前は何をしてるんだ?」と笑っただけの話
0737デフォルトの名無しさん
2007/07/24(火) 02:57:16そういうやり方だと鈍いと思いますよ
すべての判定ルーチンを一回は呼ばないといけないですから・・・
多分50ms〜200msはかかるんじゃないでしょうか??
0738デフォルトの名無しさん
2007/07/24(火) 02:58:28まぁ、 何切る というのは実際には「結果」だよね
重要なのは 現在の牌勢から何が足りないか を
適切に評価し、その結果 あぶれた牌を切る
そこまでのことが>>713に出来るとは思えないけどね
0739デフォルトの名無しさん
2007/07/24(火) 02:58:340740デフォルトの名無しさん
2007/07/24(火) 02:59:310741デフォルトの名無しさん
2007/07/24(火) 02:59:45wwwwww
お前の宇宙麻雀では、この鈍いやり方でも
劣るプログラム(しかも、点計算は間違い
だらけ)しか出来ない。
0742625
2007/07/24(火) 03:00:21それこそ時間は掛からない。
0743デフォルトの名無しさん
2007/07/24(火) 03:02:590744デフォルトの名無しさん
2007/07/24(火) 03:03:10時間がかかってもあとで高速化すればいいんだから
こと速度に関してはどうでもいいことだと思うよ。
0745デフォルトの名無しさん
2007/07/24(火) 03:03:40つもったとして14枚の牌を調べ、役が出来ていたらbreakする
役が出来ていないなら、見えていない牌の中から、ランダムに一枚加えて
どれか一枚を捨てたら、役が出来るならその駒に役の得点を加算する
さらに、もう一枚ランダムに加えて、どれか二枚を捨てたら
役が出来るなら、その駒たちに役の得点/2を加算する
これを終局までの牌数ぶん試行する
最後まで行ったらはじめからやり直して得点の加算を続ける
ある程度、試行すると、役が揃いやすい捨て牌に得点が集まる
0746デフォルトの名無しさん
2007/07/24(火) 03:04:21なんて思想じゃあいつまで経っても最強には届かないと思うが どうか
0747625
2007/07/24(火) 03:05:44上がり点が知りたい場合、頭とメンツ*4で求める。
で、それぞれの役(タンヤオ、ピンフなど)に対応するテーブルを用意。
実際は可能性の低い役はチマチマ計算した方がメモリ食わなくていいと思うけど
0748デフォルトの名無しさん
2007/07/24(火) 03:07:11結局、>>664に話が戻るけど、このスレの議論の
的は、任意の手牌から、どうすれば高く早く上がれる
プログラムを作るのかにあんだけど、この「宇宙麻雀野郎」は
まず、上がり判定すら全く出来ていない
0749デフォルトの名無しさん
2007/07/24(火) 03:07:19そのテーブルがどれだけとんでもない物か想像できますか?
0750デフォルトの名無しさん
2007/07/24(火) 03:08:19あえてその方法に賛同するとしたら
現在の手牌からテーブルを見て
もっとも理想的で距離が近いレコードに
近づくように捨て牌を選ぶ
なんて思考ルーチンになるんだろうな。
0751デフォルトの名無しさん
2007/07/24(火) 03:08:26高い捨て牌が選べます
3シャン→2シャンにするような手もその中に出てくる可能性が高いです
0752デフォルトの名無しさん
2007/07/24(火) 03:11:20でも、冷静に考える判るけど、
「もっとも理想的で距離が近いレコード」なんて、
いちいちテーブル化したところから比較しなくても、
今ある手配で大体推測できると思うんだけどな
0753デフォルトの名無しさん
2007/07/24(火) 03:13:06いうほど巨大なテーブルにはならないと思われ。
鏡像もあるし、数値をシフトさせればレコード数は
大幅に抑えられる。
まるっきり不可能な話ではない。
サルがシェイクスピアを書くよりは現実的。
0755デフォルトの名無しさん
2007/07/24(火) 03:14:15625さんと751さんは、根本が同じと思う。
0756デフォルトの名無しさん
2007/07/24(火) 03:15:38コーツは、34通り(カンツもここだとして・・・)
トイツは、34通り
34通り * 68C4 通り 2バイトで得点を表せば、53Mバイトでいけますね
0758デフォルトの名無しさん
2007/07/24(火) 03:18:12まず第一に
「その巨大なテーブルに何の意味を持たない」
最も理想的な手牌は、結局
今配られている手牌からしか推測
出来ないから。
次に、
「それでも全ての手配を求めれば膨大」
その膨大なテーブルを一々メモリに入れておくわけか?
無駄情報のために、数百MB以上は必要だぞwww
0759756
2007/07/24(火) 03:18:20でも、重複した場合を無視すれば、ハッシュ値に変換すれば100M以下でいけそうな気はします・・・
0760デフォルトの名無しさん
2007/07/24(火) 03:19:56まあ、実際に頭の中では、魔法のテーブルを参照してるよね
特に清一のときの上がり形の基本パターンセットは
脳に叩き込んであるから 数字をシフト、反転させて
マッチするパターンを探し出し 必要牌と不要牌を切り分けてるな。
0761デフォルトの名無しさん
2007/07/24(火) 03:19:57お前の思考と一緒で、「頭」が存在してないなwwww
0762デフォルトの名無しさん
2007/07/24(火) 03:20:53無駄コストだな。そんなことしてると、50秒かかちゃうぞwww
0763デフォルトの名無しさん
2007/07/24(火) 03:21:12式は言いから、結果の数出してみ
0764デフォルトの名無しさん
2007/07/24(火) 03:22:17銀玉親方の理論とかでブームになった頃に。
あれで手牌を1次元配列じゃなく2次元配列として
捉えるようになったのがオレおブレークスルーだったな・・・
なつかしい
0765625
2007/07/24(火) 03:23:3912bit*5(面子と対子数)=60bit
多いか?
0766デフォルトの名無しさん
2007/07/24(火) 03:24:120767デフォルトの名無しさん
2007/07/24(火) 03:26:15例えば、トイツに6ビット( 64通り )割り当てて、順子とコーツの各55通りに
0から2の19乗の数字を割り当てて、存在する順子、コーツのXORを計算すれば
25ビットのハッシュ値が求まります
0768625
2007/07/24(火) 03:27:110769デフォルトの名無しさん
2007/07/24(火) 03:27:34それおいうなら 64メガ通り でしょ
それをキーとしてその後の方策を引っ張り出そうというのだから
0770デフォルトの名無しさん
2007/07/24(火) 03:27:45その60Bitの表せるメモリー領域を10進で出してくれ
0771625
2007/07/24(火) 03:30:400772デフォルトの名無しさん
2007/07/24(火) 03:30:54疲れた。
0773デフォルトの名無しさん
2007/07/24(火) 03:31:54一種の数牌テーブルと両方使う方向で行こうと思う・・
0774デフォルトの名無しさん
2007/07/24(火) 03:32:180776デフォルトの名無しさん
2007/07/24(火) 03:33:12だいたい8枚以上から妖しくなってくるから
8〜13枚使いのときのパターンしか覚えてないな。
待ち(=聴牌)はさすがに清一でもすぐ判るし。
0777デフォルトの名無しさん
2007/07/24(火) 03:36:48その空間がリアルに想像できない時点でおワットる。
0778デフォルトの名無しさん
2007/07/24(火) 03:37:05にそれそれランダムな数字を割り当てるんだ
発発発をもっていたら、2進で(1001110110111011)が割り当てられるとする
123をもっていたら、2進で(00111101111111011)が割り当てられるとする
これらのXORを取れば、ある数字が求まるんだ これをハッシュ値にするんだ
0779デフォルトの名無しさん
2007/07/24(火) 03:38:16横槍ですまないけど、プログラマが16進で
リアルに想像できなくてどうするのよ
0780デフォルトの名無しさん
2007/07/24(火) 03:39:54俺はは本人のために言ってるんだが。君も同類なのか?
0781625
2007/07/24(火) 03:40:24もう少し減らせても5桁は減らせそうに無いなぁ
0782デフォルトの名無しさん
2007/07/24(火) 03:42:160783625
2007/07/24(火) 03:44:390784デフォルトの名無しさん
2007/07/24(火) 03:47:30あきれ果ててもう寝るわ
0785デフォルトの名無しさん
2007/07/24(火) 03:47:3534 * 55 * 55 * 55 * 55 通り
2バイトで得点を表すと、必要な領域は、74Mバイトになりました
全部登録出来るじゃないですか
0786デフォルトの名無しさん
2007/07/24(火) 03:48:28現実的なところに落とし込むには広い意味での正規化が必要だな
数牌が3以上離れたとき それぞれを別グループと扱えば
パターン数を大幅にカットできる
また、明確に面子が出来ているとき(3の倍数または3の倍数+2枚)
とそうでないときとでパターンはまた切り分ける
むしろ、データベースを想定するよりも
正規表現的な考え方に持っていったほうが
いいのかもしれないし よくないのかもしれない
0787デフォルトの名無しさん
2007/07/24(火) 03:52:2074Mで出来ます
0788デフォルトの名無しさん
2007/07/24(火) 03:53:07正規表現の分析をするぐらいなら、そのまま手配構造を分析した方が早いと思わないか?
俺はそのほうが速いと思うぞ
0789デフォルトの名無しさん
2007/07/24(火) 03:54:140790625
2007/07/24(火) 03:54:46500通りくらい通せればとりあえず戦略にはなるだろうから
0791デフォルトの名無しさん
2007/07/24(火) 03:56:10揃っている手配の手配構造分析は、簡単なんだが。理解してる?
0792デフォルトの名無しさん
2007/07/24(火) 03:59:41メンツが分解出来たら、74M程度の配列で点を出せばいいんです
一度完成させれば、それを流用すれば、誰でも点数計算で間違える事は無くなりますよ
結果が一致するか調べるため一緒に作りましょう
0794デフォルトの名無しさん
2007/07/24(火) 04:02:16理解してるよ
完成形をもとに 現在の(不完成な)形に近いパターンを探す
という思考をするのであれば 面白いかな と思っただけ。
まあ実際には現在の形に9通りないし81通りの不足牌を加えて
完成形を求めればいいので テーブルはいらないわけだが
0796デフォルトの名無しさん
2007/07/24(火) 04:06:19優しいですよ テーブルを読み込んでおいて参照するだけで正確な点が求まるんですから
そしてそれは大半のルールも含むものになる
0797デフォルトの名無しさん
2007/07/24(火) 04:08:20>完成形をもとに 現在の(不完成な)形に近いパターンを探す
>という思考をするのであれば 面白いかな と思っただけ。
何おもって完成形にするか? 夢見る完成形じゃないのか?
説明求む
>まあ実際には現在の形に9通りないし81通りの不足牌を加えて
>完成形を求めればいいので テーブルはいらないわけだが
意味不明、説明求む
0798デフォルトの名無しさん
2007/07/24(火) 04:08:54どの牌であがるか、で点数が変わるのでもう10倍くらいは必要では?
でも、ルールの変化に弱いし、カンツなし鳴き無しではほとんど意味がない。
0799デフォルトの名無しさん
2007/07/24(火) 04:11:31それを忘れていた・・・これはかなりまずい・・・
軽くみても100倍は増えそうです・・・データベースは無理だ・・・
0800デフォルトの名無しさん
2007/07/24(火) 04:15:18ここで言った完成形ってのは
数牌の組合わせで 面子または面子+頭 が出来ている状態のことね
0801デフォルトの名無しさん
2007/07/24(火) 04:17:18門前の状態でロンにより和了した場合には10符が与えられる。
リンシャンカイホウおよびピンフツモを除くツモのとき2符加算する。
辺張待ち、嵌張待ちのとき和了時に2符加算する。
数牌、客風牌の単騎待ちでは2符加算する。
自風牌、場風牌、三元牌の単騎待ちでは4符加算する。
連風牌の単騎待ちでは6符加算する。
中張牌の明刻子には2符が与えられる。
幺九牌の刻子は、中張牌の刻子の2倍、暗刻子は明刻子に比べて2倍、槓子は刻子に比べて4倍の符が得られる。順子には符はない。
雀頭となった牌が、三元牌のときは2符加算、場風・自風の場合に4符加算される。
0802デフォルトの名無しさん
2007/07/24(火) 04:17:31まあ、夢見る正規表現に魅力を感じているようだが、型だけなら、ロジックで解いた方が速い。
作れば分かる
0803デフォルトの名無しさん
2007/07/24(火) 04:22:16役と符を考える場合、面子対子以外に鳴きと待ちを加える必要がある。
前に組んだやつはそれを与えてたはず
0804デフォルトの名無しさん
2007/07/24(火) 04:25:07婦警さんと役は別に計算するでしょ普通
0805デフォルトの名無しさん
2007/07/24(火) 04:30:21トイツ34通り、順子とコーツで55通り*2
34 * 110 * 110 * 110 * 110 通り
翻数は4ビットで表せるから、8900Mバイト程度必要です・・・
0806デフォルトの名無しさん
2007/07/24(火) 04:31:350807デフォルトの名無しさん
2007/07/24(火) 04:31:43そりゃそうだ
いくらロマンを感じてたって 実際に作るとなれば
まずは計算で求めるルーチン作りが先だろう
ロマン実現のためのテーブル作りにだって必要になるし
0808デフォルトの名無しさん
2007/07/24(火) 04:34:04普通正規化するだろ
バカみたいに広いテーブル作ってどうすんだよ
0809デフォルトの名無しさん
2007/07/24(火) 04:38:124つコーツがあれば番号の小さい順にするとか、
コーツより順子の方を始めにもってくるとかですか???
0810デフォルトの名無しさん
2007/07/24(火) 04:41:35あげるなどすれば、
34 * 110 * 110 * 110 * 110 通り の部分で
110が一つ削れる位に出来るかもしれないですね
0811デフォルトの名無しさん
2007/07/24(火) 05:08:450812デフォルトの名無しさん
2007/07/24(火) 05:21:56コーツで34通り * 2(鳴き) * 2(カンツ)=136
34 * 190 * 190 * 190 * 190 = 44 309 140 000 通り
正規化してから、頻繁に出現する番号をはじめの方に集めたとして( ここのやり方は不明 )
はじめの1/100だけを登録するならば、21Mバイトですみます
0813デフォルトの名無しさん
2007/07/24(火) 05:29:40の190個のうち、頻繁現れるものに小さい番号を割り当てて
番号の小さい順に、並べて191進数 ( a b c d)を作る
すると2進でみると上位ビットのいくつかは0が続きやすくなる
数字のでかい部分は、出現しにくいため、はじめから役無しで計算してしまう
0814812
2007/07/24(火) 05:41:081/200にしても100M使うんだ
そして1/200にするには191進数の上位が1以下で無ければならない
これは殆ど無理
もっと圧縮する必要がある
0815デフォルトの名無しさん
2007/07/24(火) 05:53:48鳴きがあったときの翻数を登録すれば1バイトかかる
このとき、トイツ34通り、順子27通り 、コーツで34通り * 2(カンツ)
34 * 95 * 95 * 95 * 95 通り
1/50にすれば130Mバイト必要
これでも、上位は2以下くらいの値しかとれない・・・
0816デフォルトの名無しさん
2007/07/24(火) 06:02:30すると、トイツ34通り、順子27通り、コーツで34通りで、
34 * 61 * 61 * 61 * 61 通り
これならすべてを登録しても、448Mバイトですむ
正規化などして上位一ビット削れれば224M程度で実用的だ
0817デフォルトの名無しさん
2007/07/24(火) 06:30:35この場合では、トイツ 2*3(数字の種類)+2=8通り、 順子 21通り、コーツ8通りで
8 * 29 * 29 * 29 * 29 通りで全部登録しても5Mバイトしか食わない
一気に減った
0818デフォルトの名無しさん
2007/07/24(火) 06:56:23http://www.ix3.jp/hiii/02mahken/1-02-1yaku_fukugou.htm
三槓子の役の複合チェックが大変なので、カンツも入れよう
あと>>817の同一視で判定できなくなるのは次の役だな
平和
翻牌、連風牌
三色同刻
緑一色
(ここからはもともと出来ない)
チートイツ
国士無双
0819デフォルトの名無しさん
2007/07/24(火) 07:16:13数字19、2〜8、白発中、東南西北のコーツトイツは同一視し
トイツ 8通り、 順子 21通り、コーツ8通りで
全部登録しても5Mバイトしか食わない
国士無双、緑一色、四槓子の判定をまずやって、
三槓子、チートイツ、三色同刻、場自風の加算を求めてから
データベースを引けばいいんだ
0820287
2007/07/24(火) 09:10:40向聴数計算や聴牌判定でボトルネックになるのは、清一のような一種類の数牌が大量にある場合なので、テーブル参照は結構有効かもしれんね。
普通に作っていって、実際に遅くてどうしようもなくなった場合の最後の手段としてなら考えてみても良いのでは?
0821デフォルトの名無しさん
2007/07/24(火) 09:33:520822デフォルトの名無しさん
2007/07/24(火) 12:03:42全種の個数と、あがりの形数を求めて書き込もうぜ!
0823デフォルトの名無しさん
2007/07/24(火) 12:13:16テンソル、テンソル!!
0825デフォルトの名無しさん
2007/07/24(火) 12:27:385進数で (下位bit) 000000000 (上位bit)から、000002444までを順に調べていく
その値をxとする。
N=5の9乗 AGARI ah[N]; // 3バイト * N = 約6Mバイト
とし、xがあがりの形ならば、ah[x].kosuに個数をいれて
ah[x].adressに次のKUMI型配列の空き領域の先頭番号を入れる
KUMI km[十分大];
あがりの種類が、2とおりあるならば、トイツ、ジュンツ(コーツ、カンツ) * 4を2つ分登録する
1とおりのあがりならば5つ使う
class KUMI {
public:
char mentu : 2; //0〜3単騎、ジュンツ、コーツ、カンツ
char bango : 6; //駒番号
};
class AGARI {
public:
char kosu;
unsigned short int adress;
}:
0826デフォルトの名無しさん
2007/07/24(火) 12:33:30トイツと、コーツの組み合わせを決定したら一意ってこと?
0827デフォルトの名無しさん
2007/07/24(火) 12:38:13public
char koma[5]; // トイツ、コーツ、コーツ、コーツ、コーツの駒番号を登録、0は存在しない事を表す
};
にすればいいか
0828デフォルトの名無しさん
2007/07/24(火) 14:18:21数牌の面子の種類を求めるだけなら出来るかな
順子の数を n, 刻子の数を m としたとき
組合わせ数は C(9,n)×H(7,m) になるよね。
あ、ここから5枚以上使った場合を引くんだけど
大雑把には求まる
0829デフォルトの名無しさん
2007/07/24(火) 16:03:300830デフォルトの名無しさん
2007/07/24(火) 18:20:130831デフォルトの名無しさん
2007/07/24(火) 19:15:540832デフォルトの名無しさん
2007/07/24(火) 22:31:16麻雀は駒じゃなくて牌(はい)なんだけど。
0833デフォルトの名無しさん
2007/07/24(火) 23:14:32糞仕様の議論はいらないから、ソースあげろよ
0834デフォルトの名無しさん
2007/07/24(火) 23:24:40なんだよ。この糞仕様。
こんなの採用する奴のアプリは
絶対に使わない
0835デフォルトの名無しさん
2007/07/24(火) 23:25:50コイツの思考がウンコなところは、
麻雀は4枚あるんだよ。
その考慮が全く無い
小学生は2度と書き込むなよ
0836デフォルトの名無しさん
2007/07/24(火) 23:38:25何年かしてニュースになったら俺だから覚えといてね〜
0837一種の数牌のみ12の個数はこれでいいですか???
2007/07/24(火) 23:45:20#include <bitset>
#define fore(i,j) for(i=0;i<j;i++)
#define N 4
using namespace std;
class mentu{public:int p;int b;};
int hai[34],m[5],n[5],k,renban[2][34];
mentu mt[4],btm[55];
void del_c(int l){hai[l]-=3;m[k]++;k--;mt[k].p=1;mt[k].b=l;}
void del_j(int l){hai[l]--;hai[l-1]--;hai[l-2]--;m[k]++;k--;mt[k].p=0;mt[k].b=l;}
int cot(int l){if(hai[l]>2)return 1; return 0;}
int jut(int l){if(l%9>1)if(hai[l]>0 && hai[l-1]>0 && hai[l-2]>0)return 1; return 0;}
void remov(void){int l=mt[k].b;if(mt[k].p)hai[l]+=3; else {hai[l]++;hai[l-1]++;hai[l-2]++;}k++;}
main(){
fore(k,5)m[k]=n[k]=-1;
fore(k,34)hai[k]=0;fore(k,9)hai[k]=4;
int s=0;
fore(k,27)if(k%9>1){btm[s].p=0;btm[s].b=k;renban[0][k]=s;s++;}
fore(k,34){btm[s].p=1;btm[s].b=k;renban[1][k]=s;s++;}
k=N;s=0;
start:
if(!k){remov();s++;}
while(m[k]<34){m[k]++;if(cot(m[k])){del_c(m[k]);goto start;}}
while(n[k]<27){n[k]++;if(jut(n[k])){del_j(n[k]);goto start;}}
if(k<N){m[k]=n[k]=-1;remov();goto start;}
cout<<s;}
0838デフォルトの名無しさん
2007/07/24(火) 23:47:320839デフォルトの名無しさん
2007/07/24(火) 23:49:290840デフォルトの名無しさん
2007/07/24(火) 23:59:12のデータ。282kB程度のテキスト形式
いるならアプロダ指定してくれ
※やっつけなんで合ってるかは知らんw
0841デフォルトの名無しさん
2007/07/25(水) 00:10:46ttp://www1.chironoworks.com/love_storm/link/
0842デフォルトの名無しさん
2007/07/25(水) 00:13:17使いたくないなぁ
0843デフォルトの名無しさん
2007/07/25(水) 00:16:460844842
2007/07/25(水) 00:22:15ttp://a-draw.com/uploader/src/up26142.zip.html
0846842
2007/07/25(水) 01:06:08計算ミスでしたKEYは上と同じです
0847デフォルトの名無しさん
2007/07/25(水) 01:29:16これでも見て落ち着こうぜ
0848デフォルトの名無しさん
2007/07/25(水) 07:22:43だから、このスレは貴様のウンコプログラムを
デバッグするところじゃねえぞ
やるなら他でやれ
0849287
2007/07/25(水) 10:56:42やってみたけど、微妙に結果が違うな。なんだろ。
面子の組み合わせは保持してないが、こういう結果になった。
a) 一種類の数牌で、ルール上出現する(各4枚以下、計14枚以下)組み合わせの数
405350
b) aの中で、複数の面子で構成されていて余剰牌が無い場合の数 / 枚数合計が3の倍数の場合の数
2868/92617
c) aの中で、複数の面子+一つの対子で構成されていて余剰牌がない場合の数 / 枚数が3n+2の場合の数
18874/180342
0850837
2007/07/25(水) 12:04:32最低二人は数字が一致しなければ駄目だからな
正しい点数が求められないことになる
0851846
2007/07/25(水) 13:14:09自分じゃやる気になれない
0852287
2007/07/25(水) 15:01:35比較してみた。なんとなく分かった。
846さんのは、同じ牌姿で雀頭が振り替えできる形を、両方カウントしてるっぽい。
例えば、「11223344」のような形。
実際にリスト中に以下両方があった。
100201201
103200200
それでもまだ数が合わない気がするが、多分同じような理由と思われ。
0853デフォルトの名無しさん
2007/07/25(水) 15:06:58得点に影響するでしょ
0854デフォルトの名無しさん
2007/07/25(水) 15:08:280855846
2007/07/25(水) 15:33:32あとは111222333を刻子の組と順子の組に分けているぞ、俺のは
0856287
2007/07/25(水) 15:58:31ん?関係ないでしょ?
メモにあるような、2966/92617みたいな算出をするなら。
三連刻の形を考慮すると、今度は俺のほうが672個候補が多くなった。
なんか、頭無しの一盃口が無いよ。112233とか。(リストで言うと200200)。
0858287
2007/07/25(水) 18:36:5226142.zipと26144.zip両方手元にあるが、どちらのリストにも「200200」は含まれてないな。
0859846
2007/07/25(水) 18:37:250860デフォルトの名無しさん
2007/07/25(水) 18:50:22なぜなら、順子7通り、コーツ9通りで16通りで4bitで表せる
次のように番号を決めて、4桁の16進数が最小になるように並べ替えてそれを保持するんだ
123・・・0
234・・・1
999・・・15
0861846
2007/07/25(水) 19:06:410862デフォルトの名無しさん
2007/07/25(水) 19:07:15計算してみたんで、良かったら検算用にどうぞ。
*手牌14牌から1種類の数牌のみ取り出した時、和了形の一部になる組合せ数*
左から、枚数 全組合せ数 和了形組合せ数
0 1 1
1 9 0
2 45 9
3 165 16
4 495 0
5 1278 135
6 2922 127
7 6030 0
8 11385 996
9 19855 627
10 32211 0
11 48879 4475
12 69675 2098
13 93600 0
14 118800 13259
計 405350 21743
0863846
2007/07/25(水) 19:35:1711_123_123_456_789←こんな感じ
300kBのテキスト形式。KEYはsortで
ttp://a-draw.com/uploader/src/up26188.zip.html
0864287
2007/07/25(水) 19:48:12ゴメン。さっき作った比較用スクリプトをまた書き直すのはめんどいのでパス。元の形式でくれたら比較してみます。
>>862さんのは自分と一致しているので、数字的にはこれで正解かなと。
0865デフォルトの名無しさん
2007/07/25(水) 19:51:280866デフォルトの名無しさん
2007/07/25(水) 19:54:24メンツ構成じゃなくて、あがりの手牌数はいくつなのかな??
>>849、18874である
>>862、21743である
>>863、23532である (重複有り)
0867デフォルトの名無しさん
2007/07/25(水) 19:59:440868デフォルトの名無しさん
2007/07/25(水) 20:00:34その考え方自体が変な気がする、だってテンパイの形に出来ればリーチ掛けて一飜役になるしそれだけで膨大な組み合わせになる。
それに数牌無しで出来る和了形は役満だけだけど考えられるのは天和、地和、字一色、四暗刻、小四喜和、大四喜和、四槓子で
これらの組み合わせだけでもかなりの数になると思うんだけどこれは考慮されてないの?
0869デフォルトの名無しさん
2007/07/25(水) 20:06:14一種の数牌が完成すれば、三種の数牌の組み合わせも求まるし
すべての牌の組み合わせも求まるじゃないか
一種が基礎なんだよ
0870デフォルトの名無しさん
2007/07/25(水) 20:11:254枚あったとしても、2〜8のコーツとトイツを同一視しても問題ない
例えば、222 333 444 これらを コーツを表す文字 a で
表せば a a aになるが、これらすべて異なる数字のコーツである事がわかるからだ
また、あがり形にはトイツは一つしかないからこれも平気だ
0871デフォルトの名無しさん
2007/07/25(水) 20:11:45基礎なら早く作れよ。
うっとしい反論はいらない
0872デフォルトの名無しさん
2007/07/25(水) 20:18:39そしたらルール( >>539 )に基づいて飜数を計算しようぜ!
数字19、2〜8、白発中、東南西北のコーツとトイツを同一視して
計算すれば5Mバイトでデータベースが出来る
例外として、
国士無双、緑一色、四槓子の役満と、
三槓子、チートイツ、三色同刻、場自風があるが個別に判定すればいい
0874デフォルトの名無しさん
2007/07/25(水) 20:26:50その根拠は何?
0875846
2007/07/25(水) 20:26:58元の形式の修正版DLKEY:mentu
ttp://a-draw.com/uploader/src/up26193.zip.html
合計が違うのは多分1,4,7,11枚の時の計算をしていないからだと思う
0876デフォルトの名無しさん
2007/07/25(水) 20:29:50字牌は、枚数からトイツ、コーツはわかる、する、あとは数牌のみだ
3種あったとして、それぞれ1種の分解数が、2、2、1ならば
全体のメンツ構成数は4である
0877876
2007/07/25(水) 20:32:14結局、メンツ構成数については、他の数牌との関係は考えなくていいということだ
個別に求めれば、個数はそれらの積になる
0879デフォルトの名無しさん
2007/07/25(水) 20:43:50http://geriotoko.gooside.com/submenu/score_file.html
0880デフォルトの名無しさん
2007/07/25(水) 20:45:31面白いかも名
0881846
2007/07/25(水) 20:50:43でもテーブルは作る気しないからよろしく。
1対1対応してない(牌のテーブルに対して複数の構成)から上手く組まないと効果が出なそう
0882デフォルトの名無しさん
2007/07/25(水) 20:51:50それは考えたが、トンプウ荘(ルール)限定にしないと駄目だ
別のところでは通用しにくいと思う
試合数が少ない上、トリプル役満などもあり運任せの一撃で決まる率も高い
トンプウ荘ルール
http://mj.giganet.net/yaku.htm
0883デフォルトの名無しさん
2007/07/25(水) 20:54:190884デフォルトの名無しさん
2007/07/25(水) 20:56:262バイト( unsigned int型 または同量のクラス)に、メンツ構成は入れられる
1から5の9乗の配列に、メンツ構成数と、メンツ構成が記録してある最初のアドレス
を指定しておけばよい
例えば、メンツ構成1、メンツ構成2、メンツ構成3と登録されていれば
次のを登録するときに4番目というデータを保持しておく
0885287
2007/07/25(水) 20:57:39いえいえどうもどうも。乙です。
まあ、このリスト自体は、実際には役に立たない気はするけども。
凄い暇が出来たら、和了り判定に組み込んでベンチでも取ってみます。
あとは作成中の約一名が同じ結果を出すのを待つのみ・・・か。
0886デフォルトの名無しさん
2007/07/25(水) 20:59:43それじゃその方法で実装頼む
0887デフォルトの名無しさん
2007/07/25(水) 21:02:36アドレス(2バイト)とメンツ数(1バイト)を保持する、5の9乗個の配列を確保するのに
5.8Mバイト食う
後半を減らす方法ある???
0888デフォルトの名無しさん
2007/07/25(水) 21:22:241/5くらいに出来ればメモリの消費も少なくていいんですけど
0889デフォルトの名無しさん
2007/07/25(水) 21:24:5116bitくらいに縮まればいいんですけど
0890デフォルトの名無しさん
2007/07/25(水) 21:34:11対子が特殊だから、対子を取り除いたテーブルを作るのは?
0891デフォルトの名無しさん
2007/07/25(水) 21:35:0921bitで表せれば十分か 最大36枚記録できる点が無駄に思えるがそうでもないのか
0892デフォルトの名無しさん
2007/07/25(水) 21:36:50本気で開発したいです。
MJSimをだれか再うpしてもらえませんでしょうか。
0893デフォルトの名無しさん
2007/07/25(水) 21:37:1414枚あったときどれかトイツになるのか不明なんですよ
そして、12枚になったとしても、5進数表示より圧縮できる方法ありますか
0894デフォルトの名無しさん
2007/07/25(水) 21:39:33>>849によると、1から14枚のすべての組み合わせを表すのに19bitは必要みたいだ
0895デフォルトの名無しさん
2007/07/25(水) 23:04:110896デフォルトの名無しさん
2007/07/25(水) 23:08:35そのあと、やよいが隠した死体を見つけのを閣下が見てて
プロデューサーさんの罪が発覚することを恐れた閣下が
やよいを口封じのため殺害。 カメラはそのときのもの。
0897892
2007/07/26(木) 00:22:18今全レス読み終わったとこです。時間を無駄にした・・・。
で、もっぺんお願いしたいのですが、
>>349 = >>425さん頼むのでupしてもらえないでしょうか。
あと、>>425の最後のほうに書いていた「1のAIプログラム」が探しても見つかりません。
どんなとこにあるのでしょうか?
0898デフォルトの名無しさん
2007/07/26(木) 01:35:44おまいがつくるかあるやつつかったらいいよ
0899846
2007/07/26(木) 02:46:41まだ組み込んでないけど、遅い上にこのサイズじゃ死ねるなw
0900デフォルトの名無しさん
2007/07/26(木) 16:52:48テンパイ→期待値計算
1シャンテンのメンツ構成を選ぶ→シャンテン数が向上する適当な1枚を加える=テンパイ→期待値計算
nシャンテンのメンツ構成を選ぶ→シャンテン数が向上する適当な一枚を加える(繰り返す)→期待値計算
0901デフォルトの名無しさん
2007/07/26(木) 16:57:430902デフォルトの名無しさん
2007/07/26(木) 17:57:37最強にはならないだろうけど、適当に組んでみてソース貼ったら読んでもらえるかな?
ちょっと時間はかかると思うけど
0903デフォルトの名無しさん
2007/07/26(木) 18:05:59まじめに作る人がいれば、麻雀シミュレーターもきっと出てくるよ。
0904デフォルトの名無しさん
2007/07/26(木) 18:08:35正直、大会系プログラミングばっかりやってたから、こういうある程度大規模になりそうな
プログラミングをするのは初めてだからあんまりうまくいく気してないけどorz
0905デフォルトの名無しさん
2007/07/26(木) 18:23:070906655
2007/07/26(木) 18:51:12結局全ての牌34種での期待値を求めていく事になるのか。
4シャンテン位から出したいけど、3シャンテンでも辛そうだなぁ
0907デフォルトの名無しさん
2007/07/26(木) 19:10:35シャンテン数=最速上がり、最良上がりでない場合もあると思われ。
0908デフォルトの名無しさん
2007/07/26(木) 19:11:41基礎だからみんなで使える共通ソースをうpしようぜ!!!
>>539にルールが乗っている
0909デフォルトの名無しさん
2007/07/26(木) 19:14:53なぜなら例えば、一手後にピンプのみがあるけど
3手後に役満があればピンプを選ぶからだ
>>745の様にやれば高くて近い手を選ぶ様になる
0910デフォルトの名無しさん
2007/07/26(木) 19:24:46CPUの方が速度が速ければメモリを消去すればいいとおもうよ
0911906
2007/07/26(木) 19:50:43>>909
期待値計算した上でピンフが正着になればそれでいいのでは?(つまらないけど)
>>745の方法は戦術の一つだけど、最強を考えるとちょっと不満だな。
昔考えた方法は[45]などのターツがメンツになる確率を出して置いて評価関数を重ねて
いく方法。これなら手変わりもシャンテンアップも含めてやれるかな、と
0912デフォルトの名無しさん
2007/07/26(木) 21:59:54それとも今までピン「フ」だと思ってた俺が悪いのか・・・?
0913349
2007/07/26(木) 22:37:53それなりに強くて動作が速いやつです。作ったAIの対戦相手に使ってください。
以上をUPしました。
↓
ttp://uproda11.2ch-library.com/src/1117739.zip.shtml
MJSimを実行すると、永遠に実行するのでCtrl-Cで止めるか終了してください。
対戦結果はMJSimScore.txtの出力されます。
対戦内容を視覚的に見たい時は。雀譜と言うツールを使ってください。
統計は東風用の各種ツールを使ってください。
0914349
2007/07/26(木) 22:40:120916デフォルトの名無しさん
2007/07/26(木) 23:07:21http://mj.giganet.net/yaku.htm
ルールによると符計算が書いてないけどどうやって計算しているんだ
MJSimは?>>539と同じ?
0917892
2007/07/26(木) 23:15:36ありがとう。プログラム組むのは久しぶりですが頑張ります。
ところで>>1の「まったりプログラミング日誌」のアプリ強いです。
こんな強いのあったんですね。
ここのブログの開発日記を参考にしてみます。
0918デフォルトの名無しさん
2007/07/26(木) 23:18:33下に今のバグあり。
AIの作り方の注意事項TXTが有りそれをUPする。
■既知のバグ
・MJStatで、流局時の局が認識されないことがある。
・雀友で、得点したのに失点と判定されることがある。
・リーチ後の待ちの変わる暗カンをしてもチョンボにならない。
・ツモ上がりしたときの点数計算が正確でない。
・リーチ直後のロンでリーチがとられてしまう。
・七対子の時、25符になってない
・天和、地和の判定がない
・4人リーチで流れない。
・三家和で流れない。
・九種九牌で流せない。
・国士の場合、アンカンのチャンカンができない。
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
0919349
2007/07/26(木) 23:21:28↓
ttp://uproda11.2ch-library.com/src/1117752.txt.shtml
0920デフォルトの名無しさん
2007/07/26(木) 23:24:31まずは間違いのない正確な点数が計算できないと作れないだろ・・・
昔はどうやってAI作ったんだよ??
たまたま作ったやつが、たまたまMJSimで計ったら強かっただけかよ???
0921デフォルトの名無しさん
2007/07/26(木) 23:29:05ずれていたら一位になれるところを間違えたりするだろ・・・
0922349
2007/07/26(木) 23:30:290923デフォルトの名無しさん
2007/07/26(木) 23:35:29ここで最初からつくっちゃた方が良くないか?
0924デフォルトの名無しさん
2007/07/26(木) 23:38:11作る側が楽になる
0925349
2007/07/26(木) 23:42:320926デフォルトの名無しさん
2007/07/26(木) 23:47:16ソースをもってるんだから作る上の必要な情報を書いてくれよ
0927904
2007/07/27(金) 00:01:560928デフォルトの名無しさん
2007/07/27(金) 00:08:02複数人で作って比較して作るのがいいんだ
結局、プログラムする上で点数計算はしなければいけない部分なんだ
ちゃんと一致するか調べながら進めたらいい
0929デフォルトの名無しさん
2007/07/27(金) 00:39:53もう消した?
0930デフォルトの名無しさん
2007/07/27(金) 00:56:23zip圧縮すれば300kB程になる。圧縮したまま読み込めるやつがいたら計測してくれないか?
VBでやってたからその手が使えない・・・
0931デフォルトの名無しさん
2007/07/27(金) 01:19:22NotFOUND
0932デフォルトの名無しさん
2007/07/27(金) 02:01:38ルールを設定した上でシミュレータを作った方がいい
ルール
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4765.txt
0933デフォルトの名無しさん
2007/07/27(金) 02:19:53メンツ分解 → 飜数(役)計算 → ルールに基づいて動かせるようにする → 符計算
符計算は基本部分が完成してからだ
データの受け渡し方法が確定しないからな
0934メンツ分解1
2007/07/27(金) 06:30:38#define fore(i,j) for(i=0;i<j;i++)
using namespace std;
int hai[9],m[5],n[5],k,kosu=0,toitu,*msu;
class MT{ public: char y[5];
MT(){y[0]=y[1]=y[2]=y[3]=y[4]=y[5]=-1;}
int operator ==(MT& z){return (y[0]==z.y[0] && y[1]==z.y[1] && y[2]==z.y[2] && y[3]==z.y[3] );}
void sort(){int i,j;char s; fore(i,3)for(j=i+1;j<4;j++)if(y[i]>y[j]){s=y[i];y[i]=y[j];y[j]=s;}}
MT& operator = (MT& z){int i;fore(i,5)y[i]=z.y[i];return *this;}
void hyoji(){cout<<"mentubunkai ";
int i,n;fore(i,4){n=y[i];
if(n>=0){if(n<9)cout<<(n+1)<<(n+1)<<(n+1)<<" ";
else {n-=9;cout<<(n+1)<<(n+2)<<(n+3)<<" ";}}}
if(y[4]>=0)cout<<(y[4]+1)<<(y[4]+1);cout<<endl;}
} **x, mentu;
void del_c(int n){hai[n]-=3;k--;mentu.y[k]=(char)n;}
void del_j(int n){hai[n]--;hai[n+1]--;hai[n+2]--;k--;mentu.y[k]=(char)(n+9);}
int cot(int n){if(hai[n]>2)return 1; return 0;}
int jut(int n){if(hai[n]>0 && hai[n+1]>0 && hai[n+2]>0)return 1; return 0;}
void remov(void){int n=mentu.y[k];mentu.y[k]=-1;if(n<9)hai[n]+=3; else {n-=9;hai[n]++;hai[n+1]++;hai[n+2]++;}k++;}
void touroku(void){
int i,t=0,n,sum[9];MT a; a=mentu;a.sort();
fore(i,9)sum[i]=0;
fore(i,4){n=a.y[i];if(n>=0){
if(n<9)sum[n]+=3; else {n-=9;sum[n]++;sum[n+1]++;sum[n+2]++;}}}
if(toitu>=0){sum[toitu]+=2;a.y[4]=(char)toitu;}
n=1;fore(i,9){t+=sum[i]*n;n*=5;}
fore(i,msu[t])if(x[i][t]==a)return;
msu[t]++;x[i][t]=a;kosu++;}
0935メンツ分解2
2007/07/27(金) 06:31:47main(){
int s,p,N=1953125;x= new MT* [4]; fore(k,4)x[k]=new MT [N];
msu = new int [N];fore(s,N)msu[s]=0;
fore(N,5)for(toitu=-1;toitu<9;toitu++){
fore(k,5)m[k]=n[k]=-1;fore(k,9)hai[k]=4;
if(toitu>=0)hai[toitu]-=2;k=N;
start:
if(!k){touroku();remov();}
while(m[k]<9){p=(++m[k]);if(cot(p)){del_c(p);goto start;}}
while(n[k]<6){p=(++n[k]);if(jut(p)){del_j(p);goto start;}}
if(k<N){m[k]=n[k]=-1;remov();goto start;}}
cout<<"goukei mentu bunkaisu "<<kosu<<"\n\n";
N=1953125;int sum=0,i;
unsigned int *adress= new unsigned int [N];
MT ment[23600];
for(k=1;k<N;k++){
p=msu[k];if(p==0)adress[k]=0;
else{adress[k]=sum;fore(i,p)ment[sum+i]=x[i][k];sum+=p;}}
fore(k,4)delete [] x[k];delete x;
/* ************* ここまででデータ生成完了!! ************** */
char a[]="111222333";
fore(k,9)hai[k]=0;
for(k=0;a[k]!=0;k++)hai[a[k]-'1']++;
p=1;sum=0;fore(k,9){sum+=hai[k]*p;p*=5;}
cout<< a<<" no mentu bunkaisu "<<msu[sum]<<endl;
p=adress[sum];fore(k,msu[sum])ment[p+k].hyoji();}
0936デフォルトの名無しさん
2007/07/27(金) 07:43:310937デフォルトの名無しさん
2007/07/27(金) 08:28:32こっち使ってくれ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4771.txt
0938デフォルトの名無しさん
2007/07/27(金) 09:30:14約400ミリ秒だ CPUの計算でこの速度を超えられるか???
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4774.txt
0939デフォルトの名無しさん
2007/07/27(金) 12:02:17麻雀でもやって最強アルゴリズムを考えましょう。
0940デフォルトの名無しさん
2007/07/27(金) 13:35:32最強=どのルールでも強い、じゃ無謀だし実現不可だし。
上がり点、翻、符は従来のままで、役は必ず含まれる基本役だけでも確定させておく
位しないと、組むのが出来ない(期待値とか出しにくい)
0941デフォルトの名無しさん
2007/07/27(金) 14:10:34・大三元・四喜和の鳴きは認めないのか?
・清一はバカチンと面前に差はないのか?
ザッと読んだだけだが、この辺り疑問。ほかにもいっぱい疑問が出てきそう
0942デフォルトの名無しさん
2007/07/27(金) 14:21:56少なくともオレは、
>大三元・四喜和の鳴きは認めないのか?
こんなルールがあったことも知らない
>清一はバカチンと面前に差はないのか?
これは書いてある
0943940
2007/07/27(金) 14:36:14自分なりに、
鳴き無効:イーペーコ、リャンペーコ、ピンフ、(タンヤオ←これもなぁ)
食い下がり:三色(同順、同刻)、チャンタ系全部、染め手系全部
役満:九連(鳴き無効)、四暗刻(鳴き無効)、他は有効
人和は取り入れて無い所結構あるから、無くていいと思う(鳴きが入ったら無効だとか揉めるから)
0944デフォルトの名無しさん
2007/07/27(金) 15:07:58食い下がりの件は2人も見落としてるみたいだから、*付きは〜とかかずに
別にちゃんと書いたほうがいいみたいだね。
0945デフォルトの名無しさん
2007/07/27(金) 15:11:38変更はそんなに面倒じゃないけどしっかり決めないとね
0947デフォルトの名無しさん
2007/07/27(金) 15:17:03俺のとこでは面前混老は混老2+対々2+チャンタ2+三暗刻2で倍満
喰い老は混老2+対々2+チャンタ1で5飜
に、してるんだか。
0948デフォルトの名無しさん
2007/07/27(金) 15:34:18混老は4で対々つかず、という書きかたしてるのを最近見たな、このスレのリンク先だった気が。
0949デフォルトの名無しさん
2007/07/27(金) 15:46:48混老頭はチャンタを含めた役数になってる。対々も付けないで含めてしまうのが
いいと思う
0950デフォルトの名無しさん
2007/07/27(金) 16:27:38個人の資質によってかえられる戦略(食いタンとか流局に持ち込む方法)は入れて、
運によって点数が変化する要素(裏ドラや一発やダブルリーチ)は排除してあります
日本プロ麻雀連盟競技ルールに基づきます
東風荘はパオ無しルールだった事を知り、計算の簡略化のためパオ無しを取り入れました
0951940
2007/07/27(金) 16:42:08それだな。淋しいルールだけど後付けで加える形でいいか・・
0952デフォルトの名無しさん
2007/07/27(金) 17:02:580953デフォルトの名無しさん
2007/07/27(金) 17:14:31>運によって点数が変化する要素(裏ドラや一発やダブルリーチ)は排除してあります
上で何度も言われてると思うが、ダブルリーチはともかく裏ドラと一発は運だけじゃない。
例えば「テンパったとき三四五六から三か六を切ってリーチするとき場に二が見えてなくて
五が4枚見えていれば六が裏ドラの可能性は無いから六を切る」なんてことは普通に考えるぞ。
それに一発はリーチ側ではなくて守り側で何を切るか考える時に影響する。
こういったことさえ考えないAIでは最強なんて言えないだろ。
0954デフォルトの名無しさん
2007/07/27(金) 17:19:370955デフォルトの名無しさん
2007/07/27(金) 17:21:30志向する人ってなんなんだろうね。
0956デフォルトの名無しさん
2007/07/27(金) 18:08:27今後変更削除付加するルールを話し合って決めていけばいいかと。
いきなりけんか腰になるから、まとまるもんもまとまらなくなる。
0957953
2007/07/27(金) 18:33:22多数回試行した時に考えたAIと考えないAIで差が付くなら問題ないと思うが。
>>955
別にインフレルールを志向してるわけじゃない。
現在一般的に行われてるルールを無視するのが俺には変に感じるだけ。
インフレルールだから(ルールから)外すのなら役満を外したほうが戦略的になって面白いかもしれん。
しかしそうすると麻雀とは呼べなくなる。
役満というルールを外さないのと裏ドラ等を外さないのは俺的には似たような感覚。
>>956
けんか腰のつもりはないけどね。
俺も出てきた叩き台のルールに対して意見を述べただけ。
それでも裏ドラ不要の意見が多ければそれはそれでかまわないんだが。
0958デフォルトの名無しさん
2007/07/27(金) 18:53:28赤五はともかく裏ドラはデファクトスタンダードだろ。
運、運というが何万回もやった結果の平均で一番強いプログラム決めればいいじゃん。
どうせどんなルールでもそうやって決めるんだろし。
0959デフォルトの名無しさん
2007/07/27(金) 19:51:37ルールーでは役満だけが特別に点数が高くなっていませんよ
ダブル役満やトリプルなどの付加もありません
次のように分けて役満だけが特別にならないようにします
○満貫 2000点 7飜以下基本点2000点以上、40符6翻以上、人和
○ハネ満 8〜9飜のとき 3000点
○倍満 10〜12飜のとき 4000点
○三倍満 13飜以上のとき 6000点
○役満(四倍満) 8000点
0960デフォルトの名無しさん
2007/07/27(金) 19:56:11裏ドラは狙わなくても14枚あるうちに勝手に付いちゃうじゃないですか
個人の資質、強さを測りにくくする要素なんですよ
それに早い段階リーチして裏ドラを狙う事で
手作り(工夫)の余地を減らす要素なんです
0961デフォルトの名無しさん
2007/07/27(金) 20:17:24>手作り(工夫)の余地を減らす要素なんです
これも一つの戦略にすぎないのでは?
「最強」を決めるのに、個人の思い込み(?)で、
他の人のやる気/参加意思をなくす方が問題だと思う。
「無」がいいという人、何人いるの?
私は、裏ドラ「有」に一票!
0962デフォルトの名無しさん
2007/07/27(金) 20:27:24裏ドラ無しに一票
あがったときに運まかせで得点が2倍、4倍となるのはおかしい・・・
一人が手作り無しを考えずに最短リーチばかりかけると、他の三人も手作りが出来にくくなる
そして全員が最短リーチを目指せば、運まかせの要素が高まる
飜数を上げ役満を狙ってこそ楽しみ、工夫があるんだよ
0963デフォルトの名無しさん
2007/07/27(金) 20:33:03こんだけ粘着するのは、おれなら金もらっても無理。
0964デフォルトの名無しさん
2007/07/27(金) 20:42:16現実に近いルールでいいかと
運要素が増えたところで施行数増やせば問題ない
ないほうが組みやすいし多分自分は最初は考慮しないけど、それでもリアルに近いルールでやりたい
0965デフォルトの名無しさん
2007/07/27(金) 20:47:39そうそう。
どうせ作るなら、普段自分が遊んで楽しいやつがいい。
0966最初の牌パイが国士無双
2007/07/27(金) 20:49:250967デフォルトの名無しさん
2007/07/27(金) 20:51:12明確にルールを決めなければ、思考プログラムが作れませんよ
一人一人が個別のルールで作っていたら最強が決まりません
最終的なルールはどうなるんですか?
0968デフォルトの名無しさん
2007/07/27(金) 20:58:14人間も含めて?
ポーカーでも人間に勝てない・・・
0969デフォルトの名無しさん
2007/07/27(金) 21:01:04お前何様だ。
競馬だって距離がいろいろあるだろ。その条件ごとに最強がいる。それでいいじゃねーか。
まあお前のレス見てる限りじゃ、お前の頭じゃどっちにしても最強のは作れないよ。
0970デフォルトの名無しさん
2007/07/27(金) 21:01:05アリアリとナシナシ
ピンフとツモの複合
裏ドラ・槓ドラ・槓裏
赤牌・花牌
フリテン立直
ダブロンと三家和
上家どり
オカ
ウマ
順位ウマ
差しウマ
総ウマ
沈みウマ
外ウマ
ワレメ
焼き鳥
責任払い
ブー麻雀
アルシーアル麻雀
インフレ麻雀
永田町ルール
アリス
雀鬼流
0971デフォルトの名無しさん
2007/07/27(金) 21:02:24いずれは人間も入れての最強がいいだろうけど
まだ含めなくていい
0972デフォルトの名無しさん
2007/07/27(金) 21:02:38条件ごとの最強を決めたいんですが・・・
条件を決めなければ、条件ごとの最強が決まりません・・・
0973デフォルトの名無しさん
2007/07/27(金) 21:06:05ニュアンスを変えてきたな。
0974デフォルトの名無しさん
2007/07/27(金) 21:09:01ほんとにアホだな。じゃあ決めてやる。まうじゃん標準(デフォルト)ルールで作れ。DLL対戦もできるしそれでいけ。
条件決めたぞ。これで作れ以後質問禁止
0975デフォルトの名無しさん
2007/07/27(金) 21:09:43おk
俺もそれで作るわー
0976デフォルトの名無しさん
2007/07/27(金) 21:18:49動かしてみましたけど動作が普通の人間と同速度なんです
DLL作ったらそれを動かすホスト部分を誰かが作らなければ・・・
それにプラグイン仕様書から、実際に動くやつを作るところまでがかなり遠いです・・・
0977デフォルトの名無しさん
2007/07/27(金) 21:23:22そんなんどんなルールにしてもおんなじことだろが。
気に入らないんだったらお前が作れよ
0978デフォルトの名無しさん
2007/07/27(金) 21:24:50>まうじゃん標準(デフォルト)ルールで作れ
↑の意味分からないの?DLL対戦もできるうんぬんはオマケだろ。
お前が条件がどうたらいちいちうるさいから、ルールだけでもまうじゃん準拠で行けばいいじゃんっ手だけの話だろ。
あと、sageれば?お前一人だけageてるみたいだけど。
0979デフォルトの名無しさん
2007/07/27(金) 21:25:020980デフォルトの名無しさん
2007/07/27(金) 21:26:46役計算と動作する部分が出来てから、思考ルーチンを作るべきなんです
まうじゃんDLLを動かせる部分が出来ていないのに
思考ルーチンを作っても無駄になるんですよ・・・
0981デフォルトの名無しさん
2007/07/27(金) 21:28:330982デフォルトの名無しさん
2007/07/27(金) 21:29:47まうじゃん準拠はある個人の意見なんですよ
全体の意見の一致ではありません
全員がそれで最強を目指すっていうなら、ホスト部分も出来上がるでしょうけど・・・
0983デフォルトの名無しさん
2007/07/27(金) 21:30:560984デフォルトの名無しさん
2007/07/27(金) 21:32:40はぁ?今更そんなこと言い出してんの?
こんなルール問題ごときでなんでそこまでもめなきゃならんのだ。
とりあえずまうじゃん準拠で作ればいいじゃん。
細かい修正はそのあとだろ。
とりあえず、思考ルーチン作って検証していくべきだと思うがな。
0985デフォルトの名無しさん
2007/07/27(金) 21:35:16全体の意見が一致しないから条件ごとのって話になったんだろが。
自分の書いた>>972を100回読んでみろ。
まあ全体の意見が一致しないってのも99%はお前の固執にあるんだがな。
お前1人以外の全体の意見なら一致するかもなw
0986デフォルトの名無しさん
2007/07/27(金) 21:38:58お前が提案したルールに疑問が提示されて、その結果としてまうじゃんルールで行こうって代案が出てるのに、お前一人で反対してるから、まとまらないだけじゃん。
そこまで、条件が条件がとか、全員一致がとかぬかすなら、それなりのもん持って来いよ。
0987デフォルトの名無しさん
2007/07/27(金) 21:39:30そしたらルールに従って役計算と動作する部分をつくりますか
まうじゃん本体は、得点などを教えてくれるようですけど・・・
実際の動作は鈍すぎなのでまずは役計算作らないと
0988デフォルトの名無しさん
2007/07/27(金) 21:41:30必要ならだけどww
0989デフォルトの名無しさん
2007/07/27(金) 21:49:00おまいら最強の麻雀プログラムしてみろよ Part2
http://pc11.2ch.net/test/read.cgi/tech/1185540470/l50
0990デフォルトの名無しさん
2007/07/27(金) 21:50:56ほしいのは、対戦が可能になる基盤なんだから。
0991デフォルトの名無しさん
2007/07/27(金) 22:03:05> まうじゃんは駄目なんですよ
> 動かしてみましたけど動作が普通の人間と同速度なんです
「ノーウェイト」のモードあるじゃん。
一局数秒で終わる。
もともと一手の思考時間を何秒とするつもりだった?
0992デフォルトの名無しさん
2007/07/27(金) 22:13:280993デフォルトの名無しさん
2007/07/27(金) 22:19:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4777.txt
0994デフォルトの名無しさん
2007/07/27(金) 22:22:06> 動かしてみましたけど動作が普通の人間と同速度なんです
が問題になるんですか?という意味。
#COMが一手一秒程度で手を決めるなら、問題ないように思うのだが。
それと、最大思考時間を設定しないと有利不利がでると思うんだけど
決まってたかの確認。
#一手5分でも良いの?
0995デフォルトの名無しさん
2007/07/27(金) 22:26:36GUI表示で一局にかかる時間が多すぎるんですよ
一手一秒だとしても画面で動かして終局まで1分程度かかります
1000局の統計を取ろうとしたら、17時間かかるんです
0996デフォルトの名無しさん
2007/07/27(金) 22:28:450997デフォルトの名無しさん
2007/07/27(金) 22:28:56(新たに作った)メイン側で
思考時間や正しい手を指すか
チェックする部分をいれたらいいと思います
0998デフォルトの名無しさん
2007/07/27(金) 22:30:040999デフォルトの名無しさん
2007/07/27(金) 22:30:351000デフォルトの名無しさん
2007/07/27(金) 22:31:0510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。