トップページ⇒tech
1001コメント275KB

おまいら最強の麻雀プログラムしてみろよ!!

■ このスレッドは過去ログ倉庫に格納されています
0001桜井章一 NGNG
できたら、NASAやるから。
0002デフォルトの名無しさんNGNG
2
0003デフォルトの名無しさんNGNG
できた。テンホー率100%。最強の麻雀プログラム。
0004デフォルトの名無しさんNGNG
漏れちょ-天才プロブラマだけど、麻雀しらないからなぁ〜
0005デフォルトの名無しさんNGNG
どうやって最強を決めるんだ?
0006デフォルトの名無しさんNGNG
まず、最強の麻雀プログラムの定義からいこうか。
0007デフォルトの名無しさんNGNG
187 名前:デフォルトの名無しさん[] 投稿日:03/02/05 21:00
>>177
>麻雀をちょっと単純化して
>駒の数を
>9*4*4=144とする。
>面倒なのでダブりがないと仮定して、ちょっと複雑にする。

もっと詳しく書いて下さい。意味が全くわかりません。
駒って何ですか?
0008デフォルトの名無しさんNGNG
Pai nextPai = taku.getPai();
0009デフォルトの名無しさんNGNG
麻雀って役がそろいそうな確率を状態が変わるごとに出して
一番確率が高いものを選んでいくだけだろ。
0010デフォルトの名無しさんNGNG
相手の牌を読むのは無意味だね。どうせ分からないんだから。
知る必要があるのは相手が持っている牌の確率とほしい牌の確率だね。
0011デフォルトの名無しさんNGNG
今度は「おまいら最強の〜プログラムしてみろよ」スレの乱立が始まるんですか?
0012デフォルトの名無しさんNGNG
>>11
じゃ「ばばぬき」キボンヌ
0013デフォルトの名無しさんNGNG
「おまいら最強の友枝小学校運動会プログラムしてみろよ」とか?
0014デフォルトの名無しさんNGNG
>>13
もちろんラストは教職員リレーだな
0015デフォルトの名無しさんNGNG
>>13
もちろんアンカーは体育の先生だな。
0016デフォルトの名無しさんNGNG
>>9
一番確率が高いだけじゃなくて、上がったときの点数と確率を比較して
一番点数の期待値が高い役を探すんじゃないかな?

>>10
典型的なのは分かると思うけどな。
タンヤオ系とチャンタ系とかなら簡単なチェックで推理は出来そうだ。
0017デフォルトの名無しさんNGNG
ここから確率の話になります。




んなわけないか、麻雀程度の簡単なプログラムに興味がある奴いなそーだし。
0018デフォルトの名無しさんNGNG
オンナのこがぬぐ確立あげてくだしい
0019デフォルトの名無しさんNGNG
よし、麻雀暦5年の俺が麻雀の知識をすべて捧げてやろう
0020YAHOO!無料NGNG
YAHOO!BBのユーザーへの特報!!!

今YAHOO!BBでADSLを利用されてる方。

月額料金を無料にできる方法をお教えします。確実な方法です
し方法も一つではなく何通りお教えしますので、ヤフーbbのユ
ーザーである限り料金発生なくずっと使えます。

興味のある方は以下のメールアドレスに連絡ください。
料金をとめる方法は少しの謝礼でお教えします。
[email protected] [email protected]
 よろしくお願いします。
0021デフォルトの名無しさんNGNG
まず、一番近い確立の役に近づけるだけのプログラム
これは、弱すぎる。少し手遅れしても満貫までつくれそうなときは、
満貫作っちまったほうが強い
1手変わりで点数が増える場合も多いしな
0022デフォルトの名無しさんNGNG
あと、打ち手の過去の打ち方を蓄積できれば強くなると思う
0023デフォルトの名無しさんNGNG
チャンタ狙いだと、中張牌から切られることが多いが、
はじめの一打が19字牌とかで迷彩されたら、読めないだろうな
0024デフォルトの名無しさんNGNG
たとえば、同じ色の牌だけを集めるチンイツという役がある
その場合、捨て牌が偏ってしまうため、バレバレになる
バレバレになると誰も振り込んでくれない
ということは、自分のツモあがりだけとなり、あがれる確率が低い
だけど、余裕がある場合に第一打や途中で2、3個捨てておくと警戒が薄れ、
他の3人も出してくれる確立が高くなる(経験上)
自分のツモあがりだけと自分と他の3人から出る可能性のある場合、どちらがあがりやすそうかは明白
聴牌までの期待値を1下げて、あがりやすさを3上げるような微妙な部分をどう克服するのか、、
最強への道のりは果てしなく遠いようである

完

※ちなみのこのチンイツは振り込むとかなり痛い点数の役です
0025デフォルトの名無しさんNGNG
中学生のころ、じゃんけんプログラム最強決定戦みたいなのがあった。
C言語で関数を作って、過去に相手が出した手から次の手を創造することを
その関数に期待するルールだった。乱数やそれに類するものの使用は一切禁止。

さて、概略を記すと以下のような形だったわけだ。

/* 文法が間違ってたらごめん */
typedef (int) (*func_ptr)(int);

func_ptr program1;
func_ptr program2;

そしてクラブの部員が作ったプログラムをそれぞれポインタに代入して
戦わせる形だった。
002625NGNG
引数には前回の手が入り、返値に今回の手を入れる。
中でstatic配列などを使ってもいいことになっていた。
意味は1:グー,2:チョキ…みたいな感じ。

見事最強の座を獲得したプログラムはこんな感じだった。

int saikyou(int) {
 if((func_ptr)saikyou == program1) {
  for(int i=0;i<1000;i++)*program2(1);
 }
 else {
  for(int i=0;i<1000;i++)*program1(1);
 }
 return 2;
}

見事な勝率を誇り優勝。
0027デフォルトの名無しさんNGNG
>>26
最強同士で戦わせたらえらいことに
0028デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`)< ぬるぽ
0029デフォルトの名無しさんNGNG
確率と確立を区別できない坊が多いな。
あと定跡と定石
それと香具師と家具師
0030デフォルトの名無しさんNGNG
後だしのプログラム作れば最強
0031デフォルトの名無しさんNGNG
牌データをハックするプログラム作れば最強
0032デフォルトの名無しさんNGNG
そして、後だし同士で戦わせる
0033デフォルトの名無しさんNGNG
麻雀のプログラム簡単ってやつはルールしってんのかな?
ドンジャラとは違うからな。
0034デフォルトの名無しさんNGNG
>>33
えっ? 確率が高い手を選んだらあとは運任せのゲームでしょ(w
0035デフォルトの名無しさんNGNG
>>34
それ初心者の打ち方だよ。

アンパイをどうよませるの?
捨て牌から相手の手をいかによむの?
相手がツモギリをした場合の処理は? うちながら相手の癖を理解させたりしなくていいの?

とかかなり問題は山づみ。
0036デフォルトの名無しさんNGNG
とりあえず定石を列挙汁
0037デフォルトの名無しさんNGNG
役の判定一つとってもバグのないプログラムを作るのは簡単じゃないよ。
0038デフォルトの名無しさんNGNG
では私から。
誰かがハク、ハツと鳴いたら、チュンは捨てない
0039デフォルトの名無しさんNGNG
>>34
じゃあはじまった瞬間食いタン決定だな。
0040デフォルトの名無しさんNGNG
まず、上にもあるが対極者の癖を学習することができること
これが麻雀には最重要では?
アンパイの読みとかも、基本は同じだけど対局者や
その流れで全然違う。

そしてそれを実装するためには、最初の数局は無難に打って、
相手が自分が学習した中でどのタイプの麻雀打ちかを
判断する。

逆に自分の手が読まれないように、自分のタイプはこまめに買える。
または複数タイプを混ぜるとか。


ついでに漏れは「他人にバレようが、チンイツなどの染め手ばかり狙い、
しかもオープンリーチばかりする馬鹿」です。オープンリーチ・一発・
ツモ(ドラ1以上)しか狙いに行きません。ごめん。
0041デフォルトの名無しさんNGNG
最強プログラムに必要なもの
・1巡ごとに見える牌の数が増えることから、相手の手にありえる何百万通り(?)ものなかからもっとも確率が高い牌姿などを常に考えておく
もしかしたら将棋より大変かもな
0042デフォルトの名無しさんNGNG
誰かがハク・ハツと鳴いたら、むしろとっととチュンは切ると思うが……
ただのポンなら(責任払いでも)自らチョボしたほうが安いし(をい
0043デフォルトの名無しさんNGNG
>>40
是非高レートで賭け麻雀しましょう。
0044デフォルトの名無しさんNGNG
役牌を簡単に鳴かせたら、相手のあがりを早めてしまう
0045デフォルトの名無しさんNGNG
役判定ルーチンを真面目に書くとけっこう汚くならない?

0046デフォルトの名無しさんNGNG
麻雀で勝つのには、立直とタンヤオとドラと役牌と混一だけで十分。
0047デフォルトの名無しさんNGNG
>>42
それは自分の手と相談してな。
安い手で張り合うのはばかばかしいだろ。 前の奴がだしたら便乗、二枚あったら頭ってかんじにしたほうが強くない?
0048デフォルトの名無しさんNGNG
こっちに2枚あったら、鳴かれる確率も低くなるな
0049デフォルトの名無しさんNGNG
>>46
おいおい…
やった奴に自信つけさせて破産させるソフトになっちまう。
0050デフォルトの名無しさんNGNG
裏ドラは何かも考えるようにして
相手のリーチに対して、振り込んだときに裏ドラがいくつ乗ってしまう確率があるのかとかも
0051デフォルトの名無しさんNGNG
普通に作ったんじゃ面白くない
0052デフォルトの名無しさんNGNG
声優は萌え萌えのでおながい
0053デフォルトの名無しさんNGNG
>>52
俺でよければ脱ぎまで担当するが?
0054デフォルトの名無しさんNGNG
負けてあげたら、モロ見え動画
これ最強
0055デフォルトの名無しさんNGNG
役判定でもいいからつくってみようよ。
まずはそこからだろ。
0056デフォルトの名無しさんNGNG
>>35
えっ? 読むって相手の手を完全に読めるの? 確率でしか分からないでしょ(w
0057デフォルトの名無しさんNGNG
>>41
>・1巡ごとに見える牌の数が増えることから、
一巡ごとに相手のありえる手の数が極端に減るねぇ。
0058デフォルトの名無しさんNGNG
どうせ考えるだけで、誰も作らないに10うんこ
将棋もね
0059デフォルトの名無しさんNGNG
麻雀の牌の数は136個。自分の牌はわかるから開始時点で123個の牌のある場所の
確率を出すだけだね。1巡ごとに見える牌は増えるから調べなきゃならない
牌の数はどんどん減っていくね。
0060デフォルトの名無しさんNGNG
危険牌の確率は確率だが確率だけじゃない確率もあるぞ
たとえば
相手が1巡目で5を切ってリーチしてきたとする
この5が安牌であることが100%の情報で、
この他の牌の危険度が全く同じあるかと言えばそうでもない
この5がどういう形からでてきたのかたとえば455と持ってたところから出た5だとすれば、36が当たり牌となっている
他にも次のようなかたちもありえたりす(ry
まあ、自分の持ってる牌などからも微量なが情報を得てだな
などなど、確率確率確率マンセーニダ
0061デフォルトの名無しさんNGNG
将棋って最後まで増え続けるの?
最初の数はものすごく少ないけど
0062デフォルトの名無しさんNGNG
ドラ表示牌も見えてるので122牌
親なら14枚から始まるから121牌
0063デフォルトの名無しさんNGNG
> この5が安牌であることが100%の情報で、
ありえない
0064デフォルトの名無しさんNGNG
>>61
> 将棋って最後まで増え続けるの?
なにが?
0065デフォルトの名無しさんNGNG
いや、現物でロンされてもチョンボなんですが・・・ツリ?
0066デフォルトの名無しさんNGNG
>>56
相手の手が確率でなく完全にわかるボードゲーム?のほうが少ないと思うな。
あがりやすさだけで判断するプログラムっていうのも
組んでみたらおもしろいかも。
0067デフォルトの名無しさんNGNG
>>47
そうですね、ただ自分が1枚しか持ってない状態でチュンの頭待ちだったら
まず誰も振り込んでこないので……
あと後半になればなるほど、ハクハツを鳴いた人間がチュンの頭待ち
をしている可能性が高くなるという問題もあります。
0068デフォルトの名無しさんNGNG
>>66
んだんだ。その点で麻雀と将棋は違うわな。
じゃんけんで相手の裏の裏の裏の裏の裏の・・・の手を考えても無駄なように、
麻雀で先の先の先の先の先の・・・の手を考えても無駄だな。
将棋と同じアプローチは通用しないのに、同じアプローチで考えて将棋よりも
麻雀が難しいといっている奴はバカ(藁
0069デフォルトの名無しさんNGNG
おまいら最強の花札プログラムしてみろよ
0070デフォルトの名無しさんNGNG
先を考えて、確率の高いものを選ぶんだぞ
0071デフォルトの名無しさんNGNG
>>68
全く違うものだしね。
比べる必要をまず感じないわな。
まあどっちが難しいとかにこだわる奴は放置で。
でもジャンケンとは違うよ。
あれは常に三分の一だから。
麻雀は実際強いうちかたがあるからね。
意味合い的には運の入る将棋ってかんじ?
0072デフォルトの名無しさんNGNG
>>70
なんの確率がわかるって言うんだよ?(藁
0073デフォルトの名無しさんNGNG
麻雀を確率計算で考えているページ?
ttp://kataagari0.tripod.co.jp/
0074デフォルトの名無しさんNGNG
>>71
運の入る将棋。
良い手の内からランダムで手を選ぶ将棋みたいなもんか。
0075デフォルトの名無しさんNGNG
将棋であれば相手の手が全て見えている状態から
戦略を練る。

しかし麻雀の場合は、相手の手の一部(捨牌・鳴牌)しか分からん。
その中で考えなければいけない。

この差は大きいと思うけど、どう?

ついでに実際の麻雀の場合は相手の思考時間+手の動きも
相手の手牌の内容を探る情報になるので……
マウスカーソルや視線の動きも情報として取り込まないと
(対人戦)最強にはなれないかと、思う。
まあこれも通じたり通じなかったりだけど
0076デフォルトの名無しさんNGNG
>>72
行動の有効度、危険度を設定して、それを参照しながら点を計算、一番たかい手を選ぶって感じか?
つーか確率は普通に存在するだろ。
どう計算したら早くできるかはわからんが。最も単純で簡単に計算出来る確率は、
アンパイが10個あったらアンパイ以外を捨てる場合振込む確率は
(全種類-10)÷全種類
0077デフォルトの名無しさんNGNG
> しかし麻雀の場合は、相手の手の一部(捨牌・鳴牌)しか分からん。
> その中で考えなければいけない。
>
> この差は大きいと思うけど、どう?
うん。だから全部の場合を考慮したり先の先を読むのは無意味になる。
すべては確立の世界なのだよ。ワセリン君。
0078デフォルトの名無しさんNGNG
>>76
だから先は関係ないだろ。過去と今だけで十分。
0079デフォルトの名無しさんNGNG
3という牌があったとする
この3で面子を作ろうとするには、12345が必要である
 23
 34
1 3
 3 5
 33          
となり、この3から面子完成への受け入れ枚数は多い
だが、2が場に3枚でていたとしよう
すると、3に4をツモって34(2か5で1面子完成)となっても、ほぼ2が枯れている状況では辛かったりする
2を手に入れるのがこんなんな上、25待ちで聴牌したとしても、5は出にくいからだ(みんなが使いやすい牌だから)
あと点数差など状況により、牌効率は違ってくる
0080デフォルトの名無しさんNGNG
>>66
現状で何かのおまけみたいに作ってある麻雀ソフトはほとんど「あがりやすさだけ」だと思うぞ。
たいてい、いんちきしてコンピュータの配牌が3しゃんてんくらいにしてあって、
あとは上がりを目指すだけ。
0081デフォルトの名無しさんNGNG
>>78
76の言ってることはあまりに大雑把な確率の捉え方なのでなんとも言えんが、
先を読まなくていいってことはないだろ。
今まで各々が思いつくままに挙げた話、
例えば「白発を鳴いたやつが居る」時にどうするかってのは、
実は相手の手の内、山の牌の確率的な分布に従って読めば、
先に捨てたほうが被害が少ないのか、抱えて死ぬべきなのかはおのずと得られる。
だから、思いつくままにルールを作りこむより、まともに読めるようにしたほうが強いと思うがな。
0082デフォルトの名無しさんNGNG
振り込む確率は違う
たとえば場に2が4枚見えていたとしよう
すると、相手は2を持っていないわけで、1待ちにするには国士無双か1の単騎待ちしかできない
この1と7の振り込む確率が同じだと思うか?
0083デフォルトの名無しさんNGNG
2が3枚、2が2枚、2が1枚だけしか見えていない場合も上記の理由により
7に対し危険度が段階的に違っている
0084デフォルトの名無しさんNGNG
俺は、白發鳴かれたときに、中を鳴かれる確率が低いとは言え、切らないほうが強いと思うなあ
確率が高い低いうんぬんのまえに万が一にも大三元に当たったら32000点(親なら48000点)
当たらなくて聴牌させて上がられても責任払い(パオ)があると16000(相手が親なら24000)払わされるし
その局は、防御に徹したほうがいいと思う
0085デフォルトの名無しさんNGNG
>84
ごめんなさい、レート0の麻雀ばっかりで、負けてもへこむだけなんで、
非実践的といえばそうですね…… まじに一回振り込みました(;;)

>80
なかにはきちんとやってるのもあるが、そうでないのは3シャンテンもない。
最悪な方法は、何順目に上がるかを最初に決め、コンピュータの牌を組んで、
残った牌でプレイヤーに麻雀をさせる。例えば鳴いても役が成立する場合に
わざと形だけ鳴かせることはあるだろうが……
0086デフォルトの名無しさんNGNG
>187 名前:デフォルトの名無しさん[] 投稿日:03/02/05 21:00
>>>177
>>麻雀をちょっと単純化して
>>駒の数を
>>9*4*4=144とする。
>>面倒なのでダブりがないと仮定して、ちょっと複雑にする。

>もっと詳しく書いて下さい。意味が全くわかりません。
>駒って何ですか?
レス遅くて申し訳ない
駒は牌の意味で使ってしまいました。
ダブりがないと仮定すると、ゲームが複雑になる事はOKですか?
0087デフォルトの名無しさんNGNG
>>84
例えば「もし奴に中が2枚あるとしたら残りの手の内はまだてんぱいに遠い可能性が高いけど、自分は上がりやすい形でてんぱる」とか、
「白発といといでツモられても自分は飛ぶ」とか、
総合的に見て、先を読んで、リスクとリターンをはかりにかけて切るか切らないかを判断するんじゃない?
0088デフォルトの名無しさんNGNG
>65
リーチかけてない香具師のアタリの可能性をまったく考えていないな。
0089デフォルトの名無しさんNGNG
てんぱっても、1000点や2000点の聴牌だったら、話にならんな
安手で役満とは勝負したくない
白發トイトイだったとしても流局、または誰かが振り込んでくれればいいな
これが大三元で、別のやつが食らって飛べば、もっとイイ
ま、その辺を考えての総合的か
0090デフォルトの名無しさんNGNG
>>88
リーチしたらっていってるだろ。
それに俺にはその切った相手に対してはって意味に聞こえるぞ。

つーか実際そういう読みを実装しようとおもったら
どんなふうにするんだ?
0091デフォルトの名無しさんNGNG
>>88
5でロンされたら、”同順”フリテンでチョンボなんですが・・・ツリ?
0092デフォルトの名無しさんNGNG
字は同巡が正しいかな?
5を出したやつが5でロンしたらチョンボ
一つ目の5を見逃して次の人の5でロンしてもチョンボ
0093デフォルトの名無しさんNGNG
とにかく合わせ打った牌は100%誰にもロンされない
ロンされたらチョンボで2000点(親なら4000点)貰える
0094デフォルトの名無しさんNGNG
>>60の
>この5が安牌であることが100%の情報で、

ってのが、そのリーチかけた香具師が捨てた次の瞬間だけ有効で、
その後、この100%安全という評価をどのように変更するのか述べられていない。
0095デフォルトの名無しさんNGNG
揚げ足取りだね
小学生の国語から勉強すれば?
今までの流れで掴み取れ
0096デフォルトの名無しさんNGNG
宣言が必要ですか?(ワラ
0097デフォルトの名無しさんNGNG
最強の麻雀プログラムと謳っているスレで、現物が100%安全と威張られてもな・・・
その現物の評価をどのように変更していくのかが重要なのだろ。
0098デフォルトの名無しさんNGNG
>>97
現物は、そのリーチ者に対しては100%安全だと思っていましたが・・・
あなたは現物は、そのリーチ者に対しては何%安全だと思いますか?
0099デフォルトの名無しさんNGNG
>>88-98
厨房板に日本語を勉強するスレを建てて、どこまで省略して伝わるかを議論・調査してなさい
0100デフォルトの名無しさんNGNG
リーチ者に対しては何%安全かという評価はあまり意味がない。
その牌が何パーセント安全であるかが意味をなす。
ってこんな当たり前のことをぐだぐだ言うこと自体、意味がないな。
0101デフォルトの名無しさんNGNG
ごめん・・・スレと関係ないけどさ、
漏れちょっと今、血吐いたよ・・・
■ このスレッドは過去ログ倉庫に格納されています