tomohxxの日記

麻雀プログラミング

一人麻雀和了確率計算アルゴリズム まとめ

はじめに 今回はこれまでに議論してきた一人麻雀和了確率についていくつかの問題点・疑問点を解消します。 諸問題 存在確率と和了確率の再定義 前々回の記事のトップダウンとボトムアップの関係についての記述が不十分なので補足します。tomohxx.hatenablog.…

一人麻雀和了確率計算アルゴリズム グラフ探索

今回は前回の記事の続きです。 tomohxx.hatenablog.comこれまで手牌変化の木は与えられたものとして和了確率を求めてきました。基本的にシャンテン数が下がれば和了確率は上がると考えられるので、実装上は一方的にシャンテン数を下げる手牌変化の木を扱って…

一人麻雀和了確率計算アルゴリズム トップダウン vs ボトムアップ

トップダウンとボトムアップの定義を逆にしました。(2022/09/23追記) 実装例を追記しました。(2022/09/23追記) このブログでは度々一人麻雀の和了確率を計算するアルゴリズムを取り上げてきました。ところでこのブログ以外でも一人麻雀の和了確率や期待値の…

vs Mortal

最近Equimさんの開発したMortalという麻雀AIが話題になっています。mjai.ekyu.moe天鳳や雀魂の牌譜をレビューする機能と、天鳳の個室に呼び出して同卓する機能があります。話題になっているのは主に前者ですが、ここでは後者を使って自作の麻雀AIと対戦させ…

配牌時有効牌の枚数

配牌時(手牌の枚数が13枚のとき)有効牌の枚数を計算するアルゴリズムを以下のページにまとめました。ここでは結果について簡単に記載します。tomohxx.github.io 向聴数 場合の数 割合 有効牌の枚数の平均値 0 39270395383132 8.1175e-05 4.5843 1 3006175115…

牌の危険度予測ツール

牌の危険度予測ツールを開発しました。github.comここで述べる危険度は以下の式で定義されます。この式はすべての聴牌形の出現確率が等しいという最も単純な仮定の下で危険度を求めます。どのように聴牌形を数え上げるかについては以下のページを参照してく…

配牌時向聴数

気分転換にブログを更新します。最近は強化学習について勉強していて、今後の麻雀AI開発に生かしたいと考えています。こちらについてまだブログに書くだけの結果がないので、今回は麻雀アルゴリズムについて書きます。少し前に、配牌時向聴数を計算するアル…

麻雀AI開発DL編(6)

はじめに これまでmjai環境で自作のAIの評価を行ってきました。以前も言及しましたが、この評価方法ではAIの強さを(mjaiを知らない)第三者に説明しにくいという問題があります。そこで開発を次の段階に進める前に天鳳自動打ちによってAIの評価を行うことにし…

一人麻雀における和了確率を書き下す(4)

はじめに 今回はついに非復元抽出を想定して一人麻雀における和了確率を書き下します。これが本当の意味での一人麻雀です。非復元抽出を想定するとこれまで扱ってきた復元抽出よりも問題の難易度が上がります。当初は前回の解法を踏襲しようと試みたのですが…

一人麻雀における和了確率を書き下す(3)

はじめに これまで2回にわたって一人麻雀における和了確率を求めてきましたが、そこで扱ったのはそれぞれ一向聴と二向聴の手でした。今回は前回記事の最後で触れた一般の向聴の手を扱います。前回も述べたように行列を使った解法が見通しがよいので今回もそ…

麻雀AI開発DL編(5)

はじめに 再び麻雀AIの評価を行います。これまでに私の開発したAI(以下、自AI)の一局戦vs Manueと東風戦vs Akochanによる評価を行ってきました。一局戦vs Manueでは平均順位においてManueよりも強いことを示せましたが、東風戦vs AkochanではAkochanの平均順…

一人麻雀における和了確率を書き下す(2)

はじめに 前回の記事で一人麻雀の和了確率を扱いました。当初2回目を書く予定はなかったのですが、行列を使った解き方のほうが見通しが良さそうなのでこの記事を書くことにしました。また前回は一向聴の手だったので今回は二向聴の手を扱うことにします。 二…

一人麻雀における和了確率を書き下す(1)

はじめに ここでは一人麻雀における和了確率を扱います。このテーマでよく見かけるのは、聴牌している手があってその有効牌の枚数を枚、壁牌の枚数を枚としたときに巡以内に和了する確率がで表せるというものですね。では一向聴の手が和了する確率はどのよう…

麻雀AI開発DL編(4)

はじめに 今回も引き続き麻雀AIの評価を行います。前回まででManue相手には勝ち越せることが明らかになっているので、今回は別のAI Akochanを対戦相手に選びました。github.comAkochanはManueと同じくMjaiクライアントの一つですが、おそらく最強のMjaiクラ…

麻雀AI開発DL編(3)

はじめに 前回記事で課題としていた押し引き判断と降り手順が改善しました。原因はプログラムのバグで、安牌を正しく認識できていませんでした。これは致命的なミスですね。というわけでバグを修正したプログラムで前回と同様に対Manue一局戦1000試合による…

麻雀AI開発DL編(2)

今回は麻雀AI開発の進捗について書きます。前回の記事で書いた課題は以下の2つです。 鳴き判断モデルの取り込む 放銃率を下げる 1つ目は解決できたのですが、今は2つ目で苦戦している状況です。詳細な説明の前に、まずは最新のモデルを使ったManueとの対戦成…

麻雀AI開発DL編(1)

はじめに 以前の記事でディープラーニングを使った麻雀AIを開発すると書きました。今回はその途中結果についての記事です。 なぜディープラーニングを使うのか なぜディープラーニングを使うのか念のため振り返っておくと、それは押し引きを明示的に作りこむ…

Mjaiイベントログ管理ツールの開発

ここ2週間くらい、Mjaiイベントログ管理ツールMjai Recoderを作っています。Mjaiとは麻雀AI対戦環境のことです。gimite.netこのブログでは過去に自作麻雀AIの評価に利用させてもらっています。gimiteさん、ありがとうございます。Mjaiは対戦機能だけでなく各…

お知らせ

はじめに 明けましておめでとうございます。昨年の麻雀AI開発はアルゴリズムで進展があったものの、自動打ちでは期待していた成績を残すことができませんでした。なので今年も麻雀AIの開発を続け、今年中の完成を目指します。さて、今回は2点お知らせがあり…

麻雀AI開発(6) 天鳳自動打ちの結果

はじめに 今回は天鳳自動打ちの結果を報告します。前回記事はこちら。 tomohxx.hatenablog.com 結果 参加した卓 四般東喰赤 対戦数 182 ID Oct2320 牌譜の公開 Dropbox - 天鳳自動打ちログ.txt - Simplify your life 通算成績 感想 一言で言うと弱いですね。…

WSL2にmitmproxyをインストールする

はじめに 最近はWebページを見る際にほぼHTTPSを利用するようになりました。HTTPSでは通信内容が暗号化されているわけですが、これを見たいと思ったことはないでしょうか?それを実現するためにmitmproxyが利用できます。 mitmproxyについて mitmproxyとは仮…

AtCoder用環境構築

はじめに AtCoder Libraryがコンテストで使えるようになったとのことで、先日AtCoder用の環境を構築しました。そこでやったことをメモとして残しておきます。 開発環境 OSはWindowsです。開発環境としてUbuntu-20.04 (WSL2) + VSCodeを使用します。以下、Ubu…

麻雀AI開発(5) 天鳳自動打ち

はじめに 前回の記事で麻雀AI開発は一時撤退することになりました。 tomohxx.hatenablog.comしかし、いまだに開発したAIの実力がよくわからないという課題が残っています。mjai-manueより強いということは明らかなものの、その説明が通用するのは麻雀AI開発…

麻雀で学ぶアルゴリズム(2) 手牌/牌山生成(乱択)

「麻雀で学ぶアルゴリズム」の2回目です。前回記事はこちら。 tomohxx.hatenablog.com今回の問題は以下のようになります。 牌を枚使ってできる組み合わせをランダムに組生成せよ。 この問題を解くにはFisher-Yates法を用います。詳しくは以下の説明をご覧く…

麻雀AI開発(4) 計画変更

麻雀AI開発の4回目です。前回記事はこちら。 tomohxx.hatenablog.comこの記事の中で東風戦の攻略には苦労しないだろうと考えていたのですが、実際やってみるとそうではないことがわかりました。その理由として、まず、東風戦の成績を収束させるには一局戦以…

麻雀で学ぶアルゴリズム(1) 手牌/牌山生成(全幅)

先日このような記事を書きました。tomohxx.hatenablog.comTwitterで多くの人が興味をもってくれたようでうれしいです。そんなわけで麻雀をテーマにアルゴリズムを勉強していきたいと思います。1回目のテーマは「手牌/牌山生成(全幅)」です。「全幅」の意味は…

「麻雀で学ぶアルゴリズム」とかいう記事を書きたい

最近ブログが更新できていなくて不満がたまっています。最近は麻雀AI関連のことをやっていてそれなりに進捗はあるのですが、小出しで記事は出したくないんですよね。そこで別のネタをということでタイトルにあるように麻雀のアルゴリズムについての記事を書…

麻雀AI開発(3) 打牌選択モデル

麻雀AI開発の3回目です。前回記事から麻雀AIをアップデートしたのですが、変えたのは打牌選択モデルです。前回記事はこちら。 tomohxx.hatenablog.com今までは他家の攻撃があった場合の行動をルールベースで決めていました。例えば、立直者が一人かつ自分が…

三麻対応

過去に発表したライブラリを三人麻雀(以下、三麻)に対応させました。対象は「シャンテン数計算器」と「シャンテン数・有効牌・不要牌計算器」の2つです。github.com github.com三麻に対応させる場合THREE_PLAYERマクロを有効にすればよくなりました。一応デ…

麻雀AI開発(2) 一局戦攻略

はじめに この記事は一応以前の記事の続きですが、たぶん以前のものは自分にしかわからないと思うのでここで改めて経緯から説明します。 tomohxx.hatenablog.com 麻雀AIの開発の過程 これまでに開発したものは以下のものになります(2020/04頃まで)。 向聴数…