TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

2023-10-01から1ヶ月間の記事一覧

麻雀AIを深層強化学習で作る その7(初期局面からランダムプレイ)

前回作成した初期局面生成処理で生成した初期局面から、ランダムにプレイしても和了できるか確認を行った。深層強化学習ではモデルが初期値の状態ではランダムに近いため、ランダムでもある程度和了できると学習の効率的に学習できる。 初期局面からランダム…

麻雀AIを深層強化学習で作る その6(初期局面生成)

以前に考察した通り、強化学習でゼロから麻雀AIを学習する場合、偶然和了した際の報酬のみで役を学習するのは困難と考える。 そこで、ランダムに選択した役のN向聴の状態からゲームを開始して、補助タスクとして和了した役も学習させることにする。今回は、N…

麻雀AIを深層強化学習で作る その5(役の手牌をランダム生成)

N向聴の初期局面を生成するための準備として、特定の役で和了した手牌をランダムに生成する機能をcmajiangに実装した。 二盃口の手牌を生成する例 random_erbeikou() 和了の手牌を生成する処理 役ごとの制約を満たしながら、刻子もしくは順子をランダムに選…

麻雀AIを深層強化学習で作る その4(特徴量作成とモデル実装)

前回までは麻雀AIの作成方針を書いたが、今回から実装に着手する。 まずは、特徴量作成とモデル実装を行った。 特徴量作成 以前に検討した通り、入力特徴量は複数チャンネルの9×4の画像で構成する。特徴量作成をPythonで実装すると遅いため、C++で実装してpy…

麻雀用語の各国語対応表

作成している麻雀ライブラリで、クラス名、メソッド名、変数名などに中国語のピンインを使用しているため、訳語を調べる必要があるため、自分のために参考資料を整理しておく。 中国語 参考にしている電脳麻将のソースで使われている中国語一覧 電脳麻将のプ…

麻雀AIを深層強化学習で作る その3(初期局面と補助タスク)

麻雀の役は14枚の牌を組み合わせて作る必要があるため、初期値のモデルからはじめて偶然役ができる確率は極めて低い。 人間が麻雀を覚える際もまずは役の形を覚えて、それを目指して手牌をそろえていく。 知識ゼロから偶然和了した場合の報酬のみで役を覚え…

麻雀AIを深層強化学習で作る その2(特徴量設計)

前回はこれから作成する麻雀AIの方針を立てた。 今回は、麻雀AIの特徴量を検討する。 方針 畳み込みニューラルネットワーク 麻雀の牌は、萬子、筒子、索子、字牌の4種類で構成されており、萬子、筒子、索子は1~9の数字を持っている。 面子は、順子は隣合っ…

PyTorchでPPOを実装する

麻雀AIの準備として、PyTorchでPPOアルゴリズムをスクラッチで実装した。はじめ、最近リリースされたTorchRLで実装しようと思って試していたが、連続環境でのチュートリアルはあるが、いろいろ試したが離散環境に対応することができず断念した。Stable Basel…

麻雀AIを深層強化学習で作る

Pythonの麻雀ライブラリができたので、麻雀AIの開発を試そうと思う。深層強化学習を使ってゼロから強い麻雀AIを作ること目標にしたい。 先行研究 日本ルールのリーチ麻雀で、強化学習を使用して成功している麻雀AIには、テンセントが開発した「LuckyJ」があ…

Pythonの麻雀ライブラリを作る その2

前回作成したPythonの麻雀ライブラリ「cmajiang」に、手牌をSVG画像で表示する機能を追加した。Jupyterノートブックで、 from cmajiang import * Shoupai("m340p123z1z1,s340-,z2222") のようにすると、このようにSVG画像が表示される。 牌の画像 牌の画像は…