
麻雀て基本的に確率の問題なのでしょうか?
点数の期待値を最大にするという方針で1手1手を考えていくとします。
(1)相手が全て自分と同じように期待値最大という戦略をとるとしたとき、自分の打ち方は、全て原理的に評価可能でしょうか?(少なくとも確率論的に打つ手を決定できるでしょうか?)
(2)相手の癖がわかるとき(ブラックボックス的であれ相手の打つ手をシミュレートできるとき)、打つ手を決定できるでしょうか?
(3)(a)対戦経験から「相手の癖」を導きだして、(b)打つ手を決定できるでしょうか?
以上なんですが、なんとなく問題自体定義しきれていないような気がするので、他周辺情報や問題の再定義も歓迎します。よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
僕はこの問題については懐疑主義なので無理だと思っているのですが、先のコメントの趣旨をもう一度かきます。
モンテカルロシュミレーションについては理解していませんが、各プレイヤーが相手の動向は完全に無視して、自分の手の期待値(すなわち現状の捨て牌とツモのみから他のプレーヤーは一切の思考を行っておらず[すなわちまったく出鱈目にゲームを行っていて、捨て牌には何の意図もない]と考え、残り牌とその役にたどり着く確率、及び役の点数から最善の手を計算する)に基づく最善のプログラムは理論的に計算可能でしょう。このアルゴリズムをアルゴリズム1と名づけます。自分以外のほかの三人はそのアルゴリズム1に基づいて捨て牌を選択しているとしましょう。そこで自分は他のプレーヤーの捨て牌のアルゴリズムがわかっていますので、そのことも考慮したうえでの最適アルゴリズムを計算することはおそらく可能でしょう。ただし今度は他の三人が戦略的に麻雀を行っているので、相手に振る可能性があります。したがってそのリスクを計算しなくてはなりません。ですが、それはさきのアルゴリズム1の計算によって、順と捨て牌の状況から、相手の聴牌の確率をある程度割り出せます。そしてさきのアルゴリズム1によって計算された期待的あがり点数でもってリスクを評価できるはずです。ただし、ここで相手のあがりの確率なんですが、自分がさきのまったく出鱈目に麻雀をするというものとは違う別の手法で麻雀をうち、かつ他のプレーヤーもアルゴリズム1に従っているがために、その確率がさきに計算したものとは実際にはずれている可能性があります。ですがそれを考慮すると難しいので、ここではそれを無視して考えることにします。そうすると改良版アルゴリズム2が計算できたことになります。以下、他のプレーヤーがそのアルゴリズム2にしたがっている場合、先と同様の方法でアルゴリズム3を作るとします。これを無限に繰り返していけば、何らかの最適戦略に収束するのか?という気がしないでもないような、ってとこなんですが、ありえない気がします。
僕の結論を言ってしまうとこういうことです。ゲーム理論でもよく出てくるように、相手の方法論がすべてわかっていれば最適な戦略がみつかるが、相手はこちらを出し抜こうと必ずしてくるわけである。従ってこちらの出方に従って自由に戦略を選ぼうとする相手がいる場合、最適な戦略は見つからない。
あるいは完全なる最適戦略が存在したとして、ほかのプレーヤーがみなその同一の戦略に従っているとすれば、五分五分の結果になるとしか思えない。であれば、他の三人のその方法を出し抜く方法を考えれば、それがよい強い戦略になる。
もっというと、敵の捨て牌とツモに対して、何らかのアルゴリズムによって完全に捨て牌を決定するプログラムに従うと、自分の癖が完全に決定してしまったことになるのです。相手は必ずあなたのその傾向に気づきます。たぶんかなり統計的に合理的な方法であなたは捨て牌を決定しているはずなので、いわゆる引っ掛けの筋であなたは結構痛い目に会うと思われるのです。現実問題、他のプレーヤーはそんなにクレバーではありませんが、理論的という意味では確定した最適戦略は存在しないと僕は思います。
お礼がおそくなりました。
全ての局で勝つという意味の戦略は存在しないと思いますし、
期待値という意味で全てのプレイヤーが等しくなってしまうのもわかりました。
では、自分が打つべき最良の手は存在するでしょうか?
相手の打つ手の性質がわかる場合、牌の数が有限なので
全ての確率を計算することができるので
この場合原理的に有限の計算で可能という意味で
(宇宙の持てる情報量が無限だとして)
そういう手は存在するのではないかと思います---(※)
ということで、問題としては
「相手の打つ手の性質がわからない場合、
自分の打つべ勝ち点に対して期待値を最大にする、次の1手は存在するか」
ということなのでしょうか?
で、adinatさんは相手の打つ手が時間的に変化する偏りや、
逆に自分の戦略が固定されるのであれば上記※によって賢い相手によって
負けになるので、戦略自体が存在しないということですよね。
なるほど。
問題は戦略が固定され相手にわかったとしても期待値が最大であるということで、
相手の手(たとえば引っ掛ける手)になったとしても、
期待値を計算し続ければ、長期間の対戦で勝つことができる
戦略となっているかですよね・・・難しい~!
とりあえず、問題が少し整理できた気がします。
ありがとうございました。

No.5
- 回答日時:
(1)期待値最大という戦略と初めに仮定しておられますから、
「期待値が計算できる」=「打つ手が決定できる」
ということになります。
すなわち、すべての場合分けと各場合に対する確率が計算できるなら、手が決定できることになります。
場合の数は膨大でしょうが、確率および期待値は計算できる(プログラムは組める)と思います。
ただし、すべてのあがり形に対する、すべての過程を網羅する必要があるため、計算機のパワーが全然足りない(将来的にも不可能な指数オーダー)とは思います。
ご存じかもしれませんが、コンピュータゲームのコンピュータは、評価関数f(x)(xは手の候補)を最大にする手を取ります。
今の場合、この評価関数として期待値を採用した時、の話になるかと思います。
(2)相手の癖がわかるかどうかは、手が決定できるかどうかには影響を及ぼしません。
良い手が選べるかどうかに、影響を及ぼします。
つまり、わからない情報があるときには、大雑把に確率を計算しないといけませんが、具体的な情報があるほど、より正確な確率が計算できるという違いです。
(3)(a)相手の評価関数y=f(x)に対して、xとyのみからfの形を求めることは一般に不可能です。ある程度、人間のモデルを仮定した上でなら、近似的に求めることはできるかもしれませんが。
(b)(2)でも述べましたように、相手の癖がわかるかどうかと、手が決定できるかどうかは別問題です。
ありがとうございます。
(1)は了解しました。#4の回答のお礼に使わせていただきました。
(2)(3)については、
まず、相手の癖がわからない(確度)が低い場合も確率で
表されるならそれで計算すればよいだけだよ、
というご指摘。なるほどそのとおりです。
私のイメージとしては各人の癖がわかれば単純に局面探索で
計算ができ、結果、確率的な最適値を求めることができるのではないかと考えました。
ここでいう相手の癖は相手の持つ評価関数にマッピング可能なものというふうに考えてました。
というわけで、
(原理的という意味で実際にはご指摘のとおり不可能だと思いますが)
計算はいずれにせよ(1)の変形に帰着されるということですかね。。。
お礼遅くなりましたが、おかげさまで問題が整理されてきていると思います。
ありがとうございました。
No.3
- 回答日時:
確率論的な最適戦略という意味では恐らく不可能だと思います。
ひとつだけ簡単な方法があるとすれば、プレーヤーA,B,Cが全員相手のことをまったく考慮せず、自らの期待値を最大にするような方法で動いているとして、その場合に自分の手の期待値が最善になるようなプログラミングするぐらいではないかと。いま言った、他の三人は「自分以外の相手はみな自分の手だけしか考えずに最適戦略で手を進めている」という仮定の元自分の最善の手を決めるとします。実はこう仮定した瞬間にすでに問題が破綻しています。なぜなら自分は相手の動きを気にして手を計算しているからです。
もし二人打ち麻雀をしているとすれば、相手の癖がわかっているのなら通常の戦略よりよりよい戦略を計算できるでしょうが、3人打ち、4人打ちになるとやはりそのような方法が最善になるということを積極的に肯定できないと思います。
これはあまりにも難しすぎるゲームの問題です。仮に理想の方法が見つかったとして、敵三人がその理論を元に捨て牌を決めると仮定することは現実的には非合理だと思います。またその元で平衡状態が定まるというのも僕にはとても・・・
というわけですので、やはり妥当なところは相手の動向を無視してとりあえず期待値で手を進めるというのが一番簡単な方法だと思います。ですが、それは自分に癖がある、ということでもあって、実戦ではかもにされるような可能性があります。とかく簡単に(といっても正確に計算するのは困難でしょうが)計算結果を出せるためには、自分以外の3人にのプレーヤーが(おのおの異なるアルゴリズムに従っている場合も含めて)相手の手とは独立なアルゴリズムに従って捨て牌を選択していると仮定できる場合に限り計算できるような気がします。
上手な人が「下手な人が一人いる場合はうまくいかない」なんて嘆くことがあるのはそういうところがあるからなのでしょう。
2段目にあるように他の3人はそれぞれ最適になるように打つ=プログラミング的にいえば自分と同じアルゴリズム/思考回路のプレイヤーが対戦しているとして計算するので、たとえばモンテカルロ法のような方法で(えらい計算量ではあるけれど)原理的には計算可能ではないかとおもったりもします。でもこれってなんか確率論というよりは数値計算のような気がして・・・というところで確率論的というタイトルにしました。
現実的な計算としてはご指摘のとおりかと思います。原理的な部分でどうなのかというところですが、もしコメントがありましたら教えてください。
ありがとうございました。
No.2
- 回答日時:
(1)は循環的じゃない?
「期待値最大という戦略をとる」ということはすなわちその人は自分の打つ手を評価しているんじゃないかな?ってことは自分の打つ手は評価可能だよね?
(2)
相手の打つ手をシミュレートできるとき。
これは原理的には可能だろうね。とりあえず不確定であれ、相手の手はわかっていることになっている。
相手の手と自分の手がわかってるのだから、あとはツモる牌の確率とそれによって得られる期待値(式を人間がたてられるかどうかは別として)で最適な手が決定する。
あとはそのシミュレーションの正解率がわかれば完璧。
(3)
これは程度の違いはあってもヒューリスティックな手法が必要だろう。
思いついた中で一番無理やりやる方法は、
・相手の捨て牌と手牌の組み合わせデータを大量に用意する。
・そこから何かの学習器を使って学習。
・捨て牌を入力すれば手配の候補が出る
みたいな?
まあそこからどうノイズ(要らない情報:たとえば風牌のラス牌などは手牌とは関係ない)を取り除いたりするかというのは難しいな。
(1)については循環的だと思います。通常の2人対局の将棋やチェスのようにおおむね同一の盤面評価関数を用いてmin-max評価のようなもののアナロジーです。これなら決定論的な方法があるかも、と思いました。
(2)についてはとりえあえず相手の手関数を利用して期待値計算できるという意味でしょうか?モンテカルロ法のようなことをイメージされているのでしょうか?実際のところ計算自体が非常に複雑なのかな?
(3)はだんだんゲームみたいになってきましたね?
麻雀ゲームのアルゴリズムってどうなっているのでしょうか?
いろいろ知りたいことが増えてきました。
ありがとうございました。
No.1
- 回答日時:
ご紹介のページ参考になりました。
・・・というものの全て理解しているわけではありませんが。
基本的にかなり大胆な仮定をいれるということで、期待値評価の主要項をうまく選んで計算するというポリシーという風に理解しました。・・・人間と近い感じがします。
とりあえずありがとうございました。もう少し内容をよく拝見させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 麻雀 麻雀(雀魂)について 2 2023/08/20 06:18
- アルバイト・パート バイトの面接について客観的な意見が欲しいため質問させてください。 現在、大学2年生で塾講師のバイトに 3 2022/05/19 19:53
- 政治 国会中継を見てて思うんですが、まともな議論ができていないと思います。 結論ありきで一方的に自分の意見 2 2022/05/28 21:20
- 麻雀 麻雀が面白くなくてイライラします。 最近ネット麻雀をやっていて、どういう訳かイライラを抑えきれません 3 2022/07/10 20:45
- 統計学 統計学の問題を教えてください。 1. J選手の打率(ヒットを打つ確率)は1/4とします。また,J選手 1 2022/11/26 17:12
- 数学 【急募】共通テスト数II・Bの選択問題について質問です。 自分は確率分布は確実に取れるのでそこは確定 1 2022/12/26 17:05
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- 統計学 「2つの封筒問題」というパラドックスについて教えて下さい 2 2022/11/16 14:42
- 統計学 確率の問題です。 7 2022/05/07 01:08
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
gooという検索エンジンの後にGo...
-
[ EXCEL VBA ] 図形を読み込む...
-
偏りのある乱数のアルゴリズム
-
C言語についての質問です
-
データを圧縮したい
-
シードを考慮したトーナメント...
-
C♯で電卓を作成しています。演...
-
期間重複チェックがわかりません
-
サイトを教えてください
-
カオス解析のプログラムについて
-
アルゴリズムとプロトコールの違い
-
あるプログラムのコマンドライ...
-
65536は2の何乗なのでしょうか?
-
C++ で、「)」が必要 というエ...
-
未使用の変数を一括検索する方法
-
VBAで仕様書は書きますか?
-
WORD印刷できるがEXCE...
-
パックマンプログラム
-
Excelで4096点以上のFFTの方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
[ EXCEL VBA ] 図形を読み込む...
-
グループを均等に分けるには?...
-
シードを考慮したトーナメント...
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
あいまい検索(文字列一致率)
-
C♯で電卓を作成しています。演...
-
お薦めのアルゴリズム参考書
-
ランダム関数を作りたい。
-
暗号化・復号化のアルゴリズム...
-
多変数関数の最小値を求めるプ...
-
ハッシュアルゴリズム
-
一般的な解法を用いないで魔法...
-
偏りのある乱数のアルゴリズム
-
BCDについて
-
アルゴリズムが全くわからない
-
データを圧縮したい
-
ドロネー三角形のプログラム
-
カオス解析のプログラムについて
おすすめ情報